summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/google/gopacket
diff options
context:
space:
mode:
authorMilan Lenco <milan.lenco@pantheon.tech>2017-10-11 16:40:58 +0200
committerMilan Lenco <milan.lenco@pantheon.tech>2017-10-13 08:40:37 +0200
commit3f1edad4e6ba0a7876750aea55507fae14d8badf (patch)
treea473997249d9ba7deb70b1076d14e4c4ed029a43 /vendor/github.com/google/gopacket
parent8b66677c2382a8e739d437621de4473d5ec0b9f1 (diff)
ODPM 266: Go-libmemif + 2 examples.
Change-Id: Icdb9b9eb2314eff6c96afe7996fcf2728291de4a Signed-off-by: Milan Lenco <milan.lenco@pantheon.tech>
Diffstat (limited to 'vendor/github.com/google/gopacket')
-rw-r--r--vendor/github.com/google/gopacket/.gitignore38
-rwxr-xr-xvendor/github.com/google/gopacket/.travis.gofmt.sh7
-rwxr-xr-xvendor/github.com/google/gopacket/.travis.golint.sh25
-rwxr-xr-xvendor/github.com/google/gopacket/.travis.govet.sh10
-rw-r--r--vendor/github.com/google/gopacket/.travis.yml14
-rw-r--r--vendor/github.com/google/gopacket/AUTHORS46
-rw-r--r--vendor/github.com/google/gopacket/CONTRIBUTING.md215
-rw-r--r--vendor/github.com/google/gopacket/LICENSE28
-rw-r--r--vendor/github.com/google/gopacket/README.md10
-rw-r--r--vendor/github.com/google/gopacket/afpacket/afpacket.go476
-rw-r--r--vendor/github.com/google/gopacket/afpacket/afpacket_test.go40
-rw-r--r--vendor/github.com/google/gopacket/afpacket/header.go158
-rw-r--r--vendor/github.com/google/gopacket/afpacket/options.go171
-rw-r--r--vendor/github.com/google/gopacket/afpacket/sockopt_linux.go58
-rw-r--r--vendor/github.com/google/gopacket/afpacket/sockopt_linux_386.go57
-rw-r--r--vendor/github.com/google/gopacket/afpacket/sockopt_linux_386.s8
-rw-r--r--vendor/github.com/google/gopacket/base.go178
-rw-r--r--vendor/github.com/google/gopacket/benchmark_test.go194
-rw-r--r--vendor/github.com/google/gopacket/bsdbpf/bsd_bpf_sniffer.go215
-rw-r--r--vendor/github.com/google/gopacket/bytediff/bytediff.go217
-rw-r--r--vendor/github.com/google/gopacket/bytediff/bytediff_test.go53
-rw-r--r--vendor/github.com/google/gopacket/decode.go157
-rw-r--r--vendor/github.com/google/gopacket/doc.go365
-rw-r--r--vendor/github.com/google/gopacket/dumpcommand/tcpdump.go119
-rw-r--r--vendor/github.com/google/gopacket/examples/arpscan/arpscan.go188
-rw-r--r--vendor/github.com/google/gopacket/examples/bidirectional/main.go192
-rw-r--r--vendor/github.com/google/gopacket/examples/bytediff/bytediff.pngbin0 -> 47462 bytes
-rw-r--r--vendor/github.com/google/gopacket/examples/bytediff/main.go96
-rw-r--r--vendor/github.com/google/gopacket/examples/httpassembly/main.go127
-rw-r--r--vendor/github.com/google/gopacket/examples/pcapdump/main.go73
-rw-r--r--vendor/github.com/google/gopacket/examples/pcaplay/main.go163
-rw-r--r--vendor/github.com/google/gopacket/examples/pfdump/main.go52
-rwxr-xr-xvendor/github.com/google/gopacket/examples/reassemblydump/compare.sh103
-rw-r--r--vendor/github.com/google/gopacket/examples/reassemblydump/main.go650
-rw-r--r--vendor/github.com/google/gopacket/examples/statsassembly/main.go211
-rw-r--r--vendor/github.com/google/gopacket/examples/synscan/main.go259
-rw-r--r--vendor/github.com/google/gopacket/examples/util/util.go40
-rw-r--r--vendor/github.com/google/gopacket/flows.go236
-rwxr-xr-xvendor/github.com/google/gopacket/gc278
-rw-r--r--vendor/github.com/google/gopacket/ip4defrag/defrag.go350
-rw-r--r--vendor/github.com/google/gopacket/ip4defrag/defrag_test.go1396
-rw-r--r--vendor/github.com/google/gopacket/layerclass.go107
-rw-r--r--vendor/github.com/google/gopacket/layers/.linted41
-rw-r--r--vendor/github.com/google/gopacket/layers/arp.go109
-rw-r--r--vendor/github.com/google/gopacket/layers/base.go52
-rw-r--r--vendor/github.com/google/gopacket/layers/base_test.go42
-rw-r--r--vendor/github.com/google/gopacket/layers/bfd.go481
-rw-r--r--vendor/github.com/google/gopacket/layers/bfd_test.go289
-rw-r--r--vendor/github.com/google/gopacket/layers/cdp.go651
-rw-r--r--vendor/github.com/google/gopacket/layers/ctp.go109
-rw-r--r--vendor/github.com/google/gopacket/layers/decode_test.go1234
-rw-r--r--vendor/github.com/google/gopacket/layers/dhcp_test.go129
-rw-r--r--vendor/github.com/google/gopacket/layers/dhcpv4.go571
-rw-r--r--vendor/github.com/google/gopacket/layers/dns.go894
-rw-r--r--vendor/github.com/google/gopacket/layers/dns_test.go833
-rw-r--r--vendor/github.com/google/gopacket/layers/doc.go61
-rw-r--r--vendor/github.com/google/gopacket/layers/dot11.go1430
-rw-r--r--vendor/github.com/google/gopacket/layers/dot11_test.go495
-rw-r--r--vendor/github.com/google/gopacket/layers/dot1q.go71
-rw-r--r--vendor/github.com/google/gopacket/layers/dot1q_test.go62
-rw-r--r--vendor/github.com/google/gopacket/layers/eap.go106
-rw-r--r--vendor/github.com/google/gopacket/layers/eapol.go57
-rw-r--r--vendor/github.com/google/gopacket/layers/endpoints.go97
-rw-r--r--vendor/github.com/google/gopacket/layers/endpoints_test.go37
-rw-r--r--vendor/github.com/google/gopacket/layers/enums.go564
-rw-r--r--vendor/github.com/google/gopacket/layers/etherip.go45
-rw-r--r--vendor/github.com/google/gopacket/layers/ethernet.go122
-rw-r--r--vendor/github.com/google/gopacket/layers/fddi.go41
-rw-r--r--vendor/github.com/google/gopacket/layers/gen.go109
-rw-r--r--vendor/github.com/google/gopacket/layers/gen_linted.sh3
-rw-r--r--vendor/github.com/google/gopacket/layers/geneve.go98
-rw-r--r--vendor/github.com/google/gopacket/layers/geneve_test.go108
-rw-r--r--vendor/github.com/google/gopacket/layers/gre.go185
-rw-r--r--vendor/github.com/google/gopacket/layers/gre_test.go389
-rw-r--r--vendor/github.com/google/gopacket/layers/iana_ports.go11350
-rw-r--r--vendor/github.com/google/gopacket/layers/icmp4.go267
-rw-r--r--vendor/github.com/google/gopacket/layers/icmp6.go231
-rw-r--r--vendor/github.com/google/gopacket/layers/icmp6_test.go84
-rw-r--r--vendor/github.com/google/gopacket/layers/igmp.go355
-rw-r--r--vendor/github.com/google/gopacket/layers/igmp_test.go171
-rw-r--r--vendor/github.com/google/gopacket/layers/ip4.go311
-rw-r--r--vendor/github.com/google/gopacket/layers/ip4_test.go131
-rw-r--r--vendor/github.com/google/gopacket/layers/ip6.go650
-rw-r--r--vendor/github.com/google/gopacket/layers/ip6_test.go430
-rw-r--r--vendor/github.com/google/gopacket/layers/ipsec.go68
-rw-r--r--vendor/github.com/google/gopacket/layers/ipsec_test.go154
-rw-r--r--vendor/github.com/google/gopacket/layers/layertypes.go177
-rw-r--r--vendor/github.com/google/gopacket/layers/linux_sll.go96
-rw-r--r--vendor/github.com/google/gopacket/layers/llc.go146
-rw-r--r--vendor/github.com/google/gopacket/layers/lldp.go1530
-rw-r--r--vendor/github.com/google/gopacket/layers/loopback.go80
-rw-r--r--vendor/github.com/google/gopacket/layers/mpls.go87
-rw-r--r--vendor/github.com/google/gopacket/layers/mpls_test.go96
-rw-r--r--vendor/github.com/google/gopacket/layers/ndp.go611
-rw-r--r--vendor/github.com/google/gopacket/layers/ntp.go416
-rw-r--r--vendor/github.com/google/gopacket/layers/ntp_test.go258
-rw-r--r--vendor/github.com/google/gopacket/layers/ospf.go509
-rw-r--r--vendor/github.com/google/gopacket/layers/ospf_test.go559
-rw-r--r--vendor/github.com/google/gopacket/layers/pflog.go76
-rw-r--r--vendor/github.com/google/gopacket/layers/ports.go140
-rw-r--r--vendor/github.com/google/gopacket/layers/ppp.go74
-rw-r--r--vendor/github.com/google/gopacket/layers/pppoe.go60
-rw-r--r--vendor/github.com/google/gopacket/layers/prism.go146
-rw-r--r--vendor/github.com/google/gopacket/layers/prism_test.go120
-rw-r--r--vendor/github.com/google/gopacket/layers/radiotap.go1045
-rw-r--r--vendor/github.com/google/gopacket/layers/radiotap_test.go79
-rw-r--r--vendor/github.com/google/gopacket/layers/rudp.go93
-rw-r--r--vendor/github.com/google/gopacket/layers/sctp.go746
-rw-r--r--vendor/github.com/google/gopacket/layers/sflow.go2187
-rw-r--r--vendor/github.com/google/gopacket/layers/sflow_test.go1246
-rw-r--r--vendor/github.com/google/gopacket/layers/stp.go27
-rw-r--r--vendor/github.com/google/gopacket/layers/tcp.go327
-rw-r--r--vendor/github.com/google/gopacket/layers/tcp_test.go60
-rw-r--r--vendor/github.com/google/gopacket/layers/tcpip.go104
-rw-r--r--vendor/github.com/google/gopacket/layers/tcpip_test.go185
-rwxr-xr-xvendor/github.com/google/gopacket/layers/test_creator.py103
-rw-r--r--vendor/github.com/google/gopacket/layers/udp.go120
-rw-r--r--vendor/github.com/google/gopacket/layers/udp_test.go372
-rw-r--r--vendor/github.com/google/gopacket/layers/udplite.go44
-rw-r--r--vendor/github.com/google/gopacket/layers/usb.go308
-rw-r--r--vendor/github.com/google/gopacket/layers/usb_test.go73
-rw-r--r--vendor/github.com/google/gopacket/layers/vrrp.go156
-rw-r--r--vendor/github.com/google/gopacket/layers/vrrp_test.go55
-rw-r--r--vendor/github.com/google/gopacket/layers/vxlan.go94
-rw-r--r--vendor/github.com/google/gopacket/layers/vxlan_test.go108
-rw-r--r--vendor/github.com/google/gopacket/layertype.go111
-rw-r--r--vendor/github.com/google/gopacket/macs/benchmark_test.go18
-rw-r--r--vendor/github.com/google/gopacket/macs/doc.go12
-rw-r--r--vendor/github.com/google/gopacket/macs/gen.go98
-rw-r--r--vendor/github.com/google/gopacket/macs/valid_mac_prefixes.go23946
-rw-r--r--vendor/github.com/google/gopacket/packet.go838
-rw-r--r--vendor/github.com/google/gopacket/packet_test.go62
-rw-r--r--vendor/github.com/google/gopacket/parser.go198
-rw-r--r--vendor/github.com/google/gopacket/pcap/doc.go106
-rw-r--r--vendor/github.com/google/gopacket/pcap/gopacket_benchmark/benchmark.go247
-rw-r--r--vendor/github.com/google/gopacket/pcap/pcap.go1005
-rw-r--r--vendor/github.com/google/gopacket/pcap/pcap_test.go308
-rw-r--r--vendor/github.com/google/gopacket/pcap/pcap_tester.go109
-rw-r--r--vendor/github.com/google/gopacket/pcap/pcap_unix.go71
-rw-r--r--vendor/github.com/google/gopacket/pcap/pcap_windows.go23
-rw-r--r--vendor/github.com/google/gopacket/pcap/pcapgo_test.go56
-rw-r--r--vendor/github.com/google/gopacket/pcap/test_dns.pcapbin0 -> 1001 bytes
-rw-r--r--vendor/github.com/google/gopacket/pcap/test_ethernet.pcapbin0 -> 7672 bytes
-rw-r--r--vendor/github.com/google/gopacket/pcap/test_loopback.pcapbin0 -> 58587 bytes
-rw-r--r--vendor/github.com/google/gopacket/pcapgo/read.go155
-rw-r--r--vendor/github.com/google/gopacket/pcapgo/read_test.go203
-rw-r--r--vendor/github.com/google/gopacket/pcapgo/write.go103
-rw-r--r--vendor/github.com/google/gopacket/pcapgo/write_test.go71
-rw-r--r--vendor/github.com/google/gopacket/pfring/doc.go58
-rw-r--r--vendor/github.com/google/gopacket/pfring/pfring.go343
-rw-r--r--vendor/github.com/google/gopacket/reassembly/cap2test.go105
-rw-r--r--vendor/github.com/google/gopacket/reassembly/memory.go254
-rw-r--r--vendor/github.com/google/gopacket/reassembly/tcpassembly.go1311
-rw-r--r--vendor/github.com/google/gopacket/reassembly/tcpassembly_test.go1660
-rw-r--r--vendor/github.com/google/gopacket/reassembly/tcpcheck.go246
-rw-r--r--vendor/github.com/google/gopacket/reassembly/tcpcheck_test.go249
-rw-r--r--vendor/github.com/google/gopacket/routing/common.go36
-rw-r--r--vendor/github.com/google/gopacket/routing/other.go15
-rw-r--r--vendor/github.com/google/gopacket/routing/routing.go241
-rw-r--r--vendor/github.com/google/gopacket/tcpassembly/assembly.go788
-rw-r--r--vendor/github.com/google/gopacket/tcpassembly/assembly_test.go562
-rw-r--r--vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader.go210
-rw-r--r--vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader_test.go129
-rw-r--r--vendor/github.com/google/gopacket/writer.go213
-rw-r--r--vendor/github.com/google/gopacket/writer_test.go94
165 files changed, 78064 insertions, 0 deletions
diff --git a/vendor/github.com/google/gopacket/.gitignore b/vendor/github.com/google/gopacket/.gitignore
new file mode 100644
index 0000000..149266f
--- /dev/null
+++ b/vendor/github.com/google/gopacket/.gitignore
@@ -0,0 +1,38 @@
+# Compiled Object files, Static and Dynamic libs (Shared Objects)
+*.o
+*.a
+*.so
+
+# Folders
+_obj
+_test
+
+# Architecture specific extensions/prefixes
+*.[568vq]
+[568vq].out
+
+*.cgo1.go
+*.cgo2.c
+_cgo_defun.c
+_cgo_gotypes.go
+_cgo_export.*
+
+_testmain.go
+
+*.exe
+#*
+*~
+
+# examples binaries
+examples/synscan/synscan
+examples/pfdump/pfdump
+examples/pcapdump/pcapdump
+examples/httpassembly/httpassembly
+examples/statsassembly/statsassembly
+examples/arpscan/arpscan
+examples/bidirectional/bidirectional
+examples/bytediff/bytediff
+examples/reassemblydump/reassemblydump
+layers/gen
+macs/gen
+pcap/pcap_tester
diff --git a/vendor/github.com/google/gopacket/.travis.gofmt.sh b/vendor/github.com/google/gopacket/.travis.gofmt.sh
new file mode 100755
index 0000000..e341a1c
--- /dev/null
+++ b/vendor/github.com/google/gopacket/.travis.gofmt.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+cd "$(dirname $0)"
+if [ -n "$(go fmt ./...)" ]; then
+ echo "Go code is not formatted, run 'go fmt github.com/google/stenographer/...'" >&2
+ exit 1
+fi
diff --git a/vendor/github.com/google/gopacket/.travis.golint.sh b/vendor/github.com/google/gopacket/.travis.golint.sh
new file mode 100755
index 0000000..ed74c65
--- /dev/null
+++ b/vendor/github.com/google/gopacket/.travis.golint.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+cd "$(dirname $0)"
+
+go get github.com/golang/lint/golint
+DIRS=". tcpassembly tcpassembly/tcpreader ip4defrag reassembly macs pcapgo pcap afpacket pfring routing"
+# Add subdirectories here as we clean up golint on each.
+for subdir in $DIRS; do
+ pushd $subdir
+ if golint |
+ grep -v CannotSetRFMon | # pcap exported error name
+ grep -v DataLost | # tcpassembly/tcpreader exported error name
+ grep .; then
+ exit 1
+ fi
+ popd
+done
+
+pushd layers
+for file in $(cat .linted); do
+ if golint $file | grep .; then
+ exit 1
+ fi
+done
+popd
diff --git a/vendor/github.com/google/gopacket/.travis.govet.sh b/vendor/github.com/google/gopacket/.travis.govet.sh
new file mode 100755
index 0000000..52ad084
--- /dev/null
+++ b/vendor/github.com/google/gopacket/.travis.govet.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+cd "$(dirname $0)"
+DIRS=". layers pcap pcapgo pfring tcpassembly tcpassembly/tcpreader routing ip4defrag bytediff macs"
+set -e
+for subdir in $DIRS; do
+ pushd $subdir
+ go vet
+ popd
+done
diff --git a/vendor/github.com/google/gopacket/.travis.yml b/vendor/github.com/google/gopacket/.travis.yml
new file mode 100644
index 0000000..7d73126
--- /dev/null
+++ b/vendor/github.com/google/gopacket/.travis.yml
@@ -0,0 +1,14 @@
+language: go
+install:
+ - go get github.com/google/gopacket
+ - go get github.com/google/gopacket/layers
+ - go get github.com/google/gopacket/tcpassembly
+ - go get github.com/google/gopacket/reassembly
+script:
+ - go test github.com/google/gopacket
+ - go test github.com/google/gopacket/layers
+ - go test github.com/google/gopacket/tcpassembly
+ - go test github.com/google/gopacket/reassembly
+ - ./.travis.gofmt.sh
+ - ./.travis.govet.sh
+ - ./.travis.golint.sh
diff --git a/vendor/github.com/google/gopacket/AUTHORS b/vendor/github.com/google/gopacket/AUTHORS
new file mode 100644
index 0000000..eba34f0
--- /dev/null
+++ b/vendor/github.com/google/gopacket/AUTHORS
@@ -0,0 +1,46 @@
+AUTHORS AND MAINTAINERS:
+
+MAIN DEVELOPERS:
+Graeme Connell <gconnell@google.com, gsconnell@gmail.com>
+
+AUTHORS:
+Nigel Tao <nigeltao@google.com>
+Cole Mickens <cole.mickens@gmail.com>
+Ben Daglish <bdaglish@restorepoint.com>
+Luis Martinez <martinezlc99@gmail.com>
+Remco Verhoef <remco@dutchcoders.io>
+Hiroaki Kawai <Hiroaki.Kawai@gmail.com>
+Lukas Lueg <lukas.lueg@gmail.com>
+Laurent Hausermann <laurent.hausermann@gmail.com>
+Bill Green <bgreen@newrelic.com>
+
+CONTRIBUTORS:
+Attila Oláh <attila@attilaolah.eu>
+Vittus Mikiassen <matt.miki.vimik@gmail.com>
+Matthias Radestock <matthias.radestock@gmail.com>
+Matthew Sackman <matthew@wellquite.org>
+Loic Prylli <loicp@google.com>
+Alexandre Fiori <fiorix@gmail.com>
+Adrian Tam <adrian.c.m.tam@gmail.com>
+Satoshi Matsumoto <kaorimatz@gmail.com>
+David Stainton <dstainton415@gmail.com>
+Jesse Ward <jesse@jesseward.com>
+Kane Mathers <kane@kanemathers.name>
+
+-----------------------------------------------
+FORKED FROM github.com/akrennmair/gopcap
+ALL THE FOLLOWING ARE FOR THAT PROJECT
+
+MAIN DEVELOPERS:
+Andreas Krennmair <ak@synflood.at>
+
+CONTRIBUTORS:
+Andrea Nall <anall@andreanall.com>
+Daniel Arndt <danielarndt@gmail.com>
+Dustin Sallings <dustin@spy.net>
+Graeme Connell <gconnell@google.com, gsconnell@gmail.com>
+Guillaume Savary <guillaume@savary.name>
+Mark Smith <mark@qq.is>
+Miek Gieben <miek@miek.nl>
+Mike Bell <mike@mikebell.org>
+Trevor Strohman <strohman@google.com>
diff --git a/vendor/github.com/google/gopacket/CONTRIBUTING.md b/vendor/github.com/google/gopacket/CONTRIBUTING.md
new file mode 100644
index 0000000..99ab7a2
--- /dev/null
+++ b/vendor/github.com/google/gopacket/CONTRIBUTING.md
@@ -0,0 +1,215 @@
+Contributing To gopacket
+========================
+
+So you've got some code and you'd like it to be part of gopacket... wonderful!
+We're happy to accept contributions, whether they're fixes to old protocols, new
+protocols entirely, or anything else you think would improve the gopacket
+library. This document is designed to help you to do just that.
+
+The first section deals with the plumbing: how to actually get a change
+submitted.
+
+The second section deals with coding style... Go is great in that it
+has a uniform style implemented by 'go fmt', but there's still some decisions
+we've made that go above and beyond, and if you follow them, they won't come up
+in your code review.
+
+The third section deals with some of the implementation decisions we've made,
+which may help you to understand the current code and which we may ask you to
+conform to (or provide compelling reasons for ignoring).
+
+Overall, we hope this document will help you to understand our system and write
+great code which fits in, and help us to turn around on your code review quickly
+so the code can make it into the master branch as quickly as possible.
+
+
+How To Submit Code
+------------------
+
+We use github.com's Pull Request feature to receive code contributions from
+external contributors. See
+https://help.github.com/articles/creating-a-pull-request/ for details on
+how to create a request.
+
+Also, there's a local script `gc` in the base directory of GoPacket that
+runs a local set of checks, which should give you relatively high confidence
+that your pull won't fail github pull checks.
+
+```sh
+go get github.com/google/gopacket
+cd $GOROOT/src/pkg/github.com/google/gopacket
+git checkout -b <mynewfeature> # create a new branch to work from
+... code code code ...
+./gc # Run this to do local commits, it performs a number of checks
+```
+
+To sum up:
+
+* DO
+ + Pull down the latest version.
+ + Make a feature-specific branch.
+ + Code using the style and methods discussed in the rest of this document.
+ + Use the ./gc command to do local commits or check correctness.
+ + Push your new feature branch up to github.com, as a pull request.
+ + Handle comments and requests from reviewers, pushing new commits up to
+ your feature branch as problems are addressed.
+ + Put interesting comments and discussions into commit comments.
+* DON'T
+ + Push to someone else's branch without their permission.
+
+
+Coding Style
+------------
+
+* Go code must be run through `go fmt`, `go vet`, and `golint`
+* Follow http://golang.org/doc/effective_go.html as much as possible.
+ + In particular, http://golang.org/doc/effective_go.html#mixed-caps. Enums
+ should be be CamelCase, with acronyms capitalized (TCPSourcePort, vs.
+ TcpSourcePort or TCP_SOURCE_PORT).
+* Bonus points for giving enum types a String() field.
+* Any exported types or functions should have commentary
+ (http://golang.org/doc/effective_go.html#commentary)
+
+
+Coding Methods And Implementation Notes
+---------------------------------------
+
+### Error Handling
+
+Many times, you'll be decoding a protocol and run across something bad, a packet
+corruption or the like. How do you handle this? First off, ALWAYS report the
+error. You can do this either by returning the error from the decode() function
+(most common), or if you're up for it you can implement and add an ErrorLayer
+through the packet builder (the first method is a simple shortcut that does
+exactly this, then stops any future decoding).
+
+Often, you'll already have decode some part of your protocol by the time you hit
+your error. Use your own discretion to determine whether the stuff you've
+already decoded should be returned to the caller or not:
+
+```go
+func decodeMyProtocol(data []byte, p gopacket.PacketBuilder) error {
+ prot := &MyProtocol{}
+ if len(data) < 10 {
+ // This error occurred before we did ANYTHING, so there's nothing in my
+ // protocol that the caller could possibly want. Just return the error.
+ return fmt.Errorf("Length %d less than 10", len(data))
+ }
+ prot.ImportantField1 = data[:5]
+ prot.ImportantField2 = data[5:10]
+ // At this point, we've already got enough information in 'prot' to
+ // warrant returning it to the caller, so we'll add it now.
+ p.AddLayer(prot)
+ if len(data) < 15 {
+ // We encountered an error later in the packet, but the caller already
+ // has the important info we've gleaned so far.
+ return fmt.Errorf("Length %d less than 15", len(data))
+ }
+ prot.ImportantField3 = data[10:15]
+ return nil // We've already added the layer, we can just return success.
+}
+```
+
+In general, our code follows the approach of returning the first error it
+encounters. In general, we don't trust any bytes after the first error we see.
+
+### What Is A Layer?
+
+The definition of a layer is up to the discretion of the coder. It should be
+something important enough that it's actually useful to the caller (IE: every
+TLV value should probably NOT be a layer). However, it can be more granular
+than a single protocol... IPv6 and SCTP both implement many layers to handle the
+various parts of the protocol. Use your best judgement, and prepare to defend
+your decisions during code review. ;)
+
+### Performance
+
+We strive to make gopacket as fast as possible while still providing lots of
+features. In general, this means:
+
+* Focus performance tuning on common protocols (IP4/6, TCP, etc), and optimize
+ others on an as-needed basis (tons of MPLS on your network? Time to optimize
+ MPLS!)
+* Use fast operations. See the toplevel benchmark_test for benchmarks of some
+ of Go's underlying features and types.
+* Test your performance changes! You should use the ./gc script's --benchmark
+ flag to submit any performance-related changes. Use pcap/gopacket_benchmark
+ to test your change against a PCAP file based on your traffic patterns.
+* Don't be TOO hacky. Sometimes, removing an unused struct from a field causes
+ a huge performance hit, due to the way that Go currently handles its segmented
+ stack... don't be afraid to clean it up anyway. We'll trust the Go compiler
+ to get good enough over time to handle this. Also, this type of
+ compiler-specific optimization is very fragile; someone adding a field to an
+ entirely different struct elsewhere in the codebase could reverse any gains
+ you might achieve by aligning your allocations.
+* Try to minimize memory allocations. If possible, use []byte to reference
+ pieces of the input, instead of using string, which requires copying the bytes
+ into a new memory allocation.
+* Think hard about what should be evaluated lazily vs. not. In general, a
+ layer's struct should almost exactly mirror the layer's frame. Anything
+ that's more interesting should be a function. This may not always be
+ possible, but it's a good rule of thumb.
+* Don't fear micro-optimizations. With the above in mind, we welcome
+ micro-optimizations that we think will have positive/neutral impacts on the
+ majority of workloads. A prime example of this is pre-allocating certain
+ structs within a larger one:
+
+```go
+type MyProtocol struct {
+ // Most packets have 1-4 of VeryCommon, so we preallocate it here.
+ initialAllocation [4]uint32
+ VeryCommon []uint32
+}
+
+func decodeMyProtocol(data []byte, p gopacket.PacketBuilder) error {
+ prot := &MyProtocol{}
+ prot.VeryCommon = proto.initialAllocation[:0]
+ for len(data) > 4 {
+ field := binary.BigEndian.Uint32(data[:4])
+ data = data[4:]
+ // Since we're using the underlying initialAllocation, we won't need to
+ // allocate new memory for the following append unless we more than 16
+ // bytes of data, which should be the uncommon case.
+ prot.VeryCommon = append(prot.VeryCommon, field)
+ }
+ p.AddLayer(prot)
+ if len(data) > 0 {
+ return fmt.Errorf("MyProtocol packet has %d bytes left after decoding", len(data))
+ }
+ return nil
+}
+```
+
+### Slices And Data
+
+If you're pulling a slice from the data you're decoding, don't copy it. Just
+use the slice itself.
+
+```go
+type MyProtocol struct {
+ A, B net.IP
+}
+func decodeMyProtocol(data []byte, p gopacket.PacketBuilder) error {
+ p.AddLayer(&MyProtocol{
+ A: data[:4],
+ B: data[4:8],
+ })
+ return nil
+}
+```
+
+The caller has already agreed, by using this library, that they won't modify the
+set of bytes they pass in to the decoder, or the library has already copied the
+set of bytes to a read-only location. See DecodeOptions.NoCopy for more
+information.
+
+### Enums/Types
+
+If a protocol has an integer field (uint8, uint16, etc) with a couple of known
+values that mean something special, make it a type. This allows us to do really
+nice things like adding a String() function to them, so we can more easily
+display those to users. Check out layers/enums.go for one example, as well as
+layers/icmp.go for layer-specific enums.
+
+When naming things, try for descriptiveness over suscinctness. For example,
+choose DNSResponseRecord over DNSRR.
diff --git a/vendor/github.com/google/gopacket/LICENSE b/vendor/github.com/google/gopacket/LICENSE
new file mode 100644
index 0000000..2100d52
--- /dev/null
+++ b/vendor/github.com/google/gopacket/LICENSE
@@ -0,0 +1,28 @@
+Copyright (c) 2012 Google, Inc. All rights reserved.
+Copyright (c) 2009-2011 Andreas Krennmair. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Andreas Krennmair, Google, nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/github.com/google/gopacket/README.md b/vendor/github.com/google/gopacket/README.md
new file mode 100644
index 0000000..f71854c
--- /dev/null
+++ b/vendor/github.com/google/gopacket/README.md
@@ -0,0 +1,10 @@
+# GoPacket
+
+This library provides packet decoding capabilities for Go.
+See [godoc](https://godoc.org/github.com/google/gopacket) for more details.
+
+[![Build Status](https://travis-ci.org/google/gopacket.svg?branch=master)](https://travis-ci.org/google/gopacket)
+[![GoDoc](https://godoc.org/github.com/google/gopacket?status.svg)](https://godoc.org/github.com/google/gopacket)
+
+Originally forked from the gopcap project written by Andreas
+Krennmair <ak@synflood.at> (http://github.com/akrennmair/gopcap).
diff --git a/vendor/github.com/google/gopacket/afpacket/afpacket.go b/vendor/github.com/google/gopacket/afpacket/afpacket.go
new file mode 100644
index 0000000..13937c1
--- /dev/null
+++ b/vendor/github.com/google/gopacket/afpacket/afpacket.go
@@ -0,0 +1,476 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build linux
+
+// Package afpacket provides Go bindings for MMap'd AF_PACKET socket reading.
+package afpacket
+
+// Couldn't have done this without:
+// http://lxr.free-electrons.com/source/Documentation/networking/packet_mmap.txt
+// http://codemonkeytips.blogspot.co.uk/2011/07/asynchronous-packet-socket-reading-with.html
+
+import (
+ "errors"
+ "fmt"
+ "net"
+ "runtime"
+ "sync"
+ "sync/atomic"
+ "time"
+ "unsafe"
+
+ "golang.org/x/net/bpf"
+ "golang.org/x/sys/unix"
+
+ "github.com/google/gopacket"
+)
+
+/*
+#include <linux/if_packet.h> // AF_PACKET, sockaddr_ll
+#include <linux/if_ether.h> // ETH_P_ALL
+#include <sys/socket.h> // socket()
+#include <unistd.h> // close()
+#include <arpa/inet.h> // htons()
+#include <sys/mman.h> // mmap(), munmap()
+#include <poll.h> // poll()
+*/
+import "C"
+
+var pageSize = unix.Getpagesize()
+var tpacketAlignment = uint(C.TPACKET_ALIGNMENT)
+
+// ErrPoll returned by poll
+var ErrPoll = errors.New("packet poll failed")
+
+// ErrTimeout returned on poll timeout
+var ErrTimeout = errors.New("packet poll timeout expired")
+
+func tpacketAlign(v int) int {
+ return int((uint(v) + tpacketAlignment - 1) & ((^tpacketAlignment) - 1))
+}
+
+// Stats is a set of counters detailing the work TPacket has done so far.
+type Stats struct {
+ // Packets is the total number of packets returned to the caller.
+ Packets int64
+ // Polls is the number of blocking syscalls made waiting for packets.
+ // This should always be <= Packets, since with TPacket one syscall
+ // can (and often does) return many results.
+ Polls int64
+}
+
+// SocketStats is a struct where socket stats are stored
+type SocketStats C.struct_tpacket_stats
+
+// SocketStatsV3 is a struct where socket stats for TPacketV3 are stored
+type SocketStatsV3 C.struct_tpacket_stats_v3
+
+// TPacket implements packet receiving for Linux AF_PACKET versions 1, 2, and 3.
+type TPacket struct {
+ // fd is the C file descriptor.
+ fd int
+ // ring points to the memory space of the ring buffer shared by tpacket and the kernel.
+ ring []byte
+ // rawring is the unsafe pointer that we use to poll for packets
+ rawring unsafe.Pointer
+ // opts contains read-only options for the TPacket object.
+ opts options
+ mu sync.Mutex // guards below
+ // offset is the offset into the ring of the current header.
+ offset int
+ // current is the current header.
+ current header
+ // pollset is used by TPacket for its poll() call.
+ pollset unix.PollFd
+ // shouldReleasePacket is set to true whenever we return packet data, to make sure we remember to release that data back to the kernel.
+ shouldReleasePacket bool
+ // headerNextNeeded is set to true when header need to move to the next packet. No need to move it case of poll error.
+ headerNextNeeded bool
+ // tpVersion is the version of TPacket actually in use, set by setRequestedTPacketVersion.
+ tpVersion OptTPacketVersion
+ // Hackity hack hack hack. We need to return a pointer to the header with
+ // getTPacketHeader, and we don't want to allocate a v3wrapper every time,
+ // so we leave it in the TPacket object and return a pointer to it.
+ v3 v3wrapper
+
+ statsMu sync.Mutex // guards stats below
+ // stats is simple statistics on TPacket's run.
+ stats Stats
+ // socketStats contains stats from the socket
+ socketStats SocketStats
+ // same as socketStats, but with an extra field freeze_q_cnt
+ socketStatsV3 SocketStatsV3
+}
+
+var _ gopacket.ZeroCopyPacketDataSource = &TPacket{}
+
+// bindToInterface binds the TPacket socket to a particular named interface.
+func (h *TPacket) bindToInterface(ifaceName string) error {
+ ifIndex := 0
+ // An empty string here means to listen to all interfaces
+ if ifaceName != "" {
+ iface, err := net.InterfaceByName(ifaceName)
+ if err != nil {
+ return fmt.Errorf("InterfaceByName: %v", err)
+ }
+ ifIndex = iface.Index
+ }
+ s := &unix.SockaddrLinklayer{
+ Protocol: htons(uint16(unix.ETH_P_ALL)),
+ Ifindex: ifIndex,
+ }
+ return unix.Bind(h.fd, s)
+}
+
+// setTPacketVersion asks the kernel to set TPacket to a particular version, and returns an error on failure.
+func (h *TPacket) setTPacketVersion(version OptTPacketVersion) error {
+ if err := unix.SetsockoptInt(h.fd, unix.SOL_PACKET, unix.PACKET_VERSION, int(version)); err != nil {
+ return fmt.Errorf("setsockopt packet_version: %v", err)
+ }
+ return nil
+}
+
+// setRequestedTPacketVersion tries to set TPacket to the requested version or versions.
+func (h *TPacket) setRequestedTPacketVersion() error {
+ switch {
+ case (h.opts.version == TPacketVersionHighestAvailable || h.opts.version == TPacketVersion3) && h.setTPacketVersion(TPacketVersion3) == nil:
+ h.tpVersion = TPacketVersion3
+ case (h.opts.version == TPacketVersionHighestAvailable || h.opts.version == TPacketVersion2) && h.setTPacketVersion(TPacketVersion2) == nil:
+ h.tpVersion = TPacketVersion2
+ case (h.opts.version == TPacketVersionHighestAvailable || h.opts.version == TPacketVersion1) && h.setTPacketVersion(TPacketVersion1) == nil:
+ h.tpVersion = TPacketVersion1
+ default:
+ return errors.New("no known tpacket versions work on this machine")
+ }
+ return nil
+}
+
+// setUpRing sets up the shared-memory ring buffer between the user process and the kernel.
+func (h *TPacket) setUpRing() (err error) {
+ totalSize := int(h.opts.framesPerBlock * h.opts.numBlocks * h.opts.frameSize)
+ switch h.tpVersion {
+ case TPacketVersion1, TPacketVersion2:
+ var tp C.struct_tpacket_req
+ tp.tp_block_size = C.uint(h.opts.blockSize)
+ tp.tp_block_nr = C.uint(h.opts.numBlocks)
+ tp.tp_frame_size = C.uint(h.opts.frameSize)
+ tp.tp_frame_nr = C.uint(h.opts.framesPerBlock * h.opts.numBlocks)
+ if err := setsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_RX_RING, unsafe.Pointer(&tp), unsafe.Sizeof(tp)); err != nil {
+ return fmt.Errorf("setsockopt packet_rx_ring: %v", err)
+ }
+ case TPacketVersion3:
+ var tp C.struct_tpacket_req3
+ tp.tp_block_size = C.uint(h.opts.blockSize)
+ tp.tp_block_nr = C.uint(h.opts.numBlocks)
+ tp.tp_frame_size = C.uint(h.opts.frameSize)
+ tp.tp_frame_nr = C.uint(h.opts.framesPerBlock * h.opts.numBlocks)
+ tp.tp_retire_blk_tov = C.uint(h.opts.blockTimeout / time.Millisecond)
+ if err := setsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_RX_RING, unsafe.Pointer(&tp), unsafe.Sizeof(tp)); err != nil {
+ return fmt.Errorf("setsockopt packet_rx_ring v3: %v", err)
+ }
+ default:
+ return errors.New("invalid tpVersion")
+ }
+ h.ring, err = unix.Mmap(h.fd, 0, totalSize, unix.PROT_READ|unix.PROT_WRITE, unix.MAP_SHARED)
+ if err != nil {
+ return err
+ }
+ if h.ring == nil {
+ return errors.New("no ring")
+ }
+ h.rawring = unsafe.Pointer(&h.ring[0])
+ return nil
+}
+
+// Close cleans up the TPacket. It should not be used after the Close call.
+func (h *TPacket) Close() {
+ if h.fd == -1 {
+ return // already closed.
+ }
+ if h.ring != nil {
+ unix.Munmap(h.ring)
+ }
+ h.ring = nil
+ unix.Close(h.fd)
+ h.fd = -1
+ runtime.SetFinalizer(h, nil)
+}
+
+// NewTPacket returns a new TPacket object for reading packets off the wire.
+// Its behavior may be modified by passing in any/all of afpacket.Opt* to this
+// function.
+// If this function succeeds, the user should be sure to Close the returned
+// TPacket when finished with it.
+func NewTPacket(opts ...interface{}) (h *TPacket, err error) {
+ h = &TPacket{}
+ if h.opts, err = parseOptions(opts...); err != nil {
+ return nil, err
+ }
+ fd, err := unix.Socket(unix.AF_PACKET, int(h.opts.socktype), int(htons(unix.ETH_P_ALL)))
+ if err != nil {
+ return nil, err
+ }
+ h.fd = fd
+ if err = h.bindToInterface(h.opts.iface); err != nil {
+ goto errlbl
+ }
+ if err = h.setRequestedTPacketVersion(); err != nil {
+ goto errlbl
+ }
+ if err = h.setUpRing(); err != nil {
+ goto errlbl
+ }
+ // Clear stat counter from socket
+ if err = h.InitSocketStats(); err != nil {
+ goto errlbl
+ }
+ runtime.SetFinalizer(h, (*TPacket).Close)
+ return h, nil
+errlbl:
+ h.Close()
+ return nil, err
+}
+
+// SetBPF attaches a BPF filter to the underlying socket
+func (h *TPacket) SetBPF(filter []bpf.RawInstruction) error {
+ var p unix.SockFprog
+ if len(filter) > int(^uint16(0)) {
+ return errors.New("filter too large")
+ }
+ p.Len = uint16(len(filter))
+ p.Filter = (*unix.SockFilter)(unsafe.Pointer(&filter[0]))
+
+ return setsockopt(h.fd, unix.SOL_SOCKET, unix.SO_ATTACH_FILTER, unsafe.Pointer(&p), unix.SizeofSockFprog)
+}
+
+func (h *TPacket) releaseCurrentPacket() error {
+ h.current.clearStatus()
+ h.offset++
+ h.shouldReleasePacket = false
+ return nil
+}
+
+// ZeroCopyReadPacketData reads the next packet off the wire, and returns its data.
+// The slice returned by ZeroCopyReadPacketData points to bytes owned by the
+// TPacket. Each call to ZeroCopyReadPacketData invalidates any data previously
+// returned by ZeroCopyReadPacketData. Care must be taken not to keep pointers
+// to old bytes when using ZeroCopyReadPacketData... if you need to keep data past
+// the next time you call ZeroCopyReadPacketData, use ReadPacketData, which copies
+// the bytes into a new buffer for you.
+// tp, _ := NewTPacket(...)
+// data1, _, _ := tp.ZeroCopyReadPacketData()
+// // do everything you want with data1 here, copying bytes out of it if you'd like to keep them around.
+// data2, _, _ := tp.ZeroCopyReadPacketData() // invalidates bytes in data1
+func (h *TPacket) ZeroCopyReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {
+ h.mu.Lock()
+retry:
+ if h.current == nil || !h.headerNextNeeded || !h.current.next() {
+ if h.shouldReleasePacket {
+ h.releaseCurrentPacket()
+ }
+ h.current = h.getTPacketHeader()
+ if err = h.pollForFirstPacket(h.current); err != nil {
+ h.headerNextNeeded = false
+ h.mu.Unlock()
+ return
+ }
+ // We received an empty block
+ if h.current.getLength() == 0 {
+ goto retry
+ }
+ }
+ data = h.current.getData()
+ ci.Timestamp = h.current.getTime()
+ ci.CaptureLength = len(data)
+ ci.Length = h.current.getLength()
+ ci.InterfaceIndex = h.current.getIfaceIndex()
+ atomic.AddInt64(&h.stats.Packets, 1)
+ h.headerNextNeeded = true
+ h.mu.Unlock()
+
+ return
+}
+
+// Stats returns statistics on the packets the TPacket has seen so far.
+func (h *TPacket) Stats() (Stats, error) {
+ return Stats{
+ Polls: atomic.LoadInt64(&h.stats.Polls),
+ Packets: atomic.LoadInt64(&h.stats.Packets),
+ }, nil
+}
+
+// InitSocketStats clears socket counters and return empty stats.
+func (h *TPacket) InitSocketStats() error {
+ if h.tpVersion == TPacketVersion3 {
+ socklen := unsafe.Sizeof(h.socketStatsV3)
+ slt := C.socklen_t(socklen)
+ var ssv3 SocketStatsV3
+
+ err := getsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_STATISTICS, unsafe.Pointer(&ssv3), uintptr(unsafe.Pointer(&slt)))
+ if err != nil {
+ return err
+ }
+ h.socketStatsV3 = SocketStatsV3{}
+ } else {
+ socklen := unsafe.Sizeof(h.socketStats)
+ slt := C.socklen_t(socklen)
+ var ss SocketStats
+
+ err := getsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_STATISTICS, unsafe.Pointer(&ss), uintptr(unsafe.Pointer(&slt)))
+ if err != nil {
+ return err
+ }
+ h.socketStats = SocketStats{}
+ }
+ return nil
+}
+
+// SocketStats saves stats from the socket to the TPacket instance.
+func (h *TPacket) SocketStats() (SocketStats, SocketStatsV3, error) {
+ h.statsMu.Lock()
+ defer h.statsMu.Unlock()
+ // We need to save the counters since asking for the stats will clear them
+ if h.tpVersion == TPacketVersion3 {
+ socklen := unsafe.Sizeof(h.socketStatsV3)
+ slt := C.socklen_t(socklen)
+ var ssv3 SocketStatsV3
+
+ err := getsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_STATISTICS, unsafe.Pointer(&ssv3), uintptr(unsafe.Pointer(&slt)))
+ if err != nil {
+ return SocketStats{}, SocketStatsV3{}, err
+ }
+
+ h.socketStatsV3.tp_packets += ssv3.tp_packets
+ h.socketStatsV3.tp_drops += ssv3.tp_drops
+ h.socketStatsV3.tp_freeze_q_cnt += ssv3.tp_freeze_q_cnt
+ return h.socketStats, h.socketStatsV3, nil
+ }
+ socklen := unsafe.Sizeof(h.socketStats)
+ slt := C.socklen_t(socklen)
+ var ss SocketStats
+
+ err := getsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_STATISTICS, unsafe.Pointer(&ss), uintptr(unsafe.Pointer(&slt)))
+ if err != nil {
+ return SocketStats{}, SocketStatsV3{}, err
+ }
+
+ h.socketStats.tp_packets += ss.tp_packets
+ h.socketStats.tp_drops += ss.tp_drops
+ return h.socketStats, h.socketStatsV3, nil
+}
+
+// ReadPacketDataTo reads packet data into a user-supplied buffer.
+// This function reads up to the length of the passed-in slice.
+// The number of bytes read into data will be returned in ci.CaptureLength,
+// which is the minimum of the size of the passed-in buffer and the size of
+// the captured packet.
+func (h *TPacket) ReadPacketDataTo(data []byte) (ci gopacket.CaptureInfo, err error) {
+ var d []byte
+ d, ci, err = h.ZeroCopyReadPacketData()
+ if err != nil {
+ return
+ }
+ ci.CaptureLength = copy(data, d)
+ return
+}
+
+// ReadPacketData reads the next packet, copies it into a new buffer, and returns
+// that buffer. Since the buffer is allocated by ReadPacketData, it is safe for long-term
+// use. This implements gopacket.PacketDataSource.
+func (h *TPacket) ReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {
+ var d []byte
+ d, ci, err = h.ZeroCopyReadPacketData()
+ if err != nil {
+ return
+ }
+ data = make([]byte, len(d))
+ copy(data, d)
+ return
+}
+
+func (h *TPacket) getTPacketHeader() header {
+ switch h.tpVersion {
+ case TPacketVersion1:
+ if h.offset >= h.opts.framesPerBlock*h.opts.numBlocks {
+ h.offset = 0
+ }
+ position := uintptr(h.rawring) + uintptr(h.opts.frameSize*h.offset)
+ return (*v1header)(unsafe.Pointer(position))
+ case TPacketVersion2:
+ if h.offset >= h.opts.framesPerBlock*h.opts.numBlocks {
+ h.offset = 0
+ }
+ position := uintptr(h.rawring) + uintptr(h.opts.frameSize*h.offset)
+ return (*v2header)(unsafe.Pointer(position))
+ case TPacketVersion3:
+ // TPacket3 uses each block to return values, instead of each frame. Hence we need to rotate when we hit #blocks, not #frames.
+ if h.offset >= h.opts.numBlocks {
+ h.offset = 0
+ }
+ position := uintptr(h.rawring) + uintptr(h.opts.frameSize*h.offset*h.opts.framesPerBlock)
+ h.v3 = initV3Wrapper(unsafe.Pointer(position))
+ return &h.v3
+ }
+ panic("handle tpacket version is invalid")
+}
+
+func (h *TPacket) pollForFirstPacket(hdr header) error {
+ tm := int(h.opts.pollTimeout / time.Millisecond)
+ for hdr.getStatus()&C.TP_STATUS_USER == 0 {
+ h.pollset.Fd = int32(h.fd)
+ h.pollset.Events = unix.POLLIN
+ h.pollset.Revents = 0
+ n, err := unix.Poll([]unix.PollFd{h.pollset}, tm)
+ if n == 0 {
+ return ErrTimeout
+ }
+
+ atomic.AddInt64(&h.stats.Polls, 1)
+ if h.pollset.Revents&unix.POLLERR > 0 {
+ return ErrPoll
+ }
+ if err != nil {
+ return err
+ }
+ }
+
+ h.shouldReleasePacket = true
+ return nil
+}
+
+// FanoutType determines the type of fanout to use with a TPacket SetFanout call.
+type FanoutType int
+
+// FanoutType values.
+const (
+ FanoutHash FanoutType = 0
+ // It appears that defrag only works with FanoutHash, see:
+ // http://lxr.free-electrons.com/source/net/packet/af_packet.c#L1204
+ FanoutHashWithDefrag FanoutType = 0x8000
+ FanoutLoadBalance FanoutType = 1
+ FanoutCPU FanoutType = 2
+)
+
+// SetFanout activates TPacket's fanout ability.
+// Use of Fanout requires creating multiple TPacket objects and the same id/type to
+// a SetFanout call on each. Note that this can be done cross-process, so if two
+// different processes both call SetFanout with the same type/id, they'll share
+// packets between them. The same should work for multiple TPacket objects within
+// the same process.
+func (h *TPacket) SetFanout(t FanoutType, id uint16) error {
+ h.mu.Lock()
+ defer h.mu.Unlock()
+ arg := C.int(t) << 16
+ arg |= C.int(id)
+ return setsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_FANOUT, unsafe.Pointer(&arg), unsafe.Sizeof(arg))
+}
+
+// WritePacketData transmits a raw packet.
+func (h *TPacket) WritePacketData(pkt []byte) error {
+ _, err := unix.Write(h.fd, pkt)
+ return err
+}
diff --git a/vendor/github.com/google/gopacket/afpacket/afpacket_test.go b/vendor/github.com/google/gopacket/afpacket/afpacket_test.go
new file mode 100644
index 0000000..57f6480
--- /dev/null
+++ b/vendor/github.com/google/gopacket/afpacket/afpacket_test.go
@@ -0,0 +1,40 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build linux
+
+package afpacket
+
+import (
+ "reflect"
+ "testing"
+)
+
+func TestParseOptions(t *testing.T) {
+ wanted1 := defaultOpts
+ wanted1.frameSize = 1 << 10
+ wanted1.framesPerBlock = wanted1.blockSize / wanted1.frameSize
+ for i, test := range []struct {
+ opts []interface{}
+ want options
+ err bool
+ }{
+ {opts: []interface{}{OptBlockSize(2)}, err: true},
+ {opts: []interface{}{OptFrameSize(333)}, err: true},
+ {opts: []interface{}{OptTPacketVersion(-3)}, err: true},
+ {opts: []interface{}{OptTPacketVersion(5)}, err: true},
+ {opts: []interface{}{OptFrameSize(1 << 10)}, want: wanted1},
+ } {
+ got, err := parseOptions(test.opts...)
+ t.Logf("got: %#v\nerr: %v", got, err)
+ if test.err && err == nil || !test.err && err != nil {
+ t.Errorf("%d error mismatch, want error? %v. error: %v", i, test.err, err)
+ }
+ if !test.err && !reflect.DeepEqual(test.want, got) {
+ t.Errorf("%d opts mismatch, want\n%#v", i, test.want)
+ }
+ }
+}
diff --git a/vendor/github.com/google/gopacket/afpacket/header.go b/vendor/github.com/google/gopacket/afpacket/header.go
new file mode 100644
index 0000000..0b9918e
--- /dev/null
+++ b/vendor/github.com/google/gopacket/afpacket/header.go
@@ -0,0 +1,158 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build linux
+
+package afpacket
+
+import (
+ "reflect"
+ "time"
+ "unsafe"
+)
+
+// #include <linux/if_packet.h>
+import "C"
+
+// Our model of handling all TPacket versions is a little hacky, to say the
+// least. We use the header interface to handle interactions with the
+// tpacket1/tpacket2 packet header AND the tpacket3 block header. The big
+// difference is that tpacket3's block header implements the next() call to get
+// the next packet within the block, while v1/v2 just always return false.
+
+type header interface {
+ // getStatus returns the TPacket status of the current header.
+ getStatus() int
+ // clearStatus clears the status of the current header, releasing its
+ // underlying data back to the kernel for future use with new packets.
+ // Using the header after calling clearStatus is an error. clearStatus
+ // should only be called after next() returns false.
+ clearStatus()
+ // getTime returns the timestamp for the current packet pointed to by
+ // the header.
+ getTime() time.Time
+ // getData returns the packet data pointed to by the current header.
+ getData() []byte
+ // getLength returns the total length of the packet.
+ getLength() int
+ // getIfaceIndex returns the index of the network interface
+ // where the packet was seen. The index can later be translated to a name.
+ getIfaceIndex() int
+ // next moves this header to point to the next packet it contains,
+ // returning true on success (in which case getTime and getData will
+ // return values for the new packet) or false if there are no more
+ // packets (in which case clearStatus should be called).
+ next() bool
+}
+
+func tpAlign(x int) int {
+ return int((uint(x) + tpacketAlignment - 1) &^ (tpacketAlignment - 1))
+}
+
+type v1header C.struct_tpacket_hdr
+type v2header C.struct_tpacket2_hdr
+
+func makeSlice(start uintptr, length int) (data []byte) {
+ slice := (*reflect.SliceHeader)(unsafe.Pointer(&data))
+ slice.Data = start
+ slice.Len = length
+ slice.Cap = length
+ return
+}
+
+func (h *v1header) getStatus() int {
+ return int(h.tp_status)
+}
+func (h *v1header) clearStatus() {
+ h.tp_status = 0
+}
+func (h *v1header) getTime() time.Time {
+ return time.Unix(int64(h.tp_sec), int64(h.tp_usec)*1000)
+}
+func (h *v1header) getData() []byte {
+ return makeSlice(uintptr(unsafe.Pointer(h))+uintptr(h.tp_mac), int(h.tp_snaplen))
+}
+func (h *v1header) getLength() int {
+ return int(h.tp_len)
+}
+func (h *v1header) getIfaceIndex() int {
+ ll := (*C.struct_sockaddr_ll)(unsafe.Pointer(uintptr(unsafe.Pointer(h)) + uintptr(tpAlign(int(C.sizeof_struct_tpacket_hdr)))))
+ return int(ll.sll_ifindex)
+}
+func (h *v1header) next() bool {
+ return false
+}
+
+func (h *v2header) getStatus() int {
+ return int(h.tp_status)
+}
+func (h *v2header) clearStatus() {
+ h.tp_status = 0
+}
+func (h *v2header) getTime() time.Time {
+ return time.Unix(int64(h.tp_sec), int64(h.tp_nsec))
+}
+func (h *v2header) getData() []byte {
+ return makeSlice(uintptr(unsafe.Pointer(h))+uintptr(h.tp_mac), int(h.tp_snaplen))
+}
+func (h *v2header) getLength() int {
+ return int(h.tp_len)
+}
+func (h *v2header) getIfaceIndex() int {
+ ll := (*C.struct_sockaddr_ll)(unsafe.Pointer(uintptr(unsafe.Pointer(h)) + uintptr(tpAlign(int(C.sizeof_struct_tpacket2_hdr)))))
+ return int(ll.sll_ifindex)
+}
+func (h *v2header) next() bool {
+ return false
+}
+
+type v3wrapper struct {
+ block *C.struct_tpacket_block_desc
+ blockhdr *C.struct_tpacket_hdr_v1
+ packet *C.struct_tpacket3_hdr
+ used C.__u32
+}
+
+func initV3Wrapper(block unsafe.Pointer) (w v3wrapper) {
+ w.block = (*C.struct_tpacket_block_desc)(block)
+ w.blockhdr = (*C.struct_tpacket_hdr_v1)(unsafe.Pointer(&w.block.hdr[0]))
+ w.packet = (*C.struct_tpacket3_hdr)(unsafe.Pointer(uintptr(block) + uintptr(w.blockhdr.offset_to_first_pkt)))
+ return
+}
+func (w *v3wrapper) getStatus() int {
+ return int(w.blockhdr.block_status)
+}
+func (w *v3wrapper) clearStatus() {
+ w.blockhdr.block_status = 0
+}
+func (w *v3wrapper) getTime() time.Time {
+ return time.Unix(int64(w.packet.tp_sec), int64(w.packet.tp_nsec))
+}
+func (w *v3wrapper) getData() []byte {
+ return makeSlice(uintptr(unsafe.Pointer(w.packet))+uintptr(w.packet.tp_mac), int(w.packet.tp_snaplen))
+}
+func (w *v3wrapper) getLength() int {
+ return int(w.packet.tp_len)
+}
+func (w *v3wrapper) getIfaceIndex() int {
+ ll := (*C.struct_sockaddr_ll)(unsafe.Pointer(uintptr(unsafe.Pointer(w.packet)) + uintptr(tpAlign(int(C.sizeof_struct_tpacket3_hdr)))))
+ return int(ll.sll_ifindex)
+}
+func (w *v3wrapper) next() bool {
+ w.used++
+ if w.used >= w.blockhdr.num_pkts {
+ return false
+ }
+
+ next := uintptr(unsafe.Pointer(w.packet))
+ if w.packet.tp_next_offset != 0 {
+ next += uintptr(w.packet.tp_next_offset)
+ } else {
+ next += uintptr(tpacketAlign(int(w.packet.tp_snaplen) + int(w.packet.tp_mac)))
+ }
+ w.packet = (*C.struct_tpacket3_hdr)(unsafe.Pointer(next))
+ return true
+}
diff --git a/vendor/github.com/google/gopacket/afpacket/options.go b/vendor/github.com/google/gopacket/afpacket/options.go
new file mode 100644
index 0000000..c5ab771
--- /dev/null
+++ b/vendor/github.com/google/gopacket/afpacket/options.go
@@ -0,0 +1,171 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build linux
+
+package afpacket
+
+import (
+ "errors"
+ "fmt"
+ "time"
+)
+
+// #include <linux/if_packet.h>
+// #include <sys/socket.h>
+import "C"
+
+// OptTPacketVersion is the version of TPacket to use.
+// It can be passed into NewTPacket.
+type OptTPacketVersion int
+
+// String returns a string representation of the version, generally of the form V#.
+func (t OptTPacketVersion) String() string {
+ switch t {
+ case TPacketVersion1:
+ return "V1"
+ case TPacketVersion2:
+ return "V2"
+ case TPacketVersion3:
+ return "V3"
+ case TPacketVersionHighestAvailable:
+ return "HighestAvailable"
+ }
+ return "InvalidVersion"
+}
+
+// OptSocketType is the socket type used to open the TPacket socket.
+type OptSocketType int
+
+func (t OptSocketType) String() string {
+ switch t {
+ case SocketRaw:
+ return "SOCK_RAW"
+ case SocketDgram:
+ return "SOCK_DGRAM"
+ }
+ return "UnknownSocketType"
+}
+
+// TPacket version numbers for use with NewHandle.
+const (
+ // TPacketVersionHighestAvailable tells NewHandle to use the highest available version of tpacket the kernel has available.
+ // This is the default, should a version number not be given in NewHandle's options.
+ TPacketVersionHighestAvailable = OptTPacketVersion(-1)
+ TPacketVersion1 = OptTPacketVersion(C.TPACKET_V1)
+ TPacketVersion2 = OptTPacketVersion(C.TPACKET_V2)
+ TPacketVersion3 = OptTPacketVersion(C.TPACKET_V3)
+ tpacketVersionMax = TPacketVersion3
+ tpacketVersionMin = -1
+ // SocketRaw is the default socket type. It returns packet data
+ // including the link layer (ethernet headers, etc).
+ SocketRaw = OptSocketType(C.SOCK_RAW)
+ // SocketDgram strips off the link layer when reading packets, and adds
+ // the link layer back automatically on packet writes (coming soon...)
+ SocketDgram = OptSocketType(C.SOCK_DGRAM)
+)
+
+// OptInterface is the specific interface to bind to.
+// It can be passed into NewTPacket.
+type OptInterface string
+
+// OptFrameSize is TPacket's tp_frame_size
+// It can be passed into NewTPacket.
+type OptFrameSize int
+
+// OptBlockSize is TPacket's tp_block_size
+// It can be passed into NewTPacket.
+type OptBlockSize int
+
+// OptNumBlocks is TPacket's tp_block_nr
+// It can be passed into NewTPacket.
+type OptNumBlocks int
+
+// OptBlockTimeout is TPacket v3's tp_retire_blk_tov. Note that it has only millisecond granularity, so must be >= 1 ms.
+// It can be passed into NewTPacket.
+type OptBlockTimeout time.Duration
+
+// OptPollTimeout is the number of milliseconds that poll() should block waiting for a file
+// descriptor to become ready. Specifying a negative value in time‐out means an infinite timeout.
+type OptPollTimeout time.Duration
+
+// Default constants used by options.
+const (
+ DefaultFrameSize = 4096 // Default value for OptFrameSize.
+ DefaultBlockSize = DefaultFrameSize * 128 // Default value for OptBlockSize.
+ DefaultNumBlocks = 128 // Default value for OptNumBlocks.
+ DefaultBlockTimeout = 64 * time.Millisecond // Default value for OptBlockTimeout.
+ DefaultPollTimeout = -1 * time.Millisecond // Default value for OptPollTimeout. This blocks forever.
+)
+
+type options struct {
+ frameSize int
+ framesPerBlock int
+ blockSize int
+ numBlocks int
+ blockTimeout time.Duration
+ pollTimeout time.Duration
+ version OptTPacketVersion
+ socktype OptSocketType
+ iface string
+}
+
+var defaultOpts = options{
+ frameSize: DefaultFrameSize,
+ blockSize: DefaultBlockSize,
+ numBlocks: DefaultNumBlocks,
+ blockTimeout: DefaultBlockTimeout,
+ pollTimeout: DefaultPollTimeout,
+ version: TPacketVersionHighestAvailable,
+ socktype: SocketRaw,
+}
+
+func parseOptions(opts ...interface{}) (ret options, err error) {
+ ret = defaultOpts
+ for _, opt := range opts {
+ switch v := opt.(type) {
+ case OptFrameSize:
+ ret.frameSize = int(v)
+ case OptBlockSize:
+ ret.blockSize = int(v)
+ case OptNumBlocks:
+ ret.numBlocks = int(v)
+ case OptBlockTimeout:
+ ret.blockTimeout = time.Duration(v)
+ case OptPollTimeout:
+ ret.pollTimeout = time.Duration(v)
+ case OptTPacketVersion:
+ ret.version = v
+ case OptInterface:
+ ret.iface = string(v)
+ case OptSocketType:
+ ret.socktype = v
+ default:
+ err = errors.New("unknown type in options")
+ return
+ }
+ }
+ if err = ret.check(); err != nil {
+ return
+ }
+ ret.framesPerBlock = ret.blockSize / ret.frameSize
+ return
+}
+func (o options) check() error {
+ switch {
+ case o.blockSize%pageSize != 0:
+ return fmt.Errorf("block size %d must be divisible by page size %d", o.blockSize, pageSize)
+ case o.blockSize%o.frameSize != 0:
+ return fmt.Errorf("block size %d must be divisible by frame size %d", o.blockSize, o.frameSize)
+ case o.numBlocks < 1:
+ return fmt.Errorf("num blocks %d must be >= 1", o.numBlocks)
+ case o.blockTimeout < time.Millisecond:
+ return fmt.Errorf("block timeout %v must be > %v", o.blockTimeout, time.Millisecond)
+ case o.version < tpacketVersionMin || o.version > tpacketVersionMax:
+ return fmt.Errorf("tpacket version %v is invalid", o.version)
+ }
+ return nil
+}
diff --git a/vendor/github.com/google/gopacket/afpacket/sockopt_linux.go b/vendor/github.com/google/gopacket/afpacket/sockopt_linux.go
new file mode 100644
index 0000000..c53e1cc
--- /dev/null
+++ b/vendor/github.com/google/gopacket/afpacket/sockopt_linux.go
@@ -0,0 +1,58 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build linux
+
+package afpacket
+
+import (
+ "unsafe"
+
+ "golang.org/x/sys/unix"
+)
+
+// setsockopt provides access to the setsockopt syscall.
+func setsockopt(fd, level, name int, val unsafe.Pointer, vallen uintptr) error {
+ _, _, errno := unix.Syscall6(
+ unix.SYS_SETSOCKOPT,
+ uintptr(fd),
+ uintptr(level),
+ uintptr(name),
+ uintptr(val),
+ vallen,
+ 0,
+ )
+ if errno != 0 {
+ return error(errno)
+ }
+
+ return nil
+}
+
+// getsockopt provides access to the getsockopt syscall.
+func getsockopt(fd, level, name int, val unsafe.Pointer, vallen uintptr) error {
+ _, _, errno := unix.Syscall6(
+ unix.SYS_GETSOCKOPT,
+ uintptr(fd),
+ uintptr(level),
+ uintptr(name),
+ uintptr(val),
+ vallen,
+ 0,
+ )
+ if errno != 0 {
+ return error(errno)
+ }
+
+ return nil
+}
+
+// htons converts a short (uint16) from host-to-network byte order.
+// Thanks to mikioh for this neat trick:
+// https://github.com/mikioh/-stdyng/blob/master/afpacket.go
+func htons(i uint16) uint16 {
+ return (i<<8)&0xff00 | i>>8
+}
diff --git a/vendor/github.com/google/gopacket/afpacket/sockopt_linux_386.go b/vendor/github.com/google/gopacket/afpacket/sockopt_linux_386.go
new file mode 100644
index 0000000..8c3eb42
--- /dev/null
+++ b/vendor/github.com/google/gopacket/afpacket/sockopt_linux_386.go
@@ -0,0 +1,57 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build linux,386
+
+package afpacket
+
+import (
+ "unsafe"
+
+ "golang.org/x/sys/unix"
+)
+
+const (
+ sysSETSOCKOPT = 0xe
+ sysGETSOCKOPT = 0xf
+)
+
+func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, unix.Errno)
+
+// setsockopt provides access to the setsockopt syscall.
+func setsockopt(fd, level, name int, v unsafe.Pointer, l uintptr) error {
+ _, errno := socketcall(
+ sysSETSOCKOPT,
+ uintptr(fd),
+ uintptr(level),
+ uintptr(name),
+ uintptr(v),
+ l,
+ 0,
+ )
+ if errno != 0 {
+ return error(errno)
+ }
+
+ return nil
+}
+
+func getsockopt(fd, level, name int, v unsafe.Pointer, l uintptr) error {
+ _, errno := socketcall(
+ sysGETSOCKOPT,
+ uintptr(fd),
+ uintptr(level),
+ uintptr(name),
+ uintptr(v),
+ l,
+ 0,
+ )
+ if errno != 0 {
+ return error(errno)
+ }
+
+ return nil
+}
diff --git a/vendor/github.com/google/gopacket/afpacket/sockopt_linux_386.s b/vendor/github.com/google/gopacket/afpacket/sockopt_linux_386.s
new file mode 100644
index 0000000..7d0336a
--- /dev/null
+++ b/vendor/github.com/google/gopacket/afpacket/sockopt_linux_386.s
@@ -0,0 +1,8 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+TEXT ·socketcall(SB),4,$0-36
+ JMP syscall·socketcall(SB) \ No newline at end of file
diff --git a/vendor/github.com/google/gopacket/base.go b/vendor/github.com/google/gopacket/base.go
new file mode 100644
index 0000000..797b55f
--- /dev/null
+++ b/vendor/github.com/google/gopacket/base.go
@@ -0,0 +1,178 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package gopacket
+
+import (
+ "fmt"
+)
+
+// Layer represents a single decoded packet layer (using either the
+// OSI or TCP/IP definition of a layer). When decoding, a packet's data is
+// broken up into a number of layers. The caller may call LayerType() to
+// figure out which type of layer they've received from the packet. Optionally,
+// they may then use a type assertion to get the actual layer type for deep
+// inspection of the data.
+type Layer interface {
+ // LayerType is the gopacket type for this layer.
+ LayerType() LayerType
+ // LayerContents returns the set of bytes that make up this layer.
+ LayerContents() []byte
+ // LayerPayload returns the set of bytes contained within this layer, not
+ // including the layer itself.
+ LayerPayload() []byte
+}
+
+// Payload is a Layer containing the payload of a packet. The definition of
+// what constitutes the payload of a packet depends on previous layers; for
+// TCP and UDP, we stop decoding above layer 4 and return the remaining
+// bytes as a Payload. Payload is an ApplicationLayer.
+type Payload []byte
+
+// LayerType returns LayerTypePayload
+func (p Payload) LayerType() LayerType { return LayerTypePayload }
+
+// LayerContents returns the bytes making up this layer.
+func (p Payload) LayerContents() []byte { return []byte(p) }
+
+// LayerPayload returns the payload within this layer.
+func (p Payload) LayerPayload() []byte { return nil }
+
+// Payload returns this layer as bytes.
+func (p Payload) Payload() []byte { return []byte(p) }
+
+// String implements fmt.Stringer.
+func (p Payload) String() string { return fmt.Sprintf("%d byte(s)", len(p)) }
+
+// GoString implements fmt.GoStringer.
+func (p Payload) GoString() string { return LongBytesGoString([]byte(p)) }
+
+// CanDecode implements DecodingLayer.
+func (p Payload) CanDecode() LayerClass { return LayerTypePayload }
+
+// NextLayerType implements DecodingLayer.
+func (p Payload) NextLayerType() LayerType { return LayerTypeZero }
+
+// DecodeFromBytes implements DecodingLayer.
+func (p *Payload) DecodeFromBytes(data []byte, df DecodeFeedback) error {
+ *p = Payload(data)
+ return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (p Payload) SerializeTo(b SerializeBuffer, opts SerializeOptions) error {
+ bytes, err := b.PrependBytes(len(p))
+ if err != nil {
+ return err
+ }
+ copy(bytes, p)
+ return nil
+}
+
+// decodePayload decodes data by returning it all in a Payload layer.
+func decodePayload(data []byte, p PacketBuilder) error {
+ payload := &Payload{}
+ if err := payload.DecodeFromBytes(data, p); err != nil {
+ return nil
+ }
+ p.AddLayer(payload)
+ p.SetApplicationLayer(payload)
+ return nil
+}
+
+// Fragment is a Layer containing a fragment of a larger frame, used by layers
+// like IPv4 and IPv6 that allow for fragmentation of their payloads.
+type Fragment []byte
+
+// LayerType returns LayerTypeFragment
+func (p *Fragment) LayerType() LayerType { return LayerTypeFragment }
+
+// LayerContents implements Layer.
+func (p *Fragment) LayerContents() []byte { return []byte(*p) }
+
+// LayerPayload implements Layer.
+func (p *Fragment) LayerPayload() []byte { return nil }
+
+// Payload returns this layer as a byte slice.
+func (p *Fragment) Payload() []byte { return []byte(*p) }
+
+// String implements fmt.Stringer.
+func (p *Fragment) String() string { return fmt.Sprintf("%d byte(s)", len(*p)) }
+
+// CanDecode implements DecodingLayer.
+func (p *Fragment) CanDecode() LayerClass { return LayerTypeFragment }
+
+// NextLayerType implements DecodingLayer.
+func (p *Fragment) NextLayerType() LayerType { return LayerTypeZero }
+
+// DecodeFromBytes implements DecodingLayer.
+func (p *Fragment) DecodeFromBytes(data []byte, df DecodeFeedback) error {
+ *p = Fragment(data)
+ return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (p *Fragment) SerializeTo(b SerializeBuffer, opts SerializeOptions) error {
+ bytes, err := b.PrependBytes(len(*p))
+ if err != nil {
+ return err
+ }
+ copy(bytes, *p)
+ return nil
+}
+
+// decodeFragment decodes data by returning it all in a Fragment layer.
+func decodeFragment(data []byte, p PacketBuilder) error {
+ payload := &Fragment{}
+ if err := payload.DecodeFromBytes(data, p); err != nil {
+ return nil
+ }
+ p.AddLayer(payload)
+ p.SetApplicationLayer(payload)
+ return nil
+}
+
+// These layers correspond to Internet Protocol Suite (TCP/IP) layers, and their
+// corresponding OSI layers, as best as possible.
+
+// LinkLayer is the packet layer corresponding to TCP/IP layer 1 (OSI layer 2)
+type LinkLayer interface {
+ Layer
+ LinkFlow() Flow
+}
+
+// NetworkLayer is the packet layer corresponding to TCP/IP layer 2 (OSI
+// layer 3)
+type NetworkLayer interface {
+ Layer
+ NetworkFlow() Flow
+}
+
+// TransportLayer is the packet layer corresponding to the TCP/IP layer 3 (OSI
+// layer 4)
+type TransportLayer interface {
+ Layer
+ TransportFlow() Flow
+}
+
+// ApplicationLayer is the packet layer corresponding to the TCP/IP layer 4 (OSI
+// layer 7), also known as the packet payload.
+type ApplicationLayer interface {
+ Layer
+ Payload() []byte
+}
+
+// ErrorLayer is a packet layer created when decoding of the packet has failed.
+// Its payload is all the bytes that we were unable to decode, and the returned
+// error details why the decoding failed.
+type ErrorLayer interface {
+ Layer
+ Error() error
+}
diff --git a/vendor/github.com/google/gopacket/benchmark_test.go b/vendor/github.com/google/gopacket/benchmark_test.go
new file mode 100644
index 0000000..74a1d28
--- /dev/null
+++ b/vendor/github.com/google/gopacket/benchmark_test.go
@@ -0,0 +1,194 @@
+// Copyright 2012, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package gopacket
+
+import (
+ "runtime"
+ "testing"
+)
+
+// A few benchmarks for figuring out exactly how fast some underlying Go
+// things are.
+
+type testError struct{}
+
+func (t *testError) Error() string { return "abc" }
+
+func BenchmarkTypeAssertion(b *testing.B) {
+ var e error = &testError{}
+ for i := 0; i < b.N; i++ {
+ _, _ = e.(*testError)
+ }
+}
+
+func BenchmarkMapLookup(b *testing.B) {
+ m := map[LayerType]bool{
+ LayerTypePayload: true,
+ }
+ for i := 0; i < b.N; i++ {
+ _ = m[LayerTypePayload]
+ }
+}
+
+func BenchmarkNilMapLookup(b *testing.B) {
+ var m map[LayerType]bool
+ for i := 0; i < b.N; i++ {
+ _ = m[LayerTypePayload]
+ }
+}
+
+func BenchmarkNilMapLookupWithNilCheck(b *testing.B) {
+ var m map[LayerType]bool
+ for i := 0; i < b.N; i++ {
+ if m != nil {
+ _ = m[LayerTypePayload]
+ }
+ }
+}
+
+func BenchmarkArrayLookup(b *testing.B) {
+ m := make([]bool, 100)
+ for i := 0; i < b.N; i++ {
+ _ = m[LayerTypePayload]
+ }
+}
+
+var testError1 = &testError{}
+var testError2 error = testError1
+
+func BenchmarkTypeToInterface1(b *testing.B) {
+ var e error
+ for i := 0; i < b.N; i++ {
+ e = testError1
+ }
+ // Have to do someting with 'e' or the compiler complains about an unused
+ // variable.
+ testError2 = e
+}
+func BenchmarkTypeToInterface2(b *testing.B) {
+ var e error
+ for i := 0; i < b.N; i++ {
+ e = testError2
+ }
+ // Have to do someting with 'e' or the compiler complains about an unused
+ // variable.
+ testError2 = e
+}
+
+var decodeOpts DecodeOptions
+
+func decodeOptsByValue(_ DecodeOptions) {}
+func decodeOptsByPointer(_ *DecodeOptions) {}
+func BenchmarkPassDecodeOptionsByValue(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ decodeOptsByValue(decodeOpts)
+ }
+}
+func BenchmarkPassDecodeOptionsByPointer(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ decodeOptsByPointer(&decodeOpts)
+ }
+}
+
+func BenchmarkLockOSThread(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ runtime.LockOSThread()
+ }
+}
+func BenchmarkUnlockOSThread(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ runtime.UnlockOSThread()
+ }
+}
+func lockUnlock() {
+ runtime.LockOSThread()
+ runtime.UnlockOSThread()
+}
+func lockDeferUnlock() {
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+}
+func BenchmarkLockUnlockOSThread(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ lockUnlock()
+ }
+}
+func BenchmarkLockDeferUnlockOSThread(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ lockDeferUnlock()
+ }
+}
+
+func BenchmarkUnbufferedChannel(b *testing.B) {
+ ca := make(chan bool)
+ cb := make(chan bool)
+ defer close(ca)
+ go func() {
+ defer close(cb)
+ for _ = range ca {
+ cb <- true
+ }
+ }()
+ for i := 0; i < b.N; i++ {
+ ca <- true
+ <-cb
+ }
+}
+func BenchmarkSmallBufferedChannel(b *testing.B) {
+ ca := make(chan bool, 1)
+ cb := make(chan bool, 1)
+ defer close(ca)
+ go func() {
+ defer close(cb)
+ for _ = range ca {
+ cb <- true
+ }
+ }()
+ for i := 0; i < b.N; i++ {
+ ca <- true
+ <-cb
+ }
+}
+func BenchmarkLargeBufferedChannel(b *testing.B) {
+ ca := make(chan bool, 1000)
+ cb := make(chan bool, 1000)
+ defer close(ca)
+ go func() {
+ defer close(cb)
+ for _ = range ca {
+ cb <- true
+ }
+ }()
+ for i := 0; i < b.N; i++ {
+ ca <- true
+ <-cb
+ }
+}
+func BenchmarkEndpointFastHashShort(b *testing.B) {
+ e := Endpoint{typ: 1, len: 2}
+ for i := 0; i < b.N; i++ {
+ e.FastHash()
+ }
+}
+func BenchmarkEndpointFastHashLong(b *testing.B) {
+ e := Endpoint{typ: 1, len: 16}
+ for i := 0; i < b.N; i++ {
+ e.FastHash()
+ }
+}
+func BenchmarkFlowFastHashShort(b *testing.B) {
+ e := Flow{typ: 1, slen: 2, dlen: 2}
+ for i := 0; i < b.N; i++ {
+ e.FastHash()
+ }
+}
+func BenchmarkFlowFastHashLong(b *testing.B) {
+ e := Flow{typ: 1, slen: 16, dlen: 16}
+ for i := 0; i < b.N; i++ {
+ e.FastHash()
+ }
+}
diff --git a/vendor/github.com/google/gopacket/bsdbpf/bsd_bpf_sniffer.go b/vendor/github.com/google/gopacket/bsdbpf/bsd_bpf_sniffer.go
new file mode 100644
index 0000000..3e1da0b
--- /dev/null
+++ b/vendor/github.com/google/gopacket/bsdbpf/bsd_bpf_sniffer.go
@@ -0,0 +1,215 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build darwin dragonfly freebsd netbsd openbsd
+
+package bsdbpf
+
+import (
+ "errors"
+ "fmt"
+ "syscall"
+ "time"
+ "unsafe"
+
+ "github.com/google/gopacket"
+ "golang.org/x/sys/unix"
+)
+
+const wordSize = int(unsafe.Sizeof(uintptr(0)))
+
+func bpfWordAlign(x int) int {
+ return (((x) + (wordSize - 1)) &^ (wordSize - 1))
+}
+
+// Options is used to configure various properties of the BPF sniffer.
+// Default values are used when a nil Options pointer is passed to NewBPFSniffer.
+type Options struct {
+ // BPFDeviceName is name of the bpf device to use for sniffing
+ // the network device. The default value of BPFDeviceName is empty string
+ // which causes the first available BPF device file /dev/bpfX to be used.
+ BPFDeviceName string
+ // ReadBufLen specifies the size of the buffer used to read packets
+ // off the wire such that multiple packets are buffered with each read syscall.
+ // Note that an individual packet larger than the buffer size is necessarily truncated.
+ // A larger buffer should increase performance because fewer read syscalls would be made.
+ // If zero is used, the system's default buffer length will be used which depending on the
+ // system may default to 4096 bytes which is not big enough to accomodate some link layers
+ // such as WLAN (802.11).
+ // ReadBufLen defaults to 32767... however typical BSD manual pages for BPF indicate that
+ // if the requested buffer size cannot be accommodated, the closest allowable size will be
+ // set and returned... hence our GetReadBufLen method.
+ ReadBufLen int
+ // Timeout is the length of time to wait before timing out on a read request.
+ // Timeout defaults to nil which means no timeout is used.
+ Timeout *syscall.Timeval
+ // Promisc is set to true for promiscuous mode ethernet sniffing.
+ // Promisc defaults to true.
+ Promisc bool
+ // Immediate is set to true to make our read requests return as soon as a packet becomes available.
+ // Otherwise, a read will block until either the kernel buffer becomes full or a timeout occurs.
+ // The default is true.
+ Immediate bool
+ // PreserveLinkAddr is set to false if the link level source address should be filled in automatically
+ // by the interface output routine. Set to true if the link level source address will be written,
+ // as provided, to the wire.
+ // The default is true.
+ PreserveLinkAddr bool
+}
+
+var defaultOptions = Options{
+ BPFDeviceName: "",
+ ReadBufLen: 32767,
+ Timeout: nil,
+ Promisc: true,
+ Immediate: true,
+ PreserveLinkAddr: true,
+}
+
+// BPFSniffer is a struct used to track state of a BSD BPF ethernet sniffer
+// such that gopacket's PacketDataSource interface is implemented.
+type BPFSniffer struct {
+ options *Options
+ sniffDeviceName string
+ fd int
+ readBuffer []byte
+ lastReadLen int
+ readBytesConsumed int
+}
+
+// NewBPFSniffer is used to create BSD-only BPF ethernet sniffer
+// iface is the network interface device name that you wish to sniff
+// options can set to nil in order to utilize default values for everything.
+// Each field of Options also have a default setting if left unspecified by
+// the user's custome Options struct.
+func NewBPFSniffer(iface string, options *Options) (*BPFSniffer, error) {
+ var err error
+ enable := 1
+ sniffer := BPFSniffer{
+ sniffDeviceName: iface,
+ }
+ if options == nil {
+ sniffer.options = &defaultOptions
+ } else {
+ sniffer.options = options
+ }
+
+ if sniffer.options.BPFDeviceName == "" {
+ sniffer.pickBpfDevice()
+ }
+
+ // setup our read buffer
+ if sniffer.options.ReadBufLen == 0 {
+ sniffer.options.ReadBufLen, err = syscall.BpfBuflen(sniffer.fd)
+ if err != nil {
+ return nil, err
+ }
+ } else {
+ sniffer.options.ReadBufLen, err = syscall.SetBpfBuflen(sniffer.fd, sniffer.options.ReadBufLen)
+ if err != nil {
+ return nil, err
+ }
+ }
+ sniffer.readBuffer = make([]byte, sniffer.options.ReadBufLen)
+
+ err = syscall.SetBpfInterface(sniffer.fd, sniffer.sniffDeviceName)
+ if err != nil {
+ return nil, err
+ }
+
+ if sniffer.options.Immediate {
+ // turn immediate mode on. This makes the snffer non-blocking.
+ err = syscall.SetBpfImmediate(sniffer.fd, enable)
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ // the above call to syscall.SetBpfImmediate needs to be made
+ // before setting a timer otherwise the reads will block for the
+ // entire timer duration even if there are packets to return.
+ if sniffer.options.Timeout != nil {
+ err = syscall.SetBpfTimeout(sniffer.fd, sniffer.options.Timeout)
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ if sniffer.options.PreserveLinkAddr {
+ // preserves the link level source address...
+ // higher level protocol analyzers will not need this
+ err = syscall.SetBpfHeadercmpl(sniffer.fd, enable)
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ if sniffer.options.Promisc {
+ // forces the interface into promiscuous mode
+ err = syscall.SetBpfPromisc(sniffer.fd, enable)
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ return &sniffer, nil
+}
+
+// Close is used to close the file-descriptor of the BPF device file.
+func (b *BPFSniffer) Close() error {
+ return syscall.Close(b.fd)
+}
+
+func (b *BPFSniffer) pickBpfDevice() {
+ var err error
+ b.options.BPFDeviceName = ""
+ for i := 0; i < 99; i++ {
+ b.options.BPFDeviceName = fmt.Sprintf("/dev/bpf%d", i)
+ b.fd, err = syscall.Open(b.options.BPFDeviceName, syscall.O_RDWR, 0)
+ if err == nil {
+ return
+ }
+ }
+ panic("failed to acquire a BPF device for read-write access")
+}
+
+func (b *BPFSniffer) ReadPacketData() ([]byte, gopacket.CaptureInfo, error) {
+ var err error
+ if b.readBytesConsumed >= b.lastReadLen {
+ b.readBytesConsumed = 0
+ b.readBuffer = make([]byte, b.options.ReadBufLen)
+ b.lastReadLen, err = syscall.Read(b.fd, b.readBuffer)
+ if err != nil {
+ b.lastReadLen = 0
+ return nil, gopacket.CaptureInfo{}, err
+ }
+ }
+ hdr := (*unix.BpfHdr)(unsafe.Pointer(&b.readBuffer[b.readBytesConsumed]))
+ frameStart := b.readBytesConsumed + int(hdr.Hdrlen)
+ b.readBytesConsumed += bpfWordAlign(int(hdr.Hdrlen) + int(hdr.Caplen))
+
+ if frameStart+int(hdr.Caplen) > len(b.readBuffer) {
+ captureInfo := gopacket.CaptureInfo{
+ Timestamp: time.Unix(int64(hdr.Tstamp.Sec), int64(hdr.Tstamp.Usec)*1000),
+ CaptureLength: 0,
+ Length: 0,
+ }
+ return nil, captureInfo, errors.New("BPF captured frame received with corrupted BpfHdr struct.")
+ }
+
+ rawFrame := b.readBuffer[frameStart : frameStart+int(hdr.Caplen)]
+ captureInfo := gopacket.CaptureInfo{
+ Timestamp: time.Unix(int64(hdr.Tstamp.Sec), int64(hdr.Tstamp.Usec)*1000),
+ CaptureLength: len(rawFrame),
+ Length: len(rawFrame),
+ }
+ return rawFrame, captureInfo, nil
+}
+
+// GetReadBufLen returns the BPF read buffer length
+func (b *BPFSniffer) GetReadBufLen() int {
+ return b.options.ReadBufLen
+}
diff --git a/vendor/github.com/google/gopacket/bytediff/bytediff.go b/vendor/github.com/google/gopacket/bytediff/bytediff.go
new file mode 100644
index 0000000..63addd9
--- /dev/null
+++ b/vendor/github.com/google/gopacket/bytediff/bytediff.go
@@ -0,0 +1,217 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// Package bytediff provides a simple diff utility for looking at differences in byte
+// slices. It's slow, clunky, and not particularly good by any measure, but
+// it does provide very useful visualizations for diffs between small byte
+// slices.
+//
+// Our diff algorithm uses a dynamic programming implementation of longest common
+// substring to find matching parts of slices, then recursively calls itself on
+// the prefix/suffix of that matching part for each packet. This is a Bad Idea
+// (tm) for normal (especially large) input, but for packets where large portions
+// repeat frequently and we expect minor changes between results, it's actually
+// quite useful.
+package bytediff
+
+import (
+ "bytes"
+ "fmt"
+)
+
+// OutputFormat tells a Differences.String call how to format the set of
+// differences into a human-readable string. Its internals are currently
+// unexported because we may want to change them drastically in the future. For
+// the moment, please just use one of the provided OutputFormats that comes with
+// this library.
+type OutputFormat struct {
+ start, finish, add, remove, change, reset string
+}
+
+var (
+ // BashOutput uses bash escape sequences to color output.
+ BashOutput = &OutputFormat{
+ reset: "\033[0m",
+ remove: "\033[32m",
+ add: "\033[31m",
+ change: "\033[33m",
+ }
+ // HTMLOutput uses a <pre> to wrap output, and <span>s to color it.
+ // HTMLOutput is pretty experimental, so use at your own risk ;)
+ HTMLOutput = &OutputFormat{
+ start: "<pre>",
+ finish: "</pre>",
+ reset: "</span>",
+ remove: "<span style='color:red'>",
+ add: "<span style='color:green'>",
+ change: "<span style='color:yellow'>",
+ }
+)
+
+// longestCommonSubstring uses a O(MN) dynamic programming approach to find the
+// longest common substring in a set of slices. It returns the index in each
+// slice at which the substring begins, plus the length of the commonality.
+func longestCommonSubstring(strA, strB []byte) (indexA, indexB, length int) {
+ lenA, lenB := len(strA), len(strB)
+ if lenA == 0 || lenB == 0 {
+ return 0, 0, 0
+ }
+ arr := make([][]int, lenA)
+ for i := 0; i < lenA; i++ {
+ arr[i] = make([]int, lenB)
+ }
+ var maxLength int
+ var maxA, maxB int
+ for a := 0; a < lenA; a++ {
+ for b := 0; b < lenB; b++ {
+ if strA[a] == strB[b] {
+ length := 1
+ if a > 0 && b > 0 {
+ length = arr[a-1][b-1] + 1
+ }
+ arr[a][b] = length
+ if length > maxLength {
+ maxLength = length
+ maxA = a
+ maxB = b
+ }
+ }
+ }
+ }
+ a, b := maxA, maxB
+ for a >= 0 && b >= 0 && strA[a] == strB[b] {
+ indexA = a
+ indexB = b
+ a--
+ b--
+ length++
+ }
+ return
+}
+
+func intMax(a, b int) int {
+ if a > b {
+ return a
+ }
+ return b
+}
+
+// Difference represents a single part of the data being diffed, containing
+// information about both the original and new values.
+// From and To are the sets of bytes in the original and the new byte slice.
+// !Replace implies From == To (no change)
+// len(To) == 0 implies From is being deleted
+// len(From) == 0 implies To is being inserted
+// else implies From is being replaced by To
+type Difference struct {
+ Replace bool
+ From, To []byte
+}
+
+// color returns the bash color for a given difference.
+func (c *OutputFormat) color(d Difference) string {
+ switch {
+ case !d.Replace:
+ return ""
+ case len(d.From) == 0:
+ return c.remove
+ case len(d.To) == 0:
+ return c.add
+ default:
+ return c.change
+ }
+}
+
+// Diff diffs strA and strB, returning a list of differences which
+// can be used to construct either the original or new string.
+//
+// Diff is optimized for comparing VERY SHORT slices. It's meant for comparing
+// things like packets off the wire, not large files or the like.
+// As such, its runtime can be catastrophic if large inputs are passed in.
+// You've been warned.
+func Diff(strA, strB []byte) Differences {
+ if len(strA) == 0 && len(strB) == 0 {
+ return nil
+ }
+ ia, ib, l := longestCommonSubstring(strA, strB)
+ if l == 0 {
+ return Differences{
+ Difference{true, strA, strB},
+ }
+ }
+ beforeA, match, afterA := strA[:ia], strA[ia:ia+l], strA[ia+l:]
+ beforeB, afterB := strB[:ib], strB[ib+l:]
+ var diffs Differences
+ diffs = append(diffs, Diff(beforeA, beforeB)...)
+ diffs = append(diffs, Difference{false, match, match})
+ diffs = append(diffs, Diff(afterA, afterB)...)
+ return diffs
+}
+
+// Differences is a set of differences for a given diff'd pair of byte slices.
+type Differences []Difference
+
+// String outputs a previously diff'd set of strings, showing differences
+// between them, highlighted by colors.
+//
+// The output format of this function is NOT guaranteed consistent, and may be
+// changed at any time by the library authors. It's meant solely for human
+// consumption.
+func (c *OutputFormat) String(diffs Differences) string {
+ var buf bytes.Buffer
+ count := 0
+ fmt.Fprintf(&buf, "%s", c.start)
+ fmt.Fprintf(&buf, "00000000 ")
+ for i := 0; i < len(diffs); i++ {
+ diff := diffs[i]
+ color := c.color(diff)
+ reset := ""
+ if color != "" {
+ reset = c.reset
+ }
+ fmt.Fprint(&buf, color)
+ for _, b := range diff.From {
+ fmt.Fprintf(&buf, " %02x", b)
+ count++
+ switch count % 16 {
+ case 0:
+ fmt.Fprintf(&buf, "%v\n%08x%v ", reset, count, color)
+ case 8:
+ fmt.Fprintf(&buf, " ")
+ }
+ }
+ fmt.Fprint(&buf, reset)
+ }
+ fmt.Fprintf(&buf, "\n\n00000000 ")
+ count = 0
+ for i := 0; i < len(diffs); i++ {
+ diff := diffs[i]
+ str := diff.From
+ if diff.Replace {
+ str = diff.To
+ }
+ color := c.color(diff)
+ reset := ""
+ if color != "" {
+ reset = c.reset
+ }
+ fmt.Fprint(&buf, color)
+ for _, b := range str {
+ fmt.Fprintf(&buf, " %02x", b)
+ count++
+ switch count % 16 {
+ case 0:
+ fmt.Fprintf(&buf, "%v\n%08x%v ", reset, count, color)
+ case 8:
+ fmt.Fprintf(&buf, " ")
+ }
+ }
+ fmt.Fprint(&buf, reset)
+ }
+ fmt.Fprint(&buf, "\n")
+ fmt.Fprintf(&buf, "%s", c.finish)
+ return string(buf.Bytes())
+}
diff --git a/vendor/github.com/google/gopacket/bytediff/bytediff_test.go b/vendor/github.com/google/gopacket/bytediff/bytediff_test.go
new file mode 100644
index 0000000..022ad4b
--- /dev/null
+++ b/vendor/github.com/google/gopacket/bytediff/bytediff_test.go
@@ -0,0 +1,53 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package bytediff
+
+import (
+ "reflect"
+ "testing"
+)
+
+func TestLCS(t *testing.T) {
+ for i, test := range []struct {
+ a, b []byte
+ indexA, indexB, length int
+ }{
+ {[]byte{1, 2, 3}, []byte{1, 2, 3}, 0, 0, 3},
+ {[]byte{0, 1, 2, 3}, []byte{1, 2, 3, 4}, 1, 0, 3},
+ {[]byte{0, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3}, []byte{1, 2, 3, 4}, 4, 0, 4},
+ {[]byte{1, 2, 2, 3, 4}, []byte{1, 2, 3, 4}, 2, 1, 3},
+ {[]byte{0, 1, 2, 3, 4}, []byte{1, 1, 2, 2, 3, 4}, 2, 3, 3},
+ } {
+ ia, ib, l := longestCommonSubstring(test.a, test.b)
+ if ia != test.indexA || ib != test.indexB || l != test.length {
+ t.Errorf("%d: want (%d %d %d) got (%d %d %d)", i, test.indexA, test.indexB, test.length, ia, ib, l)
+ }
+ }
+}
+
+func TestDiff(t *testing.T) {
+ for i, test := range []struct {
+ a, b []byte
+ d Differences
+ }{
+ {
+ []byte{0, 1, 2, 3, 4},
+ []byte{1, 1, 2, 2, 3, 4},
+ Differences{
+ Difference{true, []byte{0}, []byte{}},
+ Difference{false, []byte{1}, []byte{1}},
+ Difference{true, []byte{}, []byte{1, 2}},
+ Difference{false, []byte{2, 3, 4}, []byte{2, 3, 4}},
+ },
+ },
+ } {
+ diffs := Diff(test.a, test.b)
+ if !reflect.DeepEqual(diffs, test.d) {
+ t.Errorf("%d want %v got %v", i, test.d, diffs)
+ }
+ }
+}
diff --git a/vendor/github.com/google/gopacket/decode.go b/vendor/github.com/google/gopacket/decode.go
new file mode 100644
index 0000000..2633f84
--- /dev/null
+++ b/vendor/github.com/google/gopacket/decode.go
@@ -0,0 +1,157 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package gopacket
+
+import (
+ "errors"
+)
+
+// DecodeFeedback is used by DecodingLayer layers to provide decoding metadata.
+type DecodeFeedback interface {
+ // SetTruncated should be called if during decoding you notice that a packet
+ // is shorter than internal layer variables (HeaderLength, or the like) say it
+ // should be. It sets packet.Metadata().Truncated.
+ SetTruncated()
+}
+
+type nilDecodeFeedback struct{}
+
+func (nilDecodeFeedback) SetTruncated() {}
+
+// NilDecodeFeedback implements DecodeFeedback by doing nothing.
+var NilDecodeFeedback DecodeFeedback = nilDecodeFeedback{}
+
+// PacketBuilder is used by layer decoders to store the layers they've decoded,
+// and to defer future decoding via NextDecoder.
+// Typically, the pattern for use is:
+// func (m *myDecoder) Decode(data []byte, p PacketBuilder) error {
+// if myLayer, err := myDecodingLogic(data); err != nil {
+// return err
+// } else {
+// p.AddLayer(myLayer)
+// }
+// // maybe do this, if myLayer is a LinkLayer
+// p.SetLinkLayer(myLayer)
+// return p.NextDecoder(nextDecoder)
+// }
+type PacketBuilder interface {
+ DecodeFeedback
+ // AddLayer should be called by a decoder immediately upon successful
+ // decoding of a layer.
+ AddLayer(l Layer)
+ // The following functions set the various specific layers in the final
+ // packet. Note that if many layers call SetX, the first call is kept and all
+ // other calls are ignored.
+ SetLinkLayer(LinkLayer)
+ SetNetworkLayer(NetworkLayer)
+ SetTransportLayer(TransportLayer)
+ SetApplicationLayer(ApplicationLayer)
+ SetErrorLayer(ErrorLayer)
+ // NextDecoder should be called by a decoder when they're done decoding a
+ // packet layer but not done with decoding the entire packet. The next
+ // decoder will be called to decode the last AddLayer's LayerPayload.
+ // Because of this, NextDecoder must only be called once all other
+ // PacketBuilder calls have been made. Set*Layer and AddLayer calls after
+ // NextDecoder calls will behave incorrectly.
+ NextDecoder(next Decoder) error
+ // DumpPacketData is used solely for decoding. If you come across an error
+ // you need to diagnose while processing a packet, call this and your packet's
+ // data will be dumped to stderr so you can create a test. This should never
+ // be called from a production decoder.
+ DumpPacketData()
+ // DecodeOptions returns the decode options
+ DecodeOptions() *DecodeOptions
+}
+
+// Decoder is an interface for logic to decode a packet layer. Users may
+// implement a Decoder to handle their own strange packet types, or may use one
+// of the many decoders available in the 'layers' subpackage to decode things
+// for them.
+type Decoder interface {
+ // Decode decodes the bytes of a packet, sending decoded values and other
+ // information to PacketBuilder, and returning an error if unsuccessful. See
+ // the PacketBuilder documentation for more details.
+ Decode([]byte, PacketBuilder) error
+}
+
+// DecodeFunc wraps a function to make it a Decoder.
+type DecodeFunc func([]byte, PacketBuilder) error
+
+// Decode implements Decoder by calling itself.
+func (d DecodeFunc) Decode(data []byte, p PacketBuilder) error {
+ // function, call thyself.
+ return d(data, p)
+}
+
+// DecodePayload is a Decoder that returns a Payload layer containing all
+// remaining bytes.
+var DecodePayload Decoder = DecodeFunc(decodePayload)
+
+// DecodeUnknown is a Decoder that returns an Unknown layer containing all
+// remaining bytes, useful if you run up against a layer that you're unable to
+// decode yet. This layer is considered an ErrorLayer.
+var DecodeUnknown Decoder = DecodeFunc(decodeUnknown)
+
+// DecodeFragment is a Decoder that returns a Fragment layer containing all
+// remaining bytes.
+var DecodeFragment Decoder = DecodeFunc(decodeFragment)
+
+// LayerTypeZero is an invalid layer type, but can be used to determine whether
+// layer type has actually been set correctly.
+var LayerTypeZero = RegisterLayerType(0, LayerTypeMetadata{Name: "Unknown", Decoder: DecodeUnknown})
+
+// LayerTypeDecodeFailure is the layer type for the default error layer.
+var LayerTypeDecodeFailure = RegisterLayerType(1, LayerTypeMetadata{Name: "DecodeFailure", Decoder: DecodeUnknown})
+
+// LayerTypePayload is the layer type for a payload that we don't try to decode
+// but treat as a success, IE: an application-level payload.
+var LayerTypePayload = RegisterLayerType(2, LayerTypeMetadata{Name: "Payload", Decoder: DecodePayload})
+
+// LayerTypeFragment is the layer type for a fragment of a layer transported
+// by an underlying layer that supports fragmentation.
+var LayerTypeFragment = RegisterLayerType(3, LayerTypeMetadata{Name: "Fragment", Decoder: DecodeFragment})
+
+// DecodeFailure is a packet layer created if decoding of the packet data failed
+// for some reason. It implements ErrorLayer. LayerContents will be the entire
+// set of bytes that failed to parse, and Error will return the reason parsing
+// failed.
+type DecodeFailure struct {
+ data []byte
+ err error
+ stack []byte
+}
+
+// Error returns the error encountered during decoding.
+func (d *DecodeFailure) Error() error { return d.err }
+
+// LayerContents implements Layer.
+func (d *DecodeFailure) LayerContents() []byte { return d.data }
+
+// LayerPayload implements Layer.
+func (d *DecodeFailure) LayerPayload() []byte { return nil }
+
+// String implements fmt.Stringer.
+func (d *DecodeFailure) String() string {
+ return "Packet decoding error: " + d.Error().Error()
+}
+
+// Dump implements Dumper.
+func (d *DecodeFailure) Dump() (s string) {
+ if d.stack != nil {
+ s = string(d.stack)
+ }
+ return
+}
+
+// LayerType returns LayerTypeDecodeFailure
+func (d *DecodeFailure) LayerType() LayerType { return LayerTypeDecodeFailure }
+
+// decodeUnknown "decodes" unsupported data types by returning an error.
+// This decoder will thus always return a DecodeFailure layer.
+func decodeUnknown(data []byte, p PacketBuilder) error {
+ return errors.New("Layer type not currently supported")
+}
diff --git a/vendor/github.com/google/gopacket/doc.go b/vendor/github.com/google/gopacket/doc.go
new file mode 100644
index 0000000..6198940
--- /dev/null
+++ b/vendor/github.com/google/gopacket/doc.go
@@ -0,0 +1,365 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+/*
+Package gopacket provides packet decoding for the Go language.
+
+gopacket contains many sub-packages with additional functionality you may find
+useful, including:
+
+ * layers: You'll probably use this every time. This contains of the logic
+ built into gopacket for decoding packet protocols. Note that all example
+ code below assumes that you have imported both gopacket and
+ gopacket/layers.
+ * pcap: C bindings to use libpcap to read packets off the wire.
+ * pfring: C bindings to use PF_RING to read packets off the wire.
+ * afpacket: C bindings for Linux's AF_PACKET to read packets off the wire.
+ * tcpassembly: TCP stream reassembly
+
+Also, if you're looking to dive right into code, see the examples subdirectory
+for numerous simple binaries built using gopacket libraries.
+
+Basic Usage
+
+gopacket takes in packet data as a []byte and decodes it into a packet with
+a non-zero number of "layers". Each layer corresponds to a protocol
+within the bytes. Once a packet has been decoded, the layers of the packet
+can be requested from the packet.
+
+ // Decode a packet
+ packet := gopacket.NewPacket(myPacketData, layers.LayerTypeEthernet, gopacket.Default)
+ // Get the TCP layer from this packet
+ if tcpLayer := packet.Layer(layers.LayerTypeTCP); tcpLayer != nil {
+ fmt.Println("This is a TCP packet!")
+ // Get actual TCP data from this layer
+ tcp, _ := tcpLayer.(*layers.TCP)
+ fmt.Printf("From src port %d to dst port %d\n", tcp.SrcPort, tcp.DstPort)
+ }
+ // Iterate over all layers, printing out each layer type
+ for _, layer := range packet.Layers() {
+ fmt.Println("PACKET LAYER:", layer.LayerType())
+ }
+
+Packets can be decoded from a number of starting points. Many of our base
+types implement Decoder, which allow us to decode packets for which
+we don't have full data.
+
+ // Decode an ethernet packet
+ ethP := gopacket.NewPacket(p1, layers.LayerTypeEthernet, gopacket.Default)
+ // Decode an IPv6 header and everything it contains
+ ipP := gopacket.NewPacket(p2, layers.LayerTypeIPv6, gopacket.Default)
+ // Decode a TCP header and its payload
+ tcpP := gopacket.NewPacket(p3, layers.LayerTypeTCP, gopacket.Default)
+
+
+Reading Packets From A Source
+
+Most of the time, you won't just have a []byte of packet data lying around.
+Instead, you'll want to read packets in from somewhere (file, interface, etc)
+and process them. To do that, you'll want to build a PacketSource.
+
+First, you'll need to construct an object that implements the PacketDataSource
+interface. There are implementations of this interface bundled with gopacket
+in the gopacket/pcap and gopacket/pfring subpackages... see their documentation
+for more information on their usage. Once you have a PacketDataSource, you can
+pass it into NewPacketSource, along with a Decoder of your choice, to create
+a PacketSource.
+
+Once you have a PacketSource, you can read packets from it in multiple ways.
+See the docs for PacketSource for more details. The easiest method is the
+Packets function, which returns a channel, then asynchronously writes new
+packets into that channel, closing the channel if the packetSource hits an
+end-of-file.
+
+ packetSource := ... // construct using pcap or pfring
+ for packet := range packetSource.Packets() {
+ handlePacket(packet) // do something with each packet
+ }
+
+You can change the decoding options of the packetSource by setting fields in
+packetSource.DecodeOptions... see the following sections for more details.
+
+
+Lazy Decoding
+
+gopacket optionally decodes packet data lazily, meaning it
+only decodes a packet layer when it needs to handle a function call.
+
+ // Create a packet, but don't actually decode anything yet
+ packet := gopacket.NewPacket(myPacketData, layers.LayerTypeEthernet, gopacket.Lazy)
+ // Now, decode the packet up to the first IPv4 layer found but no further.
+ // If no IPv4 layer was found, the whole packet will be decoded looking for
+ // it.
+ ip4 := packet.Layer(layers.LayerTypeIPv4)
+ // Decode all layers and return them. The layers up to the first IPv4 layer
+ // are already decoded, and will not require decoding a second time.
+ layers := packet.Layers()
+
+Lazily-decoded packets are not concurrency-safe. Since layers have not all been
+decoded, each call to Layer() or Layers() has the potential to mutate the packet
+in order to decode the next layer. If a packet is used
+in multiple goroutines concurrently, don't use gopacket.Lazy. Then gopacket
+will decode the packet fully, and all future function calls won't mutate the
+object.
+
+
+NoCopy Decoding
+
+By default, gopacket will copy the slice passed to NewPacket and store the
+copy within the packet, so future mutations to the bytes underlying the slice
+don't affect the packet and its layers. If you can guarantee that the
+underlying slice bytes won't be changed, you can use NoCopy to tell
+gopacket.NewPacket, and it'll use the passed-in slice itself.
+
+ // This channel returns new byte slices, each of which points to a new
+ // memory location that's guaranteed immutable for the duration of the
+ // packet.
+ for data := range myByteSliceChannel {
+ p := gopacket.NewPacket(data, layers.LayerTypeEthernet, gopacket.NoCopy)
+ doSomethingWithPacket(p)
+ }
+
+The fastest method of decoding is to use both Lazy and NoCopy, but note from
+the many caveats above that for some implementations either or both may be
+dangerous.
+
+
+Pointers To Known Layers
+
+During decoding, certain layers are stored in the packet as well-known
+layer types. For example, IPv4 and IPv6 are both considered NetworkLayer
+layers, while TCP and UDP are both TransportLayer layers. We support 4
+layers, corresponding to the 4 layers of the TCP/IP layering scheme (roughly
+anagalous to layers 2, 3, 4, and 7 of the OSI model). To access these,
+you can use the packet.LinkLayer, packet.NetworkLayer,
+packet.TransportLayer, and packet.ApplicationLayer functions. Each of
+these functions returns a corresponding interface
+(gopacket.{Link,Network,Transport,Application}Layer). The first three
+provide methods for getting src/dst addresses for that particular layer,
+while the final layer provides a Payload function to get payload data.
+This is helpful, for example, to get payloads for all packets regardless
+of their underlying data type:
+
+ // Get packets from some source
+ for packet := range someSource {
+ if app := packet.ApplicationLayer(); app != nil {
+ if strings.Contains(string(app.Payload()), "magic string") {
+ fmt.Println("Found magic string in a packet!")
+ }
+ }
+ }
+
+A particularly useful layer is ErrorLayer, which is set whenever there's
+an error parsing part of the packet.
+
+ packet := gopacket.NewPacket(myPacketData, layers.LayerTypeEthernet, gopacket.Default)
+ if err := packet.ErrorLayer(); err != nil {
+ fmt.Println("Error decoding some part of the packet:", err)
+ }
+
+Note that we don't return an error from NewPacket because we may have decoded
+a number of layers successfully before running into our erroneous layer. You
+may still be able to get your Ethernet and IPv4 layers correctly, even if
+your TCP layer is malformed.
+
+
+Flow And Endpoint
+
+gopacket has two useful objects, Flow and Endpoint, for communicating in a protocol
+independent manner the fact that a packet is coming from A and going to B.
+The general layer types LinkLayer, NetworkLayer, and TransportLayer all provide
+methods for extracting their flow information, without worrying about the type
+of the underlying Layer.
+
+A Flow is a simple object made up of a set of two Endpoints, one source and one
+destination. It details the sender and receiver of the Layer of the Packet.
+
+An Endpoint is a hashable representation of a source or destination. For
+example, for LayerTypeIPv4, an Endpoint contains the IP address bytes for a v4
+IP packet. A Flow can be broken into Endpoints, and Endpoints can be combined
+into Flows:
+
+ packet := gopacket.NewPacket(myPacketData, layers.LayerTypeEthernet, gopacket.Lazy)
+ netFlow := packet.NetworkLayer().NetworkFlow()
+ src, dst := netFlow.Endpoints()
+ reverseFlow := gopacket.NewFlow(dst, src)
+
+Both Endpoint and Flow objects can be used as map keys, and the equality
+operator can compare them, so you can easily group together all packets
+based on endpoint criteria:
+
+ flows := map[gopacket.Endpoint]chan gopacket.Packet
+ packet := gopacket.NewPacket(myPacketData, layers.LayerTypeEthernet, gopacket.Lazy)
+ // Send all TCP packets to channels based on their destination port.
+ if tcp := packet.Layer(layers.LayerTypeTCP); tcp != nil {
+ flows[tcp.TransportFlow().Dst()] <- packet
+ }
+ // Look for all packets with the same source and destination network address
+ if net := packet.NetworkLayer(); net != nil {
+ src, dst := net.NetworkFlow().Endpoints()
+ if src == dst {
+ fmt.Println("Fishy packet has same network source and dst: %s", src)
+ }
+ }
+ // Find all packets coming from UDP port 1000 to UDP port 500
+ interestingFlow := gopacket.NewFlow(layers.NewUDPPortEndpoint(1000), layers.NewUDPPortEndpoint(500))
+ if t := packet.NetworkLayer(); t != nil && t.TransportFlow() == interestingFlow {
+ fmt.Println("Found that UDP flow I was looking for!")
+ }
+
+For load-balancing purposes, both Flow and Endpoint have FastHash() functions,
+which provide quick, non-cryptographic hashes of their contents. Of particular
+importance is the fact that Flow FastHash() is symmetric: A->B will have the same
+hash as B->A. An example usage could be:
+
+ channels := [8]chan gopacket.Packet
+ for i := 0; i < 8; i++ {
+ channels[i] = make(chan gopacket.Packet)
+ go packetHandler(channels[i])
+ }
+ for packet := range getPackets() {
+ if net := packet.NetworkLayer(); net != nil {
+ channels[int(net.NetworkFlow().FastHash()) & 0x7] <- packet
+ }
+ }
+
+This allows us to split up a packet stream while still making sure that each
+stream sees all packets for a flow (and its bidirectional opposite).
+
+
+Implementing Your Own Decoder
+
+If your network has some strange encapsulation, you can implement your own
+decoder. In this example, we handle Ethernet packets which are encapsulated
+in a 4-byte header.
+
+ // Create a layer type, should be unique and high, so it doesn't conflict,
+ // giving it a name and a decoder to use.
+ var MyLayerType = gopacket.RegisterLayerType(12345, gopacket.LayerTypeMetadata{Name: "MyLayerType", Decoder: gopacket.DecodeFunc(decodeMyLayer)})
+
+ // Implement my layer
+ type MyLayer struct {
+ StrangeHeader []byte
+ payload []byte
+ }
+ func (m MyLayer) LayerType() gopacket.LayerType { return MyLayerType }
+ func (m MyLayer) LayerContents() []byte { return m.StrangeHeader }
+ func (m MyLayer) LayerPayload() []byte { return m.payload }
+
+ // Now implement a decoder... this one strips off the first 4 bytes of the
+ // packet.
+ func decodeMyLayer(data []byte, p gopacket.PacketBuilder) error {
+ // Create my layer
+ p.AddLayer(&MyLayer{data[:4], data[4:]})
+ // Determine how to handle the rest of the packet
+ return p.NextDecoder(layers.LayerTypeEthernet)
+ }
+
+ // Finally, decode your packets:
+ p := gopacket.NewPacket(data, MyLayerType, gopacket.Lazy)
+
+See the docs for Decoder and PacketBuilder for more details on how coding
+decoders works, or look at RegisterLayerType and RegisterEndpointType to see how
+to add layer/endpoint types to gopacket.
+
+
+Fast Decoding With DecodingLayerParser
+
+TLDR: DecodingLayerParser takes about 10% of the time as NewPacket to decode
+packet data, but only for known packet stacks.
+
+Basic decoding using gopacket.NewPacket or PacketSource.Packets is somewhat slow
+due to its need to allocate a new packet and every respective layer. It's very
+versatile and can handle all known layer types, but sometimes you really only
+care about a specific set of layers regardless, so that versatility is wasted.
+
+DecodingLayerParser avoids memory allocation altogether by decoding packet
+layers directly into preallocated objects, which you can then reference to get
+the packet's information. A quick example:
+
+ func main() {
+ var eth layers.Ethernet
+ var ip4 layers.IPv4
+ var ip6 layers.IPv6
+ var tcp layers.TCP
+ parser := gopacket.NewDecodingLayerParser(layers.LayerTypeEthernet, &eth, &ip4, &ip6, &tcp)
+ decoded := []gopacket.LayerType{}
+ for packetData := range somehowGetPacketData() {
+ err := parser.DecodeLayers(packetData, &decoded)
+ for _, layerType := range decoded {
+ switch layerType {
+ case layers.LayerTypeIPv6:
+ fmt.Println(" IP6 ", ip6.SrcIP, ip6.DstIP)
+ case layers.LayerTypeIPv4:
+ fmt.Println(" IP4 ", ip4.SrcIP, ip4.DstIP)
+ }
+ }
+ }
+ }
+
+The important thing to note here is that the parser is modifying the passed in
+layers (eth, ip4, ip6, tcp) instead of allocating new ones, thus greatly
+speeding up the decoding process. It's even branching based on layer type...
+it'll handle an (eth, ip4, tcp) or (eth, ip6, tcp) stack. However, it won't
+handle any other type... since no other decoders were passed in, an (eth, ip4,
+udp) stack will stop decoding after ip4, and only pass back [LayerTypeEthernet,
+LayerTypeIPv4] through the 'decoded' slice (along with an error saying it can't
+decode a UDP packet).
+
+Unfortunately, not all layers can be used by DecodingLayerParser... only those
+implementing the DecodingLayer interface are usable. Also, it's possible to
+create DecodingLayers that are not themselves Layers... see
+layers.IPv6ExtensionSkipper for an example of this.
+
+
+Creating Packet Data
+
+As well as offering the ability to decode packet data, gopacket will allow you
+to create packets from scratch, as well. A number of gopacket layers implement
+the SerializableLayer interface; these layers can be serialized to a []byte in
+the following manner:
+
+ ip := &layers.IPv4{
+ SrcIP: net.IP{1, 2, 3, 4},
+ DstIP: net.IP{5, 6, 7, 8},
+ // etc...
+ }
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{} // See SerializeOptions for more details.
+ err := ip.SerializeTo(&buf, opts)
+ if err != nil { panic(err) }
+ fmt.Println(buf.Bytes()) // prints out a byte slice containing the serialized IPv4 layer.
+
+SerializeTo PREPENDS the given layer onto the SerializeBuffer, and they treat
+the current buffer's Bytes() slice as the payload of the serializing layer.
+Therefore, you can serialize an entire packet by serializing a set of layers in
+reverse order (Payload, then TCP, then IP, then Ethernet, for example). The
+SerializeBuffer's SerializeLayers function is a helper that does exactly that.
+
+To generate a (empty and useless, because no fields are set)
+Ethernet(IPv4(TCP(Payload))) packet, for example, you can run:
+
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{}
+ gopacket.SerializeLayers(buf, opts,
+ &layers.Ethernet{},
+ &layers.IPv4{},
+ &layers.TCP{},
+ gopacket.Payload([]byte{1, 2, 3, 4}))
+ packetData := buf.Bytes()
+
+A Final Note
+
+If you use gopacket, you'll almost definitely want to make sure gopacket/layers
+is imported, since when imported it sets all the LayerType variables and fills
+in a lot of interesting variables/maps (DecodersByLayerName, etc). Therefore,
+it's recommended that even if you don't use any layers functions directly, you still import with:
+
+ import (
+ _ "github.com/google/gopacket/layers"
+ )
+*/
+package gopacket
diff --git a/vendor/github.com/google/gopacket/dumpcommand/tcpdump.go b/vendor/github.com/google/gopacket/dumpcommand/tcpdump.go
new file mode 100644
index 0000000..2d35722
--- /dev/null
+++ b/vendor/github.com/google/gopacket/dumpcommand/tcpdump.go
@@ -0,0 +1,119 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// Package dumpcommand implements a run function for pfdump and pcapdump
+// with many similar flags/features to tcpdump. This code is split out seperate
+// from data sources (pcap/pfring) so it can be used by both.
+package dumpcommand
+
+import (
+ "flag"
+ "fmt"
+ "log"
+ "os"
+ "time"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/ip4defrag"
+ "github.com/google/gopacket/layers" // pulls in all layers decoders
+)
+
+var (
+ print = flag.Bool("print", true, "Print out packets, if false only prints out statistics")
+ maxcount = flag.Int("c", -1, "Only grab this many packets, then exit")
+ decoder = flag.String("decoder", "Ethernet", "Name of the decoder to use")
+ dump = flag.Bool("X", false, "If true, dump very verbose info on each packet")
+ statsevery = flag.Int("stats", 1000, "Output statistics every N packets")
+ printErrors = flag.Bool("errors", false, "Print out packet dumps of decode errors, useful for checking decoders against live traffic")
+ lazy = flag.Bool("lazy", false, "If true, do lazy decoding")
+ defrag = flag.Bool("defrag", false, "If true, do IPv4 defrag")
+)
+
+func Run(src gopacket.PacketDataSource) {
+ if !flag.Parsed() {
+ log.Fatalln("Run called without flags.Parse() being called")
+ }
+ var dec gopacket.Decoder
+ var ok bool
+ if dec, ok = gopacket.DecodersByLayerName[*decoder]; !ok {
+ log.Fatalln("No decoder named", *decoder)
+ }
+ source := gopacket.NewPacketSource(src, dec)
+ source.Lazy = *lazy
+ source.NoCopy = true
+ source.DecodeStreamsAsDatagrams = true
+ fmt.Fprintln(os.Stderr, "Starting to read packets")
+ count := 0
+ bytes := int64(0)
+ start := time.Now()
+ errors := 0
+ truncated := 0
+ layertypes := map[gopacket.LayerType]int{}
+ defragger := ip4defrag.NewIPv4Defragmenter()
+
+ for packet := range source.Packets() {
+ count++
+ bytes += int64(len(packet.Data()))
+
+ // defrag the IPv4 packet if required
+ if *defrag {
+ ip4Layer := packet.Layer(layers.LayerTypeIPv4)
+ if ip4Layer == nil {
+ continue
+ }
+ ip4 := ip4Layer.(*layers.IPv4)
+ l := ip4.Length
+
+ newip4, err := defragger.DefragIPv4(ip4)
+ if err != nil {
+ log.Fatalln("Error while de-fragmenting", err)
+ } else if newip4 == nil {
+ continue // packet fragment, we don't have whole packet yet.
+ }
+ if newip4.Length != l {
+ fmt.Printf("Decoding re-assembled packet: %s\n", newip4.NextLayerType())
+ pb, ok := packet.(gopacket.PacketBuilder)
+ if !ok {
+ panic("Not a PacketBuilder")
+ }
+ nextDecoder := newip4.NextLayerType()
+ nextDecoder.Decode(newip4.Payload, pb)
+ }
+ }
+
+ if *dump {
+ fmt.Println(packet.Dump())
+ } else if *print {
+ fmt.Println(packet)
+ }
+ if !*lazy || *print || *dump { // if we've already decoded all layers...
+ for _, layer := range packet.Layers() {
+ layertypes[layer.LayerType()]++
+ }
+ if packet.Metadata().Truncated {
+ truncated++
+ }
+ if errLayer := packet.ErrorLayer(); errLayer != nil {
+ errors++
+ if *printErrors {
+ fmt.Println("Error:", errLayer.Error())
+ fmt.Println("--- Packet ---")
+ fmt.Println(packet.Dump())
+ }
+ }
+ }
+ done := *maxcount > 0 && count >= *maxcount
+ if count%*statsevery == 0 || done {
+ fmt.Fprintf(os.Stderr, "Processed %v packets (%v bytes) in %v, %v errors and %v truncated packets\n", count, bytes, time.Since(start), errors, truncated)
+ if len(layertypes) > 0 {
+ fmt.Fprintf(os.Stderr, "Layer types seen: %+v\n", layertypes)
+ }
+ }
+ if done {
+ break
+ }
+ }
+}
diff --git a/vendor/github.com/google/gopacket/examples/arpscan/arpscan.go b/vendor/github.com/google/gopacket/examples/arpscan/arpscan.go
new file mode 100644
index 0000000..1a0e33e
--- /dev/null
+++ b/vendor/github.com/google/gopacket/examples/arpscan/arpscan.go
@@ -0,0 +1,188 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// arpscan implements ARP scanning of all interfaces' local networks using
+// gopacket and its subpackages. This example shows, among other things:
+// * Generating and sending packet data
+// * Reading in packet data and interpreting it
+// * Use of the 'pcap' subpackage for reading/writing
+package main
+
+import (
+ "bytes"
+ "encoding/binary"
+ "errors"
+ "log"
+ "net"
+ "sync"
+ "time"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+ "github.com/google/gopacket/pcap"
+)
+
+func main() {
+ // Get a list of all interfaces.
+ ifaces, err := net.Interfaces()
+ if err != nil {
+ panic(err)
+ }
+
+ var wg sync.WaitGroup
+ for _, iface := range ifaces {
+ wg.Add(1)
+ // Start up a scan on each interface.
+ go func(iface net.Interface) {
+ defer wg.Done()
+ if err := scan(&iface); err != nil {
+ log.Printf("interface %v: %v", iface.Name, err)
+ }
+ }(iface)
+ }
+ // Wait for all interfaces' scans to complete. They'll try to run
+ // forever, but will stop on an error, so if we get past this Wait
+ // it means all attempts to write have failed.
+ wg.Wait()
+}
+
+// scan scans an individual interface's local network for machines using ARP requests/replies.
+//
+// scan loops forever, sending packets out regularly. It returns an error if
+// it's ever unable to write a packet.
+func scan(iface *net.Interface) error {
+ // We just look for IPv4 addresses, so try to find if the interface has one.
+ var addr *net.IPNet
+ if addrs, err := iface.Addrs(); err != nil {
+ return err
+ } else {
+ for _, a := range addrs {
+ if ipnet, ok := a.(*net.IPNet); ok {
+ if ip4 := ipnet.IP.To4(); ip4 != nil {
+ addr = &net.IPNet{
+ IP: ip4,
+ Mask: ipnet.Mask[len(ipnet.Mask)-4:],
+ }
+ break
+ }
+ }
+ }
+ }
+ // Sanity-check that the interface has a good address.
+ if addr == nil {
+ return errors.New("no good IP network found")
+ } else if addr.IP[0] == 127 {
+ return errors.New("skipping localhost")
+ } else if addr.Mask[0] != 0xff || addr.Mask[1] != 0xff {
+ return errors.New("mask means network is too large")
+ }
+ log.Printf("Using network range %v for interface %v", addr, iface.Name)
+
+ // Open up a pcap handle for packet reads/writes.
+ handle, err := pcap.OpenLive(iface.Name, 65536, true, pcap.BlockForever)
+ if err != nil {
+ return err
+ }
+ defer handle.Close()
+
+ // Start up a goroutine to read in packet data.
+ stop := make(chan struct{})
+ go readARP(handle, iface, stop)
+ defer close(stop)
+ for {
+ // Write our scan packets out to the handle.
+ if err := writeARP(handle, iface, addr); err != nil {
+ log.Printf("error writing packets on %v: %v", iface.Name, err)
+ return err
+ }
+ // We don't know exactly how long it'll take for packets to be
+ // sent back to us, but 10 seconds should be more than enough
+ // time ;)
+ time.Sleep(10 * time.Second)
+ }
+}
+
+// readARP watches a handle for incoming ARP responses we might care about, and prints them.
+//
+// readARP loops until 'stop' is closed.
+func readARP(handle *pcap.Handle, iface *net.Interface, stop chan struct{}) {
+ src := gopacket.NewPacketSource(handle, layers.LayerTypeEthernet)
+ in := src.Packets()
+ for {
+ var packet gopacket.Packet
+ select {
+ case <-stop:
+ return
+ case packet = <-in:
+ arpLayer := packet.Layer(layers.LayerTypeARP)
+ if arpLayer == nil {
+ continue
+ }
+ arp := arpLayer.(*layers.ARP)
+ if arp.Operation != layers.ARPReply || bytes.Equal([]byte(iface.HardwareAddr), arp.SourceHwAddress) {
+ // This is a packet I sent.
+ continue
+ }
+ // Note: we might get some packets here that aren't responses to ones we've sent,
+ // if for example someone else sends US an ARP request. Doesn't much matter, though...
+ // all information is good information :)
+ log.Printf("IP %v is at %v", net.IP(arp.SourceProtAddress), net.HardwareAddr(arp.SourceHwAddress))
+ }
+ }
+}
+
+// writeARP writes an ARP request for each address on our local network to the
+// pcap handle.
+func writeARP(handle *pcap.Handle, iface *net.Interface, addr *net.IPNet) error {
+ // Set up all the layers' fields we can.
+ eth := layers.Ethernet{
+ SrcMAC: iface.HardwareAddr,
+ DstMAC: net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
+ EthernetType: layers.EthernetTypeARP,
+ }
+ arp := layers.ARP{
+ AddrType: layers.LinkTypeEthernet,
+ Protocol: layers.EthernetTypeIPv4,
+ HwAddressSize: 6,
+ ProtAddressSize: 4,
+ Operation: layers.ARPRequest,
+ SourceHwAddress: []byte(iface.HardwareAddr),
+ SourceProtAddress: []byte(addr.IP),
+ DstHwAddress: []byte{0, 0, 0, 0, 0, 0},
+ }
+ // Set up buffer and options for serialization.
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{
+ FixLengths: true,
+ ComputeChecksums: true,
+ }
+ // Send one packet for every address.
+ for _, ip := range ips(addr) {
+ arp.DstProtAddress = []byte(ip)
+ gopacket.SerializeLayers(buf, opts, &eth, &arp)
+ if err := handle.WritePacketData(buf.Bytes()); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+// ips is a simple and not very good method for getting all IPv4 addresses from a
+// net.IPNet. It returns all IPs it can over the channel it sends back, closing
+// the channel when done.
+func ips(n *net.IPNet) (out []net.IP) {
+ num := binary.BigEndian.Uint32([]byte(n.IP))
+ mask := binary.BigEndian.Uint32([]byte(n.Mask))
+ num &= mask
+ for mask < 0xffffffff {
+ var buf [4]byte
+ binary.BigEndian.PutUint32(buf[:], num)
+ out = append(out, net.IP(buf[:]))
+ mask += 1
+ num += 1
+ }
+ return
+}
diff --git a/vendor/github.com/google/gopacket/examples/bidirectional/main.go b/vendor/github.com/google/gopacket/examples/bidirectional/main.go
new file mode 100644
index 0000000..4b0b240
--- /dev/null
+++ b/vendor/github.com/google/gopacket/examples/bidirectional/main.go
@@ -0,0 +1,192 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// This binary provides an example of connecting up bidirectional streams from
+// the unidirectional streams provided by gopacket/tcpassembly.
+package main
+
+import (
+ "flag"
+ "fmt"
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/examples/util"
+ "github.com/google/gopacket/layers"
+ "github.com/google/gopacket/pcap"
+ "github.com/google/gopacket/tcpassembly"
+ "log"
+ "time"
+)
+
+var iface = flag.String("i", "eth0", "Interface to get packets from")
+var snaplen = flag.Int("s", 16<<10, "SnapLen for pcap packet capture")
+var filter = flag.String("f", "tcp", "BPF filter for pcap")
+var logAllPackets = flag.Bool("v", false, "Logs every packet in great detail")
+
+// key is used to map bidirectional streams to each other.
+type key struct {
+ net, transport gopacket.Flow
+}
+
+// String prints out the key in a human-readable fashion.
+func (k key) String() string {
+ return fmt.Sprintf("%v:%v", k.net, k.transport)
+}
+
+// timeout is the length of time to wait befor flushing connections and
+// bidirectional stream pairs.
+const timeout time.Duration = time.Minute * 5
+
+// myStream implements tcpassembly.Stream
+type myStream struct {
+ bytes int64 // total bytes seen on this stream.
+ bidi *bidi // maps to my bidirectional twin.
+ done bool // if true, we've seen the last packet we're going to for this stream.
+}
+
+// bidi stores each unidirectional side of a bidirectional stream.
+//
+// When a new stream comes in, if we don't have an opposite stream, a bidi is
+// created with 'a' set to the new stream. If we DO have an opposite stream,
+// 'b' is set to the new stream.
+type bidi struct {
+ key key // Key of the first stream, mostly for logging.
+ a, b *myStream // the two bidirectional streams.
+ lastPacketSeen time.Time // last time we saw a packet from either stream.
+}
+
+// myFactory implements tcpassmebly.StreamFactory
+type myFactory struct {
+ // bidiMap maps keys to bidirectional stream pairs.
+ bidiMap map[key]*bidi
+}
+
+// New handles creating a new tcpassembly.Stream.
+func (f *myFactory) New(netFlow, tcpFlow gopacket.Flow) tcpassembly.Stream {
+ // Create a new stream.
+ s := &myStream{}
+
+ // Find the bidi bidirectional struct for this stream, creating a new one if
+ // one doesn't already exist in the map.
+ k := key{netFlow, tcpFlow}
+ bd := f.bidiMap[k]
+ if bd == nil {
+ bd = &bidi{a: s, key: k}
+ log.Printf("[%v] created first side of bidirectional stream", bd.key)
+ // Register bidirectional with the reverse key, so the matching stream going
+ // the other direction will find it.
+ f.bidiMap[key{netFlow.Reverse(), tcpFlow.Reverse()}] = bd
+ } else {
+ log.Printf("[%v] found second side of bidirectional stream", bd.key)
+ bd.b = s
+ // Clear out the bidi we're using from the map, just in case.
+ delete(f.bidiMap, k)
+ }
+ s.bidi = bd
+ return s
+}
+
+// emptyStream is used to finish bidi that only have one stream, in
+// collectOldStreams.
+var emptyStream = &myStream{done: true}
+
+// collectOldStreams finds any streams that haven't received a packet within
+// 'timeout', and sets/finishes the 'b' stream inside them. The 'a' stream may
+// still receive packets after this.
+func (f *myFactory) collectOldStreams() {
+ cutoff := time.Now().Add(-timeout)
+ for k, bd := range f.bidiMap {
+ if bd.lastPacketSeen.Before(cutoff) {
+ log.Printf("[%v] timing out old stream", bd.key)
+ bd.b = emptyStream // stub out b with an empty stream.
+ delete(f.bidiMap, k) // remove it from our map.
+ bd.maybeFinish() // if b was the last stream we were waiting for, finish up.
+ }
+ }
+}
+
+// Reassembled handles reassembled TCP stream data.
+func (s *myStream) Reassembled(rs []tcpassembly.Reassembly) {
+ for _, r := range rs {
+ // For now, we'll simply count the bytes on each side of the TCP stream.
+ s.bytes += int64(len(r.Bytes))
+ if r.Skip > 0 {
+ s.bytes += int64(r.Skip)
+ }
+ // Mark that we've received new packet data.
+ // We could just use time.Now, but by using r.Seen we handle the case
+ // where packets are being read from a file and could be very old.
+ if s.bidi.lastPacketSeen.After(r.Seen) {
+ s.bidi.lastPacketSeen = r.Seen
+ }
+ }
+}
+
+// ReassemblyComplete marks this stream as finished.
+func (s *myStream) ReassemblyComplete() {
+ s.done = true
+ s.bidi.maybeFinish()
+}
+
+// maybeFinish will wait until both directions are complete, then print out
+// stats.
+func (bd *bidi) maybeFinish() {
+ switch {
+ case bd.a == nil:
+ log.Fatalf("[%v] a should always be non-nil, since it's set when bidis are created", bd.key)
+ case !bd.a.done:
+ log.Printf("[%v] still waiting on first stream", bd.key)
+ case bd.b == nil:
+ log.Printf("[%v] no second stream yet", bd.key)
+ case !bd.b.done:
+ log.Printf("[%v] still waiting on second stream", bd.key)
+ default:
+ log.Printf("[%v] FINISHED, bytes: %d tx, %d rx", bd.key, bd.a.bytes, bd.b.bytes)
+ }
+}
+
+func main() {
+ defer util.Run()()
+ log.Printf("starting capture on interface %q", *iface)
+ // Set up pcap packet capture
+ handle, err := pcap.OpenLive(*iface, int32(*snaplen), true, pcap.BlockForever)
+ if err != nil {
+ panic(err)
+ }
+ if err := handle.SetBPFFilter(*filter); err != nil {
+ panic(err)
+ }
+
+ // Set up assembly
+ streamFactory := &myFactory{bidiMap: make(map[key]*bidi)}
+ streamPool := tcpassembly.NewStreamPool(streamFactory)
+ assembler := tcpassembly.NewAssembler(streamPool)
+
+ log.Println("reading in packets")
+ // Read in packets, pass to assembler.
+ packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
+ packets := packetSource.Packets()
+ ticker := time.Tick(timeout / 4)
+ for {
+ select {
+ case packet := <-packets:
+ if *logAllPackets {
+ log.Println(packet)
+ }
+ if packet.NetworkLayer() == nil || packet.TransportLayer() == nil || packet.TransportLayer().LayerType() != layers.LayerTypeTCP {
+ log.Println("Unusable packet")
+ continue
+ }
+ tcp := packet.TransportLayer().(*layers.TCP)
+ assembler.AssembleWithTimestamp(packet.NetworkLayer().NetworkFlow(), tcp, packet.Metadata().Timestamp)
+
+ case <-ticker:
+ // Every minute, flush connections that haven't seen activity in the past minute.
+ log.Println("---- FLUSHING ----")
+ assembler.FlushOlderThan(time.Now().Add(-timeout))
+ streamFactory.collectOldStreams()
+ }
+ }
+}
diff --git a/vendor/github.com/google/gopacket/examples/bytediff/bytediff.png b/vendor/github.com/google/gopacket/examples/bytediff/bytediff.png
new file mode 100644
index 0000000..5aa3c8a
--- /dev/null
+++ b/vendor/github.com/google/gopacket/examples/bytediff/bytediff.png
Binary files differ
diff --git a/vendor/github.com/google/gopacket/examples/bytediff/main.go b/vendor/github.com/google/gopacket/examples/bytediff/main.go
new file mode 100644
index 0000000..2a4c11b
--- /dev/null
+++ b/vendor/github.com/google/gopacket/examples/bytediff/main.go
@@ -0,0 +1,96 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// This binary shows how to display byte differences to users via the bytediff
+// library.
+package main
+
+import (
+ "fmt"
+ "github.com/google/gopacket/bytediff"
+)
+
+var sliceA = []byte{
+ 0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x20, 0xbc, 0x30, 0x5b, 0xe8, 0xd3, 0x49,
+ 0x08, 0x00, 0x45, 0x00, 0x01, 0xa4, 0x39, 0xdf, 0x40, 0x00, 0x40, 0x06,
+ 0x55, 0x5a, 0xac, 0x11, 0x51, 0x49, 0xad, 0xde, 0xfe, 0xe1, 0xc5, 0xf7,
+ 0x00, 0x50, 0xc5, 0x7e, 0x0e, 0x48, 0x49, 0x07, 0x42, 0x32, 0x80, 0x18,
+ 0x00, 0x73, 0x9a, 0x8f, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0x03, 0x77,
+ 0x37, 0x9c, 0x42, 0x77, 0x5e, 0x3a, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x20,
+ 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f,
+ 0x73, 0x74, 0x3a, 0x20, 0x77, 0x77, 0x77, 0x2e, 0x66, 0x69, 0x73, 0x68,
+ 0x2e, 0x63, 0x6f, 0x6d, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x6b, 0x65, 0x65, 0x70, 0x2d, 0x61,
+ 0x6c, 0x69, 0x76, 0x65, 0x0d, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x41,
+ 0x67, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x4d, 0x6f, 0x7a, 0x69, 0x6c, 0x6c,
+ 0x61, 0x2f, 0x35, 0x2e, 0x30, 0x20, 0x28, 0x58, 0x31, 0x31, 0x3b, 0x20,
+ 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x20, 0x78, 0x38, 0x36, 0x5f, 0x36, 0x34,
+ 0x29, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x57, 0x65, 0x62, 0x4b, 0x69,
+ 0x74, 0x2f, 0x35, 0x33, 0x35, 0x2e, 0x32, 0x20, 0x28, 0x4b, 0x48, 0x54,
+ 0x4d, 0x4c, 0x2c, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x47, 0x65, 0x63,
+ 0x6b, 0x6f, 0x29, 0x20, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x2f, 0x31,
+ 0x35, 0x2e, 0x30, 0x2e, 0x38, 0x37, 0x34, 0x2e, 0x31, 0x32, 0x31, 0x20,
+ 0x53, 0x61, 0x66, 0x61, 0x72, 0x69, 0x2f, 0x35, 0x2e, 0x31,
+ 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x74, 0x65,
+ 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x68, 0x74, 0x6d,
+ 0x6c, 0x2b, 0x78, 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x6d, 0x6c, 0x3b, 0x71, 0x3d,
+ 0x30, 0x2e, 0x39, 0x2c, 0x2a, 0x2f, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e,
+ 0x38, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x45, 0x6e,
+ 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x67, 0x7a, 0x69, 0x70,
+ 0x2c, 0x64, 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x73, 0x64, 0x63,
+ 0x68, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x4c, 0x61,
+ 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x65, 0x6e, 0x2d, 0x55,
+ 0x53, 0x2c, 0x65, 0x6e, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x38, 0x0d, 0x0a,
+ 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x43, 0x68, 0x61, 0x72, 0x73,
+ 0x65, 0x74, 0x3a, 0x20, 0x49, 0x53, 0x4f, 0x2d, 0x38, 0x38, 0x35, 0x39,
+ 0x2d, 0x31, 0x2c, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x3b, 0x71, 0x3d, 0x30,
+ 0x2e, 0x37, 0x2c, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x33, 0x0d, 0x0a,
+ 0x0d, 0x0a,
+}
+var sliceB = []byte{
+ 0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x20, 0xbc, 0x30, 0x5b, 0xe8, 0xd3, 0x49,
+ 0x08, 0x00, 0x45, 0x00, 0x01, 0xa4, 0x39, 0xdf, 0x40, 0x00, 0x40, 0x06,
+ 0x55, 0x5a, 0xac, 0x11, 0x51, 0x49, 0xad, 0xde, 0xfe, 0xe1, 0xc5, 0xf7,
+ 0x00, 0x50, 0xc5, 0x7e, 0x0e, 0x48, 0x49, 0x07, 0x42, 0x32, 0x80, 0x18,
+ 0x00, 0x73, 0x9a, 0x8f, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0x03, 0x77,
+ 0x37, 0x9c, 0x42, 0x77, 0x5e, 0x3a, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x20,
+ 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f,
+ 0x73, 0x74, 0x3a, 0x20, 0x77, 0x77, 0x77, 0x2e, 0x66, 0x69, 0x73, 0x68,
+ 0x2e, 0x63, 0x6f, 0x6d, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
+ 0x6c, 0x69, 0x76, 0x65, 0x0d, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x41,
+ 0x67, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x4d, 0x6f, 0x7a, 0x69, 0x6c, 0x6c,
+ 0x61, 0x2f, 0x35, 0x2e, 0x30, 0x20, 0x28, 0x58, 0x31, 0x31, 0x3b, 0x20,
+ 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x20, 0x78, 0x38, 0x36, 0x5f, 0x36, 0x34,
+ 0x29, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x57, 0x65, 0x62, 0x4b, 0x69,
+ 0x74, 0x2f, 0x35, 0x33, 0x35, 0x2e, 0x32, 0x20, 0x28, 0x4b, 0x48, 0x54,
+ 0x4d, 0x4c, 0x2c, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x47, 0x65, 0x63,
+ 0x6b, 0x6f, 0x29, 0x20, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x2f, 0x31,
+ 0x35, 0x2e, 0x30, 0x2e, 0x38, 0x37, 0x34, 0x2e, 0x31, 0x32, 0x31, 0x20,
+ 0x53, 0x61, 0x66, 0x61, 0x72, 0x69, 0x2f, 0x35, 0x33, 0x35, 0x2e, 0x32,
+ 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x74, 0x65,
+ 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x68, 0x74, 0x6d,
+ 0x6c, 0x2b, 0x78, 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x6d, 0x6c, 0x3b, 0x71, 0x3d,
+ 0x30, 0x2e, 0x39, 0x2c, 0x2a, 0x2f, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e,
+ 0x38, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x45, 0x6e,
+ 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x67, 0x7a, 0x69, 0x70,
+ 0x2c, 0x64, 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x73, 0x64, 0x63,
+ 0x68, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x4c, 0x61,
+ 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x65, 0x6e, 0x2d, 0x55,
+ 0x53, 0x2c, 0x65, 0x6e, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x38, 0x0d, 0x0a,
+ 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x43, 0x68, 0x61, 0x72, 0x73,
+ 0x65, 0x74, 0x3a, 0x20, 0x49, 0x53, 0x4f, 0x2e, 0x39, 0x55, 0x35, 0x39,
+ 0x2d, 0x31, 0x2c, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x3b, 0x71, 0x3d, 0x30,
+ 0x2e, 0x37, 0x2c, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x33, 0x0d, 0x0a,
+ 0x0d, 0x0a,
+}
+
+func main() {
+ fmt.Println(bytediff.BashOutput.String(bytediff.Diff(sliceA, sliceB)))
+}
diff --git a/vendor/github.com/google/gopacket/examples/httpassembly/main.go b/vendor/github.com/google/gopacket/examples/httpassembly/main.go
new file mode 100644
index 0000000..02af21e
--- /dev/null
+++ b/vendor/github.com/google/gopacket/examples/httpassembly/main.go
@@ -0,0 +1,127 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// This binary provides sample code for using the gopacket TCP assembler and TCP
+// stream reader. It reads packets off the wire and reconstructs HTTP requests
+// it sees, logging them.
+package main
+
+import (
+ "bufio"
+ "flag"
+ "io"
+ "log"
+ "net/http"
+ "time"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/examples/util"
+ "github.com/google/gopacket/layers"
+ "github.com/google/gopacket/pcap"
+ "github.com/google/gopacket/tcpassembly"
+ "github.com/google/gopacket/tcpassembly/tcpreader"
+)
+
+var iface = flag.String("i", "eth0", "Interface to get packets from")
+var fname = flag.String("r", "", "Filename to read from, overrides -i")
+var snaplen = flag.Int("s", 1600, "SnapLen for pcap packet capture")
+var filter = flag.String("f", "tcp and dst port 80", "BPF filter for pcap")
+var logAllPackets = flag.Bool("v", false, "Logs every packet in great detail")
+
+// Build a simple HTTP request parser using tcpassembly.StreamFactory and tcpassembly.Stream interfaces
+
+// httpStreamFactory implements tcpassembly.StreamFactory
+type httpStreamFactory struct{}
+
+// httpStream will handle the actual decoding of http requests.
+type httpStream struct {
+ net, transport gopacket.Flow
+ r tcpreader.ReaderStream
+}
+
+func (h *httpStreamFactory) New(net, transport gopacket.Flow) tcpassembly.Stream {
+ hstream := &httpStream{
+ net: net,
+ transport: transport,
+ r: tcpreader.NewReaderStream(),
+ }
+ go hstream.run() // Important... we must guarantee that data from the reader stream is read.
+
+ // ReaderStream implements tcpassembly.Stream, so we can return a pointer to it.
+ return &hstream.r
+}
+
+func (h *httpStream) run() {
+ buf := bufio.NewReader(&h.r)
+ for {
+ req, err := http.ReadRequest(buf)
+ if err == io.EOF {
+ // We must read until we see an EOF... very important!
+ return
+ } else if err != nil {
+ log.Println("Error reading stream", h.net, h.transport, ":", err)
+ } else {
+ bodyBytes := tcpreader.DiscardBytesToEOF(req.Body)
+ req.Body.Close()
+ log.Println("Received request from stream", h.net, h.transport, ":", req, "with", bodyBytes, "bytes in request body")
+ }
+ }
+}
+
+func main() {
+ defer util.Run()()
+ var handle *pcap.Handle
+ var err error
+
+ // Set up pcap packet capture
+ if *fname != "" {
+ log.Printf("Reading from pcap dump %q", *fname)
+ handle, err = pcap.OpenOffline(*fname)
+ } else {
+ log.Printf("Starting capture on interface %q", *iface)
+ handle, err = pcap.OpenLive(*iface, int32(*snaplen), true, pcap.BlockForever)
+ }
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ if err := handle.SetBPFFilter(*filter); err != nil {
+ log.Fatal(err)
+ }
+
+ // Set up assembly
+ streamFactory := &httpStreamFactory{}
+ streamPool := tcpassembly.NewStreamPool(streamFactory)
+ assembler := tcpassembly.NewAssembler(streamPool)
+
+ log.Println("reading in packets")
+ // Read in packets, pass to assembler.
+ packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
+ packets := packetSource.Packets()
+ ticker := time.Tick(time.Minute)
+ for {
+ select {
+ case packet := <-packets:
+ // A nil packet indicates the end of a pcap file.
+ if packet == nil {
+ return
+ }
+ if *logAllPackets {
+ log.Println(packet)
+ }
+ if packet.NetworkLayer() == nil || packet.TransportLayer() == nil || packet.TransportLayer().LayerType() != layers.LayerTypeTCP {
+ log.Println("Unusable packet")
+ continue
+ }
+ tcp := packet.TransportLayer().(*layers.TCP)
+ assembler.AssembleWithTimestamp(packet.NetworkLayer().NetworkFlow(), tcp, packet.Metadata().Timestamp)
+
+ case <-ticker:
+ // Every minute, flush connections that haven't seen activity in the past 2 minutes.
+ assembler.FlushOlderThan(time.Now().Add(time.Minute * -2))
+ }
+ }
+}
diff --git a/vendor/github.com/google/gopacket/examples/pcapdump/main.go b/vendor/github.com/google/gopacket/examples/pcapdump/main.go
new file mode 100644
index 0000000..373dee2
--- /dev/null
+++ b/vendor/github.com/google/gopacket/examples/pcapdump/main.go
@@ -0,0 +1,73 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// The pcapdump binary implements a tcpdump-like command line tool with gopacket
+// using pcap as a backend data collection mechanism.
+package main
+
+import (
+ "flag"
+ "fmt"
+ "github.com/google/gopacket/dumpcommand"
+ "github.com/google/gopacket/examples/util"
+ "github.com/google/gopacket/pcap"
+ "log"
+ "os"
+ "strings"
+ "time"
+)
+
+var iface = flag.String("i", "eth0", "Interface to read packets from")
+var fname = flag.String("r", "", "Filename to read from, overrides -i")
+var snaplen = flag.Int("s", 65536, "Snap length (number of bytes max to read per packet")
+var tstype = flag.String("timestamp_type", "", "Type of timestamps to use")
+var promisc = flag.Bool("promisc", true, "Set promiscuous mode")
+
+func main() {
+ defer util.Run()()
+ var handle *pcap.Handle
+ var err error
+ if *fname != "" {
+ if handle, err = pcap.OpenOffline(*fname); err != nil {
+ log.Fatal("PCAP OpenOffline error:", err)
+ }
+ } else {
+ // This is a little complicated because we want to allow all possible options
+ // for creating the packet capture handle... instead of all this you can
+ // just call pcap.OpenLive if you want a simple handle.
+ inactive, err := pcap.NewInactiveHandle(*iface)
+ if err != nil {
+ log.Fatalf("could not create: %v", err)
+ }
+ defer inactive.CleanUp()
+ if err = inactive.SetSnapLen(*snaplen); err != nil {
+ log.Fatalf("could not set snap length: %v", err)
+ } else if err = inactive.SetPromisc(*promisc); err != nil {
+ log.Fatalf("could not set promisc mode: %v", err)
+ } else if err = inactive.SetTimeout(time.Second); err != nil {
+ log.Fatalf("could not set timeout: %v", err)
+ }
+ if *tstype != "" {
+ if t, err := pcap.TimestampSourceFromString(*tstype); err != nil {
+ log.Fatalf("Supported timestamp types: %v", inactive.SupportedTimestamps())
+ } else if err := inactive.SetTimestampSource(t); err != nil {
+ log.Fatalf("Supported timestamp types: %v", inactive.SupportedTimestamps())
+ }
+ }
+ if handle, err = inactive.Activate(); err != nil {
+ log.Fatal("PCAP Activate error:", err)
+ }
+ defer handle.Close()
+ }
+ if len(flag.Args()) > 0 {
+ bpffilter := strings.Join(flag.Args(), " ")
+ fmt.Fprintf(os.Stderr, "Using BPF filter %q\n", bpffilter)
+ if err = handle.SetBPFFilter(bpffilter); err != nil {
+ log.Fatal("BPF filter error:", err)
+ }
+ }
+ dumpcommand.Run(handle)
+}
diff --git a/vendor/github.com/google/gopacket/examples/pcaplay/main.go b/vendor/github.com/google/gopacket/examples/pcaplay/main.go
new file mode 100644
index 0000000..d36d860
--- /dev/null
+++ b/vendor/github.com/google/gopacket/examples/pcaplay/main.go
@@ -0,0 +1,163 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// The pcaplay binary load an offline capture (pcap file) and replay
+// it on the select interface, with an emphasis on packet timing
+package main
+
+import (
+ "flag"
+ "fmt"
+ "io"
+ "log"
+ "os"
+ "strings"
+ "time"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/examples/util"
+ "github.com/google/gopacket/pcap"
+)
+
+var iface = flag.String("i", "eth0", "Interface to write packets to")
+var fname = flag.String("r", "", "Filename to read from")
+var fast = flag.Bool("f", false, "Send each packets as fast as possible")
+
+var lastTS time.Time
+var lastSend time.Time
+
+var start time.Time
+var bytesSent int
+
+func writePacketDelayed(handle *pcap.Handle, buf []byte, ci gopacket.CaptureInfo) {
+ if ci.CaptureLength != ci.Length {
+ // do not write truncated packets
+ return
+ }
+
+ intervalInCapture := ci.Timestamp.Sub(lastTS)
+ elapsedTime := time.Since(lastSend)
+
+ if (intervalInCapture > elapsedTime) && !lastSend.IsZero() {
+ time.Sleep(intervalInCapture - elapsedTime)
+ }
+
+ lastSend = time.Now()
+ writePacket(handle, buf)
+ lastTS = ci.Timestamp
+}
+
+func writePacket(handle *pcap.Handle, buf []byte) error {
+ if err := handle.WritePacketData(buf); err != nil {
+ log.Printf("Failed to send packet: %s\n", err)
+ return err
+ }
+ return nil
+}
+
+func pcapInfo(filename string) (start time.Time, end time.Time, packets int, size int) {
+ handleRead, err := pcap.OpenOffline(*fname)
+ if err != nil {
+ log.Fatal("PCAP OpenOffline error (handle to read packet):", err)
+ }
+
+ var previousTs time.Time
+ var deltaTotal time.Duration
+
+ for {
+ data, ci, err := handleRead.ReadPacketData()
+ if err != nil && err != io.EOF {
+ log.Fatal(err)
+ } else if err == io.EOF {
+ break
+ } else {
+
+ if start.IsZero() {
+ start = ci.Timestamp
+ }
+ end = ci.Timestamp
+ packets++
+ size += len(data)
+
+ if previousTs.IsZero() {
+ previousTs = ci.Timestamp
+ } else {
+ deltaTotal += ci.Timestamp.Sub(previousTs)
+ previousTs = ci.Timestamp
+ }
+ }
+ }
+ sec := int(deltaTotal.Seconds())
+ if sec == 0 {
+ sec = 1
+ }
+ fmt.Printf("Avg packet rate %d/s\n", packets/sec)
+ return start, end, packets, size
+}
+
+func main() {
+ defer util.Run()()
+
+ // Sanity checks
+ if *fname == "" {
+ log.Fatal("Need a input file")
+ }
+
+ // Open PCAP file + handle potential BPF Filter
+ handleRead, err := pcap.OpenOffline(*fname)
+ if err != nil {
+ log.Fatal("PCAP OpenOffline error (handle to read packet):", err)
+ }
+ defer handleRead.Close()
+ if len(flag.Args()) > 0 {
+ bpffilter := strings.Join(flag.Args(), " ")
+ fmt.Fprintf(os.Stderr, "Using BPF filter %q\n", bpffilter)
+ if err = handleRead.SetBPFFilter(bpffilter); err != nil {
+ log.Fatal("BPF filter error:", err)
+ }
+ }
+ // Open up a second pcap handle for packet writes.
+ handleWrite, err := pcap.OpenLive(*iface, 65536, true, pcap.BlockForever)
+ if err != nil {
+ log.Fatal("PCAP OpenLive error (handle to write packet):", err)
+ }
+ defer handleWrite.Close()
+
+ start = time.Now()
+ pkt := 0
+ tsStart, tsEnd, packets, size := pcapInfo(*fname)
+
+ // Loop over packets and write them
+ for {
+ data, ci, err := handleRead.ReadPacketData()
+ switch {
+ case err == io.EOF:
+ fmt.Printf("\nFinished in %s", time.Since(start))
+ return
+ case err != nil:
+ log.Printf("Failed to read packet %d: %s\n", pkt, err)
+ default:
+ if *fast {
+ writePacket(handleWrite, data)
+ } else {
+ writePacketDelayed(handleWrite, data, ci)
+ }
+
+ bytesSent += len(data)
+ duration := time.Since(start)
+ pkt++
+
+ if duration > time.Second {
+ rate := bytesSent / int(duration.Seconds())
+ remainingTime := tsEnd.Sub(tsStart) - duration
+ fmt.Printf("\rrate %d kB/sec - sent %d/%d kB - %d/%d packets - remaining time %s",
+ rate/1000, bytesSent/1000, size/1000,
+ pkt, packets, remainingTime)
+ }
+ }
+ }
+
+}
diff --git a/vendor/github.com/google/gopacket/examples/pfdump/main.go b/vendor/github.com/google/gopacket/examples/pfdump/main.go
new file mode 100644
index 0000000..4b3ace6
--- /dev/null
+++ b/vendor/github.com/google/gopacket/examples/pfdump/main.go
@@ -0,0 +1,52 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// The pfdump binary implements a tcpdump-like command line tool with gopacket
+// using pfring as a backend data collection mechanism.
+package main
+
+import (
+ "flag"
+ "fmt"
+ "github.com/google/gopacket/dumpcommand"
+ "github.com/google/gopacket/examples/util"
+ "github.com/google/gopacket/pfring"
+ "log"
+ "os"
+ "strings"
+)
+
+var iface = flag.String("i", "eth0", "Interface to read packets from")
+var snaplen = flag.Int("s", 65536, "Snap length (number of bytes max to read per packet")
+var cluster = flag.Int("cluster", -1, "If >= 0, sets the pfring cluster to this value")
+var clustertype = flag.Int("clustertype", int(pfring.ClusterPerFlow), "Cluster type")
+
+func main() {
+ defer util.Run()()
+ var ring *pfring.Ring
+ var err error
+ if ring, err = pfring.NewRing(*iface, uint32(*snaplen), pfring.FlagPromisc); err != nil {
+ log.Fatalln("pfring ring creation error:", err)
+ }
+ if len(flag.Args()) > 0 {
+ bpffilter := strings.Join(flag.Args(), " ")
+ fmt.Fprintf(os.Stderr, "Using BPF filter %q\n", bpffilter)
+ if err = ring.SetBPFFilter(bpffilter); err != nil {
+ log.Fatalln("BPF filter error:", err)
+ }
+ }
+ if *cluster >= 0 {
+ if err = ring.SetCluster(*cluster, pfring.ClusterType(*clustertype)); err != nil {
+ log.Fatalln("pfring SetCluster error:", err)
+ }
+ }
+ if err = ring.SetSocketMode(pfring.ReadOnly); err != nil {
+ log.Fatalln("pfring SetSocketMode error:", err)
+ } else if err = ring.Enable(); err != nil {
+ log.Fatalln("pfring Enable error:", err)
+ }
+ dumpcommand.Run(ring)
+}
diff --git a/vendor/github.com/google/gopacket/examples/reassemblydump/compare.sh b/vendor/github.com/google/gopacket/examples/reassemblydump/compare.sh
new file mode 100755
index 0000000..671d29f
--- /dev/null
+++ b/vendor/github.com/google/gopacket/examples/reassemblydump/compare.sh
@@ -0,0 +1,103 @@
+#!/bin/bash
+
+# Limitations: if the number extracted files in too big, finding identical
+# files might fail due to '*' in cmdline
+# This would require to split sha256sum symlinks in xx/yyyyy
+
+usage()
+{
+ echo "Usage: $0 <file.pcap> <output-dir>"
+ echo "Compares tcpreassembly against tcpflow"
+ echo ""
+ echo "$@"
+ exit 1
+}
+
+debug() {
+ return # comment me for debug
+ echo "$@"
+}
+
+die()
+{
+ (
+ echo "$@"
+ echo
+ ) >&2
+ exit 1
+}
+
+rename()
+{
+ local path="$1"
+ local filter="$2"
+ find "$path" -type f -name "$filter" -print0 |
+ while IFS= read -r -d $'\0' f; do
+ local sha256="$(sha256sum "$f" | cut -d ' ' -f 1)"
+ local target="$(dirname $f)/../sha256/$sha256"
+ debug "$target → $f"
+ mkdir -p "$(dirname "$target")" || return 1
+ if [ ! -f "$target" ]; then
+ ln -sr "$f" "$target" || return 1
+ fi
+ done
+ return $?
+}
+
+main()
+{
+ local src="$1"
+ local out="$2"
+
+ # TODO: make options
+ local extra=""
+ extra="$extra -debug"
+ extra="$extra -cpuprofile "$out/gopacket/cpu.prof""
+ extra="$extra -memprofile "$out/gopacket/mem.prof""
+
+ [ ! -f "$src" ] && usage "Missing pcap"
+ [ ! -d "$out" ] && ( mkdir "$out" || die "Failed to create $out" )
+
+ mkdir -p "$out/gopacket/all" || die "Failed to create $out/gopacket/all"
+ mkdir -p "$out/tcpflow/all" || die "Faield to create $out/tcpflow/all"
+
+ echo " * Running go reassembly"
+ 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"
+ echo " * Running tcpflow"
+ time tcpflow -e http -r "$src" -o "$out/tcpflow/all" port 80 &> "$out/tcpflow.txt" || die "Failed to run tcpflow. Check $out/tcpflow.txt"
+
+ echo " * Creating sha256sum symlinks for gopacket"
+ rename "$out/gopacket/all" '*' || die "Failed to rename in $out/gopacket"
+ echo " * Creating sha256sum symlinks for tcpflow"
+ rename "$out/tcpflow/all" '*HTTPBODY*' || die "Failed to rename in $out/tcpflow"
+
+ # Remove identical files
+ echo " * Finding identical files"
+ local nb=0
+ mkdir -p "$out/gopacket/sha256-equal"
+ mkdir -p "$out/tcpflow/sha256-equal"
+ for f in "$out/gopacket/sha256/"*; do
+ local f="$(basename "$f")"
+ [ -f "$out/tcpflow/sha256/$f" ] && {
+ debug " $f"
+ mv "$out/gopacket/sha256/$f" "$out/gopacket/sha256-equal"
+ mv "$out/tcpflow/sha256/$f" "$out/tcpflow/sha256-equal"
+ nb=$((nb+1))
+ }
+ done
+ echo " → found $nb files"
+
+ echo " * Diffing {gopacket,tcpflow}/sha256"
+ local rc=0
+ for p in "gopacket" "tcpflow"; do
+ local nb=$(ls -1 "$out/$p/sha256/" | wc -l)
+ if [ $nb -ne 0 ]; then
+ rc=$((rc+1))
+ echo " → $nb files in $out/$p/sha256"
+ fi
+ done
+ return $rc
+}
+
+main "$@"
+exit $?
diff --git a/vendor/github.com/google/gopacket/examples/reassemblydump/main.go b/vendor/github.com/google/gopacket/examples/reassemblydump/main.go
new file mode 100644
index 0000000..9fc3791
--- /dev/null
+++ b/vendor/github.com/google/gopacket/examples/reassemblydump/main.go
@@ -0,0 +1,650 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// The pcapdump binary implements a tcpdump-like command line tool with gopacket
+// using pcap as a backend data collection mechanism.
+package main
+
+import (
+ "bufio"
+ "bytes"
+ "compress/gzip"
+ "encoding/binary"
+ "encoding/hex"
+ "flag"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "log"
+ "net/http"
+ "net/url"
+ "os"
+ "os/signal"
+ "path"
+ "runtime/pprof"
+ "strings"
+ "sync"
+ "time"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/examples/util"
+ "github.com/google/gopacket/ip4defrag"
+ "github.com/google/gopacket/layers" // pulls in all layers decoders
+ "github.com/google/gopacket/pcap"
+ "github.com/google/gopacket/reassembly"
+)
+
+var maxcount = flag.Int("c", -1, "Only grab this many packets, then exit")
+var decoder = flag.String("decoder", "", "Name of the decoder to use (default: guess from capture)")
+var statsevery = flag.Int("stats", 1000, "Output statistics every N packets")
+var lazy = flag.Bool("lazy", false, "If true, do lazy decoding")
+var nodefrag = flag.Bool("nodefrag", false, "If true, do not do IPv4 defrag")
+var checksum = flag.Bool("checksum", false, "Check TCP checksum")
+var nooptcheck = flag.Bool("nooptcheck", false, "Do not check TCP options (useful to ignore MSS on captures with TSO)")
+var ignorefsmerr = flag.Bool("ignorefsmerr", false, "Ignore TCP FSM errors")
+var allowmissinginit = flag.Bool("allowmissinginit", false, "Support streams without SYN/SYN+ACK/ACK sequence")
+var verbose = flag.Bool("verbose", false, "Be verbose")
+var debug = flag.Bool("debug", false, "Display debug information")
+var quiet = flag.Bool("quiet", false, "Be quiet regarding errors")
+
+// http
+var nohttp = flag.Bool("nohttp", false, "Disable HTTP parsing")
+var output = flag.String("output", "", "Path to create file for HTTP 200 OK responses")
+var writeincomplete = flag.Bool("writeincomplete", false, "Write incomplete response")
+
+var hexdump = flag.Bool("dump", false, "Dump HTTP request/response as hex")
+var hexdumppkt = flag.Bool("dumppkt", false, "Dump packet as hex")
+
+// capture
+var iface = flag.String("i", "eth0", "Interface to read packets from")
+var fname = flag.String("r", "", "Filename to read from, overrides -i")
+var snaplen = flag.Int("s", 65536, "Snap length (number of bytes max to read per packet")
+var tstype = flag.String("timestamp_type", "", "Type of timestamps to use")
+var promisc = flag.Bool("promisc", true, "Set promiscuous mode")
+
+var memprofile = flag.String("memprofile", "", "Write memory profile")
+
+var stats struct {
+ ipdefrag int
+ missedBytes int
+ pkt int
+ sz int
+ totalsz int
+ rejectFsm int
+ rejectOpt int
+ rejectConnFsm int
+ reassembled int
+ outOfOrderBytes int
+ outOfOrderPackets int
+ biggestChunkBytes int
+ biggestChunkPackets int
+ overlapBytes int
+ overlapPackets int
+}
+
+const closeTimeout time.Duration = time.Hour * 24 // Closing inactive: TODO: from CLI
+const timeout time.Duration = time.Minute * 5 // Pending bytes: TODO: from CLI
+
+/*
+ * HTTP part
+ */
+
+type httpReader struct {
+ ident string
+ isClient bool
+ bytes chan []byte
+ data []byte
+ hexdump bool
+ parent *tcpStream
+}
+
+func (h *httpReader) Read(p []byte) (int, error) {
+ ok := true
+ for ok && len(h.data) == 0 {
+ h.data, ok = <-h.bytes
+ }
+ if !ok || len(h.data) == 0 {
+ return 0, io.EOF
+ }
+
+ l := copy(p, h.data)
+ h.data = h.data[l:]
+ return l, nil
+}
+
+var outputLevel int
+var errorsMap map[string]uint
+var errors uint
+
+// Too bad for perf that a... is evaluated
+func Error(t string, s string, a ...interface{}) {
+ errors++
+ nb, _ := errorsMap[t]
+ errorsMap[t] = nb + 1
+ if outputLevel >= 0 {
+ fmt.Printf(s, a...)
+ }
+}
+func Info(s string, a ...interface{}) {
+ if outputLevel >= 1 {
+ fmt.Printf(s, a...)
+ }
+}
+func Debug(s string, a ...interface{}) {
+ if outputLevel >= 2 {
+ fmt.Printf(s, a...)
+ }
+}
+
+func (h *httpReader) run(wg *sync.WaitGroup) {
+ defer wg.Done()
+ b := bufio.NewReader(h)
+ for true {
+ if h.isClient {
+ req, err := http.ReadRequest(b)
+ if err == io.EOF || err == io.ErrUnexpectedEOF {
+ break
+ } else if err != nil {
+ Error("HTTP-request", "HTTP/%s Request error: %s (%v,%+v)\n", h.ident, err, err, err)
+ continue
+ }
+ body, err := ioutil.ReadAll(req.Body)
+ s := len(body)
+ if err != nil {
+ Error("HTTP-request-body", "Got body err: %s\n", err)
+ } else if h.hexdump {
+ Info("Body(%d/0x%x)\n%s\n", len(body), len(body), hex.Dump(body))
+ }
+ req.Body.Close()
+ Info("HTTP/%s Request: %s %s (body:%d)\n", h.ident, req.Method, req.URL, s)
+ h.parent.urls = append(h.parent.urls, req.URL.String())
+ } else {
+ res, err := http.ReadResponse(b, nil)
+ var req string
+ if len(h.parent.urls) == 0 {
+ req = fmt.Sprintf("<no-request-seen>")
+ } else {
+ req, h.parent.urls = h.parent.urls[0], h.parent.urls[1:]
+ }
+ if err == io.EOF || err == io.ErrUnexpectedEOF {
+ break
+ } else if err != nil {
+ Error("HTTP-response", "HTTP/%s Response error: %s (%v,%+v)\n", h.ident, err, err, err)
+ continue
+ }
+ body, err := ioutil.ReadAll(res.Body)
+ s := len(body)
+ if err != nil {
+ Error("HTTP-response-body", "HTTP/%s: failed to get body(parsed len:%d): %s\n", h.ident, s, err)
+ }
+ if h.hexdump {
+ Info("Body(%d/0x%x)\n%s\n", len(body), len(body), hex.Dump(body))
+ }
+ res.Body.Close()
+ sym := ","
+ if res.ContentLength > 0 && res.ContentLength != int64(s) {
+ sym = "!="
+ }
+ contentType, ok := res.Header["Content-Type"]
+ if !ok {
+ contentType = []string{http.DetectContentType(body)}
+ }
+ encoding := res.Header["Content-Encoding"]
+ Info("HTTP/%s Response: %s URL:%s (%d%s%d%s) -> %s\n", h.ident, res.Status, req, res.ContentLength, sym, s, contentType, encoding)
+ if (err == nil || *writeincomplete) && *output != "" {
+ base := url.QueryEscape(path.Base(req))
+ if err != nil {
+ base = "incomplete-" + base
+ }
+ base = path.Join(*output, base)
+ if len(base) > 250 {
+ base = base[:250] + "..."
+ }
+ if base == *output {
+ base = path.Join(*output, "noname")
+ }
+ target := base
+ n := 0
+ for true {
+ _, err := os.Stat(target)
+ //if os.IsNotExist(err) != nil {
+ if err != nil {
+ break
+ }
+ target = fmt.Sprintf("%s-%d", base, n)
+ n++
+ }
+ f, err := os.Create(target)
+ if err != nil {
+ Error("HTTP-create", "Cannot create %s: %s\n", target, err)
+ continue
+ }
+ var r io.Reader
+ r = bytes.NewBuffer(body)
+ if len(encoding) > 0 && (encoding[0] == "gzip" || encoding[0] == "deflate") {
+ r, err = gzip.NewReader(r)
+ if err != nil {
+ Error("HTTP-gunzip", "Failed to gzip decode: %s", err)
+ }
+ }
+ if err == nil {
+ w, err := io.Copy(f, r)
+ if _, ok := r.(*gzip.Reader); ok {
+ r.(*gzip.Reader).Close()
+ }
+ f.Close()
+ if err != nil {
+ Error("HTTP-save", "%s: failed to save %s (l:%d): %s\n", h.ident, target, w, err)
+ } else {
+ Info("%s: Saved %s (l:%d)\n", h.ident, target, w)
+ }
+ }
+ }
+ }
+ }
+}
+
+/*
+ * The TCP factory: returns a new Stream
+ */
+type tcpStreamFactory struct {
+ wg sync.WaitGroup
+ doHTTP bool
+}
+
+func (factory *tcpStreamFactory) New(net, transport gopacket.Flow, tcp *layers.TCP, ac reassembly.AssemblerContext) reassembly.Stream {
+ Debug("* NEW: %s %s\n", net, transport)
+ fsmOptions := reassembly.TCPSimpleFSMOptions{
+ SupportMissingEstablishment: *allowmissinginit,
+ }
+ stream := &tcpStream{
+ net: net,
+ transport: transport,
+ isDNS: tcp.SrcPort == 53 || tcp.DstPort == 53,
+ isHTTP: (tcp.SrcPort == 80 || tcp.DstPort == 80) && factory.doHTTP,
+ reversed: tcp.SrcPort == 80,
+ tcpstate: reassembly.NewTCPSimpleFSM(fsmOptions),
+ ident: fmt.Sprintf("%s:%s", net, transport),
+ optchecker: reassembly.NewTCPOptionCheck(),
+ }
+ if stream.isHTTP {
+ stream.client = httpReader{
+ bytes: make(chan []byte),
+ ident: fmt.Sprintf("%s %s", net, transport),
+ hexdump: *hexdump,
+ parent: stream,
+ isClient: true,
+ }
+ stream.server = httpReader{
+ bytes: make(chan []byte),
+ ident: fmt.Sprintf("%s %s", net.Reverse(), transport.Reverse()),
+ hexdump: *hexdump,
+ parent: stream,
+ }
+ factory.wg.Add(2)
+ go stream.client.run(&factory.wg)
+ go stream.server.run(&factory.wg)
+ }
+ return stream
+}
+
+func (factory *tcpStreamFactory) WaitGoRoutines() {
+ factory.wg.Wait()
+}
+
+/*
+ * The assembler context
+ */
+type Context struct {
+ CaptureInfo gopacket.CaptureInfo
+}
+
+func (c *Context) GetCaptureInfo() gopacket.CaptureInfo {
+ return c.CaptureInfo
+}
+
+/*
+ * TCP stream
+ */
+
+/* It's a connection (bidirectional) */
+type tcpStream struct {
+ tcpstate *reassembly.TCPSimpleFSM
+ fsmerr bool
+ optchecker reassembly.TCPOptionCheck
+ net, transport gopacket.Flow
+ isDNS bool
+ isHTTP bool
+ reversed bool
+ client httpReader
+ server httpReader
+ urls []string
+ ident string
+}
+
+func (t *tcpStream) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir reassembly.TCPFlowDirection, acked reassembly.Sequence, start *bool, ac reassembly.AssemblerContext) bool {
+ // FSM
+ if !t.tcpstate.CheckState(tcp, dir) {
+ Error("FSM", "%s: Packet rejected by FSM (state:%s)\n", t.ident, t.tcpstate.String())
+ stats.rejectFsm++
+ if !t.fsmerr {
+ t.fsmerr = true
+ stats.rejectConnFsm++
+ }
+ if !*ignorefsmerr {
+ return false
+ }
+ }
+ // Options
+ err := t.optchecker.Accept(tcp, ci, dir, acked, start)
+ if err != nil {
+ Error("OptionChecker", "%s: Packet rejected by OptionChecker: %s\n", t.ident, err)
+ stats.rejectOpt++
+ if !*nooptcheck {
+ return false
+ }
+ }
+ // Checksum
+ accept := true
+ if *checksum {
+ c, err := tcp.ComputeChecksum()
+ if err != nil {
+ Error("ChecksumCompute", "%s: Got error computing checksum: %s\n", t.ident, err)
+ accept = false
+ } else if c != 0x0 {
+ Error("Checksum", "%s: Invalid checksum: 0x%x\n", t.ident, c)
+ accept = false
+ }
+ }
+ if !accept {
+ stats.rejectOpt++
+ }
+ return accept
+}
+
+func (t *tcpStream) ReassembledSG(sg reassembly.ScatterGather, ac reassembly.AssemblerContext) {
+ dir, start, end, skip := sg.Info()
+ length, saved := sg.Lengths()
+ // update stats
+ sgStats := sg.Stats()
+ if skip > 0 {
+ stats.missedBytes += skip
+ }
+ stats.sz += length - saved
+ stats.pkt += sgStats.Packets
+ if sgStats.Chunks > 1 {
+ stats.reassembled++
+ }
+ stats.outOfOrderPackets += sgStats.QueuedPackets
+ stats.outOfOrderBytes += sgStats.QueuedBytes
+ if length > stats.biggestChunkBytes {
+ stats.biggestChunkBytes = length
+ }
+ if sgStats.Packets > stats.biggestChunkPackets {
+ stats.biggestChunkPackets = sgStats.Packets
+ }
+ if sgStats.OverlapBytes != 0 && sgStats.OverlapPackets == 0 {
+ fmt.Printf("bytes:%d, pkts:%d\n", sgStats.OverlapBytes, sgStats.OverlapPackets)
+ panic("Invalid overlap")
+ }
+ stats.overlapBytes += sgStats.OverlapBytes
+ stats.overlapPackets += sgStats.OverlapPackets
+
+ var ident string
+ if dir == reassembly.TCPDirClientToServer {
+ ident = fmt.Sprintf("%v %v(%s): ", t.net, t.transport, dir)
+ } else {
+ ident = fmt.Sprintf("%v %v(%s): ", t.net.Reverse(), t.transport.Reverse(), dir)
+ }
+ Debug("%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)
+ if skip == -1 && *allowmissinginit {
+ // this is allowed
+ } else if skip != 0 {
+ // Missing bytes in stream: do not even try to parse it
+ return
+ }
+ data := sg.Fetch(length)
+ if t.isDNS {
+ dns := &layers.DNS{}
+ var decoded []gopacket.LayerType
+ if len(data) < 2 {
+ if len(data) > 0 {
+ sg.KeepFrom(0)
+ }
+ return
+ }
+ dnsSize := binary.BigEndian.Uint16(data[:2])
+ missing := int(dnsSize) - len(data[2:])
+ Debug("dnsSize: %d, missing: %d\n", dnsSize, missing)
+ if missing > 0 {
+ Info("Missing some bytes: %d\n", missing)
+ sg.KeepFrom(0)
+ return
+ }
+ p := gopacket.NewDecodingLayerParser(layers.LayerTypeDNS, dns)
+ err := p.DecodeLayers(data[2:], &decoded)
+ if err != nil {
+ Error("DNS-parser", "Failed to decode DNS: %v\n", err)
+ } else {
+ Debug("DNS: %s\n", gopacket.LayerDump(dns))
+ }
+ if len(data) > 2+int(dnsSize) {
+ sg.KeepFrom(2 + int(dnsSize))
+ }
+ } else if t.isHTTP {
+ if length > 0 {
+ if *hexdump {
+ Debug("Feeding http with:\n%s", hex.Dump(data))
+ }
+ if dir == reassembly.TCPDirClientToServer && !t.reversed {
+ t.client.bytes <- data
+ } else {
+ t.server.bytes <- data
+ }
+ }
+ }
+}
+
+func (t *tcpStream) ReassemblyComplete(ac reassembly.AssemblerContext) bool {
+ Debug("%s: Connection closed\n", t.ident)
+ if t.isHTTP {
+ close(t.client.bytes)
+ close(t.server.bytes)
+ }
+ // do not remove the connection to allow last ACK
+ return false
+}
+
+func main() {
+ defer util.Run()()
+ var handle *pcap.Handle
+ var err error
+ if *debug {
+ outputLevel = 2
+ } else if *verbose {
+ outputLevel = 1
+ } else if *quiet {
+ outputLevel = -1
+ }
+ errorsMap = make(map[string]uint)
+ if *fname != "" {
+ if handle, err = pcap.OpenOffline(*fname); err != nil {
+ log.Fatal("PCAP OpenOffline error:", err)
+ }
+ } else {
+ // This is a little complicated because we want to allow all possible options
+ // for creating the packet capture handle... instead of all this you can
+ // just call pcap.OpenLive if you want a simple handle.
+ inactive, err := pcap.NewInactiveHandle(*iface)
+ if err != nil {
+ log.Fatal("could not create: %v", err)
+ }
+ defer inactive.CleanUp()
+ if err = inactive.SetSnapLen(*snaplen); err != nil {
+ log.Fatal("could not set snap length: %v", err)
+ } else if err = inactive.SetPromisc(*promisc); err != nil {
+ log.Fatal("could not set promisc mode: %v", err)
+ } else if err = inactive.SetTimeout(time.Second); err != nil {
+ log.Fatal("could not set timeout: %v", err)
+ }
+ if *tstype != "" {
+ if t, err := pcap.TimestampSourceFromString(*tstype); err != nil {
+ log.Fatalf("Supported timestamp types: %v", inactive.SupportedTimestamps())
+ } else if err := inactive.SetTimestampSource(t); err != nil {
+ log.Fatalf("Supported timestamp types: %v", inactive.SupportedTimestamps())
+ }
+ }
+ if handle, err = inactive.Activate(); err != nil {
+ log.Fatal("PCAP Activate error:", err)
+ }
+ defer handle.Close()
+ }
+ if len(flag.Args()) > 0 {
+ bpffilter := strings.Join(flag.Args(), " ")
+ Info("Using BPF filter %q\n", bpffilter)
+ if err = handle.SetBPFFilter(bpffilter); err != nil {
+ log.Fatal("BPF filter error:", err)
+ }
+ }
+
+ var dec gopacket.Decoder
+ var ok bool
+ decoder_name := *decoder
+ if decoder_name == "" {
+ decoder_name = fmt.Sprintf("%s", handle.LinkType())
+ }
+ if dec, ok = gopacket.DecodersByLayerName[decoder_name]; !ok {
+ log.Fatalln("No decoder named", decoder_name)
+ }
+ source := gopacket.NewPacketSource(handle, dec)
+ source.Lazy = *lazy
+ source.NoCopy = true
+ Info("Starting to read packets\n")
+ count := 0
+ bytes := int64(0)
+ start := time.Now()
+ defragger := ip4defrag.NewIPv4Defragmenter()
+
+ streamFactory := &tcpStreamFactory{doHTTP: !*nohttp}
+ streamPool := reassembly.NewStreamPool(streamFactory)
+ assembler := reassembly.NewAssembler(streamPool)
+
+ signalChan := make(chan os.Signal, 1)
+ signal.Notify(signalChan, os.Interrupt)
+
+ for packet := range source.Packets() {
+ count++
+ Debug("PACKET #%d\n", count)
+ data := packet.Data()
+ bytes += int64(len(data))
+ if *hexdumppkt {
+ Debug("Packet content (%d/0x%x)\n%s\n", len(data), len(data), hex.Dump(data))
+ }
+
+ // defrag the IPv4 packet if required
+ if !*nodefrag {
+ ip4Layer := packet.Layer(layers.LayerTypeIPv4)
+ if ip4Layer == nil {
+ continue
+ }
+ ip4 := ip4Layer.(*layers.IPv4)
+ l := ip4.Length
+ newip4, err := defragger.DefragIPv4(ip4)
+ if err != nil {
+ log.Fatalln("Error while de-fragmenting", err)
+ } else if newip4 == nil {
+ Debug("Fragment...\n")
+ continue // packet fragment, we don't have whole packet yet.
+ }
+ if newip4.Length != l {
+ stats.ipdefrag++
+ Debug("Decoding re-assembled packet: %s\n", newip4.NextLayerType())
+ pb, ok := packet.(gopacket.PacketBuilder)
+ if !ok {
+ panic("Not a PacketBuilder")
+ }
+ nextDecoder := newip4.NextLayerType()
+ nextDecoder.Decode(newip4.Payload, pb)
+ }
+ }
+
+ tcp := packet.Layer(layers.LayerTypeTCP)
+ if tcp != nil {
+ tcp := tcp.(*layers.TCP)
+ if *checksum {
+ err := tcp.SetNetworkLayerForChecksum(packet.NetworkLayer())
+ if err != nil {
+ log.Fatalf("Failed to set network layer for checksum: %s\n", err)
+ }
+ }
+ c := Context{
+ CaptureInfo: packet.Metadata().CaptureInfo,
+ }
+ stats.totalsz += len(tcp.Payload)
+ assembler.AssembleWithContext(packet.NetworkLayer().NetworkFlow(), tcp, &c)
+ }
+ if count%*statsevery == 0 {
+ ref := packet.Metadata().CaptureInfo.Timestamp
+ flushed, closed := assembler.FlushWithOptions(reassembly.FlushOptions{T: ref.Add(-timeout), TC: ref.Add(-closeTimeout)})
+ Debug("Forced flush: %d flushed, %d closed (%s)", flushed, closed, ref)
+ }
+
+ done := *maxcount > 0 && count >= *maxcount
+ if count%*statsevery == 0 || done {
+ fmt.Fprintf(os.Stderr, "Processed %v packets (%v bytes) in %v (errors: %v, type:%v)\n", count, bytes, time.Since(start), errors, len(errorsMap))
+ }
+ select {
+ case <-signalChan:
+ fmt.Fprintf(os.Stderr, "\nCaught SIGINT: aborting\n")
+ done = true
+ default:
+ // NOP: continue
+ }
+ if done {
+ break
+ }
+ }
+
+ closed := assembler.FlushAll()
+ Debug("Final flush: %d closed", closed)
+ if outputLevel >= 2 {
+ streamPool.Dump()
+ }
+
+ if *memprofile != "" {
+ f, err := os.Create(*memprofile)
+ if err != nil {
+ log.Fatal(err)
+ }
+ pprof.WriteHeapProfile(f)
+ f.Close()
+ }
+
+ streamFactory.WaitGoRoutines()
+ Debug("%s\n", assembler.Dump())
+ if !*nodefrag {
+ fmt.Printf("IPdefrag:\t\t%d\n", stats.ipdefrag)
+ }
+ fmt.Printf("TCP stats:\n")
+ fmt.Printf(" missed bytes:\t\t%d\n", stats.missedBytes)
+ fmt.Printf(" total packets:\t\t%d\n", stats.pkt)
+ fmt.Printf(" rejected FSM:\t\t%d\n", stats.rejectFsm)
+ fmt.Printf(" rejected Options:\t%d\n", stats.rejectOpt)
+ fmt.Printf(" reassembled bytes:\t%d\n", stats.sz)
+ fmt.Printf(" total TCP bytes:\t%d\n", stats.totalsz)
+ fmt.Printf(" conn rejected FSM:\t%d\n", stats.rejectConnFsm)
+ fmt.Printf(" reassembled chunks:\t%d\n", stats.reassembled)
+ fmt.Printf(" out-of-order packets:\t%d\n", stats.outOfOrderPackets)
+ fmt.Printf(" out-of-order bytes:\t%d\n", stats.outOfOrderBytes)
+ fmt.Printf(" biggest-chunk packets:\t%d\n", stats.biggestChunkPackets)
+ fmt.Printf(" biggest-chunk bytes:\t%d\n", stats.biggestChunkBytes)
+ fmt.Printf(" overlap packets:\t%d\n", stats.overlapPackets)
+ fmt.Printf(" overlap bytes:\t\t%d\n", stats.overlapBytes)
+ fmt.Printf("Errors: %d\n", errors)
+ for e, _ := range errorsMap {
+ fmt.Printf(" %s:\t\t%d\n", e, errorsMap[e])
+ }
+}
diff --git a/vendor/github.com/google/gopacket/examples/statsassembly/main.go b/vendor/github.com/google/gopacket/examples/statsassembly/main.go
new file mode 100644
index 0000000..36da011
--- /dev/null
+++ b/vendor/github.com/google/gopacket/examples/statsassembly/main.go
@@ -0,0 +1,211 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// This binary provides sample code for using the gopacket TCP assembler raw,
+// without the help of the tcpreader library. It watches TCP streams and
+// reports statistics on completed streams.
+//
+// It also uses gopacket.DecodingLayerParser instead of the normal
+// gopacket.PacketSource, to highlight the methods, pros, and cons of this
+// approach.
+package main
+
+import (
+ "flag"
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/examples/util"
+ "github.com/google/gopacket/layers"
+ "github.com/google/gopacket/pcap"
+ "github.com/google/gopacket/tcpassembly"
+ "log"
+ "time"
+)
+
+var iface = flag.String("i", "eth0", "Interface to get packets from")
+var snaplen = flag.Int("s", 65536, "SnapLen for pcap packet capture")
+var filter = flag.String("f", "tcp", "BPF filter for pcap")
+var logAllPackets = flag.Bool("v", false, "Log whenever we see a packet")
+var bufferedPerConnection = flag.Int("connection_max_buffer", 0, `
+Max packets to buffer for a single connection before skipping over a gap in data
+and continuing to stream the connection after the buffer. If zero or less, this
+is infinite.`)
+var bufferedTotal = flag.Int("total_max_buffer", 0, `
+Max packets to buffer total before skipping over gaps in connections and
+continuing to stream connection data. If zero or less, this is infinite`)
+var flushAfter = flag.String("flush_after", "2m", `
+Connections which have buffered packets (they've gotten packets out of order and
+are waiting for old packets to fill the gaps) are flushed after they're this old
+(their oldest gap is skipped). Any string parsed by time.ParseDuration is
+acceptable here`)
+var packetCount = flag.Int("c", -1, `
+Quit after processing this many packets, flushing all currently buffered
+connections. If negative, this is infinite`)
+
+// simpleStreamFactory implements tcpassembly.StreamFactory
+type statsStreamFactory struct{}
+
+// statsStream will handle the actual decoding of stats requests.
+type statsStream struct {
+ net, transport gopacket.Flow
+ bytes, packets, outOfOrder, skipped int64
+ start, end time.Time
+ sawStart, sawEnd bool
+}
+
+// New creates a new stream. It's called whenever the assembler sees a stream
+// it isn't currently following.
+func (factory *statsStreamFactory) New(net, transport gopacket.Flow) tcpassembly.Stream {
+ log.Printf("new stream %v:%v started", net, transport)
+ s := &statsStream{
+ net: net,
+ transport: transport,
+ start: time.Now(),
+ }
+ s.end = s.start
+ // ReaderStream implements tcpassembly.Stream, so we can return a pointer to it.
+ return s
+}
+
+// Reassembled is called whenever new packet data is available for reading.
+// Reassembly objects contain stream data IN ORDER.
+func (s *statsStream) Reassembled(reassemblies []tcpassembly.Reassembly) {
+ for _, reassembly := range reassemblies {
+ if reassembly.Seen.Before(s.end) {
+ s.outOfOrder++
+ } else {
+ s.end = reassembly.Seen
+ }
+ s.bytes += int64(len(reassembly.Bytes))
+ s.packets += 1
+ if reassembly.Skip > 0 {
+ s.skipped += int64(reassembly.Skip)
+ }
+ s.sawStart = s.sawStart || reassembly.Start
+ s.sawEnd = s.sawEnd || reassembly.End
+ }
+}
+
+// ReassemblyComplete is called when the TCP assembler believes a stream has
+// finished.
+func (s *statsStream) ReassemblyComplete() {
+ diffSecs := float64(s.end.Sub(s.start)) / float64(time.Second)
+ log.Printf("Reassembly of stream %v:%v complete - start:%v end:%v bytes:%v packets:%v ooo:%v bps:%v pps:%v skipped:%v",
+ s.net, s.transport, s.start, s.end, s.bytes, s.packets, s.outOfOrder,
+ float64(s.bytes)/diffSecs, float64(s.packets)/diffSecs, s.skipped)
+}
+
+func main() {
+ defer util.Run()()
+
+ flushDuration, err := time.ParseDuration(*flushAfter)
+ if err != nil {
+ log.Fatal("invalid flush duration: ", *flushAfter)
+ }
+
+ log.Printf("starting capture on interface %q", *iface)
+ // Set up pcap packet capture
+ handle, err := pcap.OpenLive(*iface, int32(*snaplen), true, flushDuration/2)
+ if err != nil {
+ log.Fatal("error opening pcap handle: ", err)
+ }
+ if err := handle.SetBPFFilter(*filter); err != nil {
+ log.Fatal("error setting BPF filter: ", err)
+ }
+
+ // Set up assembly
+ streamFactory := &statsStreamFactory{}
+ streamPool := tcpassembly.NewStreamPool(streamFactory)
+ assembler := tcpassembly.NewAssembler(streamPool)
+ assembler.MaxBufferedPagesPerConnection = *bufferedPerConnection
+ assembler.MaxBufferedPagesTotal = *bufferedTotal
+
+ log.Println("reading in packets")
+
+ // We use a DecodingLayerParser here instead of a simpler PacketSource.
+ // This approach should be measurably faster, but is also more rigid.
+ // PacketSource will handle any known type of packet safely and easily,
+ // but DecodingLayerParser will only handle those packet types we
+ // specifically pass in. This trade-off can be quite useful, though, in
+ // high-throughput situations.
+ var eth layers.Ethernet
+ var dot1q layers.Dot1Q
+ var ip4 layers.IPv4
+ var ip6 layers.IPv6
+ var ip6extensions layers.IPv6ExtensionSkipper
+ var tcp layers.TCP
+ var payload gopacket.Payload
+ parser := gopacket.NewDecodingLayerParser(layers.LayerTypeEthernet,
+ &eth, &dot1q, &ip4, &ip6, &ip6extensions, &tcp, &payload)
+ decoded := make([]gopacket.LayerType, 0, 4)
+
+ nextFlush := time.Now().Add(flushDuration / 2)
+
+ var byteCount int64
+ start := time.Now()
+
+loop:
+ for ; *packetCount != 0; *packetCount-- {
+ // Check to see if we should flush the streams we have
+ // that haven't seen any new data in a while. Note we set a
+ // timeout on our PCAP handle, so this should happen even if we
+ // never see packet data.
+ if time.Now().After(nextFlush) {
+ stats, _ := handle.Stats()
+ log.Printf("flushing all streams that haven't seen packets in the last 2 minutes, pcap stats: %+v", stats)
+ assembler.FlushOlderThan(time.Now().Add(flushDuration))
+ nextFlush = time.Now().Add(flushDuration / 2)
+ }
+
+ // To speed things up, we're also using the ZeroCopy method for
+ // reading packet data. This method is faster than the normal
+ // ReadPacketData, but the returned bytes in 'data' are
+ // invalidated by any subsequent ZeroCopyReadPacketData call.
+ // Note that tcpassembly is entirely compatible with this packet
+ // reading method. This is another trade-off which might be
+ // appropriate for high-throughput sniffing: it avoids a packet
+ // copy, but its cost is much more careful handling of the
+ // resulting byte slice.
+ data, ci, err := handle.ZeroCopyReadPacketData()
+
+ if err != nil {
+ log.Printf("error getting packet: %v", err)
+ continue
+ }
+ err = parser.DecodeLayers(data, &decoded)
+ if err != nil {
+ log.Printf("error decoding packet: %v", err)
+ continue
+ }
+ if *logAllPackets {
+ log.Printf("decoded the following layers: %v", decoded)
+ }
+ byteCount += int64(len(data))
+ // Find either the IPv4 or IPv6 address to use as our network
+ // layer.
+ foundNetLayer := false
+ var netFlow gopacket.Flow
+ for _, typ := range decoded {
+ switch typ {
+ case layers.LayerTypeIPv4:
+ netFlow = ip4.NetworkFlow()
+ foundNetLayer = true
+ case layers.LayerTypeIPv6:
+ netFlow = ip6.NetworkFlow()
+ foundNetLayer = true
+ case layers.LayerTypeTCP:
+ if foundNetLayer {
+ assembler.AssembleWithTimestamp(netFlow, &tcp, ci.Timestamp)
+ } else {
+ log.Println("could not find IPv4 or IPv6 layer, inoring")
+ }
+ continue loop
+ }
+ }
+ log.Println("could not find TCP layer")
+ }
+ assembler.FlushAll()
+ log.Printf("processed %d bytes in %v", byteCount, time.Since(start))
+}
diff --git a/vendor/github.com/google/gopacket/examples/synscan/main.go b/vendor/github.com/google/gopacket/examples/synscan/main.go
new file mode 100644
index 0000000..7a2345f
--- /dev/null
+++ b/vendor/github.com/google/gopacket/examples/synscan/main.go
@@ -0,0 +1,259 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// synscan implements a TCP syn scanner on top of pcap.
+// It's more complicated than arpscan, since it has to handle sending packets
+// outside the local network, requiring some routing and ARP work.
+//
+// Since this is just an example program, it aims for simplicity over
+// performance. It doesn't handle sending packets very quickly, it scans IPs
+// serially instead of in parallel, and uses gopacket.Packet instead of
+// gopacket.DecodingLayerParser for packet processing. We also make use of very
+// simple timeout logic with time.Since.
+//
+// Making it blazingly fast is left as an exercise to the reader.
+package main
+
+import (
+ "errors"
+ "flag"
+ "log"
+ "net"
+ "time"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/examples/util"
+ "github.com/google/gopacket/layers"
+ "github.com/google/gopacket/pcap"
+ "github.com/google/gopacket/routing"
+)
+
+// scanner handles scanning a single IP address.
+type scanner struct {
+ // iface is the interface to send packets on.
+ iface *net.Interface
+ // destination, gateway (if applicable), and source IP addresses to use.
+ dst, gw, src net.IP
+
+ handle *pcap.Handle
+
+ // opts and buf allow us to easily serialize packets in the send()
+ // method.
+ opts gopacket.SerializeOptions
+ buf gopacket.SerializeBuffer
+}
+
+// newScanner creates a new scanner for a given destination IP address, using
+// router to determine how to route packets to that IP.
+func newScanner(ip net.IP, router routing.Router) (*scanner, error) {
+ s := &scanner{
+ dst: ip,
+ opts: gopacket.SerializeOptions{
+ FixLengths: true,
+ ComputeChecksums: true,
+ },
+ buf: gopacket.NewSerializeBuffer(),
+ }
+ // Figure out the route to the IP.
+ iface, gw, src, err := router.Route(ip)
+ if err != nil {
+ return nil, err
+ }
+ log.Printf("scanning ip %v with interface %v, gateway %v, src %v", ip, iface.Name, gw, src)
+ s.gw, s.src, s.iface = gw, src, iface
+
+ // Open the handle for reading/writing.
+ // Note we could very easily add some BPF filtering here to greatly
+ // decrease the number of packets we have to look at when getting back
+ // scan results.
+ handle, err := pcap.OpenLive(iface.Name, 65536, true, pcap.BlockForever)
+ if err != nil {
+ return nil, err
+ }
+ s.handle = handle
+ return s, nil
+}
+
+// close cleans up the handle.
+func (s *scanner) close() {
+ s.handle.Close()
+}
+
+// getHwAddr is a hacky but effective way to get the destination hardware
+// address for our packets. It does an ARP request for our gateway (if there is
+// one) or destination IP (if no gateway is necessary), then waits for an ARP
+// reply. This is pretty slow right now, since it blocks on the ARP
+// request/reply.
+func (s *scanner) getHwAddr() (net.HardwareAddr, error) {
+ start := time.Now()
+ arpDst := s.dst
+ if s.gw != nil {
+ arpDst = s.gw
+ }
+ // Prepare the layers to send for an ARP request.
+ eth := layers.Ethernet{
+ SrcMAC: s.iface.HardwareAddr,
+ DstMAC: net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
+ EthernetType: layers.EthernetTypeARP,
+ }
+ arp := layers.ARP{
+ AddrType: layers.LinkTypeEthernet,
+ Protocol: layers.EthernetTypeIPv4,
+ HwAddressSize: 6,
+ ProtAddressSize: 4,
+ Operation: layers.ARPRequest,
+ SourceHwAddress: []byte(s.iface.HardwareAddr),
+ SourceProtAddress: []byte(s.src),
+ DstHwAddress: []byte{0, 0, 0, 0, 0, 0},
+ DstProtAddress: []byte(arpDst),
+ }
+ // Send a single ARP request packet (we never retry a send, since this
+ // is just an example ;)
+ if err := s.send(&eth, &arp); err != nil {
+ return nil, err
+ }
+ // Wait 3 seconds for an ARP reply.
+ for {
+ if time.Since(start) > time.Second*3 {
+ return nil, errors.New("timeout getting ARP reply")
+ }
+ data, _, err := s.handle.ReadPacketData()
+ if err == pcap.NextErrorTimeoutExpired {
+ continue
+ } else if err != nil {
+ return nil, err
+ }
+ packet := gopacket.NewPacket(data, layers.LayerTypeEthernet, gopacket.NoCopy)
+ if arpLayer := packet.Layer(layers.LayerTypeARP); arpLayer != nil {
+ arp := arpLayer.(*layers.ARP)
+ if net.IP(arp.SourceProtAddress).Equal(net.IP(arpDst)) {
+ return net.HardwareAddr(arp.SourceHwAddress), nil
+ }
+ }
+ }
+}
+
+// scan scans the dst IP address of this scanner.
+func (s *scanner) scan() error {
+ // First off, get the MAC address we should be sending packets to.
+ hwaddr, err := s.getHwAddr()
+ if err != nil {
+ return err
+ }
+ // Construct all the network layers we need.
+ eth := layers.Ethernet{
+ SrcMAC: s.iface.HardwareAddr,
+ DstMAC: hwaddr,
+ EthernetType: layers.EthernetTypeIPv4,
+ }
+ ip4 := layers.IPv4{
+ SrcIP: s.src,
+ DstIP: s.dst,
+ Version: 4,
+ TTL: 64,
+ Protocol: layers.IPProtocolTCP,
+ }
+ tcp := layers.TCP{
+ SrcPort: 54321,
+ DstPort: 0, // will be incremented during the scan
+ SYN: true,
+ }
+ tcp.SetNetworkLayerForChecksum(&ip4)
+
+ // Create the flow we expect returning packets to have, so we can check
+ // against it and discard useless packets.
+ ipFlow := gopacket.NewFlow(layers.EndpointIPv4, s.dst, s.src)
+ start := time.Now()
+ for {
+ // Send one packet per loop iteration until we've sent packets
+ // to all of ports [1, 65535].
+ if tcp.DstPort < 65535 {
+ start = time.Now()
+ tcp.DstPort++
+ if err := s.send(&eth, &ip4, &tcp); err != nil {
+ log.Printf("error sending to port %v: %v", tcp.DstPort, err)
+ }
+ }
+ // Time out 5 seconds after the last packet we sent.
+ if time.Since(start) > time.Second*5 {
+ log.Printf("timed out for %v, assuming we've seen all we can", s.dst)
+ return nil
+ }
+
+ // Read in the next packet.
+ data, _, err := s.handle.ReadPacketData()
+ if err == pcap.NextErrorTimeoutExpired {
+ continue
+ } else if err != nil {
+ log.Printf("error reading packet: %v", err)
+ continue
+ }
+
+ // Parse the packet. We'd use DecodingLayerParser here if we
+ // wanted to be really fast.
+ packet := gopacket.NewPacket(data, layers.LayerTypeEthernet, gopacket.NoCopy)
+
+ // Find the packets we care about, and print out logging
+ // information about them. All others are ignored.
+ if net := packet.NetworkLayer(); net == nil {
+ // log.Printf("packet has no network layer")
+ } else if net.NetworkFlow() != ipFlow {
+ // log.Printf("packet does not match our ip src/dst")
+ } else if tcpLayer := packet.Layer(layers.LayerTypeTCP); tcpLayer == nil {
+ // log.Printf("packet has not tcp layer")
+ } else if tcp, ok := tcpLayer.(*layers.TCP); !ok {
+ // We panic here because this is guaranteed to never
+ // happen.
+ panic("tcp layer is not tcp layer :-/")
+ } else if tcp.DstPort != 54321 {
+ // log.Printf("dst port %v does not match", tcp.DstPort)
+ } else if tcp.RST {
+ log.Printf(" port %v closed", tcp.SrcPort)
+ } else if tcp.SYN && tcp.ACK {
+ log.Printf(" port %v open", tcp.SrcPort)
+ } else {
+ // log.Printf("ignoring useless packet")
+ }
+ }
+}
+
+// send sends the given layers as a single packet on the network.
+func (s *scanner) send(l ...gopacket.SerializableLayer) error {
+ if err := gopacket.SerializeLayers(s.buf, s.opts, l...); err != nil {
+ return err
+ }
+ return s.handle.WritePacketData(s.buf.Bytes())
+}
+
+func main() {
+ defer util.Run()()
+ router, err := routing.New()
+ if err != nil {
+ log.Fatal("routing error:", err)
+ }
+ for _, arg := range flag.Args() {
+ var ip net.IP
+ if ip = net.ParseIP(arg); ip == nil {
+ log.Printf("non-ip target: %q", arg)
+ continue
+ } else if ip = ip.To4(); ip == nil {
+ log.Printf("non-ipv4 target: %q", arg)
+ continue
+ }
+ // Note: newScanner creates and closes a pcap Handle once for
+ // every scan target. We could do much better, were this not an
+ // example ;)
+ s, err := newScanner(ip, router)
+ if err != nil {
+ log.Printf("unable to create scanner for %v: %v", ip, err)
+ continue
+ }
+ if err := s.scan(); err != nil {
+ log.Printf("unable to scan %v: %v", ip, err)
+ }
+ s.close()
+ }
+}
diff --git a/vendor/github.com/google/gopacket/examples/util/util.go b/vendor/github.com/google/gopacket/examples/util/util.go
new file mode 100644
index 0000000..0f698fb
--- /dev/null
+++ b/vendor/github.com/google/gopacket/examples/util/util.go
@@ -0,0 +1,40 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// Package util provides shared utilities for all gopacket examples.
+package util
+
+import (
+ "flag"
+ "log"
+ "os"
+ "runtime/pprof"
+)
+
+var cpuprofile = flag.String("cpuprofile", "", "Where to write CPU profile")
+
+// Run starts up stuff at the beginning of a main function, and returns a
+// function to defer until the function completes. It should be used like this:
+//
+// func main() {
+// defer util.Run()()
+// ... stuff ...
+// }
+func Run() func() {
+ flag.Parse()
+ if *cpuprofile != "" {
+ f, err := os.Create(*cpuprofile)
+ if err != nil {
+ log.Fatalf("could not open cpu profile file %q", *cpuprofile)
+ }
+ pprof.StartCPUProfile(f)
+ return func() {
+ pprof.StopCPUProfile()
+ f.Close()
+ }
+ }
+ return func() {}
+}
diff --git a/vendor/github.com/google/gopacket/flows.go b/vendor/github.com/google/gopacket/flows.go
new file mode 100644
index 0000000..7203ead
--- /dev/null
+++ b/vendor/github.com/google/gopacket/flows.go
@@ -0,0 +1,236 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package gopacket
+
+import (
+ "bytes"
+ "fmt"
+ "strconv"
+)
+
+// MaxEndpointSize determines the maximum size in bytes of an endpoint address.
+//
+// Endpoints/Flows have a problem: They need to be hashable. Therefore, they
+// can't use a byte slice. The two obvious choices are to use a string or a
+// byte array. Strings work great, but string creation requires memory
+// allocation, which can be slow. Arrays work great, but have a fixed size. We
+// originally used the former, now we've switched to the latter. Use of a fixed
+// byte-array doubles the speed of constructing a flow (due to not needing to
+// allocate). This is a huge increase... too much for us to pass up.
+//
+// The end result of this, though, is that an endpoint/flow can't be created
+// using more than MaxEndpointSize bytes per address.
+const MaxEndpointSize = 16
+
+// Endpoint is the set of bytes used to address packets at various layers.
+// See LinkLayer, NetworkLayer, and TransportLayer specifications.
+// Endpoints are usable as map keys.
+type Endpoint struct {
+ typ EndpointType
+ len int
+ raw [MaxEndpointSize]byte
+}
+
+// EndpointType returns the endpoint type associated with this endpoint.
+func (a Endpoint) EndpointType() EndpointType { return a.typ }
+
+// Raw returns the raw bytes of this endpoint. These aren't human-readable
+// most of the time, but they are faster than calling String.
+func (a Endpoint) Raw() []byte { return a.raw[:a.len] }
+
+// LessThan provides a stable ordering for all endpoints. It sorts first based
+// on the EndpointType of an endpoint, then based on the raw bytes of that
+// endpoint.
+//
+// For some endpoints, the actual comparison may not make sense, however this
+// ordering does provide useful information for most Endpoint types.
+// Ordering is based first on endpoint type, then on raw endpoint bytes.
+// Endpoint bytes are sorted lexigraphically.
+func (a Endpoint) LessThan(b Endpoint) bool {
+ return a.typ < b.typ || (a.typ == b.typ && bytes.Compare(a.raw[:a.len], b.raw[:b.len]) < 0)
+}
+
+// fnvHash is used by our FastHash functions, and implements the FNV hash
+// created by Glenn Fowler, Landon Curt Noll, and Phong Vo.
+// See http://isthe.com/chongo/tech/comp/fnv/.
+func fnvHash(s []byte) (h uint64) {
+ h = fnvBasis
+ for i := 0; i < len(s); i++ {
+ h ^= uint64(s[i])
+ h *= fnvPrime
+ }
+ return
+}
+
+const fnvBasis = 14695981039346656037
+const fnvPrime = 1099511628211
+
+// FastHash provides a quick hashing function for an endpoint, useful if you'd
+// like to split up endpoints by modulos or other load-balancing techniques.
+// It uses a variant of Fowler-Noll-Vo hashing.
+//
+// The output of FastHash is not guaranteed to remain the same through future
+// code revisions, so should not be used to key values in persistent storage.
+func (a Endpoint) FastHash() (h uint64) {
+ h = fnvHash(a.raw[:a.len])
+ h ^= uint64(a.typ)
+ h *= fnvPrime
+ return
+}
+
+// NewEndpoint creates a new Endpoint object.
+//
+// The size of raw must be less than MaxEndpointSize, otherwise this function
+// will panic.
+func NewEndpoint(typ EndpointType, raw []byte) (e Endpoint) {
+ e.len = len(raw)
+ if e.len > MaxEndpointSize {
+ panic("raw byte length greater than MaxEndpointSize")
+ }
+ e.typ = typ
+ copy(e.raw[:], raw)
+ return
+}
+
+// EndpointTypeMetadata is used to register a new endpoint type.
+type EndpointTypeMetadata struct {
+ // Name is the string returned by an EndpointType's String function.
+ Name string
+ // Formatter is called from an Endpoint's String function to format the raw
+ // bytes in an Endpoint into a human-readable string.
+ Formatter func([]byte) string
+}
+
+// EndpointType is the type of a gopacket Endpoint. This type determines how
+// the bytes stored in the endpoint should be interpreted.
+type EndpointType int64
+
+var endpointTypes = map[EndpointType]EndpointTypeMetadata{}
+
+// RegisterEndpointType creates a new EndpointType and registers it globally.
+// It MUST be passed a unique number, or it will panic. Numbers 0-999 are
+// reserved for gopacket's use.
+func RegisterEndpointType(num int, meta EndpointTypeMetadata) EndpointType {
+ t := EndpointType(num)
+ if _, ok := endpointTypes[t]; ok {
+ panic("Endpoint type number already in use")
+ }
+ endpointTypes[t] = meta
+ return t
+}
+
+func (e EndpointType) String() string {
+ if t, ok := endpointTypes[e]; ok {
+ return t.Name
+ }
+ return strconv.Itoa(int(e))
+}
+
+func (a Endpoint) String() string {
+ if t, ok := endpointTypes[a.typ]; ok && t.Formatter != nil {
+ return t.Formatter(a.raw[:a.len])
+ }
+ return fmt.Sprintf("%v:%v", a.typ, a.raw)
+}
+
+// Flow represents the direction of traffic for a packet layer, as a source and destination Endpoint.
+// Flows are usable as map keys.
+type Flow struct {
+ typ EndpointType
+ slen, dlen int
+ src, dst [MaxEndpointSize]byte
+}
+
+// FlowFromEndpoints creates a new flow by pasting together two endpoints.
+// The endpoints must have the same EndpointType, or this function will return
+// an error.
+func FlowFromEndpoints(src, dst Endpoint) (_ Flow, err error) {
+ if src.typ != dst.typ {
+ err = fmt.Errorf("Mismatched endpoint types: %v->%v", src.typ, dst.typ)
+ return
+ }
+ return Flow{src.typ, src.len, dst.len, src.raw, dst.raw}, nil
+}
+
+// FastHash provides a quick hashing function for a flow, useful if you'd
+// like to split up flows by modulos or other load-balancing techniques.
+// It uses a variant of Fowler-Noll-Vo hashing, and is guaranteed to collide
+// with its reverse flow. IE: the flow A->B will have the same hash as the flow
+// B->A.
+//
+// The output of FastHash is not guaranteed to remain the same through future
+// code revisions, so should not be used to key values in persistent storage.
+func (f Flow) FastHash() (h uint64) {
+ // This combination must be commutative. We don't use ^, since that would
+ // give the same hash for all A->A flows.
+ h = fnvHash(f.src[:f.slen]) + fnvHash(f.dst[:f.dlen])
+ h ^= uint64(f.typ)
+ h *= fnvPrime
+ return
+}
+
+// String returns a human-readable representation of this flow, in the form
+// "Src->Dst"
+func (f Flow) String() string {
+ s, d := f.Endpoints()
+ return fmt.Sprintf("%v->%v", s, d)
+}
+
+// EndpointType returns the EndpointType for this Flow.
+func (f Flow) EndpointType() EndpointType {
+ return f.typ
+}
+
+// Endpoints returns the two Endpoints for this flow.
+func (f Flow) Endpoints() (src, dst Endpoint) {
+ return Endpoint{f.typ, f.slen, f.src}, Endpoint{f.typ, f.dlen, f.dst}
+}
+
+// Src returns the source Endpoint for this flow.
+func (f Flow) Src() (src Endpoint) {
+ src, _ = f.Endpoints()
+ return
+}
+
+// Dst returns the destination Endpoint for this flow.
+func (f Flow) Dst() (dst Endpoint) {
+ _, dst = f.Endpoints()
+ return
+}
+
+// Reverse returns a new flow with endpoints reversed.
+func (f Flow) Reverse() Flow {
+ return Flow{f.typ, f.dlen, f.slen, f.dst, f.src}
+}
+
+// NewFlow creates a new flow.
+//
+// src and dst must have length <= MaxEndpointSize, otherwise NewFlow will
+// panic.
+func NewFlow(t EndpointType, src, dst []byte) (f Flow) {
+ f.slen = len(src)
+ f.dlen = len(dst)
+ if f.slen > MaxEndpointSize || f.dlen > MaxEndpointSize {
+ panic("flow raw byte length greater than MaxEndpointSize")
+ }
+ f.typ = t
+ copy(f.src[:], src)
+ copy(f.dst[:], dst)
+ return
+}
+
+// EndpointInvalid is an endpoint type used for invalid endpoints, IE endpoints
+// that are specified incorrectly during creation.
+var EndpointInvalid = RegisterEndpointType(0, EndpointTypeMetadata{Name: "invalid", Formatter: func(b []byte) string {
+ return fmt.Sprintf("%v", b)
+}})
+
+// InvalidEndpoint is a singleton Endpoint of type EndpointInvalid.
+var InvalidEndpoint = NewEndpoint(EndpointInvalid, nil)
+
+// InvalidFlow is a singleton Flow of type EndpointInvalid.
+var InvalidFlow = NewFlow(EndpointInvalid, nil, nil)
diff --git a/vendor/github.com/google/gopacket/gc b/vendor/github.com/google/gopacket/gc
new file mode 100755
index 0000000..57bcdee
--- /dev/null
+++ b/vendor/github.com/google/gopacket/gc
@@ -0,0 +1,278 @@
+#!/bin/bash
+# Copyright 2012 Google, Inc. All rights reserved.
+
+# This script provides a simple way to run benchmarks against previous code and
+# keep a log of how benchmarks change over time. When used with the --benchmark
+# flag, it runs benchmarks from the current code and from the last commit run
+# with --benchmark, then stores the results in the git commit description. We
+# rerun the old benchmarks along with the new ones, since there's no guarantee
+# that git commits will happen on the same machine, so machine differences could
+# cause wildly inaccurate results.
+#
+# If you're making changes to 'gopacket' which could cause performance changes,
+# you may be requested to use this commit script to make sure your changes don't
+# have large detrimental effects (or to show off how awesome your performance
+# improvements are).
+#
+# If not run with the --benchmark flag, this script is still very useful... it
+# makes sure all the correct go formatting, building, and testing work as
+# expected.
+
+function Usage {
+ cat <<EOF
+USAGE: $0 [--benchmark regexp] [--root] [--gen] <git commit flags...>
+
+--benchmark: Run benchmark comparisons against last benchmark'd commit
+--root: Run tests that require root priviledges
+--gen: Generate code for MACs/ports by pulling down external data
+
+Note, some 'git commit' flags are necessary, if all else fails, pass in -a
+EOF
+ exit 1
+}
+
+BENCH=""
+GEN=""
+ROOT=""
+while [ ! -z "$1" ]; do
+ case "$1" in
+ "--benchmark")
+ BENCH="$2"
+ shift
+ shift
+ ;;
+ "--gen")
+ GEN="yes"
+ shift
+ ;;
+ "--root")
+ ROOT="yes"
+ shift
+ ;;
+ "--help")
+ Usage
+ ;;
+ "-h")
+ Usage
+ ;;
+ "help")
+ Usage
+ ;;
+ *)
+ break
+ ;;
+ esac
+done
+
+function Root {
+ if [ ! -z "$ROOT" ]; then
+ local exec="$1"
+ # Some folks (like me) keep source code in places inaccessible by root (like
+ # NFS), so to make sure things run smoothly we copy them to a /tmp location.
+ local tmpfile="$(mktemp -t gopacket_XXXXXXXX)"
+ echo "Running root test executable $exec as $tmpfile"
+ cp "$exec" "$tmpfile"
+ chmod a+x "$tmpfile"
+ shift
+ sudo "$tmpfile" "$@"
+ fi
+}
+
+if [ "$#" -eq "0" ]; then
+ Usage
+fi
+
+cd $(dirname $0)
+
+# Check for copyright notices.
+for filename in $(find ./ -type f -name '*.go'); do
+ if ! head -n 1 "$filename" | grep -q Copyright; then
+ echo "File '$filename' may not have copyright notice"
+ exit 1
+ fi
+done
+
+set -e
+set -x
+
+if [ ! -z "$ROOT" ]; then
+ echo "Running SUDO to get root priviledges for root tests"
+ sudo echo "have root"
+fi
+
+if [ ! -z "$GEN" ]; then
+ pushd macs
+ go run gen.go | gofmt > valid_mac_prefixes.go
+ popd
+ pushd layers
+ go run gen.go | gofmt > iana_ports.go
+ popd
+fi
+
+# Make sure everything is formatted, compiles, and tests pass.
+go fmt ./...
+go test -i ./... 2>/dev/null >/dev/null || true
+go test
+go build
+pushd examples/bytediff
+go build
+popd
+if [ -f /usr/include/pcap.h ]; then
+ pushd pcap
+ go test ./...
+ go build ./...
+ go build pcap_tester.go
+ Root pcap_tester --mode=basic
+ Root pcap_tester --mode=filtered
+ Root pcap_tester --mode=timestamp || echo "You might not support timestamp sources"
+ popd
+ pushd examples/pcapdump
+ go build
+ popd
+ pushd examples/arpscan
+ go build
+ popd
+ pushd examples/bidirectional
+ go build
+ popd
+ pushd examples/synscan
+ go build
+ popd
+ pushd examples/httpassembly
+ go build
+ popd
+ pushd examples/statsassembly
+ go build
+ popd
+fi
+pushd macs
+go test ./...
+gofmt -w gen.go
+go build gen.go
+popd
+pushd tcpassembly
+go test ./...
+popd
+pushd reassembly
+go test ./...
+popd
+pushd layers
+gofmt -w gen.go
+go build gen.go
+go test ./...
+popd
+pushd pcapgo
+go test ./...
+go build ./...
+popd
+if [ -f /usr/include/linux/if_packet.h ]; then
+ if grep -q TPACKET_V3 /usr/include/linux/if_packet.h; then
+ pushd afpacket
+ go build ./...
+ go test ./...
+ popd
+ fi
+fi
+if [ -f /usr/include/pfring.h ]; then
+ pushd pfring
+ go test ./...
+ go build ./...
+ popd
+ pushd examples/pfdump
+ go build
+ popd
+fi
+
+for travis_script in `ls .travis.*.sh`; do
+ ./$travis_script
+done
+
+# Run our initial commit
+git commit "$@"
+
+if [ -z "$BENCH" ]; then
+ set +x
+ echo "We're not benchmarking and we've committed... we're done!"
+ exit
+fi
+
+### If we get here, we want to run benchmarks from current commit, and compare
+### then to benchmarks from the last --benchmark commit.
+
+# Get our current branch.
+BRANCH="$(git branch | grep '^*' | awk '{print $2}')"
+
+# File we're going to build our commit description in.
+COMMIT_FILE="$(mktemp /tmp/tmp.XXXXXXXX)"
+
+# Add the word "BENCH" to the start of the git commit.
+echo -n "BENCH " > $COMMIT_FILE
+
+# Get the current description... there must be an easier way.
+git log -n 1 | grep '^ ' | sed 's/^ //' >> $COMMIT_FILE
+
+# Get the commit sha for the last benchmark commit
+PREV=$(git log -n 1 --grep='BENCHMARK_MARKER_DO_NOT_CHANGE' | head -n 1 | awk '{print $2}')
+
+## Run current benchmarks
+
+cat >> $COMMIT_FILE <<EOF
+
+
+----------------------------------------------------------
+BENCHMARK_MARKER_DO_NOT_CHANGE
+----------------------------------------------------------
+
+Go version $(go version)
+
+
+TEST BENCHMARKS "$BENCH"
+EOF
+# go seems to have trouble with 'go test --bench=. ./...'
+go test --test.bench="$BENCH" 2>&1 | tee -a $COMMIT_FILE
+pushd layers
+go test --test.bench="$BENCH" 2>&1 | tee -a $COMMIT_FILE
+popd
+cat >> $COMMIT_FILE <<EOF
+
+
+PCAP BENCHMARK
+EOF
+if [ "$BENCH" -eq ".*" ]; then
+ go run pcap/gopacket_benchmark/*.go 2>&1 | tee -a $COMMIT_FILE
+fi
+
+
+
+## Reset to last benchmark commit, run benchmarks
+
+git checkout $PREV
+
+cat >> $COMMIT_FILE <<EOF
+----------------------------------------------------------
+BENCHMARKING AGAINST COMMIT $PREV
+----------------------------------------------------------
+
+
+OLD TEST BENCHMARKS
+EOF
+# go seems to have trouble with 'go test --bench=. ./...'
+go test --test.bench="$BENCH" 2>&1 | tee -a $COMMIT_FILE
+pushd layers
+go test --test.bench="$BENCH" 2>&1 | tee -a $COMMIT_FILE
+popd
+cat >> $COMMIT_FILE <<EOF
+
+
+OLD PCAP BENCHMARK
+EOF
+if [ "$BENCH" -eq ".*" ]; then
+ go run pcap/gopacket_benchmark/*.go 2>&1 | tee -a $COMMIT_FILE
+fi
+
+
+
+## Reset back to the most recent commit, edit the commit message by appending
+## benchmark results.
+git checkout $BRANCH
+git commit --amend -F $COMMIT_FILE
diff --git a/vendor/github.com/google/gopacket/ip4defrag/defrag.go b/vendor/github.com/google/gopacket/ip4defrag/defrag.go
new file mode 100644
index 0000000..9d3862f
--- /dev/null
+++ b/vendor/github.com/google/gopacket/ip4defrag/defrag.go
@@ -0,0 +1,350 @@
+// Copyright 2013 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// Package ip4defrag implements a IPv4 defragmenter
+package ip4defrag
+
+import (
+ "container/list"
+ "errors"
+ "fmt"
+ "log"
+ "sync"
+ "time"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+)
+
+// Quick and Easy to use debug code to trace
+// how defrag works.
+var debug debugging = false // or flip to true
+type debugging bool
+
+func (d debugging) Printf(format string, args ...interface{}) {
+ if d {
+ log.Printf(format, args...)
+ }
+}
+
+// Constants determining how to handle fragments.
+const (
+ IPv4MinimumFragmentSize = 576 // Minimum size of a single fragment
+ IPv4MaximumSize = 65535 // Maximum size of a fragment (2^16)
+ IPv4MaximumFragmentOffset = 8189 // Maximum offset of a fragment
+ IPv4MaximumFragmentListLen = 8 // Back out if we get more than this many fragments
+)
+
+// DefragIPv4 takes in an IPv4 packet with a fragment payload.
+//
+// It do not modify the IPv4 layer in place, 'in' remains untouched
+// It returns a ready-to be used IPv4 layer.
+//
+// If the passed-in IPv4 layer is NOT fragmented, it will
+// immediately return it without modifying the layer.
+//
+// If the IPv4 layer is a fragment and we don't have all
+// fragments, it will return nil and store whatever internal
+// information it needs to eventually defrag the packet.
+//
+// If the IPv4 layer is the last fragment needed to reconstruct
+// the packet, a new IPv4 layer will be returned, and will be set to
+// the entire defragmented packet,
+//
+// It use a map of all the running flows
+//
+// Usage example:
+//
+// func HandlePacket(in *layers.IPv4) err {
+// defragger := ip4defrag.NewIPv4Defragmenter()
+// in, err := defragger.DefragIPv4(in)
+// if err != nil {
+// return err
+// } else if in == nil {
+// return nil // packet fragment, we don't have whole packet yet.
+// }
+// // At this point, we know that 'in' is defragmented.
+// //It may be the same 'in' passed to
+// // HandlePacket, or it may not, but we don't really care :)
+// ... do stuff to 'in' ...
+//}
+//
+func (d *IPv4Defragmenter) DefragIPv4(in *layers.IPv4) (*layers.IPv4, error) {
+ return d.DefragIPv4WithTimestamp(in, time.Now())
+}
+
+// DefragIPv4WithTimestamp provides functionality of DefragIPv4 with
+// an additional timestamp parameter which is used for discarding
+// old fragments instead of time.Now()
+//
+// This is useful when operating on pcap files instead of live captured data
+//
+func (d *IPv4Defragmenter) DefragIPv4WithTimestamp(in *layers.IPv4, t time.Time) (*layers.IPv4, error) {
+ // check if we need to defrag
+ if st := d.dontDefrag(in); st == true {
+ debug.Printf("defrag: do nothing, do not need anything")
+ return in, nil
+ }
+ // perfom security checks
+ st, err := d.securityChecks(in)
+ if err != nil || st == false {
+ debug.Printf("defrag: alert security check")
+ return nil, err
+ }
+
+ // ok, got a fragment
+ debug.Printf("defrag: got a new fragment in.Id=%d in.FragOffset=%d in.Flags=%d\n",
+ in.Id, in.FragOffset*8, in.Flags)
+
+ // have we already seen a flow between src/dst with that Id?
+ ipf := newIPv4(in)
+ var fl *fragmentList
+ var exist bool
+ d.Lock()
+ fl, exist = d.ipFlows[ipf]
+ if !exist {
+ debug.Printf("defrag: unknown flow, creating a new one\n")
+ fl = new(fragmentList)
+ d.ipFlows[ipf] = fl
+ }
+ d.Unlock()
+ // insert, and if final build it
+ out, err2 := fl.insert(in, t)
+
+ // at last, if we hit the maximum frag list len
+ // without any defrag success, we just drop everything and
+ // raise an error
+ if out == nil && fl.List.Len()+1 > IPv4MaximumFragmentListLen {
+ d.flush(ipf)
+ return nil, fmt.Errorf("defrag: Fragment List hits its maximum"+
+ "size(%d), without success. Flushing the list",
+ IPv4MaximumFragmentListLen)
+ }
+
+ // if we got a packet, it's a new one, and he is defragmented
+ if out != nil {
+ // when defrag is done for a flow between two ip
+ // clean the list
+ d.flush(ipf)
+ return out, nil
+ }
+ return nil, err2
+}
+
+// DiscardOlderThan forgets all packets without any activity since
+// time t. It returns the number of FragmentList aka number of
+// fragment packets it has discarded.
+func (d *IPv4Defragmenter) DiscardOlderThan(t time.Time) int {
+ var nb int
+ d.Lock()
+ for k, v := range d.ipFlows {
+ if v.LastSeen.Before(t) {
+ nb = nb + 1
+ delete(d.ipFlows, k)
+ }
+ }
+ d.Unlock()
+ return nb
+}
+
+// flush the fragment list for a particular flow
+func (d *IPv4Defragmenter) flush(ipf ipv4) {
+ d.Lock()
+ fl := new(fragmentList)
+ d.ipFlows[ipf] = fl
+ d.Unlock()
+}
+
+// dontDefrag returns true if the IPv4 packet do not need
+// any defragmentation
+func (d *IPv4Defragmenter) dontDefrag(ip *layers.IPv4) bool {
+ // don't defrag packet with DF flag
+ if ip.Flags&layers.IPv4DontFragment != 0 {
+ return true
+ }
+ // don't defrag not fragmented ones
+ if ip.Flags&layers.IPv4MoreFragments == 0 && ip.FragOffset == 0 {
+ return true
+ }
+ return false
+}
+
+// securityChecks performs the needed security checks
+func (d *IPv4Defragmenter) securityChecks(ip *layers.IPv4) (bool, error) {
+ // don't allow too big fragment offset
+ if ip.FragOffset > IPv4MaximumFragmentOffset {
+ return false, fmt.Errorf("defrag: fragment offset too big "+
+ "(handcrafted? %d > %d)", ip.FragOffset, IPv4MaximumFragmentOffset)
+ }
+ fragOffset := ip.FragOffset * 8
+
+ // don't allow fragment that would oversize an IP packet
+ if fragOffset+ip.Length > IPv4MaximumSize {
+ return false, fmt.Errorf("defrag: fragment will overrun "+
+ "(handcrafted? %d > %d)", ip.FragOffset*8+ip.Length, IPv4MaximumSize)
+ }
+
+ return true, nil
+}
+
+// fragmentList holds a container/list used to contains IP
+// packets/fragments. It stores internal counters to track the
+// maximum total of byte, and the current length it has received.
+// It also stores a flag to know if he has seen the last packet.
+type fragmentList struct {
+ List list.List
+ Highest uint16
+ Current uint16
+ FinalReceived bool
+ LastSeen time.Time
+}
+
+// insert insert an IPv4 fragment/packet into the Fragment List
+// It use the following strategy : we are inserting fragment based
+// on their offset, latest first. This is sometimes called BSD-Right.
+// See: http://www.sans.org/reading-room/whitepapers/detection/ip-fragment-reassembly-scapy-33969
+func (f *fragmentList) insert(in *layers.IPv4, t time.Time) (*layers.IPv4, error) {
+ // TODO: should keep a copy of *in in the list
+ // or not (ie the packet source is reliable) ? -> depends on Lazy / last packet
+ fragOffset := in.FragOffset * 8
+ if fragOffset >= f.Highest {
+ f.List.PushBack(in)
+ } else {
+ for e := f.List.Front(); e != nil; e = e.Next() {
+ frag, _ := e.Value.(*layers.IPv4)
+ if in.FragOffset == frag.FragOffset {
+ // TODO: what if we receive a fragment
+ // that begins with duplicate data but
+ // *also* has new data? For example:
+ //
+ // AAAA
+ // BB
+ // BBCC
+ // DDDD
+ //
+ // In this situation we completely
+ // ignore CC and the complete packet can
+ // never be reassembled.
+ debug.Printf("defrag: ignoring frag %d as we already have it (duplicate?)\n",
+ fragOffset)
+ return nil, nil
+ }
+ if in.FragOffset < frag.FragOffset {
+ debug.Printf("defrag: inserting frag %d before existing frag %d\n",
+ fragOffset, frag.FragOffset*8)
+ f.List.InsertBefore(in, e)
+ break
+ }
+ }
+ }
+
+ f.LastSeen = t
+
+ fragLength := in.Length - 20
+ // After inserting the Fragment, we update the counters
+ if f.Highest < fragOffset+fragLength {
+ f.Highest = fragOffset + fragLength
+ }
+ f.Current = f.Current + fragLength
+
+ debug.Printf("defrag: insert ListLen: %d Highest:%d Current:%d\n",
+ f.List.Len(),
+ f.Highest, f.Current)
+
+ // Final Fragment ?
+ if in.Flags&layers.IPv4MoreFragments == 0 {
+ f.FinalReceived = true
+ }
+ // Ready to try defrag ?
+ if f.FinalReceived && f.Highest == f.Current {
+ return f.build(in)
+ }
+ return nil, nil
+}
+
+// Build builds the final datagram, modifying ip in place.
+// It puts priority to packet in the early position of the list.
+// See Insert for more details.
+func (f *fragmentList) build(in *layers.IPv4) (*layers.IPv4, error) {
+ var final []byte
+ var currentOffset uint16
+
+ debug.Printf("defrag: building the datagram \n")
+ for e := f.List.Front(); e != nil; e = e.Next() {
+ frag, _ := e.Value.(*layers.IPv4)
+ if frag.FragOffset*8 == currentOffset {
+ debug.Printf("defrag: building - adding %d\n", frag.FragOffset*8)
+ final = append(final, frag.Payload...)
+ currentOffset = currentOffset + frag.Length - 20
+ } else if frag.FragOffset*8 < currentOffset {
+ // overlapping fragment - let's take only what we need
+ startAt := currentOffset - frag.FragOffset*8
+ debug.Printf("defrag: building - overlapping, starting at %d\n",
+ startAt)
+ if startAt > frag.Length-20 {
+ return nil, errors.New("defrag: building - invalid fragment")
+ }
+ final = append(final, frag.Payload[startAt:]...)
+ currentOffset = currentOffset + frag.FragOffset*8
+ } else {
+ // Houston - we have an hole !
+ debug.Printf("defrag: hole found while building, " +
+ "stopping the defrag process\n")
+ return nil, errors.New("defrag: building - hole found")
+ }
+ debug.Printf("defrag: building - next is %d\n", currentOffset)
+ }
+
+ // TODO recompute IP Checksum
+ out := &layers.IPv4{
+ Version: in.Version,
+ IHL: in.IHL,
+ TOS: in.TOS,
+ Length: f.Highest,
+ Id: 0,
+ Flags: 0,
+ FragOffset: 0,
+ TTL: in.TTL,
+ Protocol: in.Protocol,
+ Checksum: 0,
+ SrcIP: in.SrcIP,
+ DstIP: in.DstIP,
+ Options: in.Options,
+ Padding: in.Padding,
+ }
+ out.Payload = final
+
+ return out, nil
+}
+
+// ipv4 is a struct to be used as a key.
+type ipv4 struct {
+ ip4 gopacket.Flow
+ id uint16
+}
+
+// newIPv4 returns a new initialized IPv4 Flow
+func newIPv4(ip *layers.IPv4) ipv4 {
+ return ipv4{
+ ip4: ip.NetworkFlow(),
+ id: ip.Id,
+ }
+}
+
+// IPv4Defragmenter is a struct which embedded a map of
+// all fragment/packet.
+type IPv4Defragmenter struct {
+ sync.RWMutex
+ ipFlows map[ipv4]*fragmentList
+}
+
+// NewIPv4Defragmenter returns a new IPv4Defragmenter
+// with an initialized map.
+func NewIPv4Defragmenter() *IPv4Defragmenter {
+ return &IPv4Defragmenter{
+ ipFlows: make(map[ipv4]*fragmentList),
+ }
+}
diff --git a/vendor/github.com/google/gopacket/ip4defrag/defrag_test.go b/vendor/github.com/google/gopacket/ip4defrag/defrag_test.go
new file mode 100644
index 0000000..1eb66d2
--- /dev/null
+++ b/vendor/github.com/google/gopacket/ip4defrag/defrag_test.go
@@ -0,0 +1,1396 @@
+// Copyright 2013 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package ip4defrag
+
+import (
+ "bytes"
+ "fmt"
+ "net"
+ "testing"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/bytediff"
+ "github.com/google/gopacket/layers"
+)
+
+func TestNotFrag(t *testing.T) {
+ ip := layers.IPv4{
+ Version: 4,
+ TTL: 220,
+ SrcIP: net.IPv4(1, 1, 1, 1),
+ DstIP: net.IPv4(2, 2, 2, 2),
+ Flags: layers.IPv4DontFragment,
+ }
+ defrag := NewIPv4Defragmenter()
+
+ out, err := defrag.DefragIPv4(&ip)
+ if out == nil || err != nil {
+ t.Errorf("defrag: this packet do not need to be defrag ['%s']", err)
+ }
+}
+
+func TestDefragPingMultipleFrags(t *testing.T) {
+ defrag := NewIPv4Defragmenter()
+
+ // We inject the 4 fragments and test the DefragIPv4 interface
+ gentestDefrag(t, defrag, testPing1Frag1, false, "Ping1Frag1")
+ gentestDefrag(t, defrag, testPing1Frag1, false, "Ping1Frag1")
+ gentestDefrag(t, defrag, testPing1Frag1, false, "Ping1Frag1")
+ gentestDefrag(t, defrag, testPing1Frag3, false, "Ping1Frag3")
+ gentestDefrag(t, defrag, testPing1Frag2, false, "Ping1Frag2")
+ ip := gentestDefrag(t, defrag, testPing1Frag4, true, "Ping1Frag4")
+
+ if len(ip.Payload) != 4508 {
+ t.Fatalf("defrag: expecting a packet of 4508 bytes, got %d", len(ip.Payload))
+ }
+
+ validPayload := append(testPing1Frag1[34:], testPing1Frag2[34:]...)
+ validPayload = append(validPayload, testPing1Frag3[34:]...)
+ validPayload = append(validPayload, testPing1Frag4[34:]...)
+
+ if bytes.Compare(validPayload, ip.Payload) != 0 {
+ fmt.Println(bytediff.BashOutput.String(
+ bytediff.Diff(validPayload, ip.Payload)))
+ t.Errorf("defrag: payload is not correctly defragmented")
+ }
+}
+
+func TestDefragPing1(t *testing.T) {
+ defrag := NewIPv4Defragmenter()
+
+ // We inject the 4 fragments and test the DefragIPv4 interface
+ gentestDefrag(t, defrag, testPing1Frag1, false, "Ping1Frag1")
+ gentestDefrag(t, defrag, testPing1Frag3, false, "Ping1Frag3")
+ gentestDefrag(t, defrag, testPing1Frag2, false, "Ping1Frag2")
+ ip := gentestDefrag(t, defrag, testPing1Frag4, true, "Ping1Frag4")
+
+ if len(ip.Payload) != 4508 {
+ t.Fatalf("defrag: expecting a packet of 4508 bytes, got %d", len(ip.Payload))
+ }
+
+ validPayload := append(testPing1Frag1[34:], testPing1Frag2[34:]...)
+ validPayload = append(validPayload, testPing1Frag3[34:]...)
+ validPayload = append(validPayload, testPing1Frag4[34:]...)
+
+ if bytes.Compare(validPayload, ip.Payload) != 0 {
+ fmt.Println(bytediff.BashOutput.String(
+ bytediff.Diff(validPayload, ip.Payload)))
+ t.Errorf("defrag: payload is not correctly defragmented")
+ }
+
+ // We redo the same test to handle duplication, and be sure
+ // that the internal list is correctly cleaned up.
+ gentestDefrag(t, defrag, testPing1Frag1, false, "Ping1Frag1")
+ gentestDefrag(t, defrag, testPing1Frag3, false, "Ping1Frag3")
+ gentestDefrag(t, defrag, testPing1Frag2, false, "Ping1Frag2")
+ ip2 := gentestDefrag(t, defrag, testPing1Frag4, true, "Ping1Frag4")
+
+ if bytes.Compare(ip2.Payload, ip.Payload) != 0 {
+ fmt.Println(bytediff.BashOutput.String(
+ bytediff.Diff(validPayload, ip.Payload)))
+ t.Errorf("defrag: ip and ip2 payload are different")
+ }
+}
+
+func TestDefragPing1and2(t *testing.T) {
+ debug = false
+ defrag := NewIPv4Defragmenter()
+
+ // We inject the 8 mixed fragments from two "flows"
+ // and test the DefragIPv4 interface
+ gentestDefrag(t, defrag, testPing1Frag1, false, "Ping1Frag1")
+ gentestDefrag(t, defrag, testPing1Frag3, false, "Ping1Frag3")
+ gentestDefrag(t, defrag, testPing2Frag3, false, "Ping2Frag3")
+ gentestDefrag(t, defrag, testPing2Frag4, false, "Ping2Frag4")
+ gentestDefrag(t, defrag, testPing1Frag2, false, "Ping1Frag2")
+ gentestDefrag(t, defrag, testPing2Frag1, false, "Ping2Frag1")
+ ip := gentestDefrag(t, defrag, testPing1Frag4, true, "Ping1Frag4")
+
+ if len(ip.Payload) != 4508 {
+ t.Fatalf("defrag: expecting a packet Ping1 of 4508 bytes, got %d",
+ len(ip.Payload))
+ }
+
+ validPayload := append(testPing1Frag1[34:], testPing1Frag2[34:]...)
+ validPayload = append(validPayload, testPing1Frag3[34:]...)
+ validPayload = append(validPayload, testPing1Frag4[34:]...)
+
+ if bytes.Compare(validPayload, ip.Payload) != 0 {
+ fmt.Println(bytediff.BashOutput.String(
+ bytediff.Diff(validPayload, ip.Payload)))
+ t.Errorf("defrag: payload Ping1 is not correctly defragmented")
+ }
+
+ ip = gentestDefrag(t, defrag, testPing2Frag2, true, "Ping2Frag2")
+ if len(ip.Payload) != 4508 {
+ t.Fatalf("defrag: expecting a packet Ping2 of 4508 bytes, got %d",
+ len(ip.Payload))
+ }
+
+ validPayload2 := append(testPing2Frag1[34:], testPing2Frag2[34:]...)
+ validPayload2 = append(validPayload2, testPing2Frag3[34:]...)
+ validPayload2 = append(validPayload2, testPing2Frag4[34:]...)
+
+ if bytes.Compare(validPayload2, ip.Payload) != 0 {
+ fmt.Println(bytediff.BashOutput.String(
+ bytediff.Diff(validPayload2, ip.Payload)))
+ t.Errorf("defrag: payload Ping2 is not correctly defragmented")
+ }
+ debug = false
+}
+
+func TestDefragPingTooMuch(t *testing.T) {
+ defrag := NewIPv4Defragmenter()
+
+ ip1 := layers.IPv4{
+ Version: 4,
+ TTL: 15,
+ SrcIP: net.IPv4(1, 1, 1, 1),
+ DstIP: net.IPv4(2, 2, 2, 2),
+ Id: 0xcc,
+ FragOffset: 0,
+ Length: 500,
+ Flags: layers.IPv4MoreFragments,
+ }
+ defrag.DefragIPv4(&ip1)
+ for i := 2; i < 8; i = i + 1 {
+ nip := ip1
+ nip.FragOffset = ip1.Length * uint16(i)
+ out, err := defrag.DefragIPv4(&nip)
+ if err != nil || out != nil {
+ t.Fatalf("defrag: %s", err)
+ }
+
+ }
+ ip8 := ip1
+ ip8.FragOffset = 666
+
+ _, err := defrag.DefragIPv4(&ip8)
+ if err == nil {
+ t.Fatalf("defrag: Maximum number of fragments are supposed to be 8")
+ }
+}
+
+func gentestDefrag(t *testing.T, defrag *IPv4Defragmenter, buf []byte, expect bool, label string) *layers.IPv4 {
+ p := gopacket.NewPacket(buf, layers.LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ ipL := p.Layer(layers.LayerTypeIPv4)
+ in, _ := ipL.(*layers.IPv4)
+
+ out, err := defrag.DefragIPv4(in)
+ if err != nil {
+ t.Fatalf("defrag: %s", err)
+ }
+ status := false
+ if out != nil {
+ status = true
+ }
+ if status != expect {
+ t.Fatalf("defrag: a fragment was not detected (%s)", label)
+ }
+ return out
+}
+
+/* Frame 1-1 (1514 bytes) */
+var testPing1Frag1 = []byte{
+ 0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */
+ 0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */
+ 0x05, 0xdc, 0xb3, 0xe1, 0x20, 0x00, 0x40, 0x01, /* .... .@. */
+ 0xcf, 0x70, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* .p...... */
+ 0x08, 0x08, 0x08, 0x00, 0x45, 0xa6, 0x14, 0xbf, /* ....E... */
+ 0x00, 0x01, 0x9e, 0x3e, 0x20, 0x55, 0x00, 0x00, /* ...> U.. */
+ 0x00, 0x00, 0x16, 0x91, 0x0d, 0x00, 0x00, 0x00, /* ........ */
+ 0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, /* .. */
+}
+
+/* Frame (1514 bytes) */
+var testPing1Frag2 = []byte{
+ 0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */
+ 0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */
+ 0x05, 0xdc, 0xb3, 0xe1, 0x20, 0xb9, 0x40, 0x01, /* .... .@. */
+ 0xce, 0xb7, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* ........ */
+ 0x08, 0x08, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, /* .. */
+}
+
+/* Frame (1514 bytes) */
+var testPing1Frag3 = []byte{
+ 0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */
+ 0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */
+ 0x05, 0xdc, 0xb3, 0xe1, 0x21, 0x72, 0x40, 0x01, /* ....!r@. */
+ 0xcd, 0xfe, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* ........ */
+ 0x08, 0x08, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, /* NO */
+}
+
+/* Frame (102 bytes) */
+var testPing1Frag4 = []byte{
+ 0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */
+ 0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */
+ 0x00, 0x58, 0xb3, 0xe1, 0x02, 0x2b, 0x40, 0x01, /* .X...+@. */
+ 0xf2, 0xc9, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* ........ */
+ 0x08, 0x08, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* ..PQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, /* ...... */
+}
+
+/* Frame (1514 bytes) */
+var testPing2Frag1 = []byte{
+ 0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */
+ 0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */
+ 0x05, 0xdc, 0xb4, 0x9e, 0x20, 0x00, 0x40, 0x01, /* .... .@. */
+ 0xce, 0xb3, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* ........ */
+ 0x08, 0x08, 0x08, 0x00, 0x9e, 0xa0, 0x14, 0xbf, /* ........ */
+ 0x00, 0x02, 0x9f, 0x3e, 0x20, 0x55, 0x00, 0x00, /* ...> U.. */
+ 0x00, 0x00, 0xbc, 0x95, 0x0d, 0x00, 0x00, 0x00, /* ........ */
+ 0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, /* .. */
+}
+
+/* Frame (1514 bytes) */
+var testPing2Frag2 = []byte{
+ 0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */
+ 0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */
+ 0x05, 0xdc, 0xb4, 0x9e, 0x20, 0xb9, 0x40, 0x01, /* .... .@. */
+ 0xcd, 0xfa, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* ........ */
+ 0x08, 0x08, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, /* .. */
+}
+
+/* Frame (1514 bytes) */
+var testPing2Frag3 = []byte{
+ 0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */
+ 0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */
+ 0x05, 0xdc, 0xb4, 0x9e, 0x21, 0x72, 0x40, 0x01, /* ....!r@. */
+ 0xcd, 0x41, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* .A...... */
+ 0x08, 0x08, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+ 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+ 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+ 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+ 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+ 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+ 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+ 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+ 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+ 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+ 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+ 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+ 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+ 0x4e, 0x4f, /* NO */
+}
+
+/* Frame (102 bytes) */
+var testPing2Frag4 = []byte{
+ 0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */
+ 0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */
+ 0x00, 0x58, 0xb4, 0x9e, 0x02, 0x2b, 0x40, 0x01, /* .X...+@. */
+ 0xf2, 0x0c, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* ........ */
+ 0x08, 0x08, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* ..PQRSTU */
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+ 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+ 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+ 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+ 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+ 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+ 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, /* ...... */
+}
diff --git a/vendor/github.com/google/gopacket/layerclass.go b/vendor/github.com/google/gopacket/layerclass.go
new file mode 100644
index 0000000..775cd09
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layerclass.go
@@ -0,0 +1,107 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package gopacket
+
+// LayerClass is a set of LayerTypes, used for grabbing one of a number of
+// different types from a packet.
+type LayerClass interface {
+ // Contains returns true if the given layer type should be considered part
+ // of this layer class.
+ Contains(LayerType) bool
+ // LayerTypes returns the set of all layer types in this layer class.
+ // Note that this may not be a fast operation on all LayerClass
+ // implementations.
+ LayerTypes() []LayerType
+}
+
+// Contains implements LayerClass.
+func (l LayerType) Contains(a LayerType) bool {
+ return l == a
+}
+
+// LayerTypes implements LayerClass.
+func (l LayerType) LayerTypes() []LayerType {
+ return []LayerType{l}
+}
+
+// LayerClassSlice implements a LayerClass with a slice.
+type LayerClassSlice []bool
+
+// Contains returns true if the given layer type should be considered part
+// of this layer class.
+func (s LayerClassSlice) Contains(t LayerType) bool {
+ return int(t) < len(s) && s[t]
+}
+
+// LayerTypes returns all layer types in this LayerClassSlice.
+// Because of LayerClassSlice's implementation, this could be quite slow.
+func (s LayerClassSlice) LayerTypes() (all []LayerType) {
+ for i := 0; i < len(s); i++ {
+ if s[i] {
+ all = append(all, LayerType(i))
+ }
+ }
+ return
+}
+
+// NewLayerClassSlice creates a new LayerClassSlice by creating a slice of
+// size max(types) and setting slice[t] to true for each type t. Note, if
+// you implement your own LayerType and give it a high value, this WILL create
+// a very large slice.
+func NewLayerClassSlice(types []LayerType) LayerClassSlice {
+ var max LayerType
+ for _, typ := range types {
+ if typ > max {
+ max = typ
+ }
+ }
+ t := make([]bool, int(max+1))
+ for _, typ := range types {
+ t[typ] = true
+ }
+ return t
+}
+
+// LayerClassMap implements a LayerClass with a map.
+type LayerClassMap map[LayerType]bool
+
+// Contains returns true if the given layer type should be considered part
+// of this layer class.
+func (m LayerClassMap) Contains(t LayerType) bool {
+ return m[t]
+}
+
+// LayerTypes returns all layer types in this LayerClassMap.
+func (m LayerClassMap) LayerTypes() (all []LayerType) {
+ for t := range m {
+ all = append(all, t)
+ }
+ return
+}
+
+// NewLayerClassMap creates a LayerClassMap and sets map[t] to true for each
+// type in types.
+func NewLayerClassMap(types []LayerType) LayerClassMap {
+ m := LayerClassMap{}
+ for _, typ := range types {
+ m[typ] = true
+ }
+ return m
+}
+
+// NewLayerClass creates a LayerClass, attempting to be smart about which type
+// it creates based on which types are passed in.
+func NewLayerClass(types []LayerType) LayerClass {
+ for _, typ := range types {
+ if typ > maxLayerType {
+ // NewLayerClassSlice could create a very large object, so instead create
+ // a map.
+ return NewLayerClassMap(types)
+ }
+ }
+ return NewLayerClassSlice(types)
+}
diff --git a/vendor/github.com/google/gopacket/layers/.linted b/vendor/github.com/google/gopacket/layers/.linted
new file mode 100644
index 0000000..afe7689
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/.linted
@@ -0,0 +1,41 @@
+arp.go
+base.go
+base_test.go
+bfd.go
+cdp.go
+ctp.go
+decode_test.go
+dhcp_test.go
+dhcpv4.go
+dns.go
+dns_test.go
+doc.go
+dot11_test.go
+dot1q.go
+dot1q_test.go
+eapol.go
+etherip.go
+fddi.go
+gen.go
+gre.go
+gre_test.go
+iana_ports.go
+icmp6_test.go
+igmp_test.go
+ip4_test.go
+ipsec.go
+ipsec_test.go
+loopback.go
+mpls_test.go
+ntp_test.go
+ports.go
+ppp.go
+prism_test.go
+radiotap_test.go
+sflow_test.go
+tcp_test.go
+udp_test.go
+usb_test.go
+vrrp_test.go
+vxlan.go
+vxlan_test.go
diff --git a/vendor/github.com/google/gopacket/layers/arp.go b/vendor/github.com/google/gopacket/layers/arp.go
new file mode 100644
index 0000000..49e05ac
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/arp.go
@@ -0,0 +1,109 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "errors"
+
+ "github.com/google/gopacket"
+)
+
+// Potential values for ARP.Operation.
+const (
+ ARPRequest = 1
+ ARPReply = 2
+)
+
+// ARP is a ARP packet header.
+type ARP struct {
+ BaseLayer
+ AddrType LinkType
+ Protocol EthernetType
+ HwAddressSize uint8
+ ProtAddressSize uint8
+ Operation uint16
+ SourceHwAddress []byte
+ SourceProtAddress []byte
+ DstHwAddress []byte
+ DstProtAddress []byte
+}
+
+// LayerType returns LayerTypeARP
+func (arp *ARP) LayerType() gopacket.LayerType { return LayerTypeARP }
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (arp *ARP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ arp.AddrType = LinkType(binary.BigEndian.Uint16(data[0:2]))
+ arp.Protocol = EthernetType(binary.BigEndian.Uint16(data[2:4]))
+ arp.HwAddressSize = data[4]
+ arp.ProtAddressSize = data[5]
+ arp.Operation = binary.BigEndian.Uint16(data[6:8])
+ arp.SourceHwAddress = data[8 : 8+arp.HwAddressSize]
+ arp.SourceProtAddress = data[8+arp.HwAddressSize : 8+arp.HwAddressSize+arp.ProtAddressSize]
+ arp.DstHwAddress = data[8+arp.HwAddressSize+arp.ProtAddressSize : 8+2*arp.HwAddressSize+arp.ProtAddressSize]
+ arp.DstProtAddress = data[8+2*arp.HwAddressSize+arp.ProtAddressSize : 8+2*arp.HwAddressSize+2*arp.ProtAddressSize]
+
+ arpLength := 8 + 2*arp.HwAddressSize + 2*arp.ProtAddressSize
+ arp.Contents = data[:arpLength]
+ arp.Payload = data[arpLength:]
+ return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (arp *ARP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ size := 8 + len(arp.SourceHwAddress) + len(arp.SourceProtAddress) + len(arp.DstHwAddress) + len(arp.DstProtAddress)
+ bytes, err := b.PrependBytes(size)
+ if err != nil {
+ return err
+ }
+ if opts.FixLengths {
+ if len(arp.SourceHwAddress) != len(arp.DstHwAddress) {
+ return errors.New("mismatched hardware address sizes")
+ }
+ arp.HwAddressSize = uint8(len(arp.SourceHwAddress))
+ if len(arp.SourceProtAddress) != len(arp.DstProtAddress) {
+ return errors.New("mismatched prot address sizes")
+ }
+ arp.ProtAddressSize = uint8(len(arp.SourceProtAddress))
+ }
+ binary.BigEndian.PutUint16(bytes, uint16(arp.AddrType))
+ binary.BigEndian.PutUint16(bytes[2:], uint16(arp.Protocol))
+ bytes[4] = arp.HwAddressSize
+ bytes[5] = arp.ProtAddressSize
+ binary.BigEndian.PutUint16(bytes[6:], arp.Operation)
+ start := 8
+ for _, addr := range [][]byte{
+ arp.SourceHwAddress,
+ arp.SourceProtAddress,
+ arp.DstHwAddress,
+ arp.DstProtAddress,
+ } {
+ copy(bytes[start:], addr)
+ start += len(addr)
+ }
+ return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (arp *ARP) CanDecode() gopacket.LayerClass {
+ return LayerTypeARP
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (arp *ARP) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypePayload
+}
+
+func decodeARP(data []byte, p gopacket.PacketBuilder) error {
+
+ arp := &ARP{}
+ return decodingLayerDecoder(arp, data, p)
+}
diff --git a/vendor/github.com/google/gopacket/layers/base.go b/vendor/github.com/google/gopacket/layers/base.go
new file mode 100644
index 0000000..cd59b46
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/base.go
@@ -0,0 +1,52 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "github.com/google/gopacket"
+)
+
+// BaseLayer is a convenience struct which implements the LayerData and
+// LayerPayload functions of the Layer interface.
+type BaseLayer struct {
+ // Contents is the set of bytes that make up this layer. IE: for an
+ // Ethernet packet, this would be the set of bytes making up the
+ // Ethernet frame.
+ Contents []byte
+ // Payload is the set of bytes contained by (but not part of) this
+ // Layer. Again, to take Ethernet as an example, this would be the
+ // set of bytes encapsulated by the Ethernet protocol.
+ Payload []byte
+}
+
+// LayerContents returns the bytes of the packet layer.
+func (b *BaseLayer) LayerContents() []byte { return b.Contents }
+
+// LayerPayload returns the bytes contained within the packet layer.
+func (b *BaseLayer) LayerPayload() []byte { return b.Payload }
+
+type layerDecodingLayer interface {
+ gopacket.Layer
+ DecodeFromBytes([]byte, gopacket.DecodeFeedback) error
+ NextLayerType() gopacket.LayerType
+}
+
+func decodingLayerDecoder(d layerDecodingLayer, data []byte, p gopacket.PacketBuilder) error {
+ err := d.DecodeFromBytes(data, p)
+ if err != nil {
+ return err
+ }
+ p.AddLayer(d)
+ next := d.NextLayerType()
+ if next == gopacket.LayerTypeZero {
+ return nil
+ }
+ return p.NextDecoder(next)
+}
+
+// hacky way to zero out memory... there must be a better way?
+var lotsOfZeros [1024]byte
diff --git a/vendor/github.com/google/gopacket/layers/base_test.go b/vendor/github.com/google/gopacket/layers/base_test.go
new file mode 100644
index 0000000..4be7480
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/base_test.go
@@ -0,0 +1,42 @@
+// Copyright 2012, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// This file contains some test helper functions.
+
+package layers
+
+import (
+ "github.com/google/gopacket"
+ "testing"
+)
+
+func min(a, b int) int {
+ if a < b {
+ return a
+ }
+ return b
+}
+
+func checkLayers(p gopacket.Packet, want []gopacket.LayerType, t *testing.T) {
+ layers := p.Layers()
+ t.Log("Checking packet layers, want", want)
+ for _, l := range layers {
+ t.Logf(" Got layer %v, %d bytes, payload of %d bytes", l.LayerType(),
+ len(l.LayerContents()), len(l.LayerPayload()))
+ }
+ t.Log(p)
+ if len(layers) != len(want) {
+ t.Errorf(" Number of layers mismatch: got %d want %d", len(layers),
+ len(want))
+ return
+ }
+ for i, l := range layers {
+ if l.LayerType() != want[i] {
+ t.Errorf(" Layer %d mismatch: got %v want %v", i, l.LayerType(),
+ want[i])
+ }
+ }
+}
diff --git a/vendor/github.com/google/gopacket/layers/bfd.go b/vendor/github.com/google/gopacket/layers/bfd.go
new file mode 100644
index 0000000..43030fb
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/bfd.go
@@ -0,0 +1,481 @@
+// Copyright 2017 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+//
+
+package layers
+
+import (
+ "encoding/binary"
+ "errors"
+
+ "github.com/google/gopacket"
+)
+
+// BFD Control Packet Format
+// -------------------------
+// The current version of BFD's RFC (RFC 5880) contains the following
+// diagram for the BFD Control packet format:
+//
+// 0 1 2 3
+// 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
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |Vers | Diag |Sta|P|F|C|A|D|M| Detect Mult | Length |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | My Discriminator |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Your Discriminator |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Desired Min TX Interval |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Required Min RX Interval |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Required Min Echo RX Interval |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//
+// An optional Authentication Section MAY be present:
+//
+// 0 1 2 3
+// 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
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Auth Type | Auth Len | Authentication Data... |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//
+//
+// Simple Password Authentication Section Format
+// ---------------------------------------------
+// 0 1 2 3
+// 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
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Auth Type | Auth Len | Auth Key ID | Password... |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | ... |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//
+//
+// Keyed MD5 and Meticulous Keyed MD5 Authentication Section Format
+// ----------------------------------------------------------------
+// 0 1 2 3
+// 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
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Auth Type | Auth Len | Auth Key ID | Reserved |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Sequence Number |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Auth Key/Digest... |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | ... |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//
+//
+// Keyed SHA1 and Meticulous Keyed SHA1 Authentication Section Format
+// ------------------------------------------------------------------
+// 0 1 2 3
+// 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
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Auth Type | Auth Len | Auth Key ID | Reserved |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Sequence Number |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Auth Key/Hash... |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | ... |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//
+// From https://tools.ietf.org/rfc/rfc5880.txt
+const bfdMinimumRecordSizeInBytes int = 24
+
+// BFDVersion represents the version as decoded from the BFD control message
+type BFDVersion uint8
+
+// BFDDiagnostic represents diagnostic infomation about a BFD session
+type BFDDiagnostic uint8
+
+// constants that define BFDDiagnostic flags
+const (
+ BFDDiagnosticNone BFDDiagnostic = 0 // No Diagnostic
+ BFDDiagnosticTimeExpired BFDDiagnostic = 1 // Control Detection Time Expired
+ BFDDiagnosticEchoFailed BFDDiagnostic = 2 // Echo Function Failed
+ BFDDiagnosticNeighborSignalDown BFDDiagnostic = 3 // Neighbor Signaled Session Down
+ BFDDiagnosticForwardPlaneReset BFDDiagnostic = 4 // Forwarding Plane Reset
+ BFDDiagnosticPathDown BFDDiagnostic = 5 // Path Down
+ BFDDiagnosticConcatPathDown BFDDiagnostic = 6 // Concatenated Path Down
+ BFDDiagnosticAdminDown BFDDiagnostic = 7 // Administratively Down
+ BFDDiagnosticRevConcatPathDown BFDDiagnostic = 8 // Reverse Concatenated Path Dow
+)
+
+// String returns a string version of BFDDiagnostic
+func (bd BFDDiagnostic) String() string {
+ switch bd {
+ default:
+ return "Unknown"
+ case BFDDiagnosticNone:
+ return "None"
+ case BFDDiagnosticTimeExpired:
+ return "Control Detection Time Expired"
+ case BFDDiagnosticEchoFailed:
+ return "Echo Function Failed"
+ case BFDDiagnosticNeighborSignalDown:
+ return "Neighbor Signaled Session Down"
+ case BFDDiagnosticForwardPlaneReset:
+ return "Forwarding Plane Reset"
+ case BFDDiagnosticPathDown:
+ return "Path Down"
+ case BFDDiagnosticConcatPathDown:
+ return "Concatenated Path Down"
+ case BFDDiagnosticAdminDown:
+ return "Administratively Down"
+ case BFDDiagnosticRevConcatPathDown:
+ return "Reverse Concatenated Path Down"
+ }
+}
+
+// BFDState represents the state of a BFD session
+type BFDState uint8
+
+// constants that define BFDState
+const (
+ BFDStateAdminDown BFDState = 0
+ BFDStateDown BFDState = 1
+ BFDStateInit BFDState = 2
+ BFDStateUp BFDState = 3
+)
+
+// String returns a string version of BFDState
+func (s BFDState) String() string {
+ switch s {
+ default:
+ return "Unknown"
+ case BFDStateAdminDown:
+ return "Admin Down"
+ case BFDStateDown:
+ return "Down"
+ case BFDStateInit:
+ return "Init"
+ case BFDStateUp:
+ return "Up"
+ }
+}
+
+// BFDDetectMultiplier represents the negotiated transmit interval,
+// multiplied by this value, provides the Detection Time for the
+// receiving system in Asynchronous mode.
+type BFDDetectMultiplier uint8
+
+// BFDDiscriminator is a unique, nonzero discriminator value used
+// to demultiplex multiple BFD sessions between the same pair of systems.
+type BFDDiscriminator uint32
+
+// BFDTimeInterval represents a time interval in microseconds
+type BFDTimeInterval uint32
+
+// BFDAuthType represents the authentication used in the BFD session
+type BFDAuthType uint8
+
+// constants that define the BFDAuthType
+const (
+ BFDAuthTypeNone BFDAuthType = 0 // No Auth
+ BFDAuthTypePassword BFDAuthType = 1 // Simple Password
+ BFDAuthTypeKeyedMD5 BFDAuthType = 2 // Keyed MD5
+ BFDAuthTypeMeticulousKeyedMD5 BFDAuthType = 3 // Meticulous Keyed MD5
+ BFDAuthTypeKeyedSHA1 BFDAuthType = 4 // Keyed SHA1
+ BFDAuthTypeMeticulousKeyedSHA1 BFDAuthType = 5 // Meticulous Keyed SHA1
+)
+
+// String returns a string version of BFDAuthType
+func (at BFDAuthType) String() string {
+ switch at {
+ default:
+ return "Unknown"
+ case BFDAuthTypeNone:
+ return "No Authentication"
+ case BFDAuthTypePassword:
+ return "Simple Password"
+ case BFDAuthTypeKeyedMD5:
+ return "Keyed MD5"
+ case BFDAuthTypeMeticulousKeyedMD5:
+ return "Meticulous Keyed MD5"
+ case BFDAuthTypeKeyedSHA1:
+ return "Keyed SHA1"
+ case BFDAuthTypeMeticulousKeyedSHA1:
+ return "Meticulous Keyed SHA1"
+ }
+}
+
+// BFDAuthKeyID represents the authentication key ID in use for
+// this packet. This allows multiple keys to be active simultaneously.
+type BFDAuthKeyID uint8
+
+// BFDAuthSequenceNumber represents the sequence number for this packet.
+// For Keyed Authentication, this value is incremented occasionally. For
+// Meticulous Keyed Authentication, this value is incremented for each
+// successive packet transmitted for a session. This provides protection
+// against replay attacks.
+type BFDAuthSequenceNumber uint32
+
+// BFDAuthData represents the authentication key or digest
+type BFDAuthData []byte
+
+// BFDAuthHeader represents authentication data used in the BFD session
+type BFDAuthHeader struct {
+ AuthType BFDAuthType
+ KeyID BFDAuthKeyID
+ SequenceNumber BFDAuthSequenceNumber
+ Data BFDAuthData
+}
+
+// Length returns the data length of the BFDAuthHeader based on the
+// authentication type
+func (h *BFDAuthHeader) Length() int {
+ switch h.AuthType {
+ case BFDAuthTypePassword:
+ return 3 + len(h.Data)
+ case BFDAuthTypeKeyedMD5, BFDAuthTypeMeticulousKeyedMD5:
+ return 8 + len(h.Data)
+ case BFDAuthTypeKeyedSHA1, BFDAuthTypeMeticulousKeyedSHA1:
+ return 8 + len(h.Data)
+ default:
+ return 0
+ }
+}
+
+// BFD represents a BFD control message packet whose payload contains
+// the control information required to for a BFD session.
+//
+// References
+// ----------
+//
+// Wikipedia's BFD entry:
+// https://en.wikipedia.org/wiki/Bidirectional_Forwarding_Detection
+// This is the best place to get an overview of BFD.
+//
+// RFC 5880 "Bidirectional Forwarding Detection (BFD)" (2010)
+// https://tools.ietf.org/html/rfc5880
+// This is the original BFD specification.
+//
+// RFC 5881 "Bidirectional Forwarding Detection (BFD) for IPv4 and IPv6 (Single Hop)" (2010)
+// https://tools.ietf.org/html/rfc5881
+// Describes the use of the Bidirectional Forwarding Detection (BFD)
+// protocol over IPv4 and IPv6 for single IP hops.
+type BFD struct {
+ BaseLayer // Stores the packet bytes and payload bytes.
+
+ Version BFDVersion // Version of the BFD protocol.
+ Diagnostic BFDDiagnostic // Diagnostic code for last state change
+ State BFDState // Current state
+ Poll bool // Requesting verification
+ Final bool // Responding to a received BFD Control packet that had the Poll (P) bit set.
+ ControlPlaneIndependent bool // BFD implementation does not share fate with its control plane
+ AuthPresent bool // Authentication Section is present and the session is to be authenticated
+ Demand bool // Demand mode is active
+ Multipoint bool // For future point-to-multipoint extensions. Must always be zero
+ DetectMultiplier BFDDetectMultiplier // Detection time multiplier
+ MyDiscriminator BFDDiscriminator // A unique, nonzero discriminator value
+ YourDiscriminator BFDDiscriminator // discriminator received from the remote system.
+ DesiredMinTxInterval BFDTimeInterval // Minimum interval, in microseconds, the local system would like to use when transmitting BFD Control packets
+ RequiredMinRxInterval BFDTimeInterval // Minimum interval, in microseconds, between received BFD Control packets that this system is capable of supporting
+ RequiredMinEchoRxInterval BFDTimeInterval // Minimum interval, in microseconds, between received BFD Echo packets that this system is capable of supporting
+ AuthHeader *BFDAuthHeader // Authentication data, variable length.
+}
+
+// Length returns the data length of a BFD Control message which
+// changes based on the presence and type of authentication
+// contained in the message
+func (d *BFD) Length() int {
+ if d.AuthPresent && (d.AuthHeader != nil) {
+ return bfdMinimumRecordSizeInBytes + d.AuthHeader.Length()
+ }
+
+ return bfdMinimumRecordSizeInBytes
+}
+
+// LayerType returns the layer type of the BFD object, which is LayerTypeBFD.
+func (d *BFD) LayerType() gopacket.LayerType {
+ return LayerTypeBFD
+}
+
+// decodeBFD analyses a byte slice and attempts to decode it as a BFD
+// control packet
+//
+// If it succeeds, it loads p with information about the packet and returns nil.
+// If it fails, it returns an error (non nil).
+//
+// This function is employed in layertypes.go to register the BFD layer.
+func decodeBFD(data []byte, p gopacket.PacketBuilder) error {
+
+ // Attempt to decode the byte slice.
+ d := &BFD{}
+ err := d.DecodeFromBytes(data, p)
+ if err != nil {
+ return err
+ }
+
+ // If the decoding worked, add the layer to the packet and set it
+ // as the application layer too, if there isn't already one.
+ p.AddLayer(d)
+ p.SetApplicationLayer(d)
+
+ return nil
+}
+
+// DecodeFromBytes analyses a byte slice and attempts to decode it as a BFD
+// control packet.
+//
+// Upon succeeds, it loads the BFD object with information about the packet
+// and returns nil.
+// Upon failure, it returns an error (non nil).
+func (d *BFD) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+
+ // If the data block is too short to be a BFD record, then return an error.
+ if len(data) < bfdMinimumRecordSizeInBytes {
+ df.SetTruncated()
+ return errors.New("BFD packet too short")
+ }
+
+ pLen := uint8(data[3])
+ if len(data) != int(pLen) {
+ return errors.New("BFD packet length does not match")
+ }
+
+ // BFD type embeds type BaseLayer which contains two fields:
+ // Contents is supposed to contain the bytes of the data at this level.
+ // Payload is supposed to contain the payload of this level.
+ // Here we set the baselayer to be the bytes of the BFD record.
+ d.BaseLayer = BaseLayer{Contents: data[:len(data)]}
+
+ // Extract the fields from the block of bytes.
+ // To make sense of this, refer to the packet diagram
+ // above and the section on endian conventions.
+
+ // The first few fields are all packed into the first 32 bits. Unpack them.
+ d.Version = BFDVersion(((data[0] & 0xE0) >> 5))
+ d.Diagnostic = BFDDiagnostic(data[0] & 0x1F)
+ data = data[1:]
+
+ d.State = BFDState((data[0] & 0xC0) >> 6)
+ d.Poll = data[0]&0x20 != 0
+ d.Final = data[0]&0x10 != 0
+ d.ControlPlaneIndependent = data[0]&0x08 != 0
+ d.AuthPresent = data[0]&0x04 != 0
+ d.Demand = data[0]&0x02 != 0
+ d.Multipoint = data[0]&0x01 != 0
+ data = data[1:]
+
+ data, d.DetectMultiplier = data[1:], BFDDetectMultiplier(data[0])
+ data, _ = data[1:], uint8(data[0]) // Consume length
+
+ // The remaining fields can just be copied in big endian order.
+ data, d.MyDiscriminator = data[4:], BFDDiscriminator(binary.BigEndian.Uint32(data[:4]))
+ data, d.YourDiscriminator = data[4:], BFDDiscriminator(binary.BigEndian.Uint32(data[:4]))
+ data, d.DesiredMinTxInterval = data[4:], BFDTimeInterval(binary.BigEndian.Uint32(data[:4]))
+ data, d.RequiredMinRxInterval = data[4:], BFDTimeInterval(binary.BigEndian.Uint32(data[:4]))
+ data, d.RequiredMinEchoRxInterval = data[4:], BFDTimeInterval(binary.BigEndian.Uint32(data[:4]))
+
+ if d.AuthPresent && (len(data) > 2) {
+ d.AuthHeader = &BFDAuthHeader{}
+ data, d.AuthHeader.AuthType = data[1:], BFDAuthType(data[0])
+ data, _ = data[1:], uint8(data[0]) // Consume length
+ data, d.AuthHeader.KeyID = data[1:], BFDAuthKeyID(data[0])
+
+ switch d.AuthHeader.AuthType {
+ case BFDAuthTypePassword:
+ d.AuthHeader.Data = BFDAuthData(data)
+ case BFDAuthTypeKeyedMD5, BFDAuthTypeMeticulousKeyedMD5:
+ // Skipped reserved byte
+ data, d.AuthHeader.SequenceNumber = data[5:], BFDAuthSequenceNumber(binary.BigEndian.Uint32(data[1:5]))
+ d.AuthHeader.Data = BFDAuthData(data)
+ case BFDAuthTypeKeyedSHA1, BFDAuthTypeMeticulousKeyedSHA1:
+ // Skipped reserved byte
+ data, d.AuthHeader.SequenceNumber = data[5:], BFDAuthSequenceNumber(binary.BigEndian.Uint32(data[1:5]))
+ d.AuthHeader.Data = BFDAuthData(data)
+ }
+ }
+
+ return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (d *BFD) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ data, err := b.PrependBytes(bfdMinimumRecordSizeInBytes)
+ if err != nil {
+ return err
+ }
+
+ // Pack the first few fields into the first 32 bits.
+ data[0] = byte(byte(d.Version<<5) | byte(d.Diagnostic))
+ h := uint8(0)
+ h |= (uint8(d.State) << 6)
+ h |= (uint8(bool2uint8(d.Poll)) << 5)
+ h |= (uint8(bool2uint8(d.Final)) << 4)
+ h |= (uint8(bool2uint8(d.ControlPlaneIndependent)) << 3)
+ h |= (uint8(bool2uint8(d.AuthPresent)) << 2)
+ h |= (uint8(bool2uint8(d.Demand)) << 1)
+ h |= uint8(bool2uint8(d.Multipoint))
+ data[1] = byte(h)
+ data[2] = byte(d.DetectMultiplier)
+ data[3] = byte(d.Length())
+
+ // The remaining fields can just be copied in big endian order.
+ binary.BigEndian.PutUint32(data[4:], uint32(d.MyDiscriminator))
+ binary.BigEndian.PutUint32(data[8:], uint32(d.YourDiscriminator))
+ binary.BigEndian.PutUint32(data[12:], uint32(d.DesiredMinTxInterval))
+ binary.BigEndian.PutUint32(data[16:], uint32(d.RequiredMinRxInterval))
+ binary.BigEndian.PutUint32(data[20:], uint32(d.RequiredMinEchoRxInterval))
+
+ if d.AuthPresent && (d.AuthHeader != nil) {
+ auth, err := b.AppendBytes(int(d.AuthHeader.Length()))
+ if err != nil {
+ return err
+ }
+
+ auth[0] = byte(d.AuthHeader.AuthType)
+ auth[1] = byte(d.AuthHeader.Length())
+ auth[2] = byte(d.AuthHeader.KeyID)
+
+ switch d.AuthHeader.AuthType {
+ case BFDAuthTypePassword:
+ copy(auth[3:], d.AuthHeader.Data)
+ case BFDAuthTypeKeyedMD5, BFDAuthTypeMeticulousKeyedMD5:
+ auth[3] = byte(0)
+ binary.BigEndian.PutUint32(auth[4:], uint32(d.AuthHeader.SequenceNumber))
+ copy(auth[8:], d.AuthHeader.Data)
+ case BFDAuthTypeKeyedSHA1, BFDAuthTypeMeticulousKeyedSHA1:
+ auth[3] = byte(0)
+ binary.BigEndian.PutUint32(auth[4:], uint32(d.AuthHeader.SequenceNumber))
+ copy(auth[8:], d.AuthHeader.Data)
+ }
+ }
+
+ return nil
+}
+
+// CanDecode returns a set of layers that BFD objects can decode.
+// As BFD objects can only decide the BFD layer, we can return just that layer.
+// Apparently a single layer type implements LayerClass.
+func (d *BFD) CanDecode() gopacket.LayerClass {
+ return LayerTypeBFD
+}
+
+// NextLayerType specifies the next layer that GoPacket should attempt to
+// analyse after this (BFD) layer. As BFD packets do not contain any payload
+// bytes, there are no further layers to analyse.
+func (d *BFD) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypeZero
+}
+
+// Payload returns an empty byte slice as BFD packets do not carry a payload
+func (d *BFD) Payload() []byte {
+ return nil
+}
+
+// bool2uint8 converts a bool to uint8
+func bool2uint8(b bool) uint8 {
+ if b {
+ return 1
+ }
+ return 0
+}
diff --git a/vendor/github.com/google/gopacket/layers/bfd_test.go b/vendor/github.com/google/gopacket/layers/bfd_test.go
new file mode 100644
index 0000000..1ac84cb
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/bfd_test.go
@@ -0,0 +1,289 @@
+// Copyright 2017 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+//
+//******************************************************************************
+
+package layers
+
+import (
+ "github.com/google/gopacket"
+ "reflect"
+ "testing"
+)
+
+//******************************************************************************
+
+// checkBFD() uses the bfd.go code to analyse the packet bytes as an BFD Control
+// packet and generate an BFD object. It then compares the generated BFD object
+// with the one provided and throws an error if there is any difference.
+// The desc argument is output with any failure message to identify the test.
+func checkBFD(desc string, t *testing.T, packetBytes []byte, pExpectedBFD *BFD) {
+
+ // Analyse the packet bytes, yielding a new packet object p.
+ p := gopacket.NewPacket(packetBytes, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Errorf("Failed to decode packet %s: %v", desc, p.ErrorLayer().Error())
+ }
+
+ // Ensure that the packet analysis yielded the correct set of layers:
+ // Link Layer = Ethernet.
+ // Network Layer = IPv4.
+ // Transport Layer = UDP.
+ // Application Layer = BFD.
+ checkLayers(p, []gopacket.LayerType{
+ LayerTypeEthernet,
+ LayerTypeIPv4,
+ LayerTypeUDP,
+ LayerTypeBFD}, t)
+
+ // Select the Application (BFD) layer.
+ pResultBFD, ok := p.ApplicationLayer().(*BFD)
+ if !ok {
+ t.Error("No BFD layer type found in packet in " + desc + ".")
+ }
+
+ // Compare the generated BFD object with the expected BFD object.
+ if !reflect.DeepEqual(pResultBFD, pExpectedBFD) {
+ t.Errorf("BFD packet processing failed for packet "+desc+
+ ":\ngot :\n%#v\n\nwant :\n%#v\n\n", pResultBFD, pExpectedBFD)
+ }
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{}
+ err := pResultBFD.SerializeTo(buf, opts)
+ if err != nil {
+ t.Error(err)
+ }
+ if !reflect.DeepEqual(pResultBFD.Contents, buf.Bytes()) {
+ t.Errorf("BFD packet serialization failed for packet "+desc+
+ ":\ngot :\n%+v\n\nwant :\n%+v\n\n", buf.Bytes(), pResultBFD.Contents)
+ }
+
+}
+
+func TestBFDNoAuth(t *testing.T) {
+ // This test packet is based off of the first BFD packet in the BFD sample capture
+ // pcap file bfd-raw-auth-simple.pcap on the Wireshark sample captures page:
+ //
+ // https://wiki.wireshark.org/SampleCaptures
+ // https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=bfd-raw-auth-simple.pcap
+ //
+ // Changed to remove the authentication header, and adjust all of the lengths
+ var testPacketBFD = []byte{
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x10, 0x94, 0x00, 0x00, 0x02, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x11, 0x2f, 0x58, 0xc0, 0x55, 0x01, 0x02, 0xc0, 0x00,
+ 0x00, 0x01, 0xc0, 0x00, 0x0e, 0xc8, 0x00, 0x20, 0x72, 0x31, 0x20, 0x40, 0x05, 0x18, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x4e, 0x0a, 0x90, 0x40,
+ }
+
+ // Assemble the BFD object that we expect to emerge from this test.
+ pExpectedBFD := &BFD{
+ BaseLayer: BaseLayer{
+ Contents: []byte{
+ 0x20, 0x40, 0x05, 0x18, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40,
+ 0x00, 0x0f, 0x42, 0x40, 0x00, 0x00, 0x00, 0x00,
+ },
+ Payload: nil,
+ },
+ Version: 1,
+ Diagnostic: BFDDiagnosticNone,
+ State: BFDStateDown,
+ Poll: false,
+ Final: false,
+ ControlPlaneIndependent: false,
+ AuthPresent: false,
+ Demand: false,
+ Multipoint: false,
+ DetectMultiplier: 5,
+ MyDiscriminator: 1,
+ YourDiscriminator: 0,
+ DesiredMinTxInterval: 1000000,
+ RequiredMinRxInterval: 1000000,
+ RequiredMinEchoRxInterval: 0,
+ AuthHeader: nil,
+ }
+
+ checkBFD("testNoAuth", t, testPacketBFD, pExpectedBFD)
+}
+
+//******************************************************************************
+
+func TestBFDAuthTypePassword(t *testing.T) {
+
+ // This test packet is the first BFD packet in the BFD sample capture
+ // pcap file bfd-raw-auth-simple.pcap on the Wireshark sample captures page:
+ //
+ // https://wiki.wireshark.org/SampleCaptures
+ // https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=bfd-raw-auth-simple.pcap
+ var testPacketBFD = []byte{
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x10, 0x94, 0x00, 0x00, 0x02, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x11, 0x2f, 0x58, 0xc0, 0x55, 0x01, 0x02, 0xc0, 0x00,
+ 0x00, 0x01, 0xc0, 0x00, 0x0e, 0xc8, 0x00, 0x29, 0x72, 0x31, 0x20, 0x44, 0x05, 0x21, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x09, 0x02, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4e, 0x0a, 0x90, 0x40,
+ }
+
+ // Assemble the BFD object that we expect to emerge from this test.
+ pExpectedBFD := &BFD{
+ BaseLayer: BaseLayer{
+ Contents: []byte{
+ 0x20, 0x44, 0x05, 0x21, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40,
+ 0x00, 0x0f, 0x42, 0x40, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x09, 0x02, 0x73, 0x65, 0x63, 0x72, 0x65,
+ 0x74,
+ },
+ Payload: nil,
+ },
+ Version: 1,
+ Diagnostic: BFDDiagnosticNone,
+ State: BFDStateDown,
+ Poll: false,
+ Final: false,
+ ControlPlaneIndependent: false,
+ AuthPresent: true,
+ Demand: false,
+ Multipoint: false,
+ DetectMultiplier: 5,
+ MyDiscriminator: 1,
+ YourDiscriminator: 0,
+ DesiredMinTxInterval: 1000000,
+ RequiredMinRxInterval: 1000000,
+ RequiredMinEchoRxInterval: 0,
+ AuthHeader: &BFDAuthHeader{
+ AuthType: BFDAuthTypePassword,
+ KeyID: 2,
+ SequenceNumber: 0,
+ Data: []byte{'s', 'e', 'c', 'r', 'e', 't'},
+ },
+ }
+
+ checkBFD("testBFDAuthTypePassword", t, testPacketBFD, pExpectedBFD)
+}
+
+//******************************************************************************
+
+func TestBFDAuthTypeKeyedMD5(t *testing.T) {
+
+ // This test packet is the first BFD packet in the BFD sample capture
+ // pcap file bfd-raw-auth-md5.pcap on the Wireshark sample captures page:
+ //
+ // https://wiki.wireshark.org/SampleCaptures
+ // https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=bfd-raw-auth-md5.pcap
+ var testPacketBFD = []byte{
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x10, 0x94, 0x00, 0x00, 0x02, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x0a, 0x11, 0x2f, 0x48, 0xc0, 0x55, 0x01, 0x02, 0xc0, 0x00,
+ 0x00, 0x01, 0x04, 0x00, 0x0e, 0xc8, 0x00, 0x38, 0x6a, 0xcc, 0x20, 0x44, 0x05, 0x30, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
+ 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x3c, 0xc3, 0xf8, 0x21,
+ }
+
+ // Assemble the BFD object that we expect to emerge from this test.
+ pExpectedBFD := &BFD{
+ BaseLayer: BaseLayer{
+ Contents: []byte{
+ 0x20, 0x44, 0x05, 0x30, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40,
+ 0x00, 0x0f, 0x42, 0x40, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05,
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+ 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
+ },
+ Payload: nil,
+ },
+ Version: 1,
+ Diagnostic: BFDDiagnosticNone,
+ State: BFDStateDown,
+ Poll: false,
+ Final: false,
+ ControlPlaneIndependent: false,
+ AuthPresent: true,
+ Demand: false,
+ Multipoint: false,
+ DetectMultiplier: 5,
+ MyDiscriminator: 1,
+ YourDiscriminator: 0,
+ DesiredMinTxInterval: 1000000,
+ RequiredMinRxInterval: 1000000,
+ RequiredMinEchoRxInterval: 0,
+ AuthHeader: &BFDAuthHeader{
+ AuthType: BFDAuthTypeKeyedMD5,
+ KeyID: 2,
+ SequenceNumber: 5,
+ Data: []byte{
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+ 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
+ },
+ },
+ }
+
+ checkBFD("testBFDAuthTypeKeyedMD5", t, testPacketBFD, pExpectedBFD)
+}
+
+//******************************************************************************
+
+func TestBFDAuthTypeMeticulousKeyedSHA1(t *testing.T) {
+
+ // This test packet is the first BFD packet in the BFD sample capture
+ // pcap file bfd-raw-auth-sha1.pcap on the Wireshark sample captures page:
+ //
+ // https://wiki.wireshark.org/SampleCaptures
+ // https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=bfd-raw-auth-sha1.pcap
+ var testPacketBFD = []byte{
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x10, 0x94, 0x00, 0x00, 0x02, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x11, 0x2f, 0x45, 0xc0, 0x55, 0x01, 0x02, 0xc0, 0x00,
+ 0x00, 0x01, 0x04, 0x00, 0x0e, 0xc8, 0x00, 0x3c, 0x37, 0x8a, 0x20, 0x44, 0x05, 0x34, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x1c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
+ 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0xea, 0x6d,
+ 0x1f, 0x21,
+ }
+
+ // Assemble the BFD object that we expect to emerge from this test.
+ pExpectedBFD := &BFD{
+ BaseLayer: BaseLayer{
+ Contents: []byte{
+ 0x20, 0x44, 0x05, 0x34, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40,
+ 0x00, 0x0f, 0x42, 0x40, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x1c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05,
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+ 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
+ 0x17, 0x18, 0x19, 0x1a,
+ },
+ Payload: nil,
+ },
+ Version: 1,
+ Diagnostic: BFDDiagnosticNone,
+ State: BFDStateDown,
+ Poll: false,
+ Final: false,
+ ControlPlaneIndependent: false,
+ AuthPresent: true,
+ Demand: false,
+ Multipoint: false,
+ DetectMultiplier: 5,
+ MyDiscriminator: 1,
+ YourDiscriminator: 0,
+ DesiredMinTxInterval: 1000000,
+ RequiredMinRxInterval: 1000000,
+ RequiredMinEchoRxInterval: 0,
+ AuthHeader: &BFDAuthHeader{
+ AuthType: BFDAuthTypeMeticulousKeyedSHA1,
+ KeyID: 2,
+ SequenceNumber: 5,
+ Data: []byte{
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+ 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
+ 0x17, 0x18, 0x19, 0x1a,
+ },
+ },
+ }
+
+ checkBFD("TestBFDAuthTypeMeticulousKeyedSHA1", t, testPacketBFD, pExpectedBFD)
+}
diff --git a/vendor/github.com/google/gopacket/layers/cdp.go b/vendor/github.com/google/gopacket/layers/cdp.go
new file mode 100644
index 0000000..d67203e
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/cdp.go
@@ -0,0 +1,651 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// Enum types courtesy of...
+// http://search.cpan.org/~mchapman/Net-CDP-0.09/lib/Net/CDP.pm
+// https://code.google.com/p/ladvd/
+// http://anonsvn.wireshark.org/viewvc/releases/wireshark-1.8.6/epan/dissectors/packet-cdp.c
+
+package layers
+
+import (
+ "encoding/binary"
+ "fmt"
+ "net"
+
+ "github.com/google/gopacket"
+)
+
+// CDPTLVType is the type of each TLV value in a CiscoDiscovery packet.
+type CDPTLVType uint16
+
+// CDPTLVType values.
+const (
+ CDPTLVDevID CDPTLVType = 0x0001
+ CDPTLVAddress CDPTLVType = 0x0002
+ CDPTLVPortID CDPTLVType = 0x0003
+ CDPTLVCapabilities CDPTLVType = 0x0004
+ CDPTLVVersion CDPTLVType = 0x0005
+ CDPTLVPlatform CDPTLVType = 0x0006
+ CDPTLVIPPrefix CDPTLVType = 0x0007
+ CDPTLVHello CDPTLVType = 0x0008
+ CDPTLVVTPDomain CDPTLVType = 0x0009
+ CDPTLVNativeVLAN CDPTLVType = 0x000a
+ CDPTLVFullDuplex CDPTLVType = 0x000b
+ CDPTLVVLANReply CDPTLVType = 0x000e
+ CDPTLVVLANQuery CDPTLVType = 0x000f
+ CDPTLVPower CDPTLVType = 0x0010
+ CDPTLVMTU CDPTLVType = 0x0011
+ CDPTLVExtendedTrust CDPTLVType = 0x0012
+ CDPTLVUntrustedCOS CDPTLVType = 0x0013
+ CDPTLVSysName CDPTLVType = 0x0014
+ CDPTLVSysOID CDPTLVType = 0x0015
+ CDPTLVMgmtAddresses CDPTLVType = 0x0016
+ CDPTLVLocation CDPTLVType = 0x0017
+ CDPTLVExternalPortID CDPTLVType = 0x0018
+ CDPTLVPowerRequested CDPTLVType = 0x0019
+ CDPTLVPowerAvailable CDPTLVType = 0x001a
+ CDPTLVPortUnidirectional CDPTLVType = 0x001b
+ CDPTLVEnergyWise CDPTLVType = 0x001d
+ CDPTLVSparePairPOE CDPTLVType = 0x001f
+)
+
+// CiscoDiscoveryValue is a TLV value inside a CiscoDiscovery packet layer.
+type CiscoDiscoveryValue struct {
+ Type CDPTLVType
+ Length uint16
+ Value []byte
+}
+
+// CiscoDiscovery is a packet layer containing the Cisco Discovery Protocol.
+// See http://www.cisco.com/univercd/cc/td/doc/product/lan/trsrb/frames.htm#31885
+type CiscoDiscovery struct {
+ BaseLayer
+ Version byte
+ TTL byte
+ Checksum uint16
+ Values []CiscoDiscoveryValue
+}
+
+// CDPCapability is the set of capabilities advertised by a CDP device.
+type CDPCapability uint32
+
+// CDPCapability values.
+const (
+ CDPCapMaskRouter CDPCapability = 0x0001
+ CDPCapMaskTBBridge CDPCapability = 0x0002
+ CDPCapMaskSPBridge CDPCapability = 0x0004
+ CDPCapMaskSwitch CDPCapability = 0x0008
+ CDPCapMaskHost CDPCapability = 0x0010
+ CDPCapMaskIGMPFilter CDPCapability = 0x0020
+ CDPCapMaskRepeater CDPCapability = 0x0040
+ CDPCapMaskPhone CDPCapability = 0x0080
+ CDPCapMaskRemote CDPCapability = 0x0100
+)
+
+// CDPCapabilities represents the capabilities of a device
+type CDPCapabilities struct {
+ L3Router bool
+ TBBridge bool
+ SPBridge bool
+ L2Switch bool
+ IsHost bool
+ IGMPFilter bool
+ L1Repeater bool
+ IsPhone bool
+ RemotelyManaged bool
+}
+
+// CDP Power-over-Ethernet values.
+const (
+ CDPPoEFourWire byte = 0x01
+ CDPPoEPDArch byte = 0x02
+ CDPPoEPDRequest byte = 0x04
+ CDPPoEPSE byte = 0x08
+)
+
+// CDPSparePairPoE provides information on PoE.
+type CDPSparePairPoE struct {
+ PSEFourWire bool // Supported / Not supported
+ PDArchShared bool // Shared / Independent
+ PDRequestOn bool // On / Off
+ PSEOn bool // On / Off
+}
+
+// CDPVLANDialogue encapsulates a VLAN Query/Reply
+type CDPVLANDialogue struct {
+ ID uint8
+ VLAN uint16
+}
+
+// CDPPowerDialogue encapsulates a Power Query/Reply
+type CDPPowerDialogue struct {
+ ID uint16
+ MgmtID uint16
+ Values []uint32
+}
+
+// CDPLocation provides location information for a CDP device.
+type CDPLocation struct {
+ Type uint8 // Undocumented
+ Location string
+}
+
+// CDPHello is a Cisco Hello message (undocumented, hence the "Unknown" fields)
+type CDPHello struct {
+ OUI []byte
+ ProtocolID uint16
+ ClusterMaster net.IP
+ Unknown1 net.IP
+ Version byte
+ SubVersion byte
+ Status byte
+ Unknown2 byte
+ ClusterCommander net.HardwareAddr
+ SwitchMAC net.HardwareAddr
+ Unknown3 byte
+ ManagementVLAN uint16
+}
+
+// CDPEnergyWiseSubtype is used within CDP to define TLV values.
+type CDPEnergyWiseSubtype uint32
+
+// CDPEnergyWiseSubtype values.
+const (
+ CDPEnergyWiseRole CDPEnergyWiseSubtype = 0x00000007
+ CDPEnergyWiseDomain CDPEnergyWiseSubtype = 0x00000008
+ CDPEnergyWiseName CDPEnergyWiseSubtype = 0x00000009
+ CDPEnergyWiseReplyTo CDPEnergyWiseSubtype = 0x00000017
+)
+
+// CDPEnergyWise is used by CDP to monitor and control power usage.
+type CDPEnergyWise struct {
+ EncryptedData []byte
+ Unknown1 uint32
+ SequenceNumber uint32
+ ModelNumber string
+ Unknown2 uint16
+ HardwareID string
+ SerialNum string
+ Unknown3 []byte
+ Role string
+ Domain string
+ Name string
+ ReplyUnknown1 []byte
+ ReplyPort []byte
+ ReplyAddress []byte
+ ReplyUnknown2 []byte
+ ReplyUnknown3 []byte
+}
+
+// CiscoDiscoveryInfo represents the decoded details for a set of CiscoDiscoveryValues
+type CiscoDiscoveryInfo struct {
+ BaseLayer
+ CDPHello
+ DeviceID string
+ Addresses []net.IP
+ PortID string
+ Capabilities CDPCapabilities
+ Version string
+ Platform string
+ IPPrefixes []net.IPNet
+ VTPDomain string
+ NativeVLAN uint16
+ FullDuplex bool
+ VLANReply CDPVLANDialogue
+ VLANQuery CDPVLANDialogue
+ PowerConsumption uint16
+ MTU uint32
+ ExtendedTrust uint8
+ UntrustedCOS uint8
+ SysName string
+ SysOID string
+ MgmtAddresses []net.IP
+ Location CDPLocation
+ PowerRequest CDPPowerDialogue
+ PowerAvailable CDPPowerDialogue
+ SparePairPoe CDPSparePairPoE
+ EnergyWise CDPEnergyWise
+ Unknown []CiscoDiscoveryValue
+}
+
+// LayerType returns gopacket.LayerTypeCiscoDiscovery.
+func (c *CiscoDiscovery) LayerType() gopacket.LayerType {
+ return LayerTypeCiscoDiscovery
+}
+
+func decodeCiscoDiscovery(data []byte, p gopacket.PacketBuilder) error {
+ c := &CiscoDiscovery{
+ Version: data[0],
+ TTL: data[1],
+ Checksum: binary.BigEndian.Uint16(data[2:4]),
+ }
+ if c.Version != 1 && c.Version != 2 {
+ return fmt.Errorf("Invalid CiscoDiscovery version number %d", c.Version)
+ }
+ var err error
+ c.Values, err = decodeCiscoDiscoveryTLVs(data[4:])
+ if err != nil {
+ return err
+ }
+ c.Contents = data[0:4]
+ c.Payload = data[4:]
+ p.AddLayer(c)
+ return p.NextDecoder(gopacket.DecodeFunc(decodeCiscoDiscoveryInfo))
+}
+
+// LayerType returns gopacket.LayerTypeCiscoDiscoveryInfo.
+func (c *CiscoDiscoveryInfo) LayerType() gopacket.LayerType {
+ return LayerTypeCiscoDiscoveryInfo
+}
+
+func decodeCiscoDiscoveryTLVs(data []byte) (values []CiscoDiscoveryValue, err error) {
+ for len(data) > 0 {
+ val := CiscoDiscoveryValue{
+ Type: CDPTLVType(binary.BigEndian.Uint16(data[:2])),
+ Length: binary.BigEndian.Uint16(data[2:4]),
+ }
+ if val.Length < 4 {
+ err = fmt.Errorf("Invalid CiscoDiscovery value length %d", val.Length)
+ break
+ }
+ val.Value = data[4:val.Length]
+ values = append(values, val)
+ data = data[val.Length:]
+ }
+ return
+}
+
+func decodeCiscoDiscoveryInfo(data []byte, p gopacket.PacketBuilder) error {
+ var err error
+ info := &CiscoDiscoveryInfo{BaseLayer: BaseLayer{Contents: data}}
+ p.AddLayer(info)
+ values, err := decodeCiscoDiscoveryTLVs(data)
+ if err != nil { // Unlikely, as parent decode will fail, but better safe...
+ return err
+ }
+ for _, val := range values {
+ switch val.Type {
+ case CDPTLVDevID:
+ info.DeviceID = string(val.Value)
+ case CDPTLVAddress:
+ if err = checkCDPTLVLen(val, 4); err != nil {
+ return err
+ }
+ info.Addresses, err = decodeAddresses(val.Value)
+ if err != nil {
+ return err
+ }
+ case CDPTLVPortID:
+ info.PortID = string(val.Value)
+ case CDPTLVCapabilities:
+ if err = checkCDPTLVLen(val, 4); err != nil {
+ return err
+ }
+ val := CDPCapability(binary.BigEndian.Uint32(val.Value[0:4]))
+ info.Capabilities.L3Router = (val&CDPCapMaskRouter > 0)
+ info.Capabilities.TBBridge = (val&CDPCapMaskTBBridge > 0)
+ info.Capabilities.SPBridge = (val&CDPCapMaskSPBridge > 0)
+ info.Capabilities.L2Switch = (val&CDPCapMaskSwitch > 0)
+ info.Capabilities.IsHost = (val&CDPCapMaskHost > 0)
+ info.Capabilities.IGMPFilter = (val&CDPCapMaskIGMPFilter > 0)
+ info.Capabilities.L1Repeater = (val&CDPCapMaskRepeater > 0)
+ info.Capabilities.IsPhone = (val&CDPCapMaskPhone > 0)
+ info.Capabilities.RemotelyManaged = (val&CDPCapMaskRemote > 0)
+ case CDPTLVVersion:
+ info.Version = string(val.Value)
+ case CDPTLVPlatform:
+ info.Platform = string(val.Value)
+ case CDPTLVIPPrefix:
+ v := val.Value
+ l := len(v)
+ if l%5 == 0 && l >= 5 {
+ for len(v) > 0 {
+ _, ipnet, _ := net.ParseCIDR(fmt.Sprintf("%d.%d.%d.%d/%d", v[0], v[1], v[2], v[3], v[4]))
+ info.IPPrefixes = append(info.IPPrefixes, *ipnet)
+ v = v[5:]
+ }
+ } else {
+ return fmt.Errorf("Invalid TLV %v length %d", val.Type, len(val.Value))
+ }
+ case CDPTLVHello:
+ if err = checkCDPTLVLen(val, 32); err != nil {
+ return err
+ }
+ v := val.Value
+ info.CDPHello.OUI = v[0:3]
+ info.CDPHello.ProtocolID = binary.BigEndian.Uint16(v[3:5])
+ info.CDPHello.ClusterMaster = v[5:9]
+ info.CDPHello.Unknown1 = v[9:13]
+ info.CDPHello.Version = v[13]
+ info.CDPHello.SubVersion = v[14]
+ info.CDPHello.Status = v[15]
+ info.CDPHello.Unknown2 = v[16]
+ info.CDPHello.ClusterCommander = v[17:23]
+ info.CDPHello.SwitchMAC = v[23:29]
+ info.CDPHello.Unknown3 = v[29]
+ info.CDPHello.ManagementVLAN = binary.BigEndian.Uint16(v[30:32])
+ case CDPTLVVTPDomain:
+ info.VTPDomain = string(val.Value)
+ case CDPTLVNativeVLAN:
+ if err = checkCDPTLVLen(val, 2); err != nil {
+ return err
+ }
+ info.NativeVLAN = binary.BigEndian.Uint16(val.Value[0:2])
+ case CDPTLVFullDuplex:
+ if err = checkCDPTLVLen(val, 1); err != nil {
+ return err
+ }
+ info.FullDuplex = (val.Value[0] == 1)
+ case CDPTLVVLANReply:
+ if err = checkCDPTLVLen(val, 3); err != nil {
+ return err
+ }
+ info.VLANReply.ID = uint8(val.Value[0])
+ info.VLANReply.VLAN = binary.BigEndian.Uint16(val.Value[1:3])
+ case CDPTLVVLANQuery:
+ if err = checkCDPTLVLen(val, 3); err != nil {
+ return err
+ }
+ info.VLANQuery.ID = uint8(val.Value[0])
+ info.VLANQuery.VLAN = binary.BigEndian.Uint16(val.Value[1:3])
+ case CDPTLVPower:
+ if err = checkCDPTLVLen(val, 2); err != nil {
+ return err
+ }
+ info.PowerConsumption = binary.BigEndian.Uint16(val.Value[0:2])
+ case CDPTLVMTU:
+ if err = checkCDPTLVLen(val, 4); err != nil {
+ return err
+ }
+ info.MTU = binary.BigEndian.Uint32(val.Value[0:4])
+ case CDPTLVExtendedTrust:
+ if err = checkCDPTLVLen(val, 1); err != nil {
+ return err
+ }
+ info.ExtendedTrust = uint8(val.Value[0])
+ case CDPTLVUntrustedCOS:
+ if err = checkCDPTLVLen(val, 1); err != nil {
+ return err
+ }
+ info.UntrustedCOS = uint8(val.Value[0])
+ case CDPTLVSysName:
+ info.SysName = string(val.Value)
+ case CDPTLVSysOID:
+ info.SysOID = string(val.Value)
+ case CDPTLVMgmtAddresses:
+ if err = checkCDPTLVLen(val, 4); err != nil {
+ return err
+ }
+ info.MgmtAddresses, err = decodeAddresses(val.Value)
+ if err != nil {
+ return err
+ }
+ case CDPTLVLocation:
+ if err = checkCDPTLVLen(val, 2); err != nil {
+ return err
+ }
+ info.Location.Type = uint8(val.Value[0])
+ info.Location.Location = string(val.Value[1:])
+
+ // case CDPTLVLExternalPortID:
+ // Undocumented
+ case CDPTLVPowerRequested:
+ if err = checkCDPTLVLen(val, 4); err != nil {
+ return err
+ }
+ info.PowerRequest.ID = binary.BigEndian.Uint16(val.Value[0:2])
+ info.PowerRequest.MgmtID = binary.BigEndian.Uint16(val.Value[2:4])
+ for n := 4; n < len(val.Value); n += 4 {
+ info.PowerRequest.Values = append(info.PowerRequest.Values, binary.BigEndian.Uint32(val.Value[n:n+4]))
+ }
+ case CDPTLVPowerAvailable:
+ if err = checkCDPTLVLen(val, 4); err != nil {
+ return err
+ }
+ info.PowerAvailable.ID = binary.BigEndian.Uint16(val.Value[0:2])
+ info.PowerAvailable.MgmtID = binary.BigEndian.Uint16(val.Value[2:4])
+ for n := 4; n < len(val.Value); n += 4 {
+ info.PowerAvailable.Values = append(info.PowerAvailable.Values, binary.BigEndian.Uint32(val.Value[n:n+4]))
+ }
+ // case CDPTLVPortUnidirectional
+ // Undocumented
+ case CDPTLVEnergyWise:
+ if err = checkCDPTLVLen(val, 72); err != nil {
+ return err
+ }
+ info.EnergyWise.EncryptedData = val.Value[0:20]
+ info.EnergyWise.Unknown1 = binary.BigEndian.Uint32(val.Value[20:24])
+ info.EnergyWise.SequenceNumber = binary.BigEndian.Uint32(val.Value[24:28])
+ info.EnergyWise.ModelNumber = string(val.Value[28:44])
+ info.EnergyWise.Unknown2 = binary.BigEndian.Uint16(val.Value[44:46])
+ info.EnergyWise.HardwareID = string(val.Value[46:49])
+ info.EnergyWise.SerialNum = string(val.Value[49:60])
+ info.EnergyWise.Unknown3 = val.Value[60:68]
+ tlvLen := binary.BigEndian.Uint16(val.Value[68:70])
+ tlvNum := binary.BigEndian.Uint16(val.Value[70:72])
+ data := val.Value[72:]
+ if len(data) < int(tlvLen) {
+ return fmt.Errorf("Invalid TLV length %d vs %d", tlvLen, len(data))
+ }
+ numSeen := 0
+ for len(data) > 8 {
+ numSeen++
+ if numSeen > int(tlvNum) { // Too many TLV's ?
+ return fmt.Errorf("Too many TLV's - wanted %d, saw %d", tlvNum, numSeen)
+ }
+ tType := CDPEnergyWiseSubtype(binary.BigEndian.Uint32(data[0:4]))
+ tLen := int(binary.BigEndian.Uint32(data[4:8]))
+ if tLen > len(data)-8 {
+ return fmt.Errorf("Invalid TLV length %d vs %d", tLen, len(data)-8)
+ }
+ data = data[8:]
+ switch tType {
+ case CDPEnergyWiseRole:
+ info.EnergyWise.Role = string(data[:])
+ case CDPEnergyWiseDomain:
+ info.EnergyWise.Domain = string(data[:])
+ case CDPEnergyWiseName:
+ info.EnergyWise.Name = string(data[:])
+ case CDPEnergyWiseReplyTo:
+ if len(data) >= 18 {
+ info.EnergyWise.ReplyUnknown1 = data[0:2]
+ info.EnergyWise.ReplyPort = data[2:4]
+ info.EnergyWise.ReplyAddress = data[4:8]
+ info.EnergyWise.ReplyUnknown2 = data[8:10]
+ info.EnergyWise.ReplyUnknown3 = data[10:14]
+ }
+ }
+ data = data[tLen:]
+ }
+ case CDPTLVSparePairPOE:
+ if err = checkCDPTLVLen(val, 1); err != nil {
+ return err
+ }
+ v := val.Value[0]
+ info.SparePairPoe.PSEFourWire = (v&CDPPoEFourWire > 0)
+ info.SparePairPoe.PDArchShared = (v&CDPPoEPDArch > 0)
+ info.SparePairPoe.PDRequestOn = (v&CDPPoEPDRequest > 0)
+ info.SparePairPoe.PSEOn = (v&CDPPoEPSE > 0)
+ default:
+ info.Unknown = append(info.Unknown, val)
+ }
+ }
+ return nil
+}
+
+// CDP Protocol Types
+const (
+ CDPProtocolTypeNLPID byte = 1
+ CDPProtocolType802_2 byte = 2
+)
+
+// CDPAddressType is used to define TLV values within CDP addresses.
+type CDPAddressType uint64
+
+// CDP Address types.
+const (
+ CDPAddressTypeCLNP CDPAddressType = 0x81
+ CDPAddressTypeIPV4 CDPAddressType = 0xcc
+ CDPAddressTypeIPV6 CDPAddressType = 0xaaaa030000000800
+ CDPAddressTypeDECNET CDPAddressType = 0xaaaa030000006003
+ CDPAddressTypeAPPLETALK CDPAddressType = 0xaaaa03000000809b
+ CDPAddressTypeIPX CDPAddressType = 0xaaaa030000008137
+ CDPAddressTypeVINES CDPAddressType = 0xaaaa0300000080c4
+ CDPAddressTypeXNS CDPAddressType = 0xaaaa030000000600
+ CDPAddressTypeAPOLLO CDPAddressType = 0xaaaa030000008019
+)
+
+func decodeAddresses(v []byte) (addresses []net.IP, err error) {
+ numaddr := int(binary.BigEndian.Uint32(v[0:4]))
+ if numaddr < 1 {
+ return nil, fmt.Errorf("Invalid Address TLV number %d", numaddr)
+ }
+ v = v[4:]
+ if len(v) < numaddr*8 {
+ return nil, fmt.Errorf("Invalid Address TLV length %d", len(v))
+ }
+ for i := 0; i < numaddr; i++ {
+ prottype := v[0]
+ if prottype != CDPProtocolTypeNLPID && prottype != CDPProtocolType802_2 { // invalid protocol type
+ return nil, fmt.Errorf("Invalid Address Protocol %d", prottype)
+ }
+ protlen := int(v[1])
+ if (prottype == CDPProtocolTypeNLPID && protlen != 1) ||
+ (prottype == CDPProtocolType802_2 && protlen != 3 && protlen != 8) { // invalid length
+ return nil, fmt.Errorf("Invalid Address Protocol length %d", protlen)
+ }
+ plen := make([]byte, 8)
+ copy(plen[8-protlen:], v[2:2+protlen])
+ protocol := CDPAddressType(binary.BigEndian.Uint64(plen))
+ v = v[2+protlen:]
+ addrlen := binary.BigEndian.Uint16(v[0:2])
+ ab := v[2 : 2+addrlen]
+ if protocol == CDPAddressTypeIPV4 && addrlen == 4 {
+ addresses = append(addresses, net.IPv4(ab[0], ab[1], ab[2], ab[3]))
+ } else if protocol == CDPAddressTypeIPV6 && addrlen == 16 {
+ addresses = append(addresses, net.IP(ab))
+ } else {
+ // only handle IPV4 & IPV6 for now
+ }
+ v = v[2+addrlen:]
+ if len(v) < 8 {
+ break
+ }
+ }
+ return
+}
+
+func (t CDPTLVType) String() (s string) {
+ switch t {
+ case CDPTLVDevID:
+ s = "Device ID"
+ case CDPTLVAddress:
+ s = "Addresses"
+ case CDPTLVPortID:
+ s = "Port ID"
+ case CDPTLVCapabilities:
+ s = "Capabilities"
+ case CDPTLVVersion:
+ s = "Software Version"
+ case CDPTLVPlatform:
+ s = "Platform"
+ case CDPTLVIPPrefix:
+ s = "IP Prefix"
+ case CDPTLVHello:
+ s = "Protocol Hello"
+ case CDPTLVVTPDomain:
+ s = "VTP Management Domain"
+ case CDPTLVNativeVLAN:
+ s = "Native VLAN"
+ case CDPTLVFullDuplex:
+ s = "Full Duplex"
+ case CDPTLVVLANReply:
+ s = "VoIP VLAN Reply"
+ case CDPTLVVLANQuery:
+ s = "VLANQuery"
+ case CDPTLVPower:
+ s = "Power consumption"
+ case CDPTLVMTU:
+ s = "MTU"
+ case CDPTLVExtendedTrust:
+ s = "Extended Trust Bitmap"
+ case CDPTLVUntrustedCOS:
+ s = "Untrusted Port CoS"
+ case CDPTLVSysName:
+ s = "System Name"
+ case CDPTLVSysOID:
+ s = "System OID"
+ case CDPTLVMgmtAddresses:
+ s = "Management Addresses"
+ case CDPTLVLocation:
+ s = "Location"
+ case CDPTLVExternalPortID:
+ s = "External Port ID"
+ case CDPTLVPowerRequested:
+ s = "Power Requested"
+ case CDPTLVPowerAvailable:
+ s = "Power Available"
+ case CDPTLVPortUnidirectional:
+ s = "Port Unidirectional"
+ case CDPTLVEnergyWise:
+ s = "Energy Wise"
+ case CDPTLVSparePairPOE:
+ s = "Spare Pair POE"
+ default:
+ s = "Unknown"
+ }
+ return
+}
+
+func (a CDPAddressType) String() (s string) {
+ switch a {
+ case CDPAddressTypeCLNP:
+ s = "Connectionless Network Protocol"
+ case CDPAddressTypeIPV4:
+ s = "IPv4"
+ case CDPAddressTypeIPV6:
+ s = "IPv6"
+ case CDPAddressTypeDECNET:
+ s = "DECnet Phase IV"
+ case CDPAddressTypeAPPLETALK:
+ s = "Apple Talk"
+ case CDPAddressTypeIPX:
+ s = "Novell IPX"
+ case CDPAddressTypeVINES:
+ s = "Banyan VINES"
+ case CDPAddressTypeXNS:
+ s = "Xerox Network Systems"
+ case CDPAddressTypeAPOLLO:
+ s = "Apollo"
+ default:
+ s = "Unknown"
+ }
+ return
+}
+
+func (t CDPEnergyWiseSubtype) String() (s string) {
+ switch t {
+ case CDPEnergyWiseRole:
+ s = "Role"
+ case CDPEnergyWiseDomain:
+ s = "Domain"
+ case CDPEnergyWiseName:
+ s = "Name"
+ case CDPEnergyWiseReplyTo:
+ s = "ReplyTo"
+ default:
+ s = "Unknown"
+ }
+ return
+}
+
+func checkCDPTLVLen(v CiscoDiscoveryValue, l int) (err error) {
+ if len(v.Value) < l {
+ err = fmt.Errorf("Invalid TLV %v length %d", v.Type, len(v.Value))
+ }
+ return
+}
diff --git a/vendor/github.com/google/gopacket/layers/ctp.go b/vendor/github.com/google/gopacket/layers/ctp.go
new file mode 100644
index 0000000..8287584
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/ctp.go
@@ -0,0 +1,109 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "fmt"
+ "github.com/google/gopacket"
+)
+
+// EthernetCTPFunction is the function code used by the EthernetCTP protocol to identify each
+// EthernetCTP layer.
+type EthernetCTPFunction uint16
+
+// EthernetCTPFunction values.
+const (
+ EthernetCTPFunctionReply EthernetCTPFunction = 1
+ EthernetCTPFunctionForwardData EthernetCTPFunction = 2
+)
+
+// EthernetCTP implements the EthernetCTP protocol, see http://www.mit.edu/people/jhawk/ctp.html.
+// We split EthernetCTP up into the top-level EthernetCTP layer, followed by zero or more
+// EthernetCTPForwardData layers, followed by a final EthernetCTPReply layer.
+type EthernetCTP struct {
+ BaseLayer
+ SkipCount uint16
+}
+
+// LayerType returns gopacket.LayerTypeEthernetCTP.
+func (c *EthernetCTP) LayerType() gopacket.LayerType {
+ return LayerTypeEthernetCTP
+}
+
+// EthernetCTPForwardData is the ForwardData layer inside EthernetCTP. See EthernetCTP's docs for more
+// details.
+type EthernetCTPForwardData struct {
+ BaseLayer
+ Function EthernetCTPFunction
+ ForwardAddress []byte
+}
+
+// LayerType returns gopacket.LayerTypeEthernetCTPForwardData.
+func (c *EthernetCTPForwardData) LayerType() gopacket.LayerType {
+ return LayerTypeEthernetCTPForwardData
+}
+
+// ForwardEndpoint returns the EthernetCTPForwardData ForwardAddress as an endpoint.
+func (c *EthernetCTPForwardData) ForwardEndpoint() gopacket.Endpoint {
+ return gopacket.NewEndpoint(EndpointMAC, c.ForwardAddress)
+}
+
+// EthernetCTPReply is the Reply layer inside EthernetCTP. See EthernetCTP's docs for more details.
+type EthernetCTPReply struct {
+ BaseLayer
+ Function EthernetCTPFunction
+ ReceiptNumber uint16
+ Data []byte
+}
+
+// LayerType returns gopacket.LayerTypeEthernetCTPReply.
+func (c *EthernetCTPReply) LayerType() gopacket.LayerType {
+ return LayerTypeEthernetCTPReply
+}
+
+// Payload returns the EthernetCTP reply's Data bytes.
+func (c *EthernetCTPReply) Payload() []byte { return c.Data }
+
+func decodeEthernetCTP(data []byte, p gopacket.PacketBuilder) error {
+ c := &EthernetCTP{
+ SkipCount: binary.LittleEndian.Uint16(data[:2]),
+ BaseLayer: BaseLayer{data[:2], data[2:]},
+ }
+ if c.SkipCount%2 != 0 {
+ return fmt.Errorf("EthernetCTP skip count is odd: %d", c.SkipCount)
+ }
+ p.AddLayer(c)
+ return p.NextDecoder(gopacket.DecodeFunc(decodeEthernetCTPFromFunctionType))
+}
+
+// decodeEthernetCTPFromFunctionType reads in the first 2 bytes to determine the EthernetCTP
+// layer type to decode next, then decodes based on that.
+func decodeEthernetCTPFromFunctionType(data []byte, p gopacket.PacketBuilder) error {
+ function := EthernetCTPFunction(binary.LittleEndian.Uint16(data[:2]))
+ switch function {
+ case EthernetCTPFunctionReply:
+ reply := &EthernetCTPReply{
+ Function: function,
+ ReceiptNumber: binary.LittleEndian.Uint16(data[2:4]),
+ Data: data[4:],
+ BaseLayer: BaseLayer{data, nil},
+ }
+ p.AddLayer(reply)
+ p.SetApplicationLayer(reply)
+ return nil
+ case EthernetCTPFunctionForwardData:
+ forward := &EthernetCTPForwardData{
+ Function: function,
+ ForwardAddress: data[2:8],
+ BaseLayer: BaseLayer{data[:8], data[8:]},
+ }
+ p.AddLayer(forward)
+ return p.NextDecoder(gopacket.DecodeFunc(decodeEthernetCTPFromFunctionType))
+ }
+ return fmt.Errorf("Unknown EthernetCTP function type %v", function)
+}
diff --git a/vendor/github.com/google/gopacket/layers/decode_test.go b/vendor/github.com/google/gopacket/layers/decode_test.go
new file mode 100644
index 0000000..ecfbff7
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/decode_test.go
@@ -0,0 +1,1234 @@
+// Copyright 2012, Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "bytes"
+ "encoding/hex"
+ "fmt"
+ "net"
+ "reflect"
+ "strings"
+ "testing"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/bytediff"
+)
+
+var testSimpleTCPPacket = []byte{
+ 0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x20, 0xbc, 0x30, 0x5b, 0xe8, 0xd3, 0x49,
+ 0x08, 0x00, 0x45, 0x00, 0x01, 0xa4, 0x39, 0xdf, 0x40, 0x00, 0x40, 0x06,
+ 0x55, 0x5a, 0xac, 0x11, 0x51, 0x49, 0xad, 0xde, 0xfe, 0xe1, 0xc5, 0xf7,
+ 0x00, 0x50, 0xc5, 0x7e, 0x0e, 0x48, 0x49, 0x07, 0x42, 0x32, 0x80, 0x18,
+ 0x00, 0x73, 0x9a, 0x8f, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0x03, 0x77,
+ 0x37, 0x9c, 0x42, 0x77, 0x5e, 0x3a, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x20,
+ 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f,
+ 0x73, 0x74, 0x3a, 0x20, 0x77, 0x77, 0x77, 0x2e, 0x66, 0x69, 0x73, 0x68,
+ 0x2e, 0x63, 0x6f, 0x6d, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x6b, 0x65, 0x65, 0x70, 0x2d, 0x61,
+ 0x6c, 0x69, 0x76, 0x65, 0x0d, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x41,
+ 0x67, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x4d, 0x6f, 0x7a, 0x69, 0x6c, 0x6c,
+ 0x61, 0x2f, 0x35, 0x2e, 0x30, 0x20, 0x28, 0x58, 0x31, 0x31, 0x3b, 0x20,
+ 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x20, 0x78, 0x38, 0x36, 0x5f, 0x36, 0x34,
+ 0x29, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x57, 0x65, 0x62, 0x4b, 0x69,
+ 0x74, 0x2f, 0x35, 0x33, 0x35, 0x2e, 0x32, 0x20, 0x28, 0x4b, 0x48, 0x54,
+ 0x4d, 0x4c, 0x2c, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x47, 0x65, 0x63,
+ 0x6b, 0x6f, 0x29, 0x20, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x2f, 0x31,
+ 0x35, 0x2e, 0x30, 0x2e, 0x38, 0x37, 0x34, 0x2e, 0x31, 0x32, 0x31, 0x20,
+ 0x53, 0x61, 0x66, 0x61, 0x72, 0x69, 0x2f, 0x35, 0x33, 0x35, 0x2e, 0x32,
+ 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x74, 0x65,
+ 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x68, 0x74, 0x6d,
+ 0x6c, 0x2b, 0x78, 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x6d, 0x6c, 0x3b, 0x71, 0x3d,
+ 0x30, 0x2e, 0x39, 0x2c, 0x2a, 0x2f, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e,
+ 0x38, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x45, 0x6e,
+ 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x67, 0x7a, 0x69, 0x70,
+ 0x2c, 0x64, 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x73, 0x64, 0x63,
+ 0x68, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x4c, 0x61,
+ 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x65, 0x6e, 0x2d, 0x55,
+ 0x53, 0x2c, 0x65, 0x6e, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x38, 0x0d, 0x0a,
+ 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x43, 0x68, 0x61, 0x72, 0x73,
+ 0x65, 0x74, 0x3a, 0x20, 0x49, 0x53, 0x4f, 0x2d, 0x38, 0x38, 0x35, 0x39,
+ 0x2d, 0x31, 0x2c, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x3b, 0x71, 0x3d, 0x30,
+ 0x2e, 0x37, 0x2c, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x33, 0x0d, 0x0a,
+ 0x0d, 0x0a,
+}
+
+var testDecodeOptions = gopacket.DecodeOptions{
+ SkipDecodeRecovery: true,
+}
+
+// Benchmarks for actual gopacket code
+
+func BenchmarkLayerClassSliceContains(b *testing.B) {
+ lc := gopacket.NewLayerClassSlice([]gopacket.LayerType{LayerTypeTCP, LayerTypeEthernet})
+ for i := 0; i < b.N; i++ {
+ _ = lc.Contains(LayerTypeTCP)
+ }
+}
+
+func BenchmarkLayerClassMapContains(b *testing.B) {
+ lc := gopacket.NewLayerClassMap([]gopacket.LayerType{LayerTypeTCP, LayerTypeEthernet})
+ for i := 0; i < b.N; i++ {
+ _ = lc.Contains(LayerTypeTCP)
+ }
+}
+
+func BenchmarkLazyNoCopyEthLayer(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true}).Layer(LayerTypeEthernet)
+ }
+}
+
+func BenchmarkLazyNoCopyIPLayer(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true}).Layer(LayerTypeIPv4)
+ }
+}
+
+func BenchmarkLazyNoCopyTCPLayer(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true}).Layer(LayerTypeTCP)
+ }
+}
+
+func BenchmarkLazyNoCopyAllLayers(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true}).Layers()
+ }
+}
+
+func BenchmarkDefault(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.Default)
+ }
+}
+
+func getSerializeLayers() []gopacket.SerializableLayer {
+ p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions)
+ slayers := []gopacket.SerializableLayer{}
+ for _, l := range p.Layers() {
+ slayers = append(slayers, l.(gopacket.SerializableLayer))
+ }
+ p.Layer(LayerTypeTCP).(*TCP).SetNetworkLayerForChecksum(
+ p.NetworkLayer())
+ return slayers
+}
+
+func BenchmarkSerializeTcpNoOptions(b *testing.B) {
+ slayers := getSerializeLayers()
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{}
+ for i := 0; i < b.N; i++ {
+ gopacket.SerializeLayers(buf, opts, slayers...)
+ }
+}
+
+func BenchmarkSerializeTcpFixLengths(b *testing.B) {
+ slayers := getSerializeLayers()
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{FixLengths: true}
+ for i := 0; i < b.N; i++ {
+ gopacket.SerializeLayers(buf, opts, slayers...)
+ }
+}
+
+func BenchmarkSerializeTcpComputeChecksums(b *testing.B) {
+ slayers := getSerializeLayers()
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{ComputeChecksums: true}
+ for i := 0; i < b.N; i++ {
+ gopacket.SerializeLayers(buf, opts, slayers...)
+ }
+}
+
+func BenchmarkSerializeTcpFixLengthsComputeChecksums(b *testing.B) {
+ slayers := getSerializeLayers()
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true}
+ for i := 0; i < b.N; i++ {
+ gopacket.SerializeLayers(buf, opts, slayers...)
+ }
+}
+
+func BenchmarkLazy(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.Lazy)
+ }
+}
+
+func BenchmarkNoCopy(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+func BenchmarkLazyNoCopy(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true})
+ }
+}
+
+func BenchmarkKnownStack(b *testing.B) {
+ stack := []gopacket.DecodingLayer{&Ethernet{}, &IPv4{}, &TCP{}, &gopacket.Payload{}}
+ nf := gopacket.NilDecodeFeedback
+ for i := 0; i < b.N; i++ {
+ data := testSimpleTCPPacket[:]
+ for _, d := range stack {
+ _ = d.DecodeFromBytes(data, nf)
+ data = d.LayerPayload()
+ }
+ }
+}
+
+func BenchmarkDecodingLayerParserIgnorePanic(b *testing.B) {
+ decoded := make([]gopacket.LayerType, 0, 20)
+ dlp := gopacket.NewDecodingLayerParser(LayerTypeEthernet, &Ethernet{}, &IPv4{}, &TCP{}, &gopacket.Payload{})
+ dlp.IgnorePanic = true
+ for i := 0; i < b.N; i++ {
+ dlp.DecodeLayers(testSimpleTCPPacket, &decoded)
+ }
+}
+
+func BenchmarkDecodingLayerParserHandlePanic(b *testing.B) {
+ decoded := make([]gopacket.LayerType, 0, 20)
+ dlp := gopacket.NewDecodingLayerParser(LayerTypeEthernet, &Ethernet{}, &IPv4{}, &TCP{}, &gopacket.Payload{})
+ dlp.IgnorePanic = false
+ for i := 0; i < b.N; i++ {
+ dlp.DecodeLayers(testSimpleTCPPacket, &decoded)
+ }
+}
+
+func BenchmarkAlloc(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ _ = &TCP{}
+ }
+}
+
+func BenchmarkFlow(b *testing.B) {
+ p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true})
+ net := p.NetworkLayer()
+ for i := 0; i < b.N; i++ {
+ net.NetworkFlow()
+ }
+}
+
+func BenchmarkEndpoints(b *testing.B) {
+ p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true})
+ flow := p.NetworkLayer().NetworkFlow()
+ for i := 0; i < b.N; i++ {
+ flow.Endpoints()
+ }
+}
+
+func BenchmarkTCPLayerFromDecodedPacket(b *testing.B) {
+ b.StopTimer()
+ p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions)
+ b.StartTimer()
+ for i := 0; i < b.N; i++ {
+ _ = p.Layer(LayerTypeTCP)
+ }
+}
+
+func BenchmarkTCPLayerClassFromDecodedPacket(b *testing.B) {
+ b.StopTimer()
+ p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions)
+ lc := gopacket.NewLayerClass([]gopacket.LayerType{LayerTypeTCP})
+ b.StartTimer()
+ for i := 0; i < b.N; i++ {
+ _ = p.LayerClass(lc)
+ }
+}
+
+func BenchmarkTCPTransportLayerFromDecodedPacket(b *testing.B) {
+ b.StopTimer()
+ p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions)
+ b.StartTimer()
+ for i := 0; i < b.N; i++ {
+ _ = p.TransportLayer()
+ }
+}
+
+func testDecoder([]byte, gopacket.PacketBuilder) error {
+ return nil
+}
+
+func BenchmarkDecodeFuncCallOverheadDirectCall(b *testing.B) {
+ var data []byte
+ var pb gopacket.PacketBuilder
+ for i := 0; i < b.N; i++ {
+ _ = testDecoder(data, pb)
+ }
+}
+
+func BenchmarkDecodeFuncCallOverheadDecoderCall(b *testing.B) {
+ d := gopacket.DecodeFunc(testDecoder)
+ var data []byte
+ var pb gopacket.PacketBuilder
+ for i := 0; i < b.N; i++ {
+ _ = d.Decode(data, pb)
+ }
+}
+
+func BenchmarkDecodeFuncCallOverheadArrayCall(b *testing.B) {
+ EthernetTypeMetadata[1] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(testDecoder)}
+ d := EthernetType(1)
+ var data []byte
+ var pb gopacket.PacketBuilder
+ for i := 0; i < b.N; i++ {
+ _ = d.Decode(data, pb)
+ }
+}
+
+func BenchmarkFmtVerboseString(b *testing.B) {
+ b.StopTimer()
+ p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions)
+ b.StartTimer()
+ for i := 0; i < b.N; i++ {
+ _ = fmt.Sprintf("%#v", p)
+ }
+}
+
+func BenchmarkPacketString(b *testing.B) {
+ b.StopTimer()
+ p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions)
+ b.StartTimer()
+ for i := 0; i < b.N; i++ {
+ _ = p.String()
+ }
+}
+
+func BenchmarkPacketDumpString(b *testing.B) {
+ b.StopTimer()
+ p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions)
+ b.StartTimer()
+ for i := 0; i < b.N; i++ {
+ _ = p.String()
+ }
+}
+
+// TestFlowMapKey makes sure a flow and an endpoint can be used as map keys.
+func TestFlowMapKey(t *testing.T) {
+ _ = map[gopacket.Flow]bool{}
+ _ = map[gopacket.Endpoint]bool{}
+ _ = map[[2]gopacket.Flow]bool{}
+}
+
+func TestDecodeSimpleTCPPacket(t *testing.T) {
+ equal := func(desc, want string, got fmt.Stringer) {
+ if want != got.String() {
+ t.Errorf("%s: got %q want %q", desc, got.String(), want)
+ }
+ }
+ p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true})
+ if eth := p.LinkLayer(); eth == nil {
+ t.Error("No ethernet layer found")
+ } else {
+ equal("Eth Src", "bc:30:5b:e8:d3:49", eth.LinkFlow().Src())
+ equal("Eth Dst", "00:00:0c:9f:f0:20", eth.LinkFlow().Dst())
+ }
+ if net := p.NetworkLayer(); net == nil {
+ t.Error("No net layer found")
+ } else if ip, ok := net.(*IPv4); !ok {
+ t.Error("Net layer is not IP layer")
+ } else {
+ equal("IP Src", "172.17.81.73", net.NetworkFlow().Src())
+ equal("IP Dst", "173.222.254.225", net.NetworkFlow().Dst())
+ want := &IPv4{
+ BaseLayer: BaseLayer{testSimpleTCPPacket[14:34], testSimpleTCPPacket[34:]},
+ Version: 4,
+ IHL: 5,
+ TOS: 0,
+ Length: 420,
+ Id: 14815,
+ Flags: 0x02,
+ FragOffset: 0,
+ TTL: 64,
+ Protocol: 6,
+ Checksum: 0x555A,
+ SrcIP: []byte{172, 17, 81, 73},
+ DstIP: []byte{173, 222, 254, 225},
+ }
+ if !reflect.DeepEqual(ip, want) {
+ t.Errorf("IP layer mismatch, \ngot %#v\nwant %#v\n", ip, want)
+ }
+ }
+ if trans := p.TransportLayer(); trans == nil {
+ t.Error("No transport layer found")
+ } else if tcp, ok := trans.(*TCP); !ok {
+ t.Error("Transport layer is not TCP layer")
+ } else {
+ equal("TCP Src", "50679", trans.TransportFlow().Src())
+ equal("TCP Dst", "80", trans.TransportFlow().Dst())
+ want := &TCP{
+ BaseLayer: BaseLayer{testSimpleTCPPacket[34:66], testSimpleTCPPacket[66:]},
+ SrcPort: 50679,
+ DstPort: 80,
+ Seq: 0xc57e0e48,
+ Ack: 0x49074232,
+ DataOffset: 8,
+ ACK: true,
+ PSH: true,
+ Window: 0x73,
+ Checksum: 0x9a8f,
+ Urgent: 0,
+ sPort: []byte{0xc5, 0xf7},
+ dPort: []byte{0x0, 0x50},
+ Options: []TCPOption{
+ TCPOption{
+ OptionType: 0x1,
+ OptionLength: 0x1,
+ },
+ TCPOption{
+ OptionType: 0x1,
+ OptionLength: 0x1,
+ },
+ TCPOption{
+ OptionType: 0x8,
+ OptionLength: 0xa,
+ OptionData: []byte{0x3, 0x77, 0x37, 0x9c, 0x42, 0x77, 0x5e, 0x3a},
+ },
+ },
+ opts: [4]TCPOption{
+ TCPOption{
+ OptionType: 0x1,
+ OptionLength: 0x1,
+ },
+ TCPOption{
+ OptionType: 0x1,
+ OptionLength: 0x1,
+ },
+ TCPOption{
+ OptionType: 0x8,
+ OptionLength: 0xa,
+ OptionData: []byte{0x3, 0x77, 0x37, 0x9c, 0x42, 0x77, 0x5e, 0x3a},
+ },
+ TCPOption{},
+ },
+ }
+ if !reflect.DeepEqual(tcp, want) {
+ t.Errorf("TCP layer mismatch\ngot %#v\nwant %#v", tcp, want)
+ }
+ }
+ if payload, ok := p.Layer(gopacket.LayerTypePayload).(*gopacket.Payload); payload == nil || !ok {
+ t.Error("No payload layer found")
+ } else {
+ if 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" {
+ t.Error("--- Payload STRING ---\n", string(payload.Payload()), "\n--- Payload BYTES ---\n", payload.Payload())
+ }
+ }
+
+ // Test re-serialization.
+ testSerialization(t, p, testSimpleTCPPacket)
+}
+
+type canSetNetLayer interface {
+ SetNetworkLayerForChecksum(gopacket.NetworkLayer) error
+}
+
+func testSerialization(t *testing.T, p gopacket.Packet, data []byte) {
+ for _, opts := range []gopacket.SerializeOptions{
+ gopacket.SerializeOptions{},
+ gopacket.SerializeOptions{FixLengths: true},
+ gopacket.SerializeOptions{ComputeChecksums: true},
+ gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true},
+ } {
+ testSerializationWithOpts(t, p, data, opts)
+ }
+}
+
+func testSerializationWithOpts(t *testing.T, p gopacket.Packet, data []byte, opts gopacket.SerializeOptions) {
+ // Test re-serialization.
+ slayers := []gopacket.SerializableLayer{}
+ for _, l := range p.Layers() {
+ slayers = append(slayers, l.(gopacket.SerializableLayer))
+ if h, ok := l.(canSetNetLayer); ok {
+ if err := h.SetNetworkLayerForChecksum(p.NetworkLayer()); err != nil {
+ t.Fatal("can't set network layer:", err)
+ }
+ }
+ }
+ buf := gopacket.NewSerializeBuffer()
+ err := gopacket.SerializeLayers(buf, opts, slayers...)
+ if err != nil {
+ t.Errorf("unable to reserialize layers with opts %#v: %v", opts, err)
+ } else if !bytes.Equal(buf.Bytes(), data) {
+ t.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",
+ opts, hex.Dump(data), hex.Dump(buf.Bytes()), bytediff.BashOutput.String(bytediff.Diff(data, buf.Bytes())), p)
+ }
+}
+
+// Makes sure packet payload doesn't display the 6 trailing null of this packet
+// as part of the payload. They're actually the ethernet trailer.
+func TestDecodeSmallTCPPacketHasEmptyPayload(t *testing.T) {
+ smallPacket := []byte{
+ 0xbc, 0x30, 0x5b, 0xe8, 0xd3, 0x49, 0xb8, 0xac, 0x6f, 0x92, 0xd5, 0xbf,
+ 0x08, 0x00, 0x45, 0x00, 0x00, 0x28, 0x00, 0x00, 0x40, 0x00, 0x40, 0x06,
+ 0x3f, 0x9f, 0xac, 0x11, 0x51, 0xc5, 0xac, 0x11, 0x51, 0x49, 0x00, 0x63,
+ 0x9a, 0xef, 0x00, 0x00, 0x00, 0x00, 0x2e, 0xc1, 0x27, 0x83, 0x50, 0x14,
+ 0x00, 0x00, 0xc3, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ }
+ p := gopacket.NewPacket(smallPacket, LinkTypeEthernet, testDecodeOptions)
+
+ if payload := p.Layer(gopacket.LayerTypePayload); payload != nil {
+ t.Error("Payload found for empty TCP packet")
+ }
+
+ testSerialization(t, p, smallPacket)
+}
+
+func TestDecodeVLANPacket(t *testing.T) {
+ p := gopacket.NewPacket(
+ []byte{
+ 0x00, 0x10, 0xdb, 0xff, 0x10, 0x00, 0x00, 0x15, 0x2c, 0x9d, 0xcc, 0x00,
+ 0x81, 0x00, 0x01, 0xf7, 0x08, 0x00, 0x45, 0x00, 0x00, 0x28, 0x29, 0x8d,
+ 0x40, 0x00, 0x7d, 0x06, 0x83, 0xa0, 0xac, 0x1b, 0xca, 0x8e, 0x45, 0x16,
+ 0x94, 0xe2, 0xd4, 0x0a, 0x00, 0x50, 0xdf, 0xab, 0x9c, 0xc6, 0xcd, 0x1e,
+ 0xe5, 0xd1, 0x50, 0x10, 0x01, 0x00, 0x5a, 0x74, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ }, LinkTypeEthernet, testDecodeOptions)
+ if err := p.ErrorLayer(); err != nil {
+ t.Error("Error while parsing vlan packet:", err)
+ }
+ if vlan := p.Layer(LayerTypeDot1Q); vlan == nil {
+ t.Error("Didn't detect vlan")
+ } else if _, ok := vlan.(*Dot1Q); !ok {
+ t.Error("LayerTypeDot1Q layer is not a Dot1Q object")
+ }
+ for i, l := range p.Layers() {
+ t.Logf("Layer %d: %#v", i, l)
+ }
+ want := []gopacket.LayerType{LayerTypeEthernet, LayerTypeDot1Q, LayerTypeIPv4, LayerTypeTCP}
+ checkLayers(p, want, t)
+}
+
+func TestDecodeSCTPPackets(t *testing.T) {
+ sctpPackets := [][]byte{
+ []byte{ // INIT
+ 0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x1f, 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x08, 0x00, 0x45, 0x02,
+ 0x00, 0x44, 0x00, 0x00, 0x40, 0x00, 0x40, 0x84, 0xc4, 0x22, 0xac, 0x1d, 0x14, 0x0f, 0xac, 0x19,
+ 0x09, 0xcc, 0x27, 0x0f, 0x22, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x19, 0x6b, 0x0b, 0x40, 0x01, 0x00,
+ 0x00, 0x24, 0xb6, 0x96, 0xb0, 0x9e, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xdb, 0x85,
+ 0x60, 0x23, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x00, 0x80, 0x00, 0x00, 0x04, 0xc0, 0x00,
+ 0x00, 0x04,
+ }, []byte{ // INIT ACK
+ 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x76, 0x40, 0x08, 0x00, 0x45, 0x20,
+ 0x01, 0x24, 0x00, 0x00, 0x40, 0x00, 0x36, 0x84, 0xcd, 0x24, 0xac, 0x19, 0x09, 0xcc, 0xac, 0x1d,
+ 0x14, 0x0f, 0x22, 0xb8, 0x27, 0x0f, 0xb6, 0x96, 0xb0, 0x9e, 0x4b, 0xab, 0x40, 0x9a, 0x02, 0x00,
+ 0x01, 0x04, 0x32, 0x80, 0xfb, 0x42, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x0a, 0x00, 0x0a, 0x85, 0x98,
+ 0xb1, 0x26, 0x00, 0x07, 0x00, 0xe8, 0xd3, 0x08, 0xce, 0xe2, 0x52, 0x95, 0xcc, 0x09, 0xa1, 0x4c,
+ 0x6f, 0xa7, 0x9e, 0xba, 0x03, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xfb, 0x80, 0x32, 0x9e, 0xb0,
+ 0x96, 0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x46, 0xc2, 0x50, 0x00, 0x00,
+ 0x00, 0x00, 0x5e, 0x25, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x26, 0xb1,
+ 0x98, 0x85, 0x02, 0x00, 0x27, 0x0f, 0xac, 0x1d, 0x14, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x22,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x24, 0x6a, 0x72, 0x5c, 0x1c, 0x3c, 0xaa,
+ 0x7a, 0xcd, 0xd3, 0x8f, 0x52, 0x78, 0x7c, 0x77, 0xfd, 0x46, 0xbd, 0x72, 0x82, 0xc1, 0x1f, 0x70,
+ 0x44, 0xcc, 0xc7, 0x9b, 0x9b, 0x7b, 0x13, 0x54, 0x3f, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x24, 0xb6, 0x96,
+ 0xb0, 0x9e, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xdb, 0x85, 0x60, 0x23, 0x00, 0x0c,
+ 0x00, 0x06, 0x00, 0x05, 0x00, 0x00, 0x80, 0x00, 0x00, 0x04, 0xc0, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x04, 0xc0, 0x00,
+ 0x00, 0x04,
+ }, []byte{ // COOKIE ECHO, DATA
+ 0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x1f, 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x08, 0x00, 0x45, 0x02,
+ 0x01, 0x20, 0x00, 0x00, 0x40, 0x00, 0x40, 0x84, 0xc3, 0x46, 0xac, 0x1d, 0x14, 0x0f, 0xac, 0x19,
+ 0x09, 0xcc, 0x27, 0x0f, 0x22, 0xb8, 0x32, 0x80, 0xfb, 0x42, 0x01, 0xf9, 0xf3, 0xa9, 0x0a, 0x00,
+ 0x00, 0xe8, 0xd3, 0x08, 0xce, 0xe2, 0x52, 0x95, 0xcc, 0x09, 0xa1, 0x4c, 0x6f, 0xa7, 0x9e, 0xba,
+ 0x03, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xfb, 0x80, 0x32, 0x9e, 0xb0, 0x96, 0xb6, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x46, 0xc2, 0x50, 0x00, 0x00, 0x00, 0x00, 0x5e, 0x25,
+ 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x26, 0xb1, 0x98, 0x85, 0x02, 0x00,
+ 0x27, 0x0f, 0xac, 0x1d, 0x14, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x22, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x02, 0x00, 0x24, 0x6a, 0x72, 0x5c, 0x1c, 0x3c, 0xaa, 0x7a, 0xcd, 0xd3, 0x8f,
+ 0x52, 0x78, 0x7c, 0x77, 0xfd, 0x46, 0xbd, 0x72, 0x82, 0xc1, 0x1f, 0x70, 0x44, 0xcc, 0xc7, 0x9b,
+ 0x9b, 0x7b, 0x13, 0x54, 0x3f, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x24, 0xb6, 0x96, 0xb0, 0x9e, 0x00, 0x01,
+ 0xc0, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xdb, 0x85, 0x60, 0x23, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x05,
+ 0x00, 0x00, 0x80, 0x00, 0x00, 0x04, 0xc0, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x16, 0xdb, 0x85, 0x60, 0x23, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x6f, 0x6f, 0x21, 0x0a, 0x00, 0x00, 0x00,
+ }, []byte{ // COOKIE ACK, SACK
+ 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x76, 0x40, 0x08, 0x00, 0x45, 0x20,
+ 0x00, 0x34, 0x00, 0x00, 0x40, 0x00, 0x36, 0x84, 0xce, 0x14, 0xac, 0x19, 0x09, 0xcc, 0xac, 0x1d,
+ 0x14, 0x0f, 0x22, 0xb8, 0x27, 0x0f, 0xb6, 0x96, 0xb0, 0x9e, 0xed, 0x64, 0x30, 0x98, 0x0b, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x00, 0x10, 0xdb, 0x85, 0x60, 0x23, 0x00, 0x00, 0xf3, 0xfa, 0x00, 0x00,
+ 0x00, 0x00,
+ }, []byte{ // DATA
+ 0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x1f, 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x08, 0x00, 0x45, 0x02,
+ 0x00, 0x3c, 0x00, 0x00, 0x40, 0x00, 0x40, 0x84, 0xc4, 0x2a, 0xac, 0x1d, 0x14, 0x0f, 0xac, 0x19,
+ 0x09, 0xcc, 0x27, 0x0f, 0x22, 0xb8, 0x32, 0x80, 0xfb, 0x42, 0xa1, 0xe3, 0xb2, 0x31, 0x00, 0x03,
+ 0x00, 0x19, 0xdb, 0x85, 0x60, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x62, 0x69,
+ 0x7a, 0x7a, 0x6c, 0x65, 0x21, 0x0a, 0x00, 0x00, 0x00, 0x00,
+ }, []byte{ // SACK
+ 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x76, 0x40, 0x08, 0x00, 0x45, 0x20,
+ 0x00, 0x30, 0x00, 0x00, 0x40, 0x00, 0x36, 0x84, 0xce, 0x18, 0xac, 0x19, 0x09, 0xcc, 0xac, 0x1d,
+ 0x14, 0x0f, 0x22, 0xb8, 0x27, 0x0f, 0xb6, 0x96, 0xb0, 0x9e, 0xfa, 0x49, 0x94, 0x3a, 0x03, 0x00,
+ 0x00, 0x10, 0xdb, 0x85, 0x60, 0x24, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00,
+ }, []byte{ // SHUTDOWN
+ 0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x1f, 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x08, 0x00, 0x45, 0x02,
+ 0x00, 0x28, 0x00, 0x00, 0x40, 0x00, 0x40, 0x84, 0xc4, 0x3e, 0xac, 0x1d, 0x14, 0x0f, 0xac, 0x19,
+ 0x09, 0xcc, 0x27, 0x0f, 0x22, 0xb8, 0x32, 0x80, 0xfb, 0x42, 0x3f, 0x29, 0x59, 0x23, 0x07, 0x00,
+ 0x00, 0x08, 0x85, 0x98, 0xb1, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ }, []byte{ // SHUTDOWN ACK
+ 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x76, 0x40, 0x08, 0x00, 0x45, 0x20,
+ 0x00, 0x24, 0x00, 0x00, 0x40, 0x00, 0x36, 0x84, 0xce, 0x24, 0xac, 0x19, 0x09, 0xcc, 0xac, 0x1d,
+ 0x14, 0x0f, 0x22, 0xb8, 0x27, 0x0f, 0xb6, 0x96, 0xb0, 0x9e, 0xb2, 0xc8, 0x99, 0x24, 0x08, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ }, []byte{ // SHUTDOWN COMPLETE
+ 0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x1f, 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x08, 0x00, 0x45, 0x02,
+ 0x00, 0x24, 0x00, 0x00, 0x40, 0x00, 0x40, 0x84, 0xc4, 0x42, 0xac, 0x1d, 0x14, 0x0f, 0xac, 0x19,
+ 0x09, 0xcc, 0x27, 0x0f, 0x22, 0xb8, 0x32, 0x80, 0xfb, 0x42, 0xa8, 0xd1, 0x86, 0x85, 0x0e, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ }}
+ wantLayers := [][]gopacket.LayerType{
+ []gopacket.LayerType{LayerTypeSCTPInit},
+ []gopacket.LayerType{LayerTypeSCTPInitAck},
+ []gopacket.LayerType{LayerTypeSCTPCookieEcho, LayerTypeSCTPData, gopacket.LayerTypePayload},
+ []gopacket.LayerType{LayerTypeSCTPCookieAck, LayerTypeSCTPSack},
+ []gopacket.LayerType{LayerTypeSCTPData, gopacket.LayerTypePayload},
+ []gopacket.LayerType{LayerTypeSCTPSack},
+ []gopacket.LayerType{LayerTypeSCTPShutdown},
+ []gopacket.LayerType{LayerTypeSCTPShutdownAck},
+ []gopacket.LayerType{LayerTypeSCTPShutdownComplete},
+ }
+ for i, data := range sctpPackets {
+ p := gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions)
+ for _, typ := range wantLayers[i] {
+ if p.Layer(typ) == nil {
+ t.Errorf("Packet %d missing layer type %v, got:", i, typ)
+ for _, layer := range p.Layers() {
+ t.Errorf("\t%v", layer.LayerType())
+ }
+ if p.ErrorLayer() != nil {
+ t.Error("\tPacket layer error:", p.ErrorLayer().Error())
+ }
+ }
+ }
+ // Test re-serialization.
+ testSerializationWithOpts(t, p, data, gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true})
+ }
+}
+
+func TestDecodeCiscoDiscovery(t *testing.T) {
+ // http://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=cdp_v2.pcap
+ data := []byte{
+ 0x01, 0x00, 0x0c, 0xcc, 0xcc, 0xcc, 0x00, 0x0b, 0xbe, 0x18, 0x9a, 0x41, 0x01, 0xc3, 0xaa, 0xaa,
+ 0x03, 0x00, 0x00, 0x0c, 0x20, 0x00, 0x02, 0xb4, 0x09, 0xa0, 0x00, 0x01, 0x00, 0x0c, 0x6d, 0x79,
+ 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x00, 0x02, 0x00, 0x11, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0xcc, 0x00, 0x04, 0xc0, 0xa8, 0x00, 0xfd, 0x00, 0x03, 0x00, 0x13, 0x46, 0x61, 0x73, 0x74, 0x45,
+ 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x30, 0x2f, 0x31, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00,
+ 0x00, 0x28, 0x00, 0x05, 0x01, 0x14, 0x43, 0x69, 0x73, 0x63, 0x6f, 0x20, 0x49, 0x6e, 0x74, 0x65,
+ 0x72, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69,
+ 0x6e, 0x67, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61,
+ 0x72, 0x65, 0x20, 0x0a, 0x49, 0x4f, 0x53, 0x20, 0x28, 0x74, 0x6d, 0x29, 0x20, 0x43, 0x32, 0x39,
+ 0x35, 0x30, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x28, 0x43, 0x32, 0x39,
+ 0x35, 0x30, 0x2d, 0x49, 0x36, 0x4b, 0x32, 0x4c, 0x32, 0x51, 0x34, 0x2d, 0x4d, 0x29, 0x2c, 0x20,
+ 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x32, 0x2e, 0x31, 0x28, 0x32, 0x32, 0x29,
+ 0x45, 0x41, 0x31, 0x34, 0x2c, 0x20, 0x52, 0x45, 0x4c, 0x45, 0x41, 0x53, 0x45, 0x20, 0x53, 0x4f,
+ 0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x20, 0x28, 0x66, 0x63, 0x31, 0x29, 0x0a, 0x54, 0x65, 0x63,
+ 0x68, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x3a, 0x20,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x63, 0x69, 0x73, 0x63, 0x6f,
+ 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x65, 0x63, 0x68, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74,
+ 0x0a, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x63, 0x29, 0x20, 0x31,
+ 0x39, 0x38, 0x36, 0x2d, 0x32, 0x30, 0x31, 0x30, 0x20, 0x62, 0x79, 0x20, 0x63, 0x69, 0x73, 0x63,
+ 0x6f, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x0a,
+ 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x54, 0x75, 0x65, 0x20, 0x32, 0x36, 0x2d,
+ 0x4f, 0x63, 0x74, 0x2d, 0x31, 0x30, 0x20, 0x31, 0x30, 0x3a, 0x33, 0x35, 0x20, 0x62, 0x79, 0x20,
+ 0x6e, 0x62, 0x75, 0x72, 0x72, 0x61, 0x00, 0x06, 0x00, 0x15, 0x63, 0x69, 0x73, 0x63, 0x6f, 0x20,
+ 0x57, 0x53, 0x2d, 0x43, 0x32, 0x39, 0x35, 0x30, 0x2d, 0x31, 0x32, 0x00, 0x08, 0x00, 0x24, 0x00,
+ 0x00, 0x0c, 0x01, 0x12, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x02, 0x20, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xbe, 0x18, 0x9a, 0x40, 0xff, 0x00, 0x00, 0x00,
+ 0x09, 0x00, 0x0c, 0x4d, 0x59, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x00, 0x0a, 0x00, 0x06, 0x00,
+ 0x01, 0x00, 0x0b, 0x00, 0x05, 0x01, 0x00, 0x12, 0x00, 0x05, 0x00, 0x00, 0x13, 0x00, 0x05, 0x00,
+ 0x00, 0x16, 0x00, 0x11, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0xcc, 0x00, 0x04, 0xc0, 0xa8, 0x00,
+ 0xfd,
+ }
+ p := gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions)
+ wantLayers := []gopacket.LayerType{LayerTypeEthernet, LayerTypeLLC, LayerTypeSNAP, LayerTypeCiscoDiscovery, LayerTypeCiscoDiscoveryInfo}
+ checkLayers(p, wantLayers, t)
+
+ want := &CiscoDiscoveryInfo{
+ CDPHello: CDPHello{
+ OUI: []byte{0, 0, 12},
+ ProtocolID: 274,
+ ClusterMaster: []byte{0, 0, 0, 0},
+ Unknown1: []byte{255, 255, 255, 255},
+ Version: 1,
+ SubVersion: 2,
+ Status: 32,
+ Unknown2: 255,
+ ClusterCommander: net.HardwareAddr{0, 0, 0, 0, 0, 0},
+ SwitchMAC: net.HardwareAddr{0, 0x0b, 0xbe, 0x18, 0x9a, 0x40},
+ Unknown3: 255,
+ ManagementVLAN: 0,
+ },
+ DeviceID: "myswitch",
+ Addresses: []net.IP{net.IPv4(192, 168, 0, 253)},
+ PortID: "FastEthernet0/1",
+ Capabilities: CDPCapabilities{false, false, false, true, false, true, false, false, false},
+ Version: "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",
+ Platform: "cisco WS-C2950-12",
+ VTPDomain: "MYDOMAIN",
+ NativeVLAN: 1,
+ FullDuplex: true,
+ MgmtAddresses: []net.IP{net.IPv4(192, 168, 0, 253)},
+ BaseLayer: BaseLayer{Contents: data[26:]},
+ }
+ cdpL := p.Layer(LayerTypeCiscoDiscoveryInfo)
+ info, _ := cdpL.(*CiscoDiscoveryInfo)
+ if !reflect.DeepEqual(info, want) {
+ t.Errorf("Values mismatch, \ngot %#v\nwant %#v\n", info, want)
+ }
+}
+
+func TestDecodeLinkLayerDiscovery(t *testing.T) {
+ // http://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=lldp.detailed.pcap
+ data := []byte{
+ 0x01, 0x80, 0xc2, 0x00, 0x00, 0x0e, 0x00, 0x01, 0x30, 0xf9, 0xad, 0xa0,
+ 0x88, 0xcc, 0x02, 0x07, 0x04, 0x00, 0x01, 0x30, 0xf9, 0xad, 0xa0, 0x04,
+ 0x04, 0x05, 0x31, 0x2f, 0x31, 0x06, 0x02, 0x00, 0x78, 0x08, 0x17, 0x53,
+ 0x75, 0x6d, 0x6d, 0x69, 0x74, 0x33, 0x30, 0x30, 0x2d, 0x34, 0x38, 0x2d,
+ 0x50, 0x6f, 0x72, 0x74, 0x20, 0x31, 0x30, 0x30, 0x31, 0x00, 0x0a, 0x0d,
+ 0x53, 0x75, 0x6d, 0x6d, 0x69, 0x74, 0x33, 0x30, 0x30, 0x2d, 0x34, 0x38,
+ 0x00, 0x0c, 0x4c, 0x53, 0x75, 0x6d, 0x6d, 0x69, 0x74, 0x33, 0x30, 0x30,
+ 0x2d, 0x34, 0x38, 0x20, 0x2d, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
+ 0x6e, 0x20, 0x37, 0x2e, 0x34, 0x65, 0x2e, 0x31, 0x20, 0x28, 0x42, 0x75,
+ 0x69, 0x6c, 0x64, 0x20, 0x35, 0x29, 0x20, 0x62, 0x79, 0x20, 0x52, 0x65,
+ 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72,
+ 0x20, 0x30, 0x35, 0x2f, 0x32, 0x37, 0x2f, 0x30, 0x35, 0x20, 0x30, 0x34,
+ 0x3a, 0x35, 0x33, 0x3a, 0x31, 0x31, 0x00, 0x0e, 0x04, 0x00, 0x14, 0x00,
+ 0x14, 0x10, 0x0e, 0x07, 0x06, 0x00, 0x01, 0x30, 0xf9, 0xad, 0xa0, 0x02,
+ 0x00, 0x00, 0x03, 0xe9, 0x00, 0xfe, 0x07, 0x00, 0x12, 0x0f, 0x02, 0x07,
+ 0x01, 0x00, 0xfe, 0x09, 0x00, 0x12, 0x0f, 0x01, 0x03, 0x6c, 0x00, 0x00,
+ 0x10, 0xfe, 0x09, 0x00, 0x12, 0x0f, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0xfe, 0x06, 0x00, 0x12, 0x0f, 0x04, 0x05, 0xf2, 0xfe, 0x06, 0x00, 0x80,
+ 0xc2, 0x01, 0x01, 0xe8, 0xfe, 0x07, 0x00, 0x80, 0xc2, 0x02, 0x01, 0x00,
+ 0x00, 0xfe, 0x17, 0x00, 0x80, 0xc2, 0x03, 0x01, 0xe8, 0x10, 0x76, 0x32,
+ 0x2d, 0x30, 0x34, 0x38, 0x38, 0x2d, 0x30, 0x33, 0x2d, 0x30, 0x35, 0x30,
+ 0x35, 0x00, 0xfe, 0x05, 0x00, 0x80, 0xc2, 0x04, 0x00, 0x00, 0x00,
+ }
+
+ p := gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions)
+ wantLayers := []gopacket.LayerType{LayerTypeEthernet, LayerTypeLinkLayerDiscovery, LayerTypeLinkLayerDiscoveryInfo}
+ checkLayers(p, wantLayers, t)
+ lldpL := p.Layer(LayerTypeLinkLayerDiscovery)
+ lldp := lldpL.(*LinkLayerDiscovery)
+ want := &LinkLayerDiscovery{
+ ChassisID: LLDPChassisID{LLDPChassisIDSubTypeMACAddr, []byte{0x00, 0x01, 0x30, 0xf9, 0xad, 0xa0}},
+ PortID: LLDPPortID{LLDPPortIDSubtypeIfaceName, []byte("1/1")},
+ TTL: 120,
+ BaseLayer: BaseLayer{Contents: data[14:]},
+ }
+ lldp.Values = nil // test these in next stage
+ if !reflect.DeepEqual(lldp, want) {
+ t.Errorf("Values mismatch, \ngot %#v\nwant %#v\n", lldp, want)
+ }
+
+ infoL := p.Layer(LayerTypeLinkLayerDiscoveryInfo)
+ info := infoL.(*LinkLayerDiscoveryInfo)
+ wantinfo := &LinkLayerDiscoveryInfo{
+ PortDescription: "Summit300-48-Port 1001\x00",
+ SysName: "Summit300-48\x00",
+ SysDescription: "Summit300-48 - Version 7.4e.1 (Build 5) by Release_Master 05/27/05 04:53:11\x00",
+ SysCapabilities: LLDPSysCapabilities{
+ SystemCap: LLDPCapabilities{Bridge: true, Router: true},
+ EnabledCap: LLDPCapabilities{Bridge: true, Router: true},
+ },
+ MgmtAddress: LLDPMgmtAddress{IANAAddressFamily802, []byte{0x00, 0x01, 0x30, 0xf9, 0xad, 0xa0}, LLDPInterfaceSubtypeifIndex, 1001, ""},
+ OrgTLVs: []LLDPOrgSpecificTLV{
+ LLDPOrgSpecificTLV{OUI: 0x120f, SubType: 0x2, Info: []uint8{0x7, 0x1, 0x0}},
+ LLDPOrgSpecificTLV{OUI: 0x120f, SubType: 0x1, Info: []uint8{0x3, 0x6c, 0x0, 0x0, 0x10}},
+ LLDPOrgSpecificTLV{OUI: 0x120f, SubType: 0x3, Info: []uint8{0x1, 0x0, 0x0, 0x0, 0x0}},
+ LLDPOrgSpecificTLV{OUI: 0x120f, SubType: 0x4, Info: []uint8{0x5, 0xf2}},
+ LLDPOrgSpecificTLV{OUI: 0x80c2, SubType: 0x1, Info: []uint8{0x1, 0xe8}},
+ LLDPOrgSpecificTLV{OUI: 0x80c2, SubType: 0x2, Info: []uint8{0x1, 0x0, 0x0}},
+ LLDPOrgSpecificTLV{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}},
+ LLDPOrgSpecificTLV{OUI: 0x80c2, SubType: 0x4, Info: []uint8{0x0}},
+ },
+ Unknown: nil,
+ }
+ if !reflect.DeepEqual(info, wantinfo) {
+ t.Errorf("Values mismatch, \ngot %#v\nwant %#v\n", info, wantinfo)
+ }
+ info8021, err := info.Decode8021()
+ if err != nil {
+ t.Errorf("8021 Values decode error: %v", err)
+ }
+ want8021 := LLDPInfo8021{
+ PVID: 488,
+ PPVIDs: []PortProtocolVLANID{PortProtocolVLANID{false, false, 0}},
+ VLANNames: []VLANName{VLANName{488, "v2-0488-03-0505\x00"}},
+ ProtocolIdentities: nil,
+ VIDUsageDigest: 0,
+ ManagementVID: 0,
+ LinkAggregation: LLDPLinkAggregation{false, false, 0},
+ }
+ if !reflect.DeepEqual(info8021, want8021) {
+ t.Errorf("Values mismatch, \ngot %#v\nwant %#v\n", info8021, want8021)
+ }
+ info8023, err := info.Decode8023()
+ if err != nil {
+ t.Errorf("8023 Values decode error: %v", err)
+ }
+ want8023 := LLDPInfo8023{
+ LinkAggregation: LLDPLinkAggregation{true, false, 0},
+ MACPHYConfigStatus: LLDPMACPHYConfigStatus{true, true, 0x6c00, 0x0010},
+ PowerViaMDI: LLDPPowerViaMDI8023{true, true, true, false, 1, 0, 0, 0, 0, 0, 0},
+ MTU: 1522,
+ }
+
+ if !reflect.DeepEqual(info8023, want8023) {
+ t.Errorf("Values mismatch, \ngot %#v\nwant %#v\n", info8023, want8023)
+ }
+
+ // http://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=lldpmed_civicloc.pcap
+ data = []byte{
+ 0x01, 0x80, 0xc2, 0x00, 0x00, 0x0e, 0x00, 0x13, 0x21, 0x57, 0xca, 0x7f,
+ 0x88, 0xcc, 0x02, 0x07, 0x04, 0x00, 0x13, 0x21, 0x57, 0xca, 0x40, 0x04,
+ 0x02, 0x07, 0x31, 0x06, 0x02, 0x00, 0x78, 0x08, 0x01, 0x31, 0x0a, 0x1a,
+ 0x50, 0x72, 0x6f, 0x43, 0x75, 0x72, 0x76, 0x65, 0x20, 0x53, 0x77, 0x69,
+ 0x74, 0x63, 0x68, 0x20, 0x32, 0x36, 0x30, 0x30, 0x2d, 0x38, 0x2d, 0x50,
+ 0x57, 0x52, 0x0c, 0x5f, 0x50, 0x72, 0x6f, 0x43, 0x75, 0x72, 0x76, 0x65,
+ 0x20, 0x4a, 0x38, 0x37, 0x36, 0x32, 0x41, 0x20, 0x53, 0x77, 0x69, 0x74,
+ 0x63, 0x68, 0x20, 0x32, 0x36, 0x30, 0x30, 0x2d, 0x38, 0x2d, 0x50, 0x57,
+ 0x52, 0x2c, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20,
+ 0x48, 0x2e, 0x30, 0x38, 0x2e, 0x38, 0x39, 0x2c, 0x20, 0x52, 0x4f, 0x4d,
+ 0x20, 0x48, 0x2e, 0x30, 0x38, 0x2e, 0x35, 0x58, 0x20, 0x28, 0x2f, 0x73,
+ 0x77, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64,
+ 0x2f, 0x66, 0x69, 0x73, 0x68, 0x28, 0x74, 0x73, 0x5f, 0x30, 0x38, 0x5f,
+ 0x35, 0x29, 0x29, 0x0e, 0x04, 0x00, 0x14, 0x00, 0x04, 0x10, 0x0c, 0x05,
+ 0x01, 0x0f, 0xff, 0x7a, 0x94, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe,
+ 0x09, 0x00, 0x12, 0x0f, 0x01, 0x03, 0x6c, 0x00, 0x00, 0x10, 0xfe, 0x07,
+ 0x00, 0x12, 0xbb, 0x01, 0x00, 0x0f, 0x04, 0xfe, 0x08, 0x00, 0x12, 0xbb,
+ 0x02, 0x01, 0x40, 0x65, 0xae, 0xfe, 0x2e, 0x00, 0x12, 0xbb, 0x03, 0x02,
+ 0x28, 0x02, 0x55, 0x53, 0x01, 0x02, 0x43, 0x41, 0x03, 0x09, 0x52, 0x6f,
+ 0x73, 0x65, 0x76, 0x69, 0x6c, 0x6c, 0x65, 0x06, 0x09, 0x46, 0x6f, 0x6f,
+ 0x74, 0x68, 0x69, 0x6c, 0x6c, 0x73, 0x13, 0x04, 0x38, 0x30, 0x30, 0x30,
+ 0x1a, 0x03, 0x52, 0x33, 0x4c, 0xfe, 0x07, 0x00, 0x12, 0xbb, 0x04, 0x03,
+ 0x00, 0x41, 0x00, 0x00,
+ }
+
+ p = gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions)
+ wantLayers = []gopacket.LayerType{LayerTypeEthernet, LayerTypeLinkLayerDiscovery, LayerTypeLinkLayerDiscoveryInfo}
+ checkLayers(p, wantLayers, t)
+ lldpL = p.Layer(LayerTypeLinkLayerDiscovery)
+ lldp = lldpL.(*LinkLayerDiscovery)
+ want = &LinkLayerDiscovery{
+ ChassisID: LLDPChassisID{LLDPChassisIDSubTypeMACAddr, []byte{0x00, 0x13, 0x21, 0x57, 0xca, 0x40}},
+ PortID: LLDPPortID{LLDPPortIDSubtypeLocal, []byte("1")},
+ TTL: 120,
+ BaseLayer: BaseLayer{Contents: data[14:]},
+ }
+ lldp.Values = nil // test these in next stage
+ if !reflect.DeepEqual(lldp, want) {
+ t.Errorf("Values mismatch, \ngot %#v\nwant %#v\n", lldp, want)
+ }
+
+ infoL = p.Layer(LayerTypeLinkLayerDiscoveryInfo)
+ info = infoL.(*LinkLayerDiscoveryInfo)
+ wantinfo = &LinkLayerDiscoveryInfo{
+ PortDescription: "1",
+ SysName: "ProCurve Switch 2600-8-PWR",
+ SysDescription: "ProCurve J8762A Switch 2600-8-PWR, revision H.08.89, ROM H.08.5X (/sw/code/build/fish(ts_08_5))",
+ SysCapabilities: LLDPSysCapabilities{
+ SystemCap: LLDPCapabilities{Bridge: true, Router: true},
+ EnabledCap: LLDPCapabilities{Bridge: true},
+ },
+ MgmtAddress: LLDPMgmtAddress{IANAAddressFamilyIPV4, []byte{0x0f, 0xff, 0x7a, 0x94}, LLDPInterfaceSubtypeifIndex, 0, ""},
+ OrgTLVs: []LLDPOrgSpecificTLV{
+ LLDPOrgSpecificTLV{OUI: 0x120f, SubType: 0x1, Info: []uint8{0x3, 0x6c, 0x0, 0x0, 0x10}},
+ LLDPOrgSpecificTLV{OUI: 0x12bb, SubType: 0x1, Info: []uint8{0x0, 0xf, 0x4}},
+ LLDPOrgSpecificTLV{OUI: 0x12bb, SubType: 0x2, Info: []uint8{0x1, 0x40, 0x65, 0xae}},
+ LLDPOrgSpecificTLV{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}},
+ LLDPOrgSpecificTLV{OUI: 0x12bb, SubType: 0x4, Info: []uint8{0x3, 0x0, 0x41}},
+ },
+ Unknown: nil,
+ }
+ if !reflect.DeepEqual(info, wantinfo) {
+ t.Errorf("Values mismatch, \ngot %#v\nwant %#v\n", info, wantinfo)
+ }
+ info8023, err = info.Decode8023()
+ if err != nil {
+ t.Errorf("8023 Values decode error: %v", err)
+ }
+ want8023 = LLDPInfo8023{
+ MACPHYConfigStatus: LLDPMACPHYConfigStatus{true, true, 0x6c00, 0x0010},
+ }
+
+ if !reflect.DeepEqual(info8023, want8023) {
+ t.Errorf("Values mismatch, \ngot %#v\nwant %#v\n", info8023, want8023)
+ }
+
+ infoMedia, err := info.DecodeMedia()
+ if err != nil {
+ t.Errorf("8023 Values decode error: %v", err)
+ }
+ wantMedia := LLDPInfoMedia{
+ MediaCapabilities: LLDPMediaCapabilities{true, true, true, true, false, false, LLDPMediaClassNetwork},
+ NetworkPolicy: LLDPNetworkPolicy{LLDPAppTypeVoice, true, true, 50, 6, 46},
+ Location: LLDPLocation{Format: LLDPLocationFormatAddress, Address: LLDPLocationAddress{
+ What: LLDPLocationAddressWhatClient,
+ CountryCode: "US",
+ AddressLines: []LLDPLocationAddressLine{
+ LLDPLocationAddressLine{LLDPLocationAddressTypeNational, "CA"},
+ LLDPLocationAddressLine{LLDPLocationAddressTypeCity, "Roseville"},
+ LLDPLocationAddressLine{LLDPLocationAddressTypeStreet, "Foothills"},
+ LLDPLocationAddressLine{LLDPLocationAddressTypeHouseNum, "8000"},
+ LLDPLocationAddressLine{LLDPLocationAddressTypeUnit, "R3L"},
+ },
+ }},
+ PowerViaMDI: LLDPPowerViaMDI{0, 0, LLDPPowerPriorityLow, 6500},
+ }
+
+ if !reflect.DeepEqual(infoMedia, wantMedia) {
+ t.Errorf("Values mismatch, \ngot %#v\nwant %#v\n", infoMedia, wantMedia)
+ }
+
+}
+
+func TestDecodeNortelDiscovery(t *testing.T) {
+ // http://www.thetechfirm.com/packets/nortel_btdp/btdp_nai.enc
+ data := []byte{
+ 0x01, 0x00, 0x81, 0x00, 0x01, 0x00, 0x00, 0x04, 0x38, 0xe0, 0xcc, 0xde,
+ 0x00, 0x13, 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x81, 0x01, 0xa2, 0xac, 0x13,
+ 0x58, 0x03, 0x00, 0x04, 0x15, 0x30, 0x0c, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x38, 0xe0, 0xcc, 0xde, 0x80, 0x6a, 0x00, 0x01, 0x14, 0x00,
+ 0x02, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ }
+ p := gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions)
+ wantLayers := []gopacket.LayerType{LayerTypeEthernet, LayerTypeLLC, LayerTypeSNAP, LayerTypeNortelDiscovery}
+ checkLayers(p, wantLayers, t)
+
+ want := &NortelDiscovery{
+ IPAddress: []byte{172, 19, 88, 3},
+ SegmentID: []byte{0x00, 0x04, 0x15},
+ Chassis: NDPChassisBayStack450101001000Switches,
+ Backplane: NDPBackplaneEthernetFastEthernetGigabitEthernet,
+ State: NDPStateHeartbeat,
+ NumLinks: 0,
+ }
+ ndpL := p.Layer(LayerTypeNortelDiscovery)
+ info, _ := ndpL.(*NortelDiscovery)
+ if !reflect.DeepEqual(info, want) {
+ t.Errorf("Values mismatch, \ngot %#v\nwant %#v\n", info, want)
+ }
+}
+
+func TestDecodeIPv6Jumbogram(t *testing.T) {
+ // Haven't found any of these in the wild or on example pcaps online, so had
+ // to generate one myself via scapy. Unfortunately, scapy can only
+ // str(packet) for packets with length < 65536, due to limitations in python's
+ // struct library, so I generated the header with:
+ // Ether() / IPv6(src='::1', dst='::2') / IPv6ExtHdrHopByHop(options=[Jumbo(jumboplen=70000)]) / TCP(sport=8888, dport=80)
+ // then added the payload manually ("payload" * 9996). The checksums here are
+ // not correct, but we don't check, so who cares ;)
+ dataStr := "\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"
+ payload := strings.Repeat("payload", 9996)
+ data := []byte(dataStr + payload)
+ p := gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions)
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeIPv6HopByHop, LayerTypeTCP, gopacket.LayerTypePayload}, t)
+ if p.ApplicationLayer() == nil {
+ t.Error("Packet has no application layer")
+ } else if string(p.ApplicationLayer().Payload()) != payload {
+ t.Errorf("Jumbogram payload wrong")
+ }
+ // Check truncated for jumbograms
+ data = data[:len(data)-1]
+ p = gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions)
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeIPv6HopByHop, LayerTypeTCP, gopacket.LayerTypePayload}, t)
+ if !p.Metadata().Truncated {
+ t.Error("Jumbogram should be truncated")
+ }
+}
+
+func TestDecodeUDPPacketTooSmall(t *testing.T) {
+ data := []byte{
+ 0x00, 0x15, 0x2c, 0x9d, 0xcc, 0x00, 0x00, 0x10, 0xdb, 0xff, 0x10, 0x00, 0x81, 0x00, 0x01, 0xf7,
+ 0x08, 0x00, 0x45, 0x60, 0x00, 0x3c, 0x0f, 0xa9, 0x00, 0x00, 0x6e, 0x11, 0x01, 0x0a, 0x47, 0xe6,
+ 0xee, 0x2e, 0xac, 0x16, 0x59, 0x73, 0x00, 0x50, 0x00, 0x50, 0x00, 0x28, 0x4d, 0xad, 0x00, 0x67,
+ 0x00, 0x01, 0x00, 0x72, 0xd5, 0xc7, 0xf1, 0x07, 0x00, 0x00, 0x01, 0x01, 0x00, 0x0d, 0x00, 0x00,
+ 0x00, 0x14, 0x00, 0x00, 0x19, 0xba,
+ }
+ p := gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions)
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeDot1Q, LayerTypeIPv4, LayerTypeUDP, gopacket.LayerTypePayload}, t)
+ if !p.Metadata().Truncated {
+ t.Error("UDP short packet should be truncated")
+ }
+}
+
+func TestDecodingLayerParserFullTCPPacket(t *testing.T) {
+ dlp := gopacket.NewDecodingLayerParser(LayerTypeEthernet, &Ethernet{}, &IPv4{}, &TCP{}, &gopacket.Payload{})
+ decoded := make([]gopacket.LayerType, 1)
+ err := dlp.DecodeLayers(testSimpleTCPPacket, &decoded)
+ if err != nil {
+ t.Error("Error from dlp parser: ", err)
+ }
+ if len(decoded) != 4 {
+ t.Error("Expected 4 layers parsed, instead got ", len(decoded))
+ }
+}
+
+// testICMP is the packet:
+// 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
+// 0x0000: 24be 0527 0b17 001f cab3 75c0 0800 4500 $..'......u...E.
+// 0x0010: 0038 0000 0000 fc01 d7a7 480e dee2 ac1d .8........H.....
+// 0x0020: 140f 030d 946e 0000 0000 4520 004d 0000 .....n....E..M..
+// 0x0030: 4000 3e11 2849 ac1d 140f 0a42 49c9 8ecc @.>.(I.....BI...
+// 0x0040: 62e1 0039 769d b..9v.
+var testICMP = []byte{
+ 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x75, 0xc0, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0xd7, 0xa7, 0x48, 0x0e, 0xde, 0xe2, 0xac, 0x1d,
+ 0x14, 0x0f, 0x03, 0x0d, 0x94, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x45, 0x20, 0x00, 0x4d, 0x00, 0x00,
+ 0x40, 0x00, 0x3e, 0x11, 0x28, 0x49, 0xac, 0x1d, 0x14, 0x0f, 0x0a, 0x42, 0x49, 0xc9, 0x8e, 0xcc,
+ 0x62, 0xe1, 0x00, 0x39, 0x76, 0x9d,
+}
+
+func TestICMP(t *testing.T) {
+ p := gopacket.NewPacket(testICMP, LinkTypeEthernet, testDecodeOptions)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)
+ testSerialization(t, p, testICMP)
+}
+func BenchmarkDecodeICMP(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testICMP, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+// testICMP6 is the packet:
+// 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
+// 0x0000: 24be 0527 0b17 001f cab3 75c0 86dd 6e00 $..'......u...n.
+// 0x0010: 0000 0020 3aff fe80 0000 0000 0000 021f ....:...........
+// 0x0020: caff feb3 75c0 2620 0000 1005 0000 26be ....u.&.......&.
+// 0x0030: 05ff fe27 0b17 8700 1eba 0000 0000 2620 ...'..........&.
+// 0x0040: 0000 1005 0000 26be 05ff fe27 0b17 0101 ......&....'....
+// 0x0050: 001f cab3 75c0 ....u.
+var testICMP6 = []byte{
+ 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x75, 0xc0, 0x86, 0xdd, 0x6e, 0x00,
+ 0x00, 0x00, 0x00, 0x20, 0x3a, 0xff, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1f,
+ 0xca, 0xff, 0xfe, 0xb3, 0x75, 0xc0, 0x26, 0x20, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x26, 0xbe,
+ 0x05, 0xff, 0xfe, 0x27, 0x0b, 0x17, 0x87, 0x00, 0x1e, 0xba, 0x00, 0x00, 0x00, 0x00, 0x26, 0x20,
+ 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x26, 0xbe, 0x05, 0xff, 0xfe, 0x27, 0x0b, 0x17, 0x01, 0x01,
+ 0x00, 0x1f, 0xca, 0xb3, 0x75, 0xc0,
+}
+
+func TestICMP6(t *testing.T) {
+ p := gopacket.NewPacket(testICMP6, LinkTypeEthernet, testDecodeOptions)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeICMPv6, gopacket.LayerTypePayload}, t)
+ testSerialization(t, p, testICMP6)
+}
+func BenchmarkDecodeICMP6(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testICMP6, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+// testMPLS is the packet:
+// 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
+// 0x0000: 0030 96e6 fc39 0030 9605 2838 8847 0001 .0...9.0..(8.G..
+// 0x0010: d1ff 4500 0064 000b 0000 ff01 a569 0a01 ..E..d.......i..
+// 0x0020: 0201 0a22 0001 0800 3a76 0a3a 062b 0000 ..."....:v.:.+..
+// 0x0030: 0000 001f 3350 abcd abcd abcd abcd abcd ....3P..........
+// 0x0040: abcd abcd abcd abcd abcd abcd abcd abcd ................
+// 0x0050: abcd abcd abcd abcd abcd abcd abcd abcd ................
+// 0x0060: abcd abcd abcd abcd abcd abcd abcd abcd ................
+// 0x0070: abcd abcd abcd ......
+var testMPLS = []byte{
+ 0x00, 0x30, 0x96, 0xe6, 0xfc, 0x39, 0x00, 0x30, 0x96, 0x05, 0x28, 0x38, 0x88, 0x47, 0x00, 0x01,
+ 0xd1, 0xff, 0x45, 0x00, 0x00, 0x64, 0x00, 0x0b, 0x00, 0x00, 0xff, 0x01, 0xa5, 0x69, 0x0a, 0x01,
+ 0x02, 0x01, 0x0a, 0x22, 0x00, 0x01, 0x08, 0x00, 0x3a, 0x76, 0x0a, 0x3a, 0x06, 0x2b, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1f, 0x33, 0x50, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+}
+
+func TestMPLS(t *testing.T) {
+ p := gopacket.NewPacket(testMPLS, LinkTypeEthernet, testDecodeOptions)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeMPLS, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)
+ testSerialization(t, p, testMPLS)
+}
+func BenchmarkDecodeMPLS(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testMPLS, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+// testPPPoEICMPv6 is the packet:
+// 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
+// 0x0000: cc05 0e88 0000 ca01 0e88 0006 8864 1100 .............d..
+// 0x0010: 0011 0042 0057 6e00 0000 0018 3aff fe80 ...B.Wn.....:...
+// 0x0020: 0000 0000 0000 c801 0eff fe88 0008 ff02 ................
+// 0x0030: 0000 0000 0000 0000 0000 0000 0001 8800 ................
+// 0x0040: 5083 8000 0000 fe80 0000 0000 0000 c801 P...............
+// 0x0050: 0eff fe88 0008 ......
+var testPPPoEICMPv6 = []byte{
+ 0xcc, 0x05, 0x0e, 0x88, 0x00, 0x00, 0xca, 0x01, 0x0e, 0x88, 0x00, 0x06, 0x88, 0x64, 0x11, 0x00,
+ 0x00, 0x11, 0x00, 0x42, 0x00, 0x57, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3a, 0xff, 0xfe, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x01, 0x0e, 0xff, 0xfe, 0x88, 0x00, 0x08, 0xff, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x88, 0x00,
+ 0x50, 0x83, 0x80, 0x00, 0x00, 0x00, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x01,
+ 0x0e, 0xff, 0xfe, 0x88, 0x00, 0x08,
+}
+
+func TestPPPoEICMPv6(t *testing.T) {
+ p := gopacket.NewPacket(testPPPoEICMPv6, LinkTypeEthernet, testDecodeOptions)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{
+ LayerTypeEthernet,
+ LayerTypePPPoE,
+ LayerTypePPP,
+ LayerTypeIPv6,
+ LayerTypeICMPv6,
+ gopacket.LayerTypePayload,
+ }, t)
+ testSerialization(t, p, testPPPoEICMPv6)
+}
+func BenchmarkDecodePPPoEICMPv6(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPPPoEICMPv6, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+var testPFLogUDP = []byte{
+ 0x3d, 0x02, 0x00, 0x00, 0x65, 0x6e, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xff, 0xff, 0xff, 0x7f,
+ 0xa0, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xb8, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x45, 0x00, 0x00, 0x2c, 0x02, 0x16, 0x00, 0x00, 0x40, 0x11, 0x4e, 0xb0, 0xac, 0x17, 0xe8, 0xcc,
+ 0xac, 0x17, 0xe8, 0xff, 0xf0, 0xff, 0x21, 0xa4, 0x00, 0x18, 0x2a, 0x25, 0x50, 0x4e, 0x4a, 0x50,
+ 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestPFLogUDP(t *testing.T) {
+ p := gopacket.NewPacket(testPFLogUDP, LinkTypePFLog, testDecodeOptions)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{
+ LayerTypePFLog,
+ LayerTypeIPv4,
+ LayerTypeUDP,
+ gopacket.LayerTypePayload,
+ }, t)
+}
+
+func TestRegressionDot1QPriority(t *testing.T) {
+ d := &Dot1Q{
+ Priority: 2,
+ }
+ out := gopacket.NewSerializeBuffer()
+ gopacket.SerializeLayers(out, gopacket.SerializeOptions{}, d)
+ if err := d.DecodeFromBytes(out.Bytes(), gopacket.NilDecodeFeedback); err != nil {
+ t.Errorf("could not decode encoded dot1q")
+ } else if d.Priority != 2 {
+ t.Errorf("priority mismatch, want 2 got %d", d.Priority)
+ }
+}
+
+// testPacketMPLSInMPLS is the packet:
+// 15:27:44.753678 MPLS (label 18, exp 0, ttl 255) (label 16, exp 0, [S], ttl
+// 255) IP 10.31.0.1 > 10.34.0.1: ICMP echo request, id 3941, seq 4768, length
+// 80
+// 0x0000: 0030 96e6 fc39 0030 9605 2838 8847 0001 .0...9.0..(8.G..
+// 0x0010: 20ff 0001 01ff 4500 0064 0050 0000 ff01 ......E..d.P....
+// 0x0020: a706 0a1f 0001 0a22 0001 0800 bd11 0f65 .......".......e
+// 0x0030: 12a0 0000 0000 0053 9ee0 abcd abcd abcd .......S........
+// 0x0040: abcd abcd abcd abcd abcd abcd abcd abcd ................
+// 0x0050: abcd abcd abcd abcd abcd abcd abcd abcd ................
+// 0x0060: abcd abcd abcd abcd abcd abcd abcd abcd ................
+// 0x0070: abcd abcd abcd abcd abcd ..........
+var testPacketMPLSInMPLS = []byte{
+ 0x00, 0x30, 0x96, 0xe6, 0xfc, 0x39, 0x00, 0x30, 0x96, 0x05, 0x28, 0x38, 0x88, 0x47, 0x00, 0x01,
+ 0x20, 0xff, 0x00, 0x01, 0x01, 0xff, 0x45, 0x00, 0x00, 0x64, 0x00, 0x50, 0x00, 0x00, 0xff, 0x01,
+ 0xa7, 0x06, 0x0a, 0x1f, 0x00, 0x01, 0x0a, 0x22, 0x00, 0x01, 0x08, 0x00, 0xbd, 0x11, 0x0f, 0x65,
+ 0x12, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x9e, 0xe0, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+}
+
+func TestPacketMPLSInMPLS(t *testing.T) {
+ p := gopacket.NewPacket(testPacketMPLSInMPLS, LinkTypeEthernet, testDecodeOptions)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{
+ LayerTypeEthernet,
+ LayerTypeMPLS,
+ LayerTypeMPLS,
+ LayerTypeIPv4,
+ LayerTypeICMPv4,
+ gopacket.LayerTypePayload}, t)
+}
+
+// testPacketIPv4Fragmented is the packet:
+// 22:11:26.616090 IP 10.1.1.1.31915 > 129.111.30.27.20197: UDP, length 28
+// 0x0000: 0000 39cf d9cd 0040 33d9 7cfd 0800 4500 ..9....@3.|...E.
+// 0x0010: 0038 00f2 2000 4011 af37 0a01 0101 816f .8....@..7.....o
+// 0x0020: 1e1b 7cab 4ee5 0024 0000 0000 0000 0000 ..|.N..$........
+// 0x0030: 0000 0000 0000 0000 0000 0000 0000 0000 ................
+// 0x0040: 0000 0000 0000 ......
+var testPacketIPv4Fragmented = []byte{
+ 0x00, 0x00, 0x39, 0xcf, 0xd9, 0xcd, 0x00, 0x40, 0x33, 0xd9, 0x7c, 0xfd, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0x38, 0x00, 0xf2, 0x20, 0x00, 0x40, 0x11, 0xaf, 0x37, 0x0a, 0x01, 0x01, 0x01, 0x81, 0x6f,
+ 0x1e, 0x1b, 0x7c, 0xab, 0x4e, 0xe5, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestPacketIPv4Fragmented(t *testing.T) {
+ p := gopacket.NewPacket(testPacketIPv4Fragmented, LinkTypeEthernet, testDecodeOptions)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, gopacket.LayerTypeFragment}, t)
+ testSerializationWithOpts(t, p, testPacketIPv4Fragmented, gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true})
+}
+
+// TestSCTPChunkBadLength tests for issue #146
+func TestSCTPChunkBadLength(t *testing.T) {
+ data := []byte(
+ "0000\xad9$e\x11\xe4\xaeo\b\x00E\x00\x018\xb4\xa3" +
+ "\x00\x00Y\x84\xc4@\x11gz\xc0\xa8\xee\x01\xc0\xa8" +
+ "\xeeD\x007le\x03\x01\xc0\f\xdf\b\x01\x00\x00")
+
+ // this panic'd previously due to a zero length chunk getting
+ // repeatedly read
+ gopacket.NewPacket(data, LinkTypeEthernet, gopacket.Default)
+}
+
+// TestSTP
+func TestSTP(t *testing.T) {
+ testSTPpacket := []byte{
+ 0x01, 0x80, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x0E, 0x87, 0x85, 0x04, 0x00, 0x26, 0x42, 0x42,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x64, 0x00, 0x1C, 0x0E, 0x87, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x80, 0x64, 0x00, 0x1C, 0x0E, 0x87, 0x85, 0x00, 0x80, 0x04, 0x01, 0x00, 0x14, 0x00,
+ 0x02, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ }
+ p := gopacket.NewPacket(testSTPpacket, LinkTypeEthernet, testDecodeOptions)
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeLLC, LayerTypeSTP}, t)
+}
diff --git a/vendor/github.com/google/gopacket/layers/dhcp_test.go b/vendor/github.com/google/gopacket/layers/dhcp_test.go
new file mode 100644
index 0000000..c4975dc
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/dhcp_test.go
@@ -0,0 +1,129 @@
+// Copyright 2016, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "bytes"
+ "net"
+ "testing"
+
+ "github.com/google/gopacket"
+)
+
+func TestDHCPv4EncodeRequest(t *testing.T) {
+ dhcp := &DHCPv4{Operation: DHCPOpRequest, HardwareType: LinkTypeEthernet, Xid: 0x12345678,
+ ClientIP: 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},
+ ClientHWAddr: net.HardwareAddr{0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc},
+ ServerName: make([]byte, 64), File: make([]byte, 128)}
+
+ dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptMessageType, []byte{byte(DHCPMsgTypeDiscover)}))
+ dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptHostname, []byte{'e', 'x', 'a', 'm', 'p', 'l', 'e', '.', 'c', 'o', 'm'}))
+ dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptPad, nil))
+ dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptParamsRequest,
+ []byte{byte(DHCPOptSubnetMask), byte(DHCPOptBroadcastAddr), byte(DHCPOptTimeOffset),
+ byte(DHCPOptRouter), byte(DHCPOptDomainName), byte(DHCPOptDNS), byte(DHCPOptDomainSearch),
+ byte(DHCPOptHostname), byte(DHCPOptNetBIOSTCPNS), byte(DHCPOptInterfaceMTU), byte(DHCPOptClasslessStaticRoute),
+ byte(DHCPOptNTPServers)}))
+
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{FixLengths: true}
+ err := gopacket.SerializeLayers(buf, opts, dhcp)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ p2 := gopacket.NewPacket(buf.Bytes(), LayerTypeDHCPv4, testDecodeOptions)
+ dhcp2 := p2.Layer(LayerTypeDHCPv4).(*DHCPv4)
+ testDHCPEqual(t, dhcp, dhcp2)
+}
+
+func TestDHCPv4EncodeResponse(t *testing.T) {
+ dhcp := &DHCPv4{Operation: DHCPOpReply, HardwareType: LinkTypeEthernet, Xid: 0x12345678,
+ ClientIP: 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},
+ ClientHWAddr: net.HardwareAddr{0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc},
+ ServerName: make([]byte, 64), File: make([]byte, 128)}
+
+ dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptMessageType, []byte{byte(DHCPMsgTypeOffer)}))
+ dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptSubnetMask, []byte{255, 255, 255, 0}))
+ dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptPad, nil))
+ dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptT1, []byte{0x00, 0x00, 0x0e, 0x10}))
+ dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptT2, []byte{0x00, 0x00, 0x0e, 0x10}))
+ dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptLeaseTime, []byte{0x00, 0x00, 0x0e, 0x10}))
+ dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptServerID, []byte{192, 168, 0, 1}))
+
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{FixLengths: true}
+ err := gopacket.SerializeLayers(buf, opts, dhcp)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ p2 := gopacket.NewPacket(buf.Bytes(), LayerTypeDHCPv4, testDecodeOptions)
+ dhcp2 := p2.Layer(LayerTypeDHCPv4).(*DHCPv4)
+ testDHCPEqual(t, dhcp, dhcp2)
+}
+
+func testDHCPEqual(t *testing.T, d1, d2 *DHCPv4) {
+ if d1.Operation != d2.Operation {
+ t.Errorf("expected Operation=%s, got %s", d1.Operation, d2.Operation)
+ }
+ if d1.HardwareType != d2.HardwareType {
+ t.Errorf("expected HardwareType=%s, got %s", d1.HardwareType, d2.HardwareType)
+ }
+ if d1.HardwareLen != d2.HardwareLen {
+ t.Errorf("expected HardwareLen=%v, got %v", d1.HardwareLen, d2.HardwareLen)
+ }
+ if d1.HardwareOpts != d2.HardwareOpts {
+ t.Errorf("expected HardwareOpts=%v, got %v", d1.HardwareOpts, d2.HardwareOpts)
+ }
+ if d1.Xid != d2.Xid {
+ t.Errorf("expected Xid=%v, got %v", d1.Xid, d2.Xid)
+ }
+ if d1.Secs != d2.Secs {
+ t.Errorf("expected Secs=%v, got %v", d1.Secs, d2.Secs)
+ }
+ if d1.Flags != d2.Flags {
+ t.Errorf("expected Flags=%v, got %v", d1.Flags, d2.Flags)
+ }
+ if !d1.ClientIP.Equal(d2.ClientIP) {
+ t.Errorf("expected ClientIP=%v, got %v", d1.ClientIP, d2.ClientIP)
+ }
+ if !d1.YourClientIP.Equal(d2.YourClientIP) {
+ t.Errorf("expected YourClientIP=%v, got %v", d1.YourClientIP, d2.YourClientIP)
+ }
+ if !d1.NextServerIP.Equal(d2.NextServerIP) {
+ t.Errorf("expected NextServerIP=%v, got %v", d1.NextServerIP, d2.NextServerIP)
+ }
+ if !d1.RelayAgentIP.Equal(d2.RelayAgentIP) {
+ t.Errorf("expected RelayAgentIP=%v, got %v", d1.RelayAgentIP, d2.RelayAgentIP)
+ }
+ if !bytes.Equal(d1.ClientHWAddr, d2.ClientHWAddr) {
+ t.Errorf("expected ClientHWAddr=%v, got %v", d1.ClientHWAddr, d2.ClientHWAddr)
+ }
+ if !bytes.Equal(d1.ServerName, d2.ServerName) {
+ t.Errorf("expected ServerName=%v, got %v", d1.ServerName, d2.ServerName)
+ }
+ if !bytes.Equal(d1.File, d2.File) {
+ t.Errorf("expected File=%v, got %v", d1.File, d2.File)
+ }
+ if len(d1.Options) != len(d2.Options) {
+ t.Errorf("expected %d options, got %d", len(d1.Options), len(d2.Options))
+ }
+
+ for i, o := range d1.Options {
+ testDHCPOptionEqual(t, i, o, d2.Options[i])
+ }
+}
+
+func testDHCPOptionEqual(t *testing.T, idx int, d1, d2 DHCPOption) {
+ if d1.Type != d2.Type {
+ t.Errorf("expection Options[%d].Type = %s, got %s", idx, d1.Type, d2.Type)
+ }
+ if !bytes.Equal(d1.Data, d2.Data) {
+ t.Errorf("expection Options[%d].Data to be = %v, got %v", idx, d1.Data, d2.Data)
+ }
+}
diff --git a/vendor/github.com/google/gopacket/layers/dhcpv4.go b/vendor/github.com/google/gopacket/layers/dhcpv4.go
new file mode 100644
index 0000000..761b201
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/dhcpv4.go
@@ -0,0 +1,571 @@
+// Copyright 2016 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "bytes"
+ "encoding/binary"
+ "errors"
+ "fmt"
+ "net"
+
+ "github.com/google/gopacket"
+)
+
+// DHCPOp rerprents a bootp operation
+type DHCPOp byte
+
+// bootp operations
+const (
+ DHCPOpRequest DHCPOp = 1
+ DHCPOpReply DHCPOp = 2
+)
+
+// String returns a string version of a DHCPOp.
+func (o DHCPOp) String() string {
+ switch o {
+ case DHCPOpRequest:
+ return "Request"
+ case DHCPOpReply:
+ return "Reply"
+ default:
+ return "Unknown"
+ }
+}
+
+// DHCPMsgType represents a DHCP operation
+type DHCPMsgType byte
+
+// Constants that represent DHCP operations
+const (
+ DHCPMsgTypeUnspecified DHCPMsgType = iota
+ DHCPMsgTypeDiscover
+ DHCPMsgTypeOffer
+ DHCPMsgTypeRequest
+ DHCPMsgTypeDecline
+ DHCPMsgTypeAck
+ DHCPMsgTypeNak
+ DHCPMsgTypeRelease
+ DHCPMsgTypeInform
+)
+
+// String returns a string version of a DHCPMsgType.
+func (o DHCPMsgType) String() string {
+ switch o {
+ case DHCPMsgTypeUnspecified:
+ return "Unspecified"
+ case DHCPMsgTypeDiscover:
+ return "Discover"
+ case DHCPMsgTypeOffer:
+ return "Offer"
+ case DHCPMsgTypeRequest:
+ return "Request"
+ case DHCPMsgTypeDecline:
+ return "Decline"
+ case DHCPMsgTypeAck:
+ return "Ack"
+ case DHCPMsgTypeNak:
+ return "Nak"
+ case DHCPMsgTypeRelease:
+ return "Release"
+ case DHCPMsgTypeInform:
+ return "Inform"
+ default:
+ return "Unknown"
+ }
+}
+
+//DHCPMagic is the RFC 2131 "magic cooke" for DHCP.
+var DHCPMagic uint32 = 0x63825363
+
+// DHCPv4 contains data for a single DHCP packet.
+type DHCPv4 struct {
+ BaseLayer
+ Operation DHCPOp
+ HardwareType LinkType
+ HardwareLen uint8
+ HardwareOpts uint8
+ Xid uint32
+ Secs uint16
+ Flags uint16
+ ClientIP net.IP
+ YourClientIP net.IP
+ NextServerIP net.IP
+ RelayAgentIP net.IP
+ ClientHWAddr net.HardwareAddr
+ ServerName []byte
+ File []byte
+ Options DHCPOptions
+}
+
+// DHCPOptions is used to get nicely printed option lists which would normally
+// be cut off after 5 options.
+type DHCPOptions []DHCPOption
+
+// String returns a string version of the options list.
+func (o DHCPOptions) String() string {
+ buf := &bytes.Buffer{}
+ buf.WriteByte('[')
+ for i, opt := range o {
+ buf.WriteString(opt.String())
+ if i+1 != len(o) {
+ buf.WriteString(", ")
+ }
+ }
+ buf.WriteByte(']')
+ return buf.String()
+}
+
+// LayerType returns gopacket.LayerTypeDHCPv4
+func (d *DHCPv4) LayerType() gopacket.LayerType { return LayerTypeDHCPv4 }
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (d *DHCPv4) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ d.Operation = DHCPOp(data[0])
+ d.HardwareType = LinkType(data[1])
+ d.HardwareLen = data[2]
+ d.HardwareOpts = data[3]
+ d.Xid = binary.BigEndian.Uint32(data[4:8])
+ d.Secs = binary.BigEndian.Uint16(data[8:10])
+ d.Flags = binary.BigEndian.Uint16(data[10:12])
+ d.ClientIP = net.IP(data[12:16])
+ d.YourClientIP = net.IP(data[16:20])
+ d.NextServerIP = net.IP(data[20:24])
+ d.RelayAgentIP = net.IP(data[24:28])
+ d.ClientHWAddr = net.HardwareAddr(data[28 : 28+d.HardwareLen])
+ d.ServerName = data[44:108]
+ d.File = data[108:236]
+ if binary.BigEndian.Uint32(data[236:240]) != DHCPMagic {
+ return errors.New("Bad DHCP header")
+ }
+
+ if len(data) <= 240 {
+ // DHCP Packet could have no option (??)
+ return nil
+ }
+
+ options := data[240:]
+
+ stop := len(options)
+ start := 0
+ for start < stop {
+ o := DHCPOption{}
+ if err := o.decode(options[start:]); err != nil {
+ return err
+ }
+ if o.Type == DHCPOptEnd {
+ break
+ }
+ d.Options = append(d.Options, o)
+ // Check if the option is a single byte pad
+ if o.Type == DHCPOptPad {
+ start++
+ } else {
+ start += int(o.Length) + 2
+ }
+ }
+ return nil
+}
+
+// Len returns the length of a DHCPv4 packet.
+func (d *DHCPv4) Len() uint16 {
+ n := uint16(240)
+ for _, o := range d.Options {
+ if o.Type == DHCPOptPad {
+ n++
+ } else {
+ n += uint16(o.Length) + 2
+ }
+ }
+ n++ // for opt end
+ return n
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (d *DHCPv4) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ plen := int(d.Len())
+
+ data, err := b.PrependBytes(plen)
+ if err != nil {
+ return err
+ }
+
+ data[0] = byte(d.Operation)
+ data[1] = byte(d.HardwareType)
+ if opts.FixLengths {
+ d.HardwareLen = uint8(len(d.ClientHWAddr))
+ }
+ data[2] = d.HardwareLen
+ data[3] = d.HardwareOpts
+ binary.BigEndian.PutUint32(data[4:8], d.Xid)
+ binary.BigEndian.PutUint16(data[8:10], d.Secs)
+ binary.BigEndian.PutUint16(data[10:12], d.Flags)
+ copy(data[12:16], d.ClientIP.To4())
+ copy(data[16:20], d.YourClientIP.To4())
+ copy(data[20:24], d.NextServerIP.To4())
+ copy(data[24:28], d.RelayAgentIP.To4())
+ copy(data[28:44], d.ClientHWAddr)
+ copy(data[44:108], d.ServerName)
+ copy(data[108:236], d.File)
+ binary.BigEndian.PutUint32(data[236:240], DHCPMagic)
+
+ if len(d.Options) > 0 {
+ offset := 240
+ for _, o := range d.Options {
+ if err := o.encode(data[offset:]); err != nil {
+ return err
+ }
+ // A pad option is only a single byte
+ if o.Type == DHCPOptPad {
+ offset++
+ } else {
+ offset += 2 + len(o.Data)
+ }
+ }
+ optend := NewDHCPOption(DHCPOptEnd, nil)
+ if err := optend.encode(data[offset:]); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (d *DHCPv4) CanDecode() gopacket.LayerClass {
+ return LayerTypeDHCPv4
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (d *DHCPv4) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypePayload
+}
+
+func decodeDHCPv4(data []byte, p gopacket.PacketBuilder) error {
+ dhcp := &DHCPv4{}
+ err := dhcp.DecodeFromBytes(data, p)
+ if err != nil {
+ return err
+ }
+ p.AddLayer(dhcp)
+ return p.NextDecoder(gopacket.LayerTypePayload)
+}
+
+// DHCPOpt represents a DHCP option or parameter from RFC-2132
+type DHCPOpt byte
+
+// Constants for the DHCPOpt options.
+const (
+ DHCPOptPad DHCPOpt = 0
+ DHCPOptSubnetMask DHCPOpt = 1 // 4, net.IP
+ DHCPOptTimeOffset DHCPOpt = 2 // 4, int32 (signed seconds from UTC)
+ DHCPOptRouter DHCPOpt = 3 // n*4, [n]net.IP
+ DHCPOptTimeServer DHCPOpt = 4 // n*4, [n]net.IP
+ DHCPOptNameServer DHCPOpt = 5 // n*4, [n]net.IP
+ DHCPOptDNS DHCPOpt = 6 // n*4, [n]net.IP
+ DHCPOptLogServer DHCPOpt = 7 // n*4, [n]net.IP
+ DHCPOptCookieServer DHCPOpt = 8 // n*4, [n]net.IP
+ DHCPOptLPRServer DHCPOpt = 9 // n*4, [n]net.IP
+ DHCPOptImpressServer DHCPOpt = 10 // n*4, [n]net.IP
+ DHCPOptResLocServer DHCPOpt = 11 // n*4, [n]net.IP
+ DHCPOptHostname DHCPOpt = 12 // n, string
+ DHCPOptBootfileSize DHCPOpt = 13 // 2, uint16
+ DHCPOptMeritDumpFile DHCPOpt = 14 // >1, string
+ DHCPOptDomainName DHCPOpt = 15 // n, string
+ DHCPOptSwapServer DHCPOpt = 16 // n*4, [n]net.IP
+ DHCPOptRootPath DHCPOpt = 17 // n, string
+ DHCPOptExtensionsPath DHCPOpt = 18 // n, string
+ DHCPOptIPForwarding DHCPOpt = 19 // 1, bool
+ DHCPOptSourceRouting DHCPOpt = 20 // 1, bool
+ DHCPOptPolicyFilter DHCPOpt = 21 // 8*n, [n]{net.IP/net.IP}
+ DHCPOptDatagramMTU DHCPOpt = 22 // 2, uint16
+ DHCPOptDefaultTTL DHCPOpt = 23 // 1, byte
+ DHCPOptPathMTUAgingTimeout DHCPOpt = 24 // 4, uint32
+ DHCPOptPathPlateuTableOption DHCPOpt = 25 // 2*n, []uint16
+ DHCPOptInterfaceMTU DHCPOpt = 26 // 2, uint16
+ DHCPOptAllSubsLocal DHCPOpt = 27 // 1, bool
+ DHCPOptBroadcastAddr DHCPOpt = 28 // 4, net.IP
+ DHCPOptMaskDiscovery DHCPOpt = 29 // 1, bool
+ DHCPOptMaskSupplier DHCPOpt = 30 // 1, bool
+ DHCPOptRouterDiscovery DHCPOpt = 31 // 1, bool
+ DHCPOptSolicitAddr DHCPOpt = 32 // 4, net.IP
+ DHCPOptStaticRoute DHCPOpt = 33 // n*8, [n]{net.IP/net.IP} -- note the 2nd is router not mask
+ DHCPOptARPTrailers DHCPOpt = 34 // 1, bool
+ DHCPOptARPTimeout DHCPOpt = 35 // 4, uint32
+ DHCPOptEthernetEncap DHCPOpt = 36 // 1, bool
+ DHCPOptTCPTTL DHCPOpt = 37 // 1, byte
+ DHCPOptTCPKeepAliveInt DHCPOpt = 38 // 4, uint32
+ DHCPOptTCPKeepAliveGarbage DHCPOpt = 39 // 1, bool
+ DHCPOptNISDomain DHCPOpt = 40 // n, string
+ DHCPOptNISServers DHCPOpt = 41 // 4*n, [n]net.IP
+ DHCPOptNTPServers DHCPOpt = 42 // 4*n, [n]net.IP
+ DHCPOptVendorOption DHCPOpt = 43 // n, [n]byte // may be encapsulated.
+ DHCPOptNetBIOSTCPNS DHCPOpt = 44 // 4*n, [n]net.IP
+ DHCPOptNetBIOSTCPDDS DHCPOpt = 45 // 4*n, [n]net.IP
+ DHCPOptNETBIOSTCPNodeType DHCPOpt = 46 // 1, magic byte
+ DHCPOptNetBIOSTCPScope DHCPOpt = 47 // n, string
+ DHCPOptXFontServer DHCPOpt = 48 // n, string
+ DHCPOptXDisplayManager DHCPOpt = 49 // n, string
+ DHCPOptRequestIP DHCPOpt = 50 // 4, net.IP
+ DHCPOptLeaseTime DHCPOpt = 51 // 4, uint32
+ DHCPOptExtOptions DHCPOpt = 52 // 1, 1/2/3
+ DHCPOptMessageType DHCPOpt = 53 // 1, 1-7
+ DHCPOptServerID DHCPOpt = 54 // 4, net.IP
+ DHCPOptParamsRequest DHCPOpt = 55 // n, []byte
+ DHCPOptMessage DHCPOpt = 56 // n, 3
+ DHCPOptMaxMessageSize DHCPOpt = 57 // 2, uint16
+ DHCPOptT1 DHCPOpt = 58 // 4, uint32
+ DHCPOptT2 DHCPOpt = 59 // 4, uint32
+ DHCPOptClassID DHCPOpt = 60 // n, []byte
+ DHCPOptClientID DHCPOpt = 61 // n >= 2, []byte
+ DHCPOptDomainSearch DHCPOpt = 119 // n, string
+ DHCPOptSIPServers DHCPOpt = 120 // n, url
+ DHCPOptClasslessStaticRoute DHCPOpt = 121 //
+ DHCPOptEnd DHCPOpt = 255
+)
+
+// String returns a string version of a DHCPOpt.
+func (o DHCPOpt) String() string {
+ switch o {
+ case DHCPOptPad:
+ return "(padding)"
+ case DHCPOptSubnetMask:
+ return "SubnetMask"
+ case DHCPOptTimeOffset:
+ return "TimeOffset"
+ case DHCPOptRouter:
+ return "Router"
+ case DHCPOptTimeServer:
+ return "rfc868" // old time server protocol stringified to dissuade confusion w. NTP
+ case DHCPOptNameServer:
+ return "ien116" // obscure nameserver protocol stringified to dissuade confusion w. DNS
+ case DHCPOptDNS:
+ return "DNS"
+ case DHCPOptLogServer:
+ return "mitLCS" // MIT LCS server protocol yada yada w. Syslog
+ case DHCPOptCookieServer:
+ return "CookieServer"
+ case DHCPOptLPRServer:
+ return "LPRServer"
+ case DHCPOptImpressServer:
+ return "ImpressServer"
+ case DHCPOptResLocServer:
+ return "ResourceLocationServer"
+ case DHCPOptHostname:
+ return "Hostname"
+ case DHCPOptBootfileSize:
+ return "BootfileSize"
+ case DHCPOptMeritDumpFile:
+ return "MeritDumpFile"
+ case DHCPOptDomainName:
+ return "DomainName"
+ case DHCPOptSwapServer:
+ return "SwapServer"
+ case DHCPOptRootPath:
+ return "RootPath"
+ case DHCPOptExtensionsPath:
+ return "ExtensionsPath"
+ case DHCPOptIPForwarding:
+ return "IPForwarding"
+ case DHCPOptSourceRouting:
+ return "SourceRouting"
+ case DHCPOptPolicyFilter:
+ return "PolicyFilter"
+ case DHCPOptDatagramMTU:
+ return "DatagramMTU"
+ case DHCPOptDefaultTTL:
+ return "DefaultTTL"
+ case DHCPOptPathMTUAgingTimeout:
+ return "PathMTUAgingTimeout"
+ case DHCPOptPathPlateuTableOption:
+ return "PathPlateuTableOption"
+ case DHCPOptInterfaceMTU:
+ return "InterfaceMTU"
+ case DHCPOptAllSubsLocal:
+ return "AllSubsLocal"
+ case DHCPOptBroadcastAddr:
+ return "BroadcastAddress"
+ case DHCPOptMaskDiscovery:
+ return "MaskDiscovery"
+ case DHCPOptMaskSupplier:
+ return "MaskSupplier"
+ case DHCPOptRouterDiscovery:
+ return "RouterDiscovery"
+ case DHCPOptSolicitAddr:
+ return "SolicitAddr"
+ case DHCPOptStaticRoute:
+ return "StaticRoute"
+ case DHCPOptARPTrailers:
+ return "ARPTrailers"
+ case DHCPOptARPTimeout:
+ return "ARPTimeout"
+ case DHCPOptEthernetEncap:
+ return "EthernetEncap"
+ case DHCPOptTCPTTL:
+ return "TCPTTL"
+ case DHCPOptTCPKeepAliveInt:
+ return "TCPKeepAliveInt"
+ case DHCPOptTCPKeepAliveGarbage:
+ return "TCPKeepAliveGarbage"
+ case DHCPOptNISDomain:
+ return "NISDomain"
+ case DHCPOptNISServers:
+ return "NISServers"
+ case DHCPOptNTPServers:
+ return "NTPServers"
+ case DHCPOptVendorOption:
+ return "VendorOption"
+ case DHCPOptNetBIOSTCPNS:
+ return "NetBIOSOverTCPNS"
+ case DHCPOptNetBIOSTCPDDS:
+ return "NetBiosOverTCPDDS"
+ case DHCPOptNETBIOSTCPNodeType:
+ return "NetBIOSOverTCPNodeType"
+ case DHCPOptNetBIOSTCPScope:
+ return "NetBIOSOverTCPScope"
+ case DHCPOptXFontServer:
+ return "XFontServer"
+ case DHCPOptXDisplayManager:
+ return "XDisplayManager"
+ case DHCPOptEnd:
+ return "(end)"
+ case DHCPOptSIPServers:
+ return "SipServers"
+ case DHCPOptRequestIP:
+ return "RequestIP"
+ case DHCPOptLeaseTime:
+ return "LeaseTime"
+ case DHCPOptExtOptions:
+ return "ExtOpts"
+ case DHCPOptMessageType:
+ return "MessageType"
+ case DHCPOptServerID:
+ return "ServerID"
+ case DHCPOptParamsRequest:
+ return "ParamsRequest"
+ case DHCPOptMessage:
+ return "Message"
+ case DHCPOptMaxMessageSize:
+ return "MaxDHCPSize"
+ case DHCPOptT1:
+ return "Timer1"
+ case DHCPOptT2:
+ return "Timer2"
+ case DHCPOptClassID:
+ return "ClassID"
+ case DHCPOptClientID:
+ return "ClientID"
+ case DHCPOptDomainSearch:
+ return "DomainSearch"
+ case DHCPOptClasslessStaticRoute:
+ return "ClasslessStaticRoute"
+ default:
+ return "Unknown"
+ }
+}
+
+// DHCPOption rerpresents a DHCP option.
+type DHCPOption struct {
+ Type DHCPOpt
+ Length uint8
+ Data []byte
+}
+
+// String returns a string version of a DHCP Option.
+func (o DHCPOption) String() string {
+ switch o.Type {
+
+ case DHCPOptHostname, DHCPOptMeritDumpFile, DHCPOptDomainName, DHCPOptRootPath,
+ DHCPOptExtensionsPath, DHCPOptNISDomain, DHCPOptNetBIOSTCPScope, DHCPOptXFontServer,
+ DHCPOptXDisplayManager, DHCPOptMessage, DHCPOptDomainSearch: // string
+ return fmt.Sprintf("Option(%s:%s)", o.Type, string(o.Data))
+
+ case DHCPOptMessageType:
+ if len(o.Data) != 1 {
+ return fmt.Sprintf("Option(%s:INVALID)", o.Type)
+ }
+ return fmt.Sprintf("Option(%s:%s)", o.Type, DHCPMsgType(o.Data[0]))
+
+ case DHCPOptSubnetMask, DHCPOptServerID, DHCPOptBroadcastAddr,
+ DHCPOptSolicitAddr, DHCPOptRequestIP: // net.IP
+ if len(o.Data) < 4 {
+ return fmt.Sprintf("Option(%s:INVALID)", o.Type)
+ }
+ return fmt.Sprintf("Option(%s:%s)", o.Type, net.IP(o.Data))
+
+ case DHCPOptT1, DHCPOptT2, DHCPOptLeaseTime, DHCPOptPathMTUAgingTimeout,
+ DHCPOptARPTimeout, DHCPOptTCPKeepAliveInt: // uint32
+ if len(o.Data) != 4 {
+ return fmt.Sprintf("Option(%s:INVALID)", o.Type)
+ }
+ return fmt.Sprintf("Option(%s:%d)", o.Type,
+ uint32(o.Data[0])<<24|uint32(o.Data[1])<<16|uint32(o.Data[2])<<8|uint32(o.Data[3]))
+
+ case DHCPOptParamsRequest:
+ buf := &bytes.Buffer{}
+ buf.WriteString(fmt.Sprintf("Option(%s:", o.Type))
+ for i, v := range o.Data {
+ buf.WriteString(DHCPOpt(v).String())
+ if i+1 != len(o.Data) {
+ buf.WriteByte(',')
+ }
+ }
+ buf.WriteString(")")
+ return buf.String()
+
+ default:
+ return fmt.Sprintf("Option(%s:%v)", o.Type, o.Data)
+ }
+}
+
+// NewDHCPOption constructs a new DHCPOption with a given type and data.
+func NewDHCPOption(t DHCPOpt, data []byte) DHCPOption {
+ o := DHCPOption{Type: t}
+ if data != nil {
+ o.Data = data
+ o.Length = uint8(len(data))
+ }
+ return o
+}
+
+func (o *DHCPOption) encode(b []byte) error {
+ switch o.Type {
+ case DHCPOptPad, DHCPOptEnd:
+ b[0] = byte(o.Type)
+ default:
+ if o.Length > 253 {
+ return errors.New("data too long to encode")
+ }
+ b[0] = byte(o.Type)
+ b[1] = o.Length
+ copy(b[2:], o.Data)
+ }
+ return nil
+}
+
+func (o *DHCPOption) decode(data []byte) error {
+ if len(data) < 1 {
+ // Pad/End have a length of 1
+ return errors.New("Not enough data to decode")
+ }
+ o.Type = DHCPOpt(data[0])
+ switch o.Type {
+ case DHCPOptPad, DHCPOptEnd:
+ o.Data = nil
+ default:
+ if len(data) < 3 {
+ return errors.New("Not enough data to decode")
+ }
+ o.Length = data[1]
+ if o.Length > 253 {
+ return errors.New("data too long to decode")
+ }
+ o.Data = data[2 : 2+o.Length]
+ }
+ return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/dns.go b/vendor/github.com/google/gopacket/layers/dns.go
new file mode 100644
index 0000000..2368a28
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/dns.go
@@ -0,0 +1,894 @@
+// Copyright 2014 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "errors"
+ "fmt"
+ "net"
+
+ "github.com/google/gopacket"
+)
+
+// DNSClass defines the class associated with a request/response. Different DNS
+// classes can be thought of as an array of parallel namespace trees.
+type DNSClass uint16
+
+// DNSClass known values.
+const (
+ DNSClassIN DNSClass = 1 // Internet
+ DNSClassCS DNSClass = 2 // the CSNET class (Obsolete)
+ DNSClassCH DNSClass = 3 // the CHAOS class
+ DNSClassHS DNSClass = 4 // Hesiod [Dyer 87]
+ DNSClassAny DNSClass = 255 // AnyClass
+)
+
+func (dc DNSClass) String() string {
+ switch dc {
+ default:
+ return "Unknown"
+ case DNSClassIN:
+ return "IN"
+ case DNSClassCS:
+ return "CS"
+ case DNSClassCH:
+ return "CH"
+ case DNSClassHS:
+ return "HS"
+ case DNSClassAny:
+ return "Any"
+ }
+}
+
+// DNSType defines the type of data being requested/returned in a
+// question/answer.
+type DNSType uint16
+
+// DNSType known values.
+const (
+ DNSTypeA DNSType = 1 // a host address
+ DNSTypeNS DNSType = 2 // an authoritative name server
+ DNSTypeMD DNSType = 3 // a mail destination (Obsolete - use MX)
+ DNSTypeMF DNSType = 4 // a mail forwarder (Obsolete - use MX)
+ DNSTypeCNAME DNSType = 5 // the canonical name for an alias
+ DNSTypeSOA DNSType = 6 // marks the start of a zone of authority
+ DNSTypeMB DNSType = 7 // a mailbox domain name (EXPERIMENTAL)
+ DNSTypeMG DNSType = 8 // a mail group member (EXPERIMENTAL)
+ DNSTypeMR DNSType = 9 // a mail rename domain name (EXPERIMENTAL)
+ DNSTypeNULL DNSType = 10 // a null RR (EXPERIMENTAL)
+ DNSTypeWKS DNSType = 11 // a well known service description
+ DNSTypePTR DNSType = 12 // a domain name pointer
+ DNSTypeHINFO DNSType = 13 // host information
+ DNSTypeMINFO DNSType = 14 // mailbox or mail list information
+ DNSTypeMX DNSType = 15 // mail exchange
+ DNSTypeTXT DNSType = 16 // text strings
+ DNSTypeAAAA DNSType = 28 // a IPv6 host address [RFC3596]
+ DNSTypeSRV DNSType = 33 // server discovery [RFC2782] [RFC6195]
+)
+
+func (dt DNSType) String() string {
+ switch dt {
+ default:
+ return "Unknown"
+ case DNSTypeA:
+ return "A"
+ case DNSTypeNS:
+ return "NS"
+ case DNSTypeMD:
+ return "MD"
+ case DNSTypeMF:
+ return "MF"
+ case DNSTypeCNAME:
+ return "CNAME"
+ case DNSTypeSOA:
+ return "SOA"
+ case DNSTypeMB:
+ return "MB"
+ case DNSTypeMG:
+ return "MG"
+ case DNSTypeMR:
+ return "MR"
+ case DNSTypeNULL:
+ return "NULL"
+ case DNSTypeWKS:
+ return "WKS"
+ case DNSTypePTR:
+ return "PTR"
+ case DNSTypeHINFO:
+ return "HINFO"
+ case DNSTypeMINFO:
+ return "MINFO"
+ case DNSTypeMX:
+ return "MX"
+ case DNSTypeTXT:
+ return "TXT"
+ case DNSTypeAAAA:
+ return "AAAA"
+ case DNSTypeSRV:
+ return "SRV"
+ }
+}
+
+// DNSResponseCode provides response codes for question answers.
+type DNSResponseCode uint8
+
+// DNSResponseCode known values.
+const (
+ DNSResponseCodeNoErr DNSResponseCode = 0 // No error
+ DNSResponseCodeFormErr DNSResponseCode = 1 // Format Error [RFC1035]
+ DNSResponseCodeServFail DNSResponseCode = 2 // Server Failure [RFC1035]
+ DNSResponseCodeNXDomain DNSResponseCode = 3 // Non-Existent Domain [RFC1035]
+ DNSResponseCodeNotImp DNSResponseCode = 4 // Not Implemented [RFC1035]
+ DNSResponseCodeRefused DNSResponseCode = 5 // Query Refused [RFC1035]
+ DNSResponseCodeYXDomain DNSResponseCode = 6 // Name Exists when it should not [RFC2136]
+ DNSResponseCodeYXRRSet DNSResponseCode = 7 // RR Set Exists when it should not [RFC2136]
+ DNSResponseCodeNXRRSet DNSResponseCode = 8 // RR Set that should exist does not [RFC2136]
+ DNSResponseCodeNotAuth DNSResponseCode = 9 // Server Not Authoritative for zone [RFC2136]
+ DNSResponseCodeNotZone DNSResponseCode = 10 // Name not contained in zone [RFC2136]
+ DNSResponseCodeBadVers DNSResponseCode = 16 // Bad OPT Version [RFC2671]
+ DNSResponseCodeBadSig DNSResponseCode = 16 // TSIG Signature Failure [RFC2845]
+ DNSResponseCodeBadKey DNSResponseCode = 17 // Key not recognized [RFC2845]
+ DNSResponseCodeBadTime DNSResponseCode = 18 // Signature out of time window [RFC2845]
+ DNSResponseCodeBadMode DNSResponseCode = 19 // Bad TKEY Mode [RFC2930]
+ DNSResponseCodeBadName DNSResponseCode = 20 // Duplicate key name [RFC2930]
+ DNSResponseCodeBadAlg DNSResponseCode = 21 // Algorithm not supported [RFC2930]
+ DNSResponseCodeBadTruc DNSResponseCode = 22 // Bad Truncation [RFC4635]
+)
+
+func (drc DNSResponseCode) String() string {
+ switch drc {
+ default:
+ return "Unknown"
+ case DNSResponseCodeNoErr:
+ return "No Error"
+ case DNSResponseCodeFormErr:
+ return "Format Error"
+ case DNSResponseCodeServFail:
+ return "Server Failure "
+ case DNSResponseCodeNXDomain:
+ return "Non-Existent Domain"
+ case DNSResponseCodeNotImp:
+ return "Not Implemented"
+ case DNSResponseCodeRefused:
+ return "Query Refused"
+ case DNSResponseCodeYXDomain:
+ return "Name Exists when it should not"
+ case DNSResponseCodeYXRRSet:
+ return "RR Set Exists when it should not"
+ case DNSResponseCodeNXRRSet:
+ return "RR Set that should exist does not"
+ case DNSResponseCodeNotAuth:
+ return "Server Not Authoritative for zone"
+ case DNSResponseCodeNotZone:
+ return "Name not contained in zone"
+ case DNSResponseCodeBadVers:
+ return "Bad OPT Version"
+ case DNSResponseCodeBadKey:
+ return "Key not recognized"
+ case DNSResponseCodeBadTime:
+ return "Signature out of time window"
+ case DNSResponseCodeBadMode:
+ return "Bad TKEY Mode"
+ case DNSResponseCodeBadName:
+ return "Duplicate key name"
+ case DNSResponseCodeBadAlg:
+ return "Algorithm not supported"
+ case DNSResponseCodeBadTruc:
+ return "Bad Truncation"
+ }
+}
+
+// DNSOpCode defines a set of different operation types.
+type DNSOpCode uint8
+
+// DNSOpCode known values.
+const (
+ DNSOpCodeQuery DNSOpCode = 0 // Query [RFC1035]
+ DNSOpCodeIQuery DNSOpCode = 1 // Inverse Query Obsolete [RFC3425]
+ DNSOpCodeStatus DNSOpCode = 2 // Status [RFC1035]
+ DNSOpCodeNotify DNSOpCode = 4 // Notify [RFC1996]
+ DNSOpCodeUpdate DNSOpCode = 5 // Update [RFC2136]
+)
+
+func (doc DNSOpCode) String() string {
+ switch doc {
+ default:
+ return "Unknown"
+ case DNSOpCodeQuery:
+ return "Query"
+ case DNSOpCodeIQuery:
+ return "Inverse Query"
+ case DNSOpCodeStatus:
+ return "Status"
+ case DNSOpCodeNotify:
+ return "Notify"
+ case DNSOpCodeUpdate:
+ return "Update"
+ }
+}
+
+// DNS is specified in RFC 1034 / RFC 1035
+// +---------------------+
+// | Header |
+// +---------------------+
+// | Question | the question for the name server
+// +---------------------+
+// | Answer | RRs answering the question
+// +---------------------+
+// | Authority | RRs pointing toward an authority
+// +---------------------+
+// | Additional | RRs holding additional information
+// +---------------------+
+//
+// DNS Header
+// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | ID |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// |QR| Opcode |AA|TC|RD|RA| Z | RCODE |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | QDCOUNT |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | ANCOUNT |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | NSCOUNT |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | ARCOUNT |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+// DNS contains data from a single Domain Name Service packet.
+type DNS struct {
+ BaseLayer
+
+ // Header fields
+ ID uint16
+ QR bool
+ OpCode DNSOpCode
+
+ AA bool // Authoritative answer
+ TC bool // Truncated
+ RD bool // Recursion desired
+ RA bool // Recursion available
+ Z uint8 // Resrved for future use
+
+ ResponseCode DNSResponseCode
+ QDCount uint16 // Number of questions to expect
+ ANCount uint16 // Number of answers to expect
+ NSCount uint16 // Number of authorities to expect
+ ARCount uint16 // Number of additional records to expect
+
+ // Entries
+ Questions []DNSQuestion
+ Answers []DNSResourceRecord
+ Authorities []DNSResourceRecord
+ Additionals []DNSResourceRecord
+
+ // buffer for doing name decoding. We use a single reusable buffer to avoid
+ // name decoding on a single object via multiple DecodeFromBytes calls
+ // requiring constant allocation of small byte slices.
+ buffer []byte
+}
+
+// LayerType returns gopacket.LayerTypeDNS.
+func (d *DNS) LayerType() gopacket.LayerType { return LayerTypeDNS }
+
+// decodeDNS decodes the byte slice into a DNS type. It also
+// setups the application Layer in PacketBuilder.
+func decodeDNS(data []byte, p gopacket.PacketBuilder) error {
+ d := &DNS{}
+ err := d.DecodeFromBytes(data, p)
+ if err != nil {
+ return err
+ }
+ p.AddLayer(d)
+ p.SetApplicationLayer(d)
+ return nil
+}
+
+// DecodeFromBytes decodes the slice into the DNS struct.
+func (d *DNS) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ d.buffer = d.buffer[:0]
+
+ if len(data) < 12 {
+ df.SetTruncated()
+ return errors.New("DNS packet too short")
+ }
+
+ // since there are no further layers, the baselayer's content is
+ // pointing to this layer
+ d.BaseLayer = BaseLayer{Contents: data[:len(data)]}
+ d.ID = binary.BigEndian.Uint16(data[:2])
+ d.QR = data[2]&0x80 != 0
+ d.OpCode = DNSOpCode(data[2]>>3) & 0x0F
+ d.AA = data[2]&0x04 != 0
+ d.TC = data[2]&0x02 != 0
+ d.RD = data[2]&0x01 != 0
+ d.RA = data[3]&0x80 != 0
+ d.Z = uint8(data[3]>>4) & 0x7
+ d.ResponseCode = DNSResponseCode(data[3] & 0xF)
+ d.QDCount = binary.BigEndian.Uint16(data[4:6])
+ d.ANCount = binary.BigEndian.Uint16(data[6:8])
+ d.NSCount = binary.BigEndian.Uint16(data[8:10])
+ d.ARCount = binary.BigEndian.Uint16(data[10:12])
+
+ d.Questions = d.Questions[:0]
+ d.Answers = d.Answers[:0]
+ d.Authorities = d.Authorities[:0]
+ d.Additionals = d.Additionals[:0]
+
+ offset := 12
+ var err error
+ for i := 0; i < int(d.QDCount); i++ {
+ var q DNSQuestion
+ if offset, err = q.decode(data, offset, df, &d.buffer); err != nil {
+ return err
+ }
+ d.Questions = append(d.Questions, q)
+ }
+
+ // For some horrible reason, if we do the obvious thing in this loop:
+ // var r DNSResourceRecord
+ // if blah := r.decode(blah); err != nil {
+ // return err
+ // }
+ // d.Foo = append(d.Foo, r)
+ // the Go compiler thinks that 'r' escapes to the heap, causing a malloc for
+ // every Answer, Authority, and Additional. To get around this, we do
+ // something really silly: we append an empty resource record to our slice,
+ // then use the last value in the slice to call decode. Since the value is
+ // already in the slice, there's no WAY it can escape... on the other hand our
+ // code is MUCH uglier :(
+ for i := 0; i < int(d.ANCount); i++ {
+ d.Answers = append(d.Answers, DNSResourceRecord{})
+ if offset, err = d.Answers[i].decode(data, offset, df, &d.buffer); err != nil {
+ d.Answers = d.Answers[:i] // strip off erroneous value
+ return err
+ }
+ }
+ for i := 0; i < int(d.NSCount); i++ {
+ d.Authorities = append(d.Authorities, DNSResourceRecord{})
+ if offset, err = d.Authorities[i].decode(data, offset, df, &d.buffer); err != nil {
+ d.Authorities = d.Authorities[:i] // strip off erroneous value
+ return err
+ }
+ }
+ for i := 0; i < int(d.ARCount); i++ {
+ d.Additionals = append(d.Additionals, DNSResourceRecord{})
+ if offset, err = d.Additionals[i].decode(data, offset, df, &d.buffer); err != nil {
+ d.Additionals = d.Additionals[:i] // strip off erroneous value
+ return err
+ }
+ }
+
+ if uint16(len(d.Questions)) != d.QDCount {
+ return errors.New("Invalid query decoding, not the right number of questions")
+ } else if uint16(len(d.Answers)) != d.ANCount {
+ return errors.New("Invalid query decoding, not the right number of answers")
+ } else if uint16(len(d.Authorities)) != d.NSCount {
+ return errors.New("Invalid query decoding, not the right number of authorities")
+ } else if uint16(len(d.Additionals)) != d.ARCount {
+ return errors.New("Invalid query decoding, not the right number of additionals info")
+ }
+ return nil
+}
+
+// CanDecode implements gopacket.DecodingLayer.
+func (d *DNS) CanDecode() gopacket.LayerClass {
+ return LayerTypeDNS
+}
+
+// NextLayerType implements gopacket.DecodingLayer.
+func (d *DNS) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypePayload
+}
+
+// Payload returns nil.
+func (d *DNS) Payload() []byte {
+ return nil
+}
+
+func b2i(b bool) int {
+ if b {
+ return 1
+ }
+ return 0
+}
+
+func recSize(rr *DNSResourceRecord) int {
+ switch rr.Type {
+ case DNSTypeA:
+ return 4
+ case DNSTypeAAAA:
+ return 16
+ case DNSTypeNS:
+ return len(rr.NS) + 2
+ case DNSTypeCNAME:
+ return len(rr.CNAME) + 2
+ case DNSTypePTR:
+ return len(rr.PTR) + 2
+ case DNSTypeSOA:
+ return len(rr.SOA.MName) + 2 + len(rr.SOA.RName) + 2 + 20
+ case DNSTypeMX:
+ return 2 + len(rr.MX.Name) + 2
+ case DNSTypeTXT:
+ l := len(rr.TXTs)
+ for _, txt := range rr.TXTs {
+ l += len(txt)
+ }
+ return l
+ case DNSTypeSRV:
+ return 6 + len(rr.SRV.Name) + 2
+ }
+
+ return 0
+}
+
+func computeSize(recs []DNSResourceRecord) int {
+ sz := 0
+ for _, rr := range recs {
+ sz += len(rr.Name) + 14
+ sz += recSize(&rr)
+ }
+ return sz
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+func (d *DNS) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ dsz := 0
+ for _, q := range d.Questions {
+ dsz += len(q.Name) + 6
+ }
+ dsz += computeSize(d.Answers)
+ dsz += computeSize(d.Authorities)
+ dsz += computeSize(d.Additionals)
+
+ bytes, err := b.PrependBytes(12 + dsz)
+ if err != nil {
+ return err
+ }
+ binary.BigEndian.PutUint16(bytes, d.ID)
+ bytes[2] = byte((b2i(d.QR) << 7) | (int(d.OpCode) << 3) | (b2i(d.AA) << 2) | (b2i(d.TC) << 1) | b2i(d.RD))
+ bytes[3] = byte((b2i(d.RA) << 7) | (int(d.Z) << 4) | int(d.ResponseCode))
+
+ if opts.FixLengths {
+ d.QDCount = uint16(len(d.Questions))
+ d.ANCount = uint16(len(d.Answers))
+ d.NSCount = uint16(len(d.Authorities))
+ d.ARCount = uint16(len(d.Additionals))
+ }
+ binary.BigEndian.PutUint16(bytes[4:], d.QDCount)
+ binary.BigEndian.PutUint16(bytes[6:], d.ANCount)
+ binary.BigEndian.PutUint16(bytes[8:], d.NSCount)
+ binary.BigEndian.PutUint16(bytes[10:], d.ARCount)
+
+ off := 12
+ for _, qd := range d.Questions {
+ n := qd.encode(bytes, off)
+ off += n
+ }
+
+ for i := range d.Answers {
+ // done this way so we can modify DNSResourceRecord to fix
+ // lengths if requested
+ qa := &d.Answers[i]
+ n, err := qa.encode(bytes, off, opts)
+ if err != nil {
+ return err
+ }
+ off += n
+ }
+
+ for i := range d.Authorities {
+ qa := &d.Authorities[i]
+ n, err := qa.encode(bytes, off, opts)
+ if err != nil {
+ return err
+ }
+ off += n
+ }
+ for i := range d.Additionals {
+ qa := &d.Additionals[i]
+ n, err := qa.encode(bytes, off, opts)
+ if err != nil {
+ return err
+ }
+ off += n
+ }
+
+ return nil
+}
+
+var errMaxRecursion = errors.New("max DNS recursion level hit")
+
+const maxRecursionLevel = 255
+
+func decodeName(data []byte, offset int, buffer *[]byte, level int) ([]byte, int, error) {
+ if level > maxRecursionLevel {
+ return nil, 0, errMaxRecursion
+ } else if offset >= len(data) {
+ return nil, 0, errors.New("dns name offset too high")
+ } else if offset < 0 {
+ return nil, 0, errors.New("dns name offset is negative")
+ }
+ start := len(*buffer)
+ index := offset
+ if data[index] == 0x00 {
+ return nil, index + 1, nil
+ }
+loop:
+ for data[index] != 0x00 {
+ switch data[index] & 0xc0 {
+ default:
+ /* RFC 1035
+ A domain name represented as a sequence of labels, where
+ each label consists of a length octet followed by that
+ number of octets. The domain name terminates with the
+ zero length octet for the null label of the root. Note
+ that this field may be an odd number of octets; no
+ padding is used.
+ */
+ index2 := index + int(data[index]) + 1
+ if index2-offset > 255 {
+ return nil, 0, errors.New("dns name is too long")
+ } else if index2 < index+1 || index2 > len(data) {
+ return nil, 0, errors.New("dns name uncomputable: invalid index")
+ }
+ *buffer = append(*buffer, '.')
+ *buffer = append(*buffer, data[index+1:index2]...)
+ index = index2
+
+ case 0xc0:
+ /* RFC 1035
+ The pointer takes the form of a two octet sequence.
+
+ The first two bits are ones. This allows a pointer to
+ be distinguished from a label, since the label must
+ begin with two zero bits because labels are restricted
+ to 63 octets or less. (The 10 and 01 combinations are
+ reserved for future use.) The OFFSET field specifies
+ an offset from the start of the message (i.e., the
+ first octet of the ID field in the domain header). A
+ zero offset specifies the first byte of the ID field,
+ etc.
+
+ The compression scheme allows a domain name in a message to be
+ represented as either:
+ - a sequence of labels ending in a zero octet
+ - a pointer
+ - a sequence of labels ending with a pointer
+ */
+ if index+2 > len(data) {
+ return nil, 0, errors.New("dns offset pointer too high")
+ }
+ offsetp := int(binary.BigEndian.Uint16(data[index:index+2]) & 0x3fff)
+ if offsetp > len(data) {
+ return nil, 0, errors.New("dns offset pointer too high")
+ }
+ // This looks a little tricky, but actually isn't. Because of how
+ // decodeName is written, calling it appends the decoded name to the
+ // current buffer. We already have the start of the buffer, then, so
+ // once this call is done buffer[start:] will contain our full name.
+ _, _, err := decodeName(data, offsetp, buffer, level+1)
+ if err != nil {
+ return nil, 0, err
+ }
+ index++ // pointer is two bytes, so add an extra byte here.
+ break loop
+ /* EDNS, or other DNS option ? */
+ case 0x40: // RFC 2673
+ return nil, 0, fmt.Errorf("qname '0x40' - RFC 2673 unsupported yet (data=%x index=%d)",
+ data[index], index)
+
+ case 0x80:
+ return nil, 0, fmt.Errorf("qname '0x80' unsupported yet (data=%x index=%d)",
+ data[index], index)
+ }
+ if index >= len(data) {
+ return nil, 0, errors.New("dns index walked out of range")
+ }
+ }
+ if len(*buffer) <= start {
+ return nil, 0, errors.New("no dns data found for name")
+ }
+ return (*buffer)[start+1:], index + 1, nil
+}
+
+// DNSQuestion wraps a single request (question) within a DNS query.
+type DNSQuestion struct {
+ Name []byte
+ Type DNSType
+ Class DNSClass
+}
+
+func (q *DNSQuestion) decode(data []byte, offset int, df gopacket.DecodeFeedback, buffer *[]byte) (int, error) {
+ name, endq, err := decodeName(data, offset, buffer, 1)
+ if err != nil {
+ return 0, err
+ }
+
+ q.Name = name
+ q.Type = DNSType(binary.BigEndian.Uint16(data[endq : endq+2]))
+ q.Class = DNSClass(binary.BigEndian.Uint16(data[endq+2 : endq+4]))
+
+ return endq + 4, nil
+}
+
+func (q *DNSQuestion) encode(data []byte, offset int) int {
+ noff := encodeName(q.Name, data, offset)
+ binary.BigEndian.PutUint16(data[noff:], uint16(q.Type))
+ binary.BigEndian.PutUint16(data[noff+2:], uint16(q.Class))
+ return len(q.Name) + 6
+}
+
+// DNSResourceRecord
+// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | |
+// / /
+// / NAME /
+// | |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | TYPE |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | CLASS |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | TTL |
+// | |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | RDLENGTH |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
+// / RDATA /
+// / /
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+// DNSResourceRecord wraps the data from a single DNS resource within a
+// response.
+type DNSResourceRecord struct {
+ // Header
+ Name []byte
+ Type DNSType
+ Class DNSClass
+ TTL uint32
+
+ // RDATA Raw Values
+ DataLength uint16
+ Data []byte
+
+ // RDATA Decoded Values
+ IP net.IP
+ NS, CNAME, PTR []byte
+ TXTs [][]byte
+ SOA DNSSOA
+ SRV DNSSRV
+ MX DNSMX
+
+ // Undecoded TXT for backward compatibility
+ TXT []byte
+}
+
+// decode decodes the resource record, returning the total length of the record.
+func (rr *DNSResourceRecord) decode(data []byte, offset int, df gopacket.DecodeFeedback, buffer *[]byte) (int, error) {
+ name, endq, err := decodeName(data, offset, buffer, 1)
+ if err != nil {
+ return 0, err
+ }
+
+ rr.Name = name
+ rr.Type = DNSType(binary.BigEndian.Uint16(data[endq : endq+2]))
+ rr.Class = DNSClass(binary.BigEndian.Uint16(data[endq+2 : endq+4]))
+ rr.TTL = binary.BigEndian.Uint32(data[endq+4 : endq+8])
+ rr.DataLength = binary.BigEndian.Uint16(data[endq+8 : endq+10])
+ end := endq + 10 + int(rr.DataLength)
+ if end > len(data) {
+ return 0, fmt.Errorf("resource record length exceeds data")
+ }
+ rr.Data = data[endq+10 : end]
+
+ if err = rr.decodeRData(data, endq+10, buffer); err != nil {
+ return 0, err
+ }
+
+ return endq + 10 + int(rr.DataLength), nil
+}
+
+func encodeName(name []byte, data []byte, offset int) int {
+ l := 0
+ for i := range name {
+ if name[i] == '.' {
+ data[offset+i-l] = byte(l)
+ l = 0
+ } else {
+ // skip one to write the length
+ data[offset+i+1] = name[i]
+ l++
+ }
+ }
+ // length for final portion
+ data[offset+len(name)-l] = byte(l)
+ data[offset+len(name)+1] = 0x00 // terminal
+ return offset + len(name) + 2
+}
+
+func (rr *DNSResourceRecord) encode(data []byte, offset int, opts gopacket.SerializeOptions) (int, error) {
+
+ noff := encodeName(rr.Name, data, offset)
+
+ binary.BigEndian.PutUint16(data[noff:], uint16(rr.Type))
+ binary.BigEndian.PutUint16(data[noff+2:], uint16(rr.Class))
+ binary.BigEndian.PutUint32(data[noff+4:], uint32(rr.TTL))
+
+ switch rr.Type {
+ case DNSTypeA:
+ copy(data[noff+10:], rr.IP.To4())
+ case DNSTypeAAAA:
+ copy(data[noff+10:], rr.IP)
+ case DNSTypeNS:
+ encodeName(rr.NS, data, noff+10)
+ case DNSTypeCNAME:
+ encodeName(rr.CNAME, data, noff+10)
+ case DNSTypePTR:
+ encodeName(rr.PTR, data, noff+10)
+ case DNSTypeSOA:
+ noff2 := encodeName(rr.SOA.MName, data, noff+10)
+ noff2 = encodeName(rr.SOA.RName, data, noff2)
+ binary.BigEndian.PutUint32(data[noff2:], rr.SOA.Serial)
+ binary.BigEndian.PutUint32(data[noff2+4:], rr.SOA.Refresh)
+ binary.BigEndian.PutUint32(data[noff2+8:], rr.SOA.Retry)
+ binary.BigEndian.PutUint32(data[noff2+12:], rr.SOA.Expire)
+ binary.BigEndian.PutUint32(data[noff2+16:], rr.SOA.Minimum)
+ case DNSTypeMX:
+ binary.BigEndian.PutUint16(data[noff+10:], rr.MX.Preference)
+ encodeName(rr.MX.Name, data, noff+12)
+ case DNSTypeTXT:
+ noff2 := noff + 10
+ for _, txt := range rr.TXTs {
+ data[noff2] = byte(len(txt))
+ copy(data[noff2+1:], txt)
+ noff2 += 1 + len(txt)
+ }
+ case DNSTypeSRV:
+ binary.BigEndian.PutUint16(data[noff+10:], rr.SRV.Priority)
+ binary.BigEndian.PutUint16(data[noff+12:], rr.SRV.Weight)
+ binary.BigEndian.PutUint16(data[noff+14:], rr.SRV.Port)
+ encodeName(rr.SRV.Name, data, noff+16)
+ default:
+ return 0, fmt.Errorf("serializing resource record of type %v not supported", rr.Type)
+ }
+
+ // DataLength
+ dSz := recSize(rr)
+ binary.BigEndian.PutUint16(data[noff+8:], uint16(dSz))
+
+ if opts.FixLengths {
+ rr.DataLength = uint16(dSz)
+ }
+
+ return len(rr.Name) + 1 + 11 + dSz, nil
+}
+
+func (rr *DNSResourceRecord) String() string {
+
+ if rr.Class == DNSClassIN {
+ switch rr.Type {
+ case DNSTypeA, DNSTypeAAAA:
+ return rr.IP.String()
+ case DNSTypeNS:
+ return "NS " + string(rr.NS)
+ case DNSTypeCNAME:
+ return "CNAME " + string(rr.CNAME)
+ case DNSTypePTR:
+ return "PTR " + string(rr.PTR)
+ case DNSTypeTXT:
+ return "TXT " + string(rr.TXT)
+ }
+ }
+
+ return fmt.Sprintf("<%v, %v>", rr.Class, rr.Type)
+}
+
+func decodeCharacterStrings(data []byte) ([][]byte, error) {
+ strings := make([][]byte, 0, 1)
+ end := len(data)
+ for index, index2 := 0, 0; index != end; index = index2 {
+ index2 = index + 1 + int(data[index]) // index increases by 1..256 and does not overflow
+ if index2 > end {
+ return nil, errors.New("Insufficient data for a <character-string>")
+ }
+ strings = append(strings, data[index+1:index2])
+ }
+ return strings, nil
+}
+
+func (rr *DNSResourceRecord) decodeRData(data []byte, offset int, buffer *[]byte) error {
+ switch rr.Type {
+ case DNSTypeA:
+ rr.IP = rr.Data
+ case DNSTypeAAAA:
+ rr.IP = rr.Data
+ case DNSTypeTXT, DNSTypeHINFO:
+ rr.TXT = rr.Data
+ txts, err := decodeCharacterStrings(rr.Data)
+ if err != nil {
+ return err
+ }
+ rr.TXTs = txts
+ case DNSTypeNS:
+ name, _, err := decodeName(data, offset, buffer, 1)
+ if err != nil {
+ return err
+ }
+ rr.NS = name
+ case DNSTypeCNAME:
+ name, _, err := decodeName(data, offset, buffer, 1)
+ if err != nil {
+ return err
+ }
+ rr.CNAME = name
+ case DNSTypePTR:
+ name, _, err := decodeName(data, offset, buffer, 1)
+ if err != nil {
+ return err
+ }
+ rr.PTR = name
+ case DNSTypeSOA:
+ name, endq, err := decodeName(data, offset, buffer, 1)
+ if err != nil {
+ return err
+ }
+ rr.SOA.MName = name
+ name, endq, err = decodeName(data, endq, buffer, 1)
+ if err != nil {
+ return err
+ }
+ rr.SOA.RName = name
+ rr.SOA.Serial = binary.BigEndian.Uint32(data[endq : endq+4])
+ rr.SOA.Refresh = binary.BigEndian.Uint32(data[endq+4 : endq+8])
+ rr.SOA.Retry = binary.BigEndian.Uint32(data[endq+8 : endq+12])
+ rr.SOA.Expire = binary.BigEndian.Uint32(data[endq+12 : endq+16])
+ rr.SOA.Minimum = binary.BigEndian.Uint32(data[endq+16 : endq+20])
+ case DNSTypeMX:
+ rr.MX.Preference = binary.BigEndian.Uint16(data[offset : offset+2])
+ name, _, err := decodeName(data, offset+2, buffer, 1)
+ if err != nil {
+ return err
+ }
+ rr.MX.Name = name
+ case DNSTypeSRV:
+ rr.SRV.Priority = binary.BigEndian.Uint16(data[offset : offset+2])
+ rr.SRV.Weight = binary.BigEndian.Uint16(data[offset+2 : offset+4])
+ rr.SRV.Port = binary.BigEndian.Uint16(data[offset+4 : offset+6])
+ name, _, err := decodeName(data, offset+6, buffer, 1)
+ if err != nil {
+ return err
+ }
+ rr.SRV.Name = name
+ }
+ return nil
+}
+
+// DNSSOA is a Start of Authority record. Each domain requires a SOA record at
+// the cutover where a domain is delegated from its parent.
+type DNSSOA struct {
+ MName, RName []byte
+ Serial, Refresh, Retry, Expire, Minimum uint32
+}
+
+// DNSSRV is a Service record, defining a location (hostname/port) of a
+// server/service.
+type DNSSRV struct {
+ Priority, Weight, Port uint16
+ Name []byte
+}
+
+// DNSMX is a mail exchange record, defining a mail server for a recipient's
+// domain.
+type DNSMX struct {
+ Preference uint16
+ Name []byte
+}
diff --git a/vendor/github.com/google/gopacket/layers/dns_test.go b/vendor/github.com/google/gopacket/layers/dns_test.go
new file mode 100644
index 0000000..264513b
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/dns_test.go
@@ -0,0 +1,833 @@
+// Copyright 2012, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "bytes"
+ "net"
+ "strings"
+ "testing"
+
+ "github.com/google/gopacket"
+)
+
+// testPacketDNSRegression is the packet:
+// 11:08:05.708342 IP 109.194.160.4.57766 > 95.211.92.14.53: 63000% [1au] A? picslife.ru. (40)
+// 0x0000: 0022 19b6 7e22 000f 35bb 0b40 0800 4500 ."..~"..5..@..E.
+// 0x0010: 0044 89c4 0000 3811 2f3d 6dc2 a004 5fd3 .D....8./=m..._.
+// 0x0020: 5c0e e1a6 0035 0030 a597 f618 0010 0001 \....5.0........
+// 0x0030: 0000 0000 0001 0870 6963 736c 6966 6502 .......picslife.
+// 0x0040: 7275 0000 0100 0100 0029 1000 0000 8000 ru.......)......
+// 0x0050: 0000 ..
+var testPacketDNSRegression = []byte{
+ 0x00, 0x22, 0x19, 0xb6, 0x7e, 0x22, 0x00, 0x0f, 0x35, 0xbb, 0x0b, 0x40, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0x44, 0x89, 0xc4, 0x00, 0x00, 0x38, 0x11, 0x2f, 0x3d, 0x6d, 0xc2, 0xa0, 0x04, 0x5f, 0xd3,
+ 0x5c, 0x0e, 0xe1, 0xa6, 0x00, 0x35, 0x00, 0x30, 0xa5, 0x97, 0xf6, 0x18, 0x00, 0x10, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x70, 0x69, 0x63, 0x73, 0x6c, 0x69, 0x66, 0x65, 0x02,
+ 0x72, 0x75, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x29, 0x10, 0x00, 0x00, 0x00, 0x80, 0x00,
+ 0x00, 0x00,
+}
+
+func TestPacketDNSRegression(t *testing.T) {
+ p := gopacket.NewPacket(testPacketDNSRegression, LinkTypeEthernet, testDecodeOptions)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeDNS}, t)
+}
+func BenchmarkDecodePacketDNSRegression(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketDNSRegression, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+// response to `dig TXT google.com` over IPv4 link:
+var testParseDNSTypeTXTValue = `v=spf1 include:_spf.google.com ~all`
+var testParseDNSTypeTXT = []byte{
+ 0x02, 0x00, 0x00, 0x00, // PF_INET
+ 0x45, 0x00, 0x00, 0x73, 0x00, 0x00, 0x40, 0x00, 0x39, 0x11, 0x64, 0x98, 0xd0, 0x43, 0xde, 0xde,
+ 0x0a, 0xba, 0x23, 0x06, 0x00, 0x35, 0x81, 0xb2, 0x00, 0x5f, 0xdc, 0xb5, 0x98, 0x71, 0x81, 0x80,
+ 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x03,
+ 0x63, 0x6f, 0x6d, 0x00, 0x00, 0x10, 0x00, 0x01, 0xc0, 0x0c, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00,
+ 0x0e, 0x10, 0x00, 0x24, 0x23, 0x76, 0x3d, 0x73, 0x70, 0x66, 0x31, 0x20, 0x69, 0x6e, 0x63, 0x6c,
+ 0x75, 0x64, 0x65, 0x3a, 0x5f, 0x73, 0x70, 0x66, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+ 0x63, 0x6f, 0x6d, 0x20, 0x7e, 0x61, 0x6c, 0x6c, 0x00, 0x00, 0x29, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+}
+
+func TestParseDNSTypeTXT(t *testing.T) {
+ p := gopacket.NewPacket(testParseDNSTypeTXT, LinkTypeNull, testDecodeOptions)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeLoopback, LayerTypeIPv4, LayerTypeUDP, LayerTypeDNS}, t)
+ answers := p.Layer(LayerTypeDNS).(*DNS).Answers
+ if len(answers) != 1 {
+ t.Error("Failed to parse 1 DNS answer")
+ }
+ if len(answers[0].TXTs) != 1 {
+ t.Error("Failed to parse 1 TXT record")
+ }
+ txt := string(answers[0].TXTs[0])
+ if txt != testParseDNSTypeTXTValue {
+ t.Errorf("Incorrect TXT value, expected %q, got %q", testParseDNSTypeTXTValue, txt)
+ }
+}
+
+func testQuestionEqual(t *testing.T, i int, exp, got DNSQuestion) {
+ if !bytes.Equal(exp.Name, got.Name) {
+ t.Errorf("expected Questions[%d].Name = %v, got %v", i, string(exp.Name), string(got.Name))
+ }
+ if exp.Type != got.Type {
+ t.Errorf("expected Questions[%d].Type = %v, got %v", i, exp.Type, got.Type)
+ }
+ if exp.Class != got.Class {
+ t.Errorf("expected Questions[%d].Class = %v, got %v", i, exp.Class, got.Class)
+ }
+}
+
+func testResourceEqual(t *testing.T, i int, name string, exp, got DNSResourceRecord) {
+ if !bytes.Equal(exp.Name, got.Name) {
+ t.Errorf("expected %s[%d].Name = %v, got %v", name, i, string(exp.Name), string(got.Name))
+ }
+
+ if exp.Type != got.Type {
+ t.Errorf("expected %s[%d].Type = %v, got %v", name, i, exp.Type, got.Type)
+ }
+
+ if exp.Class != got.Class {
+ t.Errorf("expected %s[%d].Class = %v, got %v", name, i, exp.Class, got.Class)
+ }
+
+ if exp.TTL != got.TTL {
+ t.Errorf("expected %s[%d].TTL = %v, got %v", name, i, exp.TTL, got.TTL)
+ }
+ if exp.DataLength != got.DataLength {
+ t.Errorf("expected %s[%d].DataLength = %v, got %v", name, i, exp.DataLength, got.DataLength)
+ }
+
+ // we don't check .Data
+
+ if !exp.IP.Equal(got.IP) {
+ t.Errorf("expected %s[%d].IP = %v, got %v", name, i, exp.IP, got.IP)
+ }
+ if !bytes.Equal(exp.NS, got.NS) {
+ t.Errorf("expected %s[%d].NS = %v, got %v", name, i, exp.NS, got.NS)
+ }
+ if !bytes.Equal(exp.CNAME, got.CNAME) {
+ t.Errorf("expected %s[%d].CNAME = %v, got %v", name, i, exp.CNAME, got.CNAME)
+ }
+ if !bytes.Equal(exp.PTR, got.PTR) {
+ t.Errorf("expected %s[%d].PTR = %v, got %v", name, i, exp.PTR, got.PTR)
+ }
+ if len(exp.TXTs) != len(got.TXTs) {
+ t.Errorf("expected %s[%d].TXTs = %v, got %v", name, i, exp.TXTs, got.TXTs)
+ }
+ for j := range exp.TXTs {
+ if !bytes.Equal(exp.TXTs[j], got.TXTs[j]) {
+ t.Errorf("expected %s[%d].TXTs[%d] = %v, got %v", name, i, j, exp.TXTs[j], got.TXTs[j])
+ }
+ }
+
+ // SOA
+ if !bytes.Equal(exp.SOA.MName, got.SOA.MName) {
+ t.Errorf("expected %s[%d].SOA.MName = %v, got %v", name, i, exp.SOA.MName, got.SOA.MName)
+ }
+ if !bytes.Equal(exp.SOA.RName, got.SOA.RName) {
+ t.Errorf("expected %s[%d].SOA.RName = %v, got %v", name, i, exp.SOA.RName, got.SOA.RName)
+ }
+ if exp.SOA.Serial != got.SOA.Serial {
+ t.Errorf("expected %s[%d].SOA.Serial = %v, got %v", name, i, exp.SOA.Serial, got.SOA.Serial)
+ }
+ if exp.SOA.Refresh != got.SOA.Refresh {
+ t.Errorf("expected %s[%d].SOA.Refresh = %v, got %v", name, i, exp.SOA.Refresh, got.SOA.Refresh)
+ }
+ if exp.SOA.Retry != got.SOA.Retry {
+ t.Errorf("expected %s[%d].SOA.Retry = %v, got %v", name, i, exp.SOA.Retry, got.SOA.Retry)
+ }
+ if exp.SOA.Expire != got.SOA.Expire {
+ t.Errorf("expected %s[%d].SOA.Expire = %v, got %v", name, i, exp.SOA.Expire, got.SOA.Expire)
+ }
+ if exp.SOA.Minimum != got.SOA.Minimum {
+ t.Errorf("expected %s[%d].SOA.Minimum = %v, got %v", name, i, exp.SOA.Minimum, got.SOA.Minimum)
+ }
+
+ // SRV
+ if !bytes.Equal(exp.SRV.Name, got.SRV.Name) {
+ t.Errorf("expected %s[%d].SRV.Name = %v, got %v", name, i, exp.SRV.Name, got.SRV.Name)
+ }
+ if exp.SRV.Weight != got.SRV.Weight {
+ t.Errorf("expected %s[%d].SRV.Weight = %v, got %v", name, i, exp.SRV.Weight, got.SRV.Weight)
+ }
+ if exp.SRV.Port != got.SRV.Port {
+ t.Errorf("expected %s[%d].SRV.Port = %v, got %v", name, i, exp.SRV.Port, got.SRV.Port)
+ }
+ // MX
+ if !bytes.Equal(exp.MX.Name, got.MX.Name) {
+ t.Errorf("expected %s[%d].MX.Name = %v, got %v", name, i, exp.MX.Name, got.MX.Name)
+ }
+ if exp.MX.Preference != got.MX.Preference {
+ t.Errorf("expected %s[%d].MX.Preference = %v, got %v", name, i, exp.MX.Preference, got.MX.Preference)
+ }
+}
+
+func testDNSEqual(t *testing.T, exp, got *DNS) {
+ if exp.ID != got.ID {
+ t.Errorf("expected ID = %v, got %v", exp.ID, got.ID)
+ }
+ if exp.AA != got.AA {
+ t.Errorf("expected AA = %v, got %v", exp.AA, got.AA)
+ }
+ if exp.OpCode != got.OpCode {
+ t.Errorf("expected OpCode = %v, got %v", exp.OpCode, got.OpCode)
+ }
+ if exp.AA != got.AA {
+ t.Errorf("expected AA = %v, got %v", exp.AA, got.AA)
+ }
+ if exp.TC != got.TC {
+ t.Errorf("expected TC = %v, got %v", exp.TC, got.TC)
+ }
+ if exp.RD != got.RD {
+ t.Errorf("expected RD = %v, got %v", exp.RD, got.RD)
+ }
+ if exp.RA != got.RA {
+ t.Errorf("expected RA = %v, got %v", exp.RA, got.RA)
+ }
+ if exp.Z != got.Z {
+ t.Errorf("expected Z = %v, got %v", exp.Z, got.Z)
+ }
+ if exp.ResponseCode != got.ResponseCode {
+ t.Errorf("expected ResponseCode = %v, got %v", exp.ResponseCode, got.ResponseCode)
+ }
+ if exp.QDCount != got.QDCount {
+ t.Errorf("expected QDCount = %v, got %v", exp.QDCount, got.QDCount)
+ }
+ if exp.ANCount != got.ANCount {
+ t.Errorf("expected ANCount = %v, got %v", exp.ANCount, got.ANCount)
+ }
+ if exp.ANCount != got.ANCount {
+ t.Errorf("expected ANCount = %v, got %v", exp.ANCount, got.ANCount)
+ }
+ if exp.NSCount != got.NSCount {
+ t.Errorf("expected NSCount = %v, got %v", exp.NSCount, got.NSCount)
+ }
+ if exp.ARCount != got.ARCount {
+ t.Errorf("expected ARCount = %v, got %v", exp.ARCount, got.ARCount)
+ }
+
+ if len(exp.Questions) != len(got.Questions) {
+ t.Errorf("expected %d Questions, got %d", len(exp.Questions), len(got.Questions))
+ }
+ for i := range exp.Questions {
+ testQuestionEqual(t, i, exp.Questions[i], got.Questions[i])
+ }
+
+ if len(exp.Answers) != len(got.Answers) {
+ t.Errorf("expected %d Answers, got %d", len(exp.Answers), len(got.Answers))
+ }
+ for i := range exp.Answers {
+ testResourceEqual(t, i, "Answers", exp.Answers[i], got.Answers[i])
+ }
+
+ if len(exp.Authorities) != len(got.Authorities) {
+ t.Errorf("expected %d Answers, got %d", len(exp.Authorities), len(got.Authorities))
+ }
+ for i := range exp.Authorities {
+ testResourceEqual(t, i, "Authorities", exp.Authorities[i], got.Authorities[i])
+ }
+
+ if len(exp.Additionals) != len(got.Additionals) {
+ t.Errorf("expected %d Additionals, got %d", len(exp.Additionals), len(got.Additionals))
+ }
+ for i := range exp.Additionals {
+ testResourceEqual(t, i, "Additionals", exp.Additionals[i], got.Additionals[i])
+ }
+}
+
+func TestDNSEncodeQuery(t *testing.T) {
+ dns := &DNS{ID: 1234, OpCode: DNSOpCodeQuery, RD: true}
+ dns.Questions = append(dns.Questions,
+ DNSQuestion{
+ Name: []byte("example1.com"),
+ Type: DNSTypeA,
+ Class: DNSClassIN,
+ })
+
+ dns.Questions = append(dns.Questions,
+ DNSQuestion{
+ Name: []byte("example2.com"),
+ Type: DNSTypeA,
+ Class: DNSClassIN,
+ })
+
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{FixLengths: true}
+ err := gopacket.SerializeLayers(buf, opts, dns)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if int(dns.QDCount) != len(dns.Questions) {
+ t.Errorf("fix lengths did not adjust QDCount, expected %d got %d", len(dns.Questions), dns.QDCount)
+ }
+
+ p2 := gopacket.NewPacket(buf.Bytes(), LayerTypeDNS, testDecodeOptions)
+ dns2 := p2.Layer(LayerTypeDNS).(*DNS)
+ testDNSEqual(t, dns, dns2)
+}
+
+func TestDNSEncodeResponse(t *testing.T) {
+ dns := &DNS{ID: 1234, QR: true, OpCode: DNSOpCodeQuery,
+ AA: true, RD: true, RA: true}
+ dns.Questions = append(dns.Questions,
+ DNSQuestion{
+ Name: []byte("example1.com"),
+ Type: DNSTypeA,
+ Class: DNSClassIN,
+ })
+ dns.Questions = append(dns.Questions,
+ DNSQuestion{
+ Name: []byte("www.example2.com"),
+ Type: DNSTypeAAAA,
+ Class: DNSClassIN,
+ })
+
+ dns.Answers = append(dns.Answers,
+ DNSResourceRecord{
+ Name: []byte("example1.com"),
+ Type: DNSTypeA,
+ Class: DNSClassIN,
+ TTL: 1024,
+ IP: net.IP([]byte{1, 2, 3, 4}),
+ })
+
+ dns.Answers = append(dns.Answers,
+ DNSResourceRecord{
+ Name: []byte("www.example2.com"),
+ Type: DNSTypeAAAA,
+ Class: DNSClassIN,
+ TTL: 1024,
+ IP: net.IP([]byte{5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4}),
+ })
+
+ dns.Answers = append(dns.Answers,
+ DNSResourceRecord{
+ Name: []byte("www.example2.com"),
+ Type: DNSTypeCNAME,
+ Class: DNSClassIN,
+ TTL: 1024,
+ CNAME: []byte("example2.com"),
+ })
+
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{FixLengths: true}
+ err := gopacket.SerializeLayers(buf, opts, dns)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if int(dns.ANCount) != len(dns.Answers) {
+ t.Errorf("fix lengths did not adjust ANCount, expected %d got %d", len(dns.Answers), dns.ANCount)
+ }
+ for i, a := range dns.Answers {
+ if a.DataLength == 0 {
+ t.Errorf("fix lengths did not adjust Answers[%d].DataLength", i)
+ }
+ }
+
+ p2 := gopacket.NewPacket(buf.Bytes(), LayerTypeDNS, testDecodeOptions)
+ dns2 := p2.Layer(LayerTypeDNS).(*DNS)
+ testDNSEqual(t, dns, dns2)
+}
+
+// testDNSMalformedPacket is the packet:
+// 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]
+// 0x0000: 0000 0101 0000 4e96 1476 afa1 0800 4500 ......N..v....E.
+// 0x0010: 0039 d431 0000 f311 b3a0 0a4d 2b83 0a01 .9.1.......M+...
+// 0x0020: 0011 ed2e 0035 0025 0832 4745 5420 2f20 .....5.%.2GET./.
+// 0x0030: 4854 5450 2f31 2e31 0d0a 486f 7374 3a20 HTTP/1.1..Host:.
+// 0x0040: 7777 770d 0a0d 0a www....
+var testDNSMalformedPacket = []byte{
+ 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x4e, 0x96, 0x14, 0x76, 0xaf, 0xa1, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0x39, 0xd4, 0x31, 0x00, 0x00, 0xf3, 0x11, 0xb3, 0xa0, 0x0a, 0x4d, 0x2b, 0x83, 0x0a, 0x01,
+ 0x00, 0x11, 0xed, 0x2e, 0x00, 0x35, 0x00, 0x25, 0x08, 0x32, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x20,
+ 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f, 0x73, 0x74, 0x3a, 0x20,
+ 0x77, 0x77, 0x77, 0x0d, 0x0a, 0x0d, 0x0a,
+}
+
+func TestDNSMalformedPacket(t *testing.T) {
+ p := gopacket.NewPacket(testDNSMalformedPacket, LinkTypeEthernet, testDecodeOptions)
+ if errLayer := p.ErrorLayer(); errLayer == nil {
+ t.Error("No error layer on invalid DNS name")
+ } else if err := errLayer.Error(); !strings.Contains(err.Error(), "invalid index") {
+ t.Errorf("unexpected error message: %v", err)
+ }
+}
+
+// testDNSMalformedPacket2 is the packet:
+// 15:14:42.056054 IP 10.77.0.245.53 > 10.1.0.45.38769: 12625 zoneInit YXRRSet- [49833q],[|domain]
+// 0x0000: 0055 22af c637 0022 55ac deac 0800 4500 .U"..7."U.....E.
+// 0x0010: 0079 3767 4000 3911 f49d 0a4d 00f5 0a01 .y7g@.9....M....
+// 0x0020: 002d 0035 9771 0065 6377 3151 f057 c2a9 .-.5.q.ecw1Q.W..
+// 0x0030: fc6e e86a beb0 f7d4 8599 373e b5f8 9db2 .n.j......7>....
+// 0x0040: a399 21a1 9762 def1 def4 f5ab 5675 023e ..!..b......Vu.>
+// 0x0050: c9ca 304f 178a c2ad f2fc 677a 0e4c b892 ..0O......gz.L..
+// 0x0060: ab71 09bb 1ea4 f7c4 fe47 7a39 868b 29a0 .q.......Gz9..).
+// 0x0070: 62c4 d184 5b4e 8817 4cc0 d1d0 d430 11d3 b...[N..L....0..
+// 0x0080: d147 543f afc7 1a .GT?...
+var testDNSMalformedPacket2 = []byte{
+ 0x00, 0x55, 0x22, 0xaf, 0xc6, 0x37, 0x00, 0x22, 0x55, 0xac, 0xde, 0xac, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0x79, 0x37, 0x67, 0x40, 0x00, 0x39, 0x11, 0xf4, 0x9d, 0x0a, 0x4d, 0x00, 0xf5, 0x0a, 0x01,
+ 0x00, 0x2d, 0x00, 0x35, 0x97, 0x71, 0x00, 0x65, 0x63, 0x77, 0x31, 0x51, 0xf0, 0x57, 0xc2, 0xa9,
+ 0xfc, 0x6e, 0xe8, 0x6a, 0xbe, 0xb0, 0xf7, 0xd4, 0x85, 0x99, 0x37, 0x3e, 0xb5, 0xf8, 0x9d, 0xb2,
+ 0xa3, 0x99, 0x21, 0xa1, 0x97, 0x62, 0xde, 0xf1, 0xde, 0xf4, 0xf5, 0xab, 0x56, 0x75, 0x02, 0x3e,
+ 0xc9, 0xca, 0x30, 0x4f, 0x17, 0x8a, 0xc2, 0xad, 0xf2, 0xfc, 0x67, 0x7a, 0x0e, 0x4c, 0xb8, 0x92,
+ 0xab, 0x71, 0x09, 0xbb, 0x1e, 0xa4, 0xf7, 0xc4, 0xfe, 0x47, 0x7a, 0x39, 0x86, 0x8b, 0x29, 0xa0,
+ 0x62, 0xc4, 0xd1, 0x84, 0x5b, 0x4e, 0x88, 0x17, 0x4c, 0xc0, 0xd1, 0xd0, 0xd4, 0x30, 0x11, 0xd3,
+ 0xd1, 0x47, 0x54, 0x3f, 0xaf, 0xc7, 0x1a,
+}
+
+func TestDNSMalformedPacket2(t *testing.T) {
+ p := gopacket.NewPacket(testDNSMalformedPacket2, LinkTypeEthernet, testDecodeOptions)
+ if errLayer := p.ErrorLayer(); errLayer == nil {
+ t.Error("No error layer on invalid DNS name")
+ } else if err := errLayer.Error(); !strings.Contains(err.Error(), "offset pointer too high") {
+ t.Errorf("unexpected error message: %v", err)
+ }
+}
+
+// testMalformedRootQuery is the packet:
+// 08:31:18.143065 IP 10.77.0.26.53 > 10.1.0.233.65071: 59508- 0/13/3 (508)
+// 0x0000: 0055 22af c637 0022 55ac deac 0800 4500 .U"..7."U.....E.
+// 0x0010: 0218 76b2 4000 7211 7ad2 0a4d 001a 0a01 ..v.@.r.z..M....
+// 0x0020: 00e9 0035 fe2f 0204 b8f5 e874 8100 0001 ...5./.....t....
+// 0x0030: 0000 000d 0003 0c61 786b 7663 6863 7063 .......axkvchcpc
+// 0x0040: 7073 6c0a 7878 7878 7878 7878 7878 036e psl.xxxxxxxxxx.n
+// 0x0050: 6574 0000 0100 0100 0002 0001 0000 0e10 et..............
+// 0x0060: 0014 016d 0c72 6f6f 742d 7365 7276 6572 ...m.root-server
+// 0x0070: 7303 6e65 7400 c02d 0002 0001 0000 0e10 s.net..-........
+// 0x0080: 0014 0161 0c72 6f6f 742d 7365 7276 6572 ...a.root-server
+// 0x0090: 7303 6e65 7400 c02d 0002 0001 0000 0e10 s.net..-........
+// 0x00a0: 0014 0169 0c72 6f6f 742d 7365 7276 6572 ...i.root-server
+// 0x00b0: 7303 6e65 7400 c02d 0002 0001 0000 0e10 s.net..-........
+// 0x00c0: 0014 0162 0c72 6f6f 742d 7365 7276 6572 ...b.root-server
+// 0x00d0: 7303 6e65 7400 c02d 0002 0001 0000 0e10 s.net..-........
+// 0x00e0: 0014 016c 0c72 6f6f 742d 7365 7276 6572 ...l.root-server
+// 0x00f0: 7303 6e65 7400 c02d 0002 0001 0000 0e10 s.net..-........
+// 0x0100: 0014 0166 0c72 6f6f 742d 7365 7276 6572 ...f.root-server
+// 0x0110: 7303 6e65 7400 c02d 0002 0001 0000 0e10 s.net..-........
+// 0x0120: 0014 0167 0c72 6f6f 742d 7365 7276 6572 ...g.root-server
+// 0x0130: 7303 6e65 7400 c02d 0002 0001 0000 0e10 s.net..-........
+// 0x0140: 0014 0164 0c72 6f6f 742d 7365 7276 6572 ...d.root-server
+// 0x0150: 7303 6e65 7400 c02d 0002 0001 0000 0e10 s.net..-........
+// 0x0160: 0014 0168 0c72 6f6f 742d 7365 7276 6572 ...h.root-server
+// 0x0170: 7303 6e65 7400 c02d 0002 0001 0000 0e10 s.net..-........
+// 0x0180: 0014 0165 0c72 6f6f 742d 7365 7276 6572 ...e.root-server
+// 0x0190: 7303 6e65 7400 c02d 0002 0001 0000 0e10 s.net..-........
+// 0x01a0: 0014 016a 0c72 6f6f 742d 7365 7276 6572 ...j.root-server
+// 0x01b0: 7303 6e65 7400 c02d 0002 0001 0000 0e10 s.net..-........
+// 0x01c0: 0014 016b 0c72 6f6f 742d 7365 7276 6572 ...k.root-server
+// 0x01d0: 7303 6e65 7400 c02d 0002 0001 0000 0e10 s.net..-........
+// 0x01e0: 0014 0163 0c72 6f6f 742d 7365 7276 6572 ...c.root-server
+// 0x01f0: 7303 6e65 7400 c038 0001 0001 0000 0e10 s.net..8........
+// 0x0200: 0004 ca0c 1b21 c058 0001 0001 0000 0e10 .....!.X........
+// 0x0210: 0004 c629 0004 c078 0001 0001 0000 0e10 ...)...x........
+// 0x0220: 0004 c024 9411 ...$..
+var testMalformedRootQuery = []byte{
+ 0x00, 0x55, 0x22, 0xaf, 0xc6, 0x37, 0x00, 0x22, 0x55, 0xac, 0xde, 0xac, 0x08, 0x00, 0x45, 0x00,
+ 0x02, 0x18, 0x76, 0xb2, 0x40, 0x00, 0x72, 0x11, 0x7a, 0xd2, 0x0a, 0x4d, 0x00, 0x1a, 0x0a, 0x01,
+ 0x00, 0xe9, 0x00, 0x35, 0xfe, 0x2f, 0x02, 0x04, 0xb8, 0xf5, 0xe8, 0x74, 0x81, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x0d, 0x00, 0x03, 0x0c, 0x61, 0x78, 0x6b, 0x76, 0x63, 0x68, 0x63, 0x70, 0x63,
+ 0x70, 0x73, 0x6c, 0x0a, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x03, 0x6e,
+ 0x65, 0x74, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+ 0x00, 0x14, 0x01, 0x6d, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+ 0x00, 0x14, 0x01, 0x61, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+ 0x00, 0x14, 0x01, 0x69, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+ 0x00, 0x14, 0x01, 0x62, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+ 0x00, 0x14, 0x01, 0x6c, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+ 0x00, 0x14, 0x01, 0x66, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+ 0x00, 0x14, 0x01, 0x67, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+ 0x00, 0x14, 0x01, 0x64, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+ 0x00, 0x14, 0x01, 0x68, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+ 0x00, 0x14, 0x01, 0x65, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+ 0x00, 0x14, 0x01, 0x6a, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+ 0x00, 0x14, 0x01, 0x6b, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+ 0x00, 0x14, 0x01, 0x63, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x38, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+ 0x00, 0x04, 0xca, 0x0c, 0x1b, 0x21, 0xc0, 0x58, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+ 0x00, 0x04, 0xc6, 0x29, 0x00, 0x04, 0xc0, 0x78, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+ 0x00, 0x04, 0xc0, 0x24, 0x94, 0x11,
+}
+
+func TestMalformedRootQuery(t *testing.T) {
+ p := gopacket.NewPacket(testMalformedRootQuery, LinkTypeEthernet, testDecodeOptions)
+ if errLayer := p.ErrorLayer(); errLayer == nil {
+ t.Error("No error layer on invalid DNS name")
+ } else if err := errLayer.Error(); !strings.Contains(err.Error(), "no dns data found") {
+ t.Errorf("unexpected error message: %v", err)
+ }
+}
+
+// testAnotherMalformedDNS is the packet:
+// 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]
+// 0x0000: 0055 22af c637 0022 55ac deac 0800 4500 .U"..7."U.....E.
+// 0x0010: 05c1 2eea 4000 3611 fbd1 0a4d 001d 0a01 ....@.6....M....
+// 0x0020: 0006 0035 a528 05ad 00a2 34b3 3313 5c1f ...5.(....4.3.\.
+// 0x0030: 2dc8 742e cb77 2da0 bc2e 568b f751 f322 -.t..w-...V..Q."
+// 0x0040: 851d ab17 7810 009c 1cef c6d5 0605 37f4 ....x.........7.
+// 0x0050: 969b c65e 483e 4706 f58b df36 47db eae2 ...^H>G....6G...
+// 0x0060: 885d 688a c5a5 5705 aaa8 95eb 93a4 d85a .]h...W........Z
+// 0x0070: c9af 261f 7816 a354 2d23 d84a 579c 4876 ..&.x..T-#.JW.Hv
+// 0x0080: a391 43db 5c41 191a 92b8 dcdd 6839 eef5 ..C.\A......h9..
+// 0x0090: 728e 13e0 0679 6f47 88a0 25b9 44d8 f8e7 r....yoG..%.D...
+// 0x00a0: 8afe 0bfa f811 8da5 f8a3 1f8e d23b fe12 .............;..
+// 0x00b0: d943 9327 92ad 4410 183e 688d b06d 5391 .C.'..D..>h..mS.
+// 0x00c0: 695b e49f 8f1e c075 d043 afe0 1174 9db0 i[.....u.C...t..
+// 0x00d0: 06b0 f01e b85b 3c84 945e 06d0 b20f 9eaa .....[<..^......
+// 0x00e0: 123d 0ab0 2a55 309c 0ee9 3e5e db2f f377 .=..*U0...>^./.w
+// 0x00f0: d7f1 9bae 373d 3316 0796 b80e dd18 5173 ....7=3.......Qs
+// 0x0100: b28d 84fd 1812 d87b 42c8 5f11 4db6 b269 .......{B._.M..i
+// 0x0110: 1c42 4aea d5a4 644b 6c00 f0c0 fcee 71a7 .BJ...dKl.....q.
+// 0x0120: e7f0 719c a207 dc5c a6fa f005 a338 7ff0 ..q....\.....8..
+// 0x0130: 5beb 3b4d 8952 2a46 d47b a5a2 e1fb 9e76 [.;M.R*F.{.....v
+// 0x0140: c815 6258 50f4 6997 bad5 b479 2d06 ebbb ..bXP.i....y-...
+// 0x0150: 2cac 2ecc e4f0 1f94 ce9f 186c 61da 9681 ,..........la...
+// 0x0160: 345c 4d88 efc7 037b fbe3 4402 ea06 2e5d 4\M....{..D....]
+// 0x0170: 2e6e 4860 e180 3ef7 c006 0ad1 ebb9 c4ff .nH`..>.........
+// 0x0180: dee2 f21c 02c2 751a ded8 ae2e 13a9 3fa2 ......u.......?.
+// 0x0190: 392a 8b54 11b2 2b4e 2bf1 4780 db9f 8c10 9*.T..+N+.G.....
+// 0x01a0: ac6f 61b0 7b19 423f 07e5 4628 b870 f75d .oa.{.B?..F(.p.]
+// 0x01b0: 09a3 63b2 77af 5985 a0ae 51d8 243f a7c8 ..c.w.Y...Q.$?..
+// 0x01c0: ab08 7fc6 0217 c09f c412 0c45 e6aa 96bf ...........E....
+// 0x01d0: 184c 4307 1f1f c4f4 7734 da31 2088 662b .LC.....w4.1..f+
+// 0x01e0: 44c5 096f 1d1d 2dc5 ffd6 867d 9fc5 7b45 D..o..-....}..{E
+// 0x01f0: f949 7dd9 38de 0d51 ac2a 32fc f50b 1bbe .I}.8..Q.*2.....
+// 0x0200: 1c4b 5441 fbf3 0821 6c28 4530 5676 1d27 .KTA...!l(E0Vv.'
+// 0x0210: 5087 466c 3d5b 45a6 af7f 917a 6d43 66c2 P.Fl=[E....zmCf.
+// 0x0220: 036a 8bef ca60 9b13 8d29 9fda 82fa 01b1 .j...`...)......
+// 0x0230: df8f 1f83 c71d 630f 349e 508c 9f7a e3da ......c.4.P..z..
+// 0x0240: a114 3622 9df8 9926 4dac 4150 d505 7b3a ..6"...&M.AP..{:
+// 0x0250: 6fed fc75 6b4f 2d60 8a89 767d 9af0 896e o..ukO-`..v}...n
+// 0x0260: 907d 1ada def3 345c 0d81 283c a24f fcbb .}....4\..(<.O..
+// 0x0270: bbdd b7b3 e3bb 9f1b d966 51b7 8217 7fa0 .........fQ.....
+// 0x0280: e828 d3ca a6f1 532f 164e e405 bb3b 0de3 .(....S/.N...;..
+// 0x0290: 985d 6e89 d825 ebc6 d8ba 5190 a114 c6a3 .]n..%....Q.....
+// 0x02a0: 18b4 8aa7 181a 01ac cdc0 8048 ea72 a5e3 ...........H.r..
+// 0x02b0: e37a dc57 65cd b787 39e6 c39e 317b 45d8 .z.We...9...1{E.
+// 0x02c0: 475c 05ba e8f8 8224 5a85 27b8 1584 8d78 G\.....$Z.'....x
+// 0x02d0: 62b6 6495 ac10 338f 1122 f2ff 043e 9e2a b.d...3.."...>.*
+// 0x02e0: 1058 a910 5792 6fcd 9a96 6183 6708 8f70 .X..W.o...a.g..p
+// 0x02f0: edc6 a67c 64ff 50fa 520b de94 c82c c4d6 ...|d.P.R....,..
+// 0x0300: 7d8f 0fd5 2f0d 9833 7c6c be10 a4e5 dc99 }.../..3|l......
+// 0x0310: a467 ef5f b35b c11c e23c 131a 48b2 9cef .g._.[...<..H...
+// 0x0320: 5a2f fece dd9e 2aea 0db9 faf3 a6ef b29d Z/....*.........
+// 0x0330: e85d a410 dd6a 6806 3fc6 1694 179f cb4b .]...jh.?......K
+// 0x0340: 08c4 86b2 0713 cddb b257 d56b fe82 7d82 .........W.k..}.
+// 0x0350: 0d1f 6dc9 67b2 d2a1 6791 4f38 edf9 491f ..m.g...g.O8..I.
+// 0x0360: 2c02 35f5 8165 ecc3 bc6a b631 3c7e 1ad4 ,.5..e...j.1<~..
+// 0x0370: 8e27 f962 f942 11b5 1b45 9bac b474 3c6e .'.b.B...E...t<n
+// 0x0380: 6832 3075 be6d ac0d a8a0 7d47 a6ef 4e43 h20u.m....}G..NC
+// 0x0390: 6b9a 3097 8a8b 82a3 9515 362c f7d6 a37f k.0.......6,....
+// 0x03a0: 7313 1199 a5f3 03dc bcc9 fb10 c23d eeb9 s............=..
+// 0x03b0: 78ff c8f3 0d38 9f74 ceec b7ae 63e3 3424 x....8.t....c.4$
+// 0x03c0: b783 f106 011f 666b bf2d abc8 ea10 57a1 ......fk.-....W.
+// 0x03d0: 7cf2 4a3f 57ca 1386 bfba 27e5 4662 81c8 |.J?W.....'.Fb..
+// 0x03e0: 041e 1820 b3d5 c399 cd4d 222f 29f0 b994 .........M"/)...
+// 0x03f0: 865a e6e2 1686 3261 b0cd caaf 07ec d0bc .Z....2a........
+// 0x0400: afb8 3cf0 51c1 6c7a 6383 6b3a ff47 9551 ..<.Q.lzc.k:.G.Q
+// 0x0410: 1099 525f 355e 4684 bd34 ec12 88c9 dcc2 ..R_5^F..4......
+// 0x0420: d11c 826d f1df 37e6 f08f 6ce8 817d bdc3 ...m..7...l..}..
+// 0x0430: 20b9 a274 c645 c67d f299 fef9 287f 09ee ...t.E.}....(...
+// 0x0440: ac67 6872 a126 b1d3 922c 4c2a 0ec9 b6d4 .ghr.&...,L*....
+// 0x0450: fb59 6163 d1c4 1708 8d94 bc3d be5e ae29 .Yac.......=.^.)
+// 0x0460: 51ff a765 9df6 ae35 ed6b 0555 933f 3ed6 Q..e...5.k.U.?>.
+// 0x0470: 259b d93e f86f 6088 0c4e 357b 5c67 7d93 %..>.o`..N5{\g}.
+// 0x0480: a695 1a42 e1e1 ef91 14d7 b7b7 0ca4 2dda ...B..........-.
+// 0x0490: 6ac1 771e 25c1 a578 4ca8 6fd8 de04 1c09 j.w.%..xL.o.....
+// 0x04a0: df49 f179 6a58 2b45 7231 307f bc67 e5e7 .I.yjX+Er10..g..
+// 0x04b0: c5cd fec0 b021 508e 4fc5 f821 f734 90bc .....!P.O..!.4..
+// 0x04c0: c87f 14f1 2e5c d17b 1818 5b4a 6b68 0212 .....\.{..[Jkh..
+// 0x04d0: 1791 4a30 8518 99a9 b516 67e7 ed56 d1d1 ..J0......g..V..
+// 0x04e0: 239d dfda 11c5 0afe e58a b6e0 fb66 ab5c #............f.\
+// 0x04f0: f590 dcd6 457d 01d1 83f5 a9f0 cdb2 9c14 ....E}..........
+// 0x0500: ff66 f10c d428 a07b 34e3 d600 91f2 aca7 .f...(.{4.......
+// 0x0510: 4e1f f3ac a96e 2aa3 ec9b 448c 748d f858 N....n*...D.t..X
+// 0x0520: 131c d496 af9b f5f0 d2f5 57ac 0b64 55a1 ..........W..dU.
+// 0x0530: 860e 5ad0 3e62 26b5 9e17 f51f 88c1 02e3 ..Z.>b&.........
+// 0x0540: 4a38 de70 3216 6f88 5d1e f429 ee19 4121 J8.p2.o.]..)..A!
+// 0x0550: f571 84ac 3789 141f 1798 90b1 8373 2499 .q..7........s$.
+// 0x0560: c131 b13f f3a3 9a07 aef1 bfe8 8cd7 8c2e .1.?............
+// 0x0570: ba35 dfc5 eb07 013c 7621 6481 bdfb 6233 .5.....<v!d...b3
+// 0x0580: 22e2 0f05 7e15 0417 67e4 2632 5207 28a6 "...~...g.&2R.(.
+// 0x0590: 8e88 9423 de54 5412 b53e fd8d d47a de58 ...#.TT..>...z.X
+// 0x05a0: a1b2 6e08 d06d dc21 1eda 14a0 a2f7 1701 ..n..m.!........
+// 0x05b0: a5e0 dfd7 871f 595d db43 70f5 bab3 b732 ......Y].Cp....2
+// 0x05c0: 6275 da15 b203 dac7 321f 8d61 11bd 30 bu......2..a..0
+var testAnotherMalformedDNS = []byte{
+ 0x00, 0x55, 0x22, 0xaf, 0xc6, 0x37, 0x00, 0x22, 0x55, 0xac, 0xde, 0xac, 0x08, 0x00, 0x45, 0x00,
+ 0x05, 0xc1, 0x2e, 0xea, 0x40, 0x00, 0x36, 0x11, 0xfb, 0xd1, 0x0a, 0x4d, 0x00, 0x1d, 0x0a, 0x01,
+ 0x00, 0x06, 0x00, 0x35, 0xa5, 0x28, 0x05, 0xad, 0x00, 0xa2, 0x34, 0xb3, 0x33, 0x13, 0x5c, 0x1f,
+ 0x2d, 0xc8, 0x74, 0x2e, 0xcb, 0x77, 0x2d, 0xa0, 0xbc, 0x2e, 0x56, 0x8b, 0xf7, 0x51, 0xf3, 0x22,
+ 0x85, 0x1d, 0xab, 0x17, 0x78, 0x10, 0x00, 0x9c, 0x1c, 0xef, 0xc6, 0xd5, 0x06, 0x05, 0x37, 0xf4,
+ 0x96, 0x9b, 0xc6, 0x5e, 0x48, 0x3e, 0x47, 0x06, 0xf5, 0x8b, 0xdf, 0x36, 0x47, 0xdb, 0xea, 0xe2,
+ 0x88, 0x5d, 0x68, 0x8a, 0xc5, 0xa5, 0x57, 0x05, 0xaa, 0xa8, 0x95, 0xeb, 0x93, 0xa4, 0xd8, 0x5a,
+ 0xc9, 0xaf, 0x26, 0x1f, 0x78, 0x16, 0xa3, 0x54, 0x2d, 0x23, 0xd8, 0x4a, 0x57, 0x9c, 0x48, 0x76,
+ 0xa3, 0x91, 0x43, 0xdb, 0x5c, 0x41, 0x19, 0x1a, 0x92, 0xb8, 0xdc, 0xdd, 0x68, 0x39, 0xee, 0xf5,
+ 0x72, 0x8e, 0x13, 0xe0, 0x06, 0x79, 0x6f, 0x47, 0x88, 0xa0, 0x25, 0xb9, 0x44, 0xd8, 0xf8, 0xe7,
+ 0x8a, 0xfe, 0x0b, 0xfa, 0xf8, 0x11, 0x8d, 0xa5, 0xf8, 0xa3, 0x1f, 0x8e, 0xd2, 0x3b, 0xfe, 0x12,
+ 0xd9, 0x43, 0x93, 0x27, 0x92, 0xad, 0x44, 0x10, 0x18, 0x3e, 0x68, 0x8d, 0xb0, 0x6d, 0x53, 0x91,
+ 0x69, 0x5b, 0xe4, 0x9f, 0x8f, 0x1e, 0xc0, 0x75, 0xd0, 0x43, 0xaf, 0xe0, 0x11, 0x74, 0x9d, 0xb0,
+ 0x06, 0xb0, 0xf0, 0x1e, 0xb8, 0x5b, 0x3c, 0x84, 0x94, 0x5e, 0x06, 0xd0, 0xb2, 0x0f, 0x9e, 0xaa,
+ 0x12, 0x3d, 0x0a, 0xb0, 0x2a, 0x55, 0x30, 0x9c, 0x0e, 0xe9, 0x3e, 0x5e, 0xdb, 0x2f, 0xf3, 0x77,
+ 0xd7, 0xf1, 0x9b, 0xae, 0x37, 0x3d, 0x33, 0x16, 0x07, 0x96, 0xb8, 0x0e, 0xdd, 0x18, 0x51, 0x73,
+ 0xb2, 0x8d, 0x84, 0xfd, 0x18, 0x12, 0xd8, 0x7b, 0x42, 0xc8, 0x5f, 0x11, 0x4d, 0xb6, 0xb2, 0x69,
+ 0x1c, 0x42, 0x4a, 0xea, 0xd5, 0xa4, 0x64, 0x4b, 0x6c, 0x00, 0xf0, 0xc0, 0xfc, 0xee, 0x71, 0xa7,
+ 0xe7, 0xf0, 0x71, 0x9c, 0xa2, 0x07, 0xdc, 0x5c, 0xa6, 0xfa, 0xf0, 0x05, 0xa3, 0x38, 0x7f, 0xf0,
+ 0x5b, 0xeb, 0x3b, 0x4d, 0x89, 0x52, 0x2a, 0x46, 0xd4, 0x7b, 0xa5, 0xa2, 0xe1, 0xfb, 0x9e, 0x76,
+ 0xc8, 0x15, 0x62, 0x58, 0x50, 0xf4, 0x69, 0x97, 0xba, 0xd5, 0xb4, 0x79, 0x2d, 0x06, 0xeb, 0xbb,
+ 0x2c, 0xac, 0x2e, 0xcc, 0xe4, 0xf0, 0x1f, 0x94, 0xce, 0x9f, 0x18, 0x6c, 0x61, 0xda, 0x96, 0x81,
+ 0x34, 0x5c, 0x4d, 0x88, 0xef, 0xc7, 0x03, 0x7b, 0xfb, 0xe3, 0x44, 0x02, 0xea, 0x06, 0x2e, 0x5d,
+ 0x2e, 0x6e, 0x48, 0x60, 0xe1, 0x80, 0x3e, 0xf7, 0xc0, 0x06, 0x0a, 0xd1, 0xeb, 0xb9, 0xc4, 0xff,
+ 0xde, 0xe2, 0xf2, 0x1c, 0x02, 0xc2, 0x75, 0x1a, 0xde, 0xd8, 0xae, 0x2e, 0x13, 0xa9, 0x3f, 0xa2,
+ 0x39, 0x2a, 0x8b, 0x54, 0x11, 0xb2, 0x2b, 0x4e, 0x2b, 0xf1, 0x47, 0x80, 0xdb, 0x9f, 0x8c, 0x10,
+ 0xac, 0x6f, 0x61, 0xb0, 0x7b, 0x19, 0x42, 0x3f, 0x07, 0xe5, 0x46, 0x28, 0xb8, 0x70, 0xf7, 0x5d,
+ 0x09, 0xa3, 0x63, 0xb2, 0x77, 0xaf, 0x59, 0x85, 0xa0, 0xae, 0x51, 0xd8, 0x24, 0x3f, 0xa7, 0xc8,
+ 0xab, 0x08, 0x7f, 0xc6, 0x02, 0x17, 0xc0, 0x9f, 0xc4, 0x12, 0x0c, 0x45, 0xe6, 0xaa, 0x96, 0xbf,
+ 0x18, 0x4c, 0x43, 0x07, 0x1f, 0x1f, 0xc4, 0xf4, 0x77, 0x34, 0xda, 0x31, 0x20, 0x88, 0x66, 0x2b,
+ 0x44, 0xc5, 0x09, 0x6f, 0x1d, 0x1d, 0x2d, 0xc5, 0xff, 0xd6, 0x86, 0x7d, 0x9f, 0xc5, 0x7b, 0x45,
+ 0xf9, 0x49, 0x7d, 0xd9, 0x38, 0xde, 0x0d, 0x51, 0xac, 0x2a, 0x32, 0xfc, 0xf5, 0x0b, 0x1b, 0xbe,
+ 0x1c, 0x4b, 0x54, 0x41, 0xfb, 0xf3, 0x08, 0x21, 0x6c, 0x28, 0x45, 0x30, 0x56, 0x76, 0x1d, 0x27,
+ 0x50, 0x87, 0x46, 0x6c, 0x3d, 0x5b, 0x45, 0xa6, 0xaf, 0x7f, 0x91, 0x7a, 0x6d, 0x43, 0x66, 0xc2,
+ 0x03, 0x6a, 0x8b, 0xef, 0xca, 0x60, 0x9b, 0x13, 0x8d, 0x29, 0x9f, 0xda, 0x82, 0xfa, 0x01, 0xb1,
+ 0xdf, 0x8f, 0x1f, 0x83, 0xc7, 0x1d, 0x63, 0x0f, 0x34, 0x9e, 0x50, 0x8c, 0x9f, 0x7a, 0xe3, 0xda,
+ 0xa1, 0x14, 0x36, 0x22, 0x9d, 0xf8, 0x99, 0x26, 0x4d, 0xac, 0x41, 0x50, 0xd5, 0x05, 0x7b, 0x3a,
+ 0x6f, 0xed, 0xfc, 0x75, 0x6b, 0x4f, 0x2d, 0x60, 0x8a, 0x89, 0x76, 0x7d, 0x9a, 0xf0, 0x89, 0x6e,
+ 0x90, 0x7d, 0x1a, 0xda, 0xde, 0xf3, 0x34, 0x5c, 0x0d, 0x81, 0x28, 0x3c, 0xa2, 0x4f, 0xfc, 0xbb,
+ 0xbb, 0xdd, 0xb7, 0xb3, 0xe3, 0xbb, 0x9f, 0x1b, 0xd9, 0x66, 0x51, 0xb7, 0x82, 0x17, 0x7f, 0xa0,
+ 0xe8, 0x28, 0xd3, 0xca, 0xa6, 0xf1, 0x53, 0x2f, 0x16, 0x4e, 0xe4, 0x05, 0xbb, 0x3b, 0x0d, 0xe3,
+ 0x98, 0x5d, 0x6e, 0x89, 0xd8, 0x25, 0xeb, 0xc6, 0xd8, 0xba, 0x51, 0x90, 0xa1, 0x14, 0xc6, 0xa3,
+ 0x18, 0xb4, 0x8a, 0xa7, 0x18, 0x1a, 0x01, 0xac, 0xcd, 0xc0, 0x80, 0x48, 0xea, 0x72, 0xa5, 0xe3,
+ 0xe3, 0x7a, 0xdc, 0x57, 0x65, 0xcd, 0xb7, 0x87, 0x39, 0xe6, 0xc3, 0x9e, 0x31, 0x7b, 0x45, 0xd8,
+ 0x47, 0x5c, 0x05, 0xba, 0xe8, 0xf8, 0x82, 0x24, 0x5a, 0x85, 0x27, 0xb8, 0x15, 0x84, 0x8d, 0x78,
+ 0x62, 0xb6, 0x64, 0x95, 0xac, 0x10, 0x33, 0x8f, 0x11, 0x22, 0xf2, 0xff, 0x04, 0x3e, 0x9e, 0x2a,
+ 0x10, 0x58, 0xa9, 0x10, 0x57, 0x92, 0x6f, 0xcd, 0x9a, 0x96, 0x61, 0x83, 0x67, 0x08, 0x8f, 0x70,
+ 0xed, 0xc6, 0xa6, 0x7c, 0x64, 0xff, 0x50, 0xfa, 0x52, 0x0b, 0xde, 0x94, 0xc8, 0x2c, 0xc4, 0xd6,
+ 0x7d, 0x8f, 0x0f, 0xd5, 0x2f, 0x0d, 0x98, 0x33, 0x7c, 0x6c, 0xbe, 0x10, 0xa4, 0xe5, 0xdc, 0x99,
+ 0xa4, 0x67, 0xef, 0x5f, 0xb3, 0x5b, 0xc1, 0x1c, 0xe2, 0x3c, 0x13, 0x1a, 0x48, 0xb2, 0x9c, 0xef,
+ 0x5a, 0x2f, 0xfe, 0xce, 0xdd, 0x9e, 0x2a, 0xea, 0x0d, 0xb9, 0xfa, 0xf3, 0xa6, 0xef, 0xb2, 0x9d,
+ 0xe8, 0x5d, 0xa4, 0x10, 0xdd, 0x6a, 0x68, 0x06, 0x3f, 0xc6, 0x16, 0x94, 0x17, 0x9f, 0xcb, 0x4b,
+ 0x08, 0xc4, 0x86, 0xb2, 0x07, 0x13, 0xcd, 0xdb, 0xb2, 0x57, 0xd5, 0x6b, 0xfe, 0x82, 0x7d, 0x82,
+ 0x0d, 0x1f, 0x6d, 0xc9, 0x67, 0xb2, 0xd2, 0xa1, 0x67, 0x91, 0x4f, 0x38, 0xed, 0xf9, 0x49, 0x1f,
+ 0x2c, 0x02, 0x35, 0xf5, 0x81, 0x65, 0xec, 0xc3, 0xbc, 0x6a, 0xb6, 0x31, 0x3c, 0x7e, 0x1a, 0xd4,
+ 0x8e, 0x27, 0xf9, 0x62, 0xf9, 0x42, 0x11, 0xb5, 0x1b, 0x45, 0x9b, 0xac, 0xb4, 0x74, 0x3c, 0x6e,
+ 0x68, 0x32, 0x30, 0x75, 0xbe, 0x6d, 0xac, 0x0d, 0xa8, 0xa0, 0x7d, 0x47, 0xa6, 0xef, 0x4e, 0x43,
+ 0x6b, 0x9a, 0x30, 0x97, 0x8a, 0x8b, 0x82, 0xa3, 0x95, 0x15, 0x36, 0x2c, 0xf7, 0xd6, 0xa3, 0x7f,
+ 0x73, 0x13, 0x11, 0x99, 0xa5, 0xf3, 0x03, 0xdc, 0xbc, 0xc9, 0xfb, 0x10, 0xc2, 0x3d, 0xee, 0xb9,
+ 0x78, 0xff, 0xc8, 0xf3, 0x0d, 0x38, 0x9f, 0x74, 0xce, 0xec, 0xb7, 0xae, 0x63, 0xe3, 0x34, 0x24,
+ 0xb7, 0x83, 0xf1, 0x06, 0x01, 0x1f, 0x66, 0x6b, 0xbf, 0x2d, 0xab, 0xc8, 0xea, 0x10, 0x57, 0xa1,
+ 0x7c, 0xf2, 0x4a, 0x3f, 0x57, 0xca, 0x13, 0x86, 0xbf, 0xba, 0x27, 0xe5, 0x46, 0x62, 0x81, 0xc8,
+ 0x04, 0x1e, 0x18, 0x20, 0xb3, 0xd5, 0xc3, 0x99, 0xcd, 0x4d, 0x22, 0x2f, 0x29, 0xf0, 0xb9, 0x94,
+ 0x86, 0x5a, 0xe6, 0xe2, 0x16, 0x86, 0x32, 0x61, 0xb0, 0xcd, 0xca, 0xaf, 0x07, 0xec, 0xd0, 0xbc,
+ 0xaf, 0xb8, 0x3c, 0xf0, 0x51, 0xc1, 0x6c, 0x7a, 0x63, 0x83, 0x6b, 0x3a, 0xff, 0x47, 0x95, 0x51,
+ 0x10, 0x99, 0x52, 0x5f, 0x35, 0x5e, 0x46, 0x84, 0xbd, 0x34, 0xec, 0x12, 0x88, 0xc9, 0xdc, 0xc2,
+ 0xd1, 0x1c, 0x82, 0x6d, 0xf1, 0xdf, 0x37, 0xe6, 0xf0, 0x8f, 0x6c, 0xe8, 0x81, 0x7d, 0xbd, 0xc3,
+ 0x20, 0xb9, 0xa2, 0x74, 0xc6, 0x45, 0xc6, 0x7d, 0xf2, 0x99, 0xfe, 0xf9, 0x28, 0x7f, 0x09, 0xee,
+ 0xac, 0x67, 0x68, 0x72, 0xa1, 0x26, 0xb1, 0xd3, 0x92, 0x2c, 0x4c, 0x2a, 0x0e, 0xc9, 0xb6, 0xd4,
+ 0xfb, 0x59, 0x61, 0x63, 0xd1, 0xc4, 0x17, 0x08, 0x8d, 0x94, 0xbc, 0x3d, 0xbe, 0x5e, 0xae, 0x29,
+ 0x51, 0xff, 0xa7, 0x65, 0x9d, 0xf6, 0xae, 0x35, 0xed, 0x6b, 0x05, 0x55, 0x93, 0x3f, 0x3e, 0xd6,
+ 0x25, 0x9b, 0xd9, 0x3e, 0xf8, 0x6f, 0x60, 0x88, 0x0c, 0x4e, 0x35, 0x7b, 0x5c, 0x67, 0x7d, 0x93,
+ 0xa6, 0x95, 0x1a, 0x42, 0xe1, 0xe1, 0xef, 0x91, 0x14, 0xd7, 0xb7, 0xb7, 0x0c, 0xa4, 0x2d, 0xda,
+ 0x6a, 0xc1, 0x77, 0x1e, 0x25, 0xc1, 0xa5, 0x78, 0x4c, 0xa8, 0x6f, 0xd8, 0xde, 0x04, 0x1c, 0x09,
+ 0xdf, 0x49, 0xf1, 0x79, 0x6a, 0x58, 0x2b, 0x45, 0x72, 0x31, 0x30, 0x7f, 0xbc, 0x67, 0xe5, 0xe7,
+ 0xc5, 0xcd, 0xfe, 0xc0, 0xb0, 0x21, 0x50, 0x8e, 0x4f, 0xc5, 0xf8, 0x21, 0xf7, 0x34, 0x90, 0xbc,
+ 0xc8, 0x7f, 0x14, 0xf1, 0x2e, 0x5c, 0xd1, 0x7b, 0x18, 0x18, 0x5b, 0x4a, 0x6b, 0x68, 0x02, 0x12,
+ 0x17, 0x91, 0x4a, 0x30, 0x85, 0x18, 0x99, 0xa9, 0xb5, 0x16, 0x67, 0xe7, 0xed, 0x56, 0xd1, 0xd1,
+ 0x23, 0x9d, 0xdf, 0xda, 0x11, 0xc5, 0x0a, 0xfe, 0xe5, 0x8a, 0xb6, 0xe0, 0xfb, 0x66, 0xab, 0x5c,
+ 0xf5, 0x90, 0xdc, 0xd6, 0x45, 0x7d, 0x01, 0xd1, 0x83, 0xf5, 0xa9, 0xf0, 0xcd, 0xb2, 0x9c, 0x14,
+ 0xff, 0x66, 0xf1, 0x0c, 0xd4, 0x28, 0xa0, 0x7b, 0x34, 0xe3, 0xd6, 0x00, 0x91, 0xf2, 0xac, 0xa7,
+ 0x4e, 0x1f, 0xf3, 0xac, 0xa9, 0x6e, 0x2a, 0xa3, 0xec, 0x9b, 0x44, 0x8c, 0x74, 0x8d, 0xf8, 0x58,
+ 0x13, 0x1c, 0xd4, 0x96, 0xaf, 0x9b, 0xf5, 0xf0, 0xd2, 0xf5, 0x57, 0xac, 0x0b, 0x64, 0x55, 0xa1,
+ 0x86, 0x0e, 0x5a, 0xd0, 0x3e, 0x62, 0x26, 0xb5, 0x9e, 0x17, 0xf5, 0x1f, 0x88, 0xc1, 0x02, 0xe3,
+ 0x4a, 0x38, 0xde, 0x70, 0x32, 0x16, 0x6f, 0x88, 0x5d, 0x1e, 0xf4, 0x29, 0xee, 0x19, 0x41, 0x21,
+ 0xf5, 0x71, 0x84, 0xac, 0x37, 0x89, 0x14, 0x1f, 0x17, 0x98, 0x90, 0xb1, 0x83, 0x73, 0x24, 0x99,
+ 0xc1, 0x31, 0xb1, 0x3f, 0xf3, 0xa3, 0x9a, 0x07, 0xae, 0xf1, 0xbf, 0xe8, 0x8c, 0xd7, 0x8c, 0x2e,
+ 0xba, 0x35, 0xdf, 0xc5, 0xeb, 0x07, 0x01, 0x3c, 0x76, 0x21, 0x64, 0x81, 0xbd, 0xfb, 0x62, 0x33,
+ 0x22, 0xe2, 0x0f, 0x05, 0x7e, 0x15, 0x04, 0x17, 0x67, 0xe4, 0x26, 0x32, 0x52, 0x07, 0x28, 0xa6,
+ 0x8e, 0x88, 0x94, 0x23, 0xde, 0x54, 0x54, 0x12, 0xb5, 0x3e, 0xfd, 0x8d, 0xd4, 0x7a, 0xde, 0x58,
+ 0xa1, 0xb2, 0x6e, 0x08, 0xd0, 0x6d, 0xdc, 0x21, 0x1e, 0xda, 0x14, 0xa0, 0xa2, 0xf7, 0x17, 0x01,
+ 0xa5, 0xe0, 0xdf, 0xd7, 0x87, 0x1f, 0x59, 0x5d, 0xdb, 0x43, 0x70, 0xf5, 0xba, 0xb3, 0xb7, 0x32,
+ 0x62, 0x75, 0xda, 0x15, 0xb2, 0x03, 0xda, 0xc7, 0x32, 0x1f, 0x8d, 0x61, 0x11, 0xbd, 0x30,
+}
+
+func TestAnotherMalformedDNS(t *testing.T) {
+ p := gopacket.NewPacket(testAnotherMalformedDNS, LinkTypeEthernet, testDecodeOptions)
+ if errLayer := p.ErrorLayer(); errLayer == nil {
+ t.Error("No error layer on invalid DNS name")
+ } else if err := errLayer.Error(); !strings.Contains(err.Error(), "offset too high") {
+ t.Errorf("unexpected error message: %v", err)
+ }
+}
+
+// testMalformedDNSAgain is the packet:
+// 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]
+// 0x0000: 0055 22af c637 0022 55ac deac 0800 4500 .U"..7."U.....E.
+// 0x0010: 0091 2dff 0000 7811 ffe2 0a4d 0004 0a01 ..-...x....M....
+// 0x0020: 0029 0035 f0aa 007d 5b53 30f1 5cad ef77 .).5...}[S0.\..w
+// 0x0030: 9582 06b6 3a41 357a 8cef cdc0 a732 b800 ....:A5z.....2..
+// 0x0040: 466e 1c30 2e75 95ac c03d 1ed4 8635 2d09 Fn.0.u...=...5-.
+// 0x0050: 2fee 3a82 b4f0 427e 2b6b f870 cc7f c9a1 /.:...B~+k.p....
+// 0x0060: e6f1 a761 97ec 2ff7 d248 4d95 321c 6e4e ...a../..HM.2.nN
+// 0x0070: 57fa 6d3d 9ec0 fe3a 6f1e e634 4396 b494 W.m=...:o..4C...
+// 0x0080: 8b7a a929 d7e1 da7c c346 ca77 4890 6bf3 .z.)...|.F.wH.k.
+// 0x0090: 5ecb 7e97 c49d 3564 984f bf7c 8ac1 dd ^.~...5d.O.|...
+var testMalformedDNSAgain = []byte{
+ 0x00, 0x55, 0x22, 0xaf, 0xc6, 0x37, 0x00, 0x22, 0x55, 0xac, 0xde, 0xac, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0x91, 0x2d, 0xff, 0x00, 0x00, 0x78, 0x11, 0xff, 0xe2, 0x0a, 0x4d, 0x00, 0x04, 0x0a, 0x01,
+ 0x00, 0x29, 0x00, 0x35, 0xf0, 0xaa, 0x00, 0x7d, 0x5b, 0x53, 0x30, 0xf1, 0x5c, 0xad, 0xef, 0x77,
+ 0x95, 0x82, 0x06, 0xb6, 0x3a, 0x41, 0x35, 0x7a, 0x8c, 0xef, 0xcd, 0xc0, 0xa7, 0x32, 0xb8, 0x00,
+ 0x46, 0x6e, 0x1c, 0x30, 0x2e, 0x75, 0x95, 0xac, 0xc0, 0x3d, 0x1e, 0xd4, 0x86, 0x35, 0x2d, 0x09,
+ 0x2f, 0xee, 0x3a, 0x82, 0xb4, 0xf0, 0x42, 0x7e, 0x2b, 0x6b, 0xf8, 0x70, 0xcc, 0x7f, 0xc9, 0xa1,
+ 0xe6, 0xf1, 0xa7, 0x61, 0x97, 0xec, 0x2f, 0xf7, 0xd2, 0x48, 0x4d, 0x95, 0x32, 0x1c, 0x6e, 0x4e,
+ 0x57, 0xfa, 0x6d, 0x3d, 0x9e, 0xc0, 0xfe, 0x3a, 0x6f, 0x1e, 0xe6, 0x34, 0x43, 0x96, 0xb4, 0x94,
+ 0x8b, 0x7a, 0xa9, 0x29, 0xd7, 0xe1, 0xda, 0x7c, 0xc3, 0x46, 0xca, 0x77, 0x48, 0x90, 0x6b, 0xf3,
+ 0x5e, 0xcb, 0x7e, 0x97, 0xc4, 0x9d, 0x35, 0x64, 0x98, 0x4f, 0xbf, 0x7c, 0x8a, 0xc1, 0xdd,
+}
+
+func TestMalformedDNSAgain(t *testing.T) {
+ p := gopacket.NewPacket(testMalformedDNSAgain, LinkTypeEthernet, testDecodeOptions)
+ if errLayer := p.ErrorLayer(); errLayer == nil {
+ t.Error("No error layer on invalid DNS name")
+ } else if err := errLayer.Error(); !strings.Contains(err.Error(), "walked out of range") {
+ t.Errorf("unexpected error message: %v", err)
+ }
+}
+
+// testMalformedDNSOhGodMakeItStop is the packet:
+// 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]
+// 0x0000: 0055 22af c637 0022 55ac deac 0800 4500 .U"..7."U.....E.
+// 0x0010: 0079 c51c 4000 3511 6be4 0a4d 0013 0a01 .y..@.5.k..M....
+// 0x0020: 0013 0035 c5cb 0065 ef45 306d 7232 b4cb ...5...e.E0mr2..
+// 0x0030: ba71 eb57 f116 3994 e000 4626 0534 66cc .q.W..9...F&.4f.
+// 0x0040: 7b32 24f2 eece bca7 20e2 9a2a e1ce e737 {2$........*...7
+// 0x0050: ac39 5fae 72ec c3ec 284f ca4a 171f 466d .9_.r...(O.J..Fm
+// 0x0060: f6c6 84d7 e795 310f 26df 9b59 6db9 21cf ......1.&..Ym.!.
+// 0x0070: 15cb 30a3 c4cf df23 805a ed1a 0584 4fc3 ..0....#.Z....O.
+// 0x0080: 7fa3 3cb4 e04f e9 ..<..O.
+var testMalformedDNSOhGodMakeItStop = []byte{
+ 0x00, 0x55, 0x22, 0xaf, 0xc6, 0x37, 0x00, 0x22, 0x55, 0xac, 0xde, 0xac, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0x79, 0xc5, 0x1c, 0x40, 0x00, 0x35, 0x11, 0x6b, 0xe4, 0x0a, 0x4d, 0x00, 0x13, 0x0a, 0x01,
+ 0x00, 0x13, 0x00, 0x35, 0xc5, 0xcb, 0x00, 0x65, 0xef, 0x45, 0x30, 0x6d, 0x72, 0x32, 0xb4, 0xcb,
+ 0xba, 0x71, 0xeb, 0x57, 0xf1, 0x16, 0x39, 0x94, 0xe0, 0x00, 0x46, 0x26, 0x05, 0x34, 0x66, 0xcc,
+ 0x7b, 0x32, 0x24, 0xf2, 0xee, 0xce, 0xbc, 0xa7, 0x20, 0xe2, 0x9a, 0x2a, 0xe1, 0xce, 0xe7, 0x37,
+ 0xac, 0x39, 0x5f, 0xae, 0x72, 0xec, 0xc3, 0xec, 0x28, 0x4f, 0xca, 0x4a, 0x17, 0x1f, 0x46, 0x6d,
+ 0xf6, 0xc6, 0x84, 0xd7, 0xe7, 0x95, 0x31, 0x0f, 0x26, 0xdf, 0x9b, 0x59, 0x6d, 0xb9, 0x21, 0xcf,
+ 0x15, 0xcb, 0x30, 0xa3, 0xc4, 0xcf, 0xdf, 0x23, 0x80, 0x5a, 0xed, 0x1a, 0x05, 0x84, 0x4f, 0xc3,
+ 0x7f, 0xa3, 0x3c, 0xb4, 0xe0, 0x4f, 0xe9,
+}
+
+func TestMalformedDNSOhGodMakeItStop(t *testing.T) {
+ p := gopacket.NewPacket(testMalformedDNSOhGodMakeItStop, LinkTypeEthernet, testDecodeOptions)
+ if errLayer := p.ErrorLayer(); errLayer == nil {
+ t.Error("No error layer on invalid DNS name")
+ } else if err := errLayer.Error(); !strings.Contains(err.Error(), "offset pointer too high") {
+ t.Errorf("unexpected error message: %v", err)
+ }
+}
+
+// testPacketDNSPanic7 is the packet:
+// 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)
+// 0x0000: 0055 22af c637 0022 55ac deac 0800 4500 .U"..7."U.....E.
+// 0x0010: 021c b5ca 4000 fa11 b46a 0a4d 000b 0a01 ....@....j.M....
+// 0x0020: 0043 0035 d9e1 0208 afd6 a350 8600 0001 .C.5.......P....
+// 0x0030: 0003 0007 0000 076f 7574 6c6f 6f6b 0363 .......outlook.c
+// 0x0040: 6f6d 0000 1000 01c0 0c00 1000 0100 0001 om..............
+// 0x0050: 2c00 4544 676f 6f67 6c65 2d73 6974 652d ,.EDgoogle-site-
+// 0x0060: 7665 7269 6669 6361 7469 6f6e 3d44 4332 verification=DC2
+// 0x0070: 7543 2d54 386b 4433 336c 494e 684e 7a66 uC-T8kD33lINhNzf
+// 0x0080: 6f30 624e 4272 772d 7672 4358 7335 4250 o0bNBrw-vrCXs5BP
+// 0x0090: 4635 4258 5935 3667 c00c 0010 0001 0000 F5BXY56g........
+// 0x00a0: 012c 00d3 d276 3d73 7066 3120 696e 636c .,...v=spf1.incl
+// 0x00b0: 7564 653a 7370 662d 612e 6f75 746c 6f6f ude:spf-a.outloo
+// 0x00c0: 6b2e 636f 6d20 696e 636c 7564 653a 7370 k.com.include:sp
+// 0x00d0: 662d 622e 6f75 746c 6f6f 6b2e 636f 6d20 f-b.outlook.com.
+// 0x00e0: 6970 343a 3135 372e 3535 2e39 2e31 3238 ip4:157.55.9.128
+// 0x00f0: 2f32 3520 696e 636c 7564 653a 7370 662e /25.include:spf.
+// 0x0100: 7072 6f74 6563 7469 6f6e 2e6f 7574 6c6f protection.outlo
+// 0x0110: 6f6b 2e63 6f6d 2069 6e63 6c75 6465 3a73 ok.com.include:s
+// 0x0120: 7066 2d61 2e68 6f74 6d61 696c 2e63 6f6d pf-a.hotmail.com
+// 0x0130: 2069 6e63 6c75 6465 3a5f 7370 662d 7373 .include:_spf-ss
+// 0x0140: 672d 622e 6d69 6372 6f73 6f66 742e 636f g-b.microsoft.co
+// 0x0150: 6d20 696e 636c 7564 653a 5f73 7066 2d73 m.include:_spf-s
+// 0x0160: 7367 2d63 2e6d 6963 726f 736f 6674 2e63 sg-c.microsoft.c
+// 0x0170: 6f6d 207e 616c 6cc0 0c00 1000 0100 0001 om.~all.........
+// 0x0180: 2c00 4544 676f 6f67 6c65 2d73 6974 652d ,.EDgoogle-site-
+// 0x0190: 7665 7269 6669 6361 7469 6f6e 3d30 694c verification=0iL
+// 0x01a0: 5768 494d 6858 456b 6557 7757 6646 5534 WhIMhXEkeWwWfFU4
+// 0x01b0: 7572 7354 6e2d 5f4f 766f 4f6a 6141 304c ursTn-_OvoOjaA0L
+// 0x01c0: 7237 5067 3173 454d c00c 0002 0001 0002 r7Pg1sEM........
+// 0x01d0: a300 000e 036e 7332 046d 7366 7403 6e65 .....ns2.msft.ne
+// 0x01e0: 7400 c00c 0002 0001 0002 a300 0006 036e t..............n
+// 0x01f0: 7334 c1ae c00c 0002 0001 0002 a300 0006 s4..............
+// 0x0200: 036e 7331 c1ae c00c 0002 0001 0002 a300 .ns1............
+// 0x0210: 0006 036e 7333 c1ae c00c 0002 0001 0002 ...ns3..........
+// 0x0220: a300 0015 046e 7331 610d .....ns1a.
+var testPacketDNSPanic7 = []byte{
+ 0x00, 0x55, 0x22, 0xaf, 0xc6, 0x37, 0x00, 0x22, 0x55, 0xac, 0xde, 0xac, 0x08, 0x00, 0x45, 0x00,
+ 0x02, 0x1c, 0xb5, 0xca, 0x40, 0x00, 0xfa, 0x11, 0xb4, 0x6a, 0x0a, 0x4d, 0x00, 0x0b, 0x0a, 0x01,
+ 0x00, 0x43, 0x00, 0x35, 0xd9, 0xe1, 0x02, 0x08, 0xaf, 0xd6, 0xa3, 0x50, 0x86, 0x00, 0x00, 0x01,
+ 0x00, 0x03, 0x00, 0x07, 0x00, 0x00, 0x07, 0x6f, 0x75, 0x74, 0x6c, 0x6f, 0x6f, 0x6b, 0x03, 0x63,
+ 0x6f, 0x6d, 0x00, 0x00, 0x10, 0x00, 0x01, 0xc0, 0x0c, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x01,
+ 0x2c, 0x00, 0x45, 0x44, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2d, 0x73, 0x69, 0x74, 0x65, 0x2d,
+ 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x44, 0x43, 0x32,
+ 0x75, 0x43, 0x2d, 0x54, 0x38, 0x6b, 0x44, 0x33, 0x33, 0x6c, 0x49, 0x4e, 0x68, 0x4e, 0x7a, 0x66,
+ 0x6f, 0x30, 0x62, 0x4e, 0x42, 0x72, 0x77, 0x2d, 0x76, 0x72, 0x43, 0x58, 0x73, 0x35, 0x42, 0x50,
+ 0x46, 0x35, 0x42, 0x58, 0x59, 0x35, 0x36, 0x67, 0xc0, 0x0c, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00,
+ 0x01, 0x2c, 0x00, 0xd3, 0xd2, 0x76, 0x3d, 0x73, 0x70, 0x66, 0x31, 0x20, 0x69, 0x6e, 0x63, 0x6c,
+ 0x75, 0x64, 0x65, 0x3a, 0x73, 0x70, 0x66, 0x2d, 0x61, 0x2e, 0x6f, 0x75, 0x74, 0x6c, 0x6f, 0x6f,
+ 0x6b, 0x2e, 0x63, 0x6f, 0x6d, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x3a, 0x73, 0x70,
+ 0x66, 0x2d, 0x62, 0x2e, 0x6f, 0x75, 0x74, 0x6c, 0x6f, 0x6f, 0x6b, 0x2e, 0x63, 0x6f, 0x6d, 0x20,
+ 0x69, 0x70, 0x34, 0x3a, 0x31, 0x35, 0x37, 0x2e, 0x35, 0x35, 0x2e, 0x39, 0x2e, 0x31, 0x32, 0x38,
+ 0x2f, 0x32, 0x35, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x3a, 0x73, 0x70, 0x66, 0x2e,
+ 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x75, 0x74, 0x6c, 0x6f,
+ 0x6f, 0x6b, 0x2e, 0x63, 0x6f, 0x6d, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x3a, 0x73,
+ 0x70, 0x66, 0x2d, 0x61, 0x2e, 0x68, 0x6f, 0x74, 0x6d, 0x61, 0x69, 0x6c, 0x2e, 0x63, 0x6f, 0x6d,
+ 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x3a, 0x5f, 0x73, 0x70, 0x66, 0x2d, 0x73, 0x73,
+ 0x67, 0x2d, 0x62, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f,
+ 0x6d, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x3a, 0x5f, 0x73, 0x70, 0x66, 0x2d, 0x73,
+ 0x73, 0x67, 0x2d, 0x63, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63,
+ 0x6f, 0x6d, 0x20, 0x7e, 0x61, 0x6c, 0x6c, 0xc0, 0x0c, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x01,
+ 0x2c, 0x00, 0x45, 0x44, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2d, 0x73, 0x69, 0x74, 0x65, 0x2d,
+ 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x30, 0x69, 0x4c,
+ 0x57, 0x68, 0x49, 0x4d, 0x68, 0x58, 0x45, 0x6b, 0x65, 0x57, 0x77, 0x57, 0x66, 0x46, 0x55, 0x34,
+ 0x75, 0x72, 0x73, 0x54, 0x6e, 0x2d, 0x5f, 0x4f, 0x76, 0x6f, 0x4f, 0x6a, 0x61, 0x41, 0x30, 0x4c,
+ 0x72, 0x37, 0x50, 0x67, 0x31, 0x73, 0x45, 0x4d, 0xc0, 0x0c, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02,
+ 0xa3, 0x00, 0x00, 0x0e, 0x03, 0x6e, 0x73, 0x32, 0x04, 0x6d, 0x73, 0x66, 0x74, 0x03, 0x6e, 0x65,
+ 0x74, 0x00, 0xc0, 0x0c, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, 0x00, 0x06, 0x03, 0x6e,
+ 0x73, 0x34, 0xc1, 0xae, 0xc0, 0x0c, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, 0x00, 0x06,
+ 0x03, 0x6e, 0x73, 0x31, 0xc1, 0xae, 0xc0, 0x0c, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00,
+ 0x00, 0x06, 0x03, 0x6e, 0x73, 0x33, 0xc1, 0xae, 0xc0, 0x0c, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02,
+ 0xa3, 0x00, 0x00, 0x15, 0x04, 0x6e, 0x73, 0x31, 0x61, 0x0d,
+}
+
+func TestPacketDNSPanic7(t *testing.T) {
+ p := gopacket.NewPacket(testPacketDNSPanic7, LinkTypeEthernet, testDecodeOptions)
+ if errLayer := p.ErrorLayer(); errLayer == nil {
+ t.Error("No error layer on invalid DNS name")
+ } else if err := errLayer.Error(); !strings.Contains(err.Error(), "resource record length exceeds data") {
+ t.Errorf("unexpected error message: %v", err)
+ }
+}
diff --git a/vendor/github.com/google/gopacket/layers/doc.go b/vendor/github.com/google/gopacket/layers/doc.go
new file mode 100644
index 0000000..3c882c3
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/doc.go
@@ -0,0 +1,61 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+/*
+Package layers provides decoding layers for many common protocols.
+
+The layers package contains decode implementations for a number of different
+types of packet layers. Users of gopacket will almost always want to also use
+layers to actually decode packet data into useful pieces. To see the set of
+protocols that gopacket/layers is currently able to decode,
+look at the set of LayerTypes defined in the Variables sections. The
+layers package also defines endpoints for many of the common packet layers
+that have source/destination addresses associated with them, for example IPv4/6
+(IPs) and TCP/UDP (ports).
+Finally, layers contains a number of useful enumerations (IPProtocol,
+EthernetType, LinkType, PPPType, etc...). Many of these implement the
+gopacket.Decoder interface, so they can be passed into gopacket as decoders.
+
+Most common protocol layers are named using acronyms or other industry-common
+names (IPv4, TCP, PPP). Some of the less common ones have their names expanded
+(CiscoDiscoveryProtocol).
+For certain protocols, sub-parts of the protocol are split out into their own
+layers (SCTP, for example). This is done mostly in cases where portions of the
+protocol may fulfill the capabilities of interesting layers (SCTPData implements
+ApplicationLayer, while base SCTP implements TransportLayer), or possibly
+because splitting a protocol into a few layers makes decoding easier.
+
+This package is meant to be used with its parent,
+http://github.com/google/gopacket.
+
+Port Types
+
+Instead of using raw uint16 or uint8 values for ports, we use a different port
+type for every protocol, for example TCPPort and UDPPort. This allows us to
+override string behavior for each port, which we do by setting up port name
+maps (TCPPortNames, UDPPortNames, etc...). Well-known ports are annotated with
+their protocol names, and their String function displays these names:
+
+ p := TCPPort(80)
+ fmt.Printf("Number: %d String: %v", p, p)
+ // Prints: "Number: 80 String: 80(http)"
+
+Modifying Decode Behavior
+
+layers links together decoding through its enumerations. For example, after
+decoding layer type Ethernet, it uses Ethernet.EthernetType as its next decoder.
+All enumerations that act as decoders, like EthernetType, can be modified by
+users depending on their preferences. For example, if you have a spiffy new
+IPv4 decoder that works way better than the one built into layers, you can do
+this:
+
+ var mySpiffyIPv4Decoder gopacket.Decoder = ...
+ layers.EthernetTypeMetadata[EthernetTypeIPv4].DecodeWith = mySpiffyIPv4Decoder
+
+This will make all future ethernet packets use your new decoder to decode IPv4
+packets, instead of the built-in decoder used by gopacket.
+*/
+package layers
diff --git a/vendor/github.com/google/gopacket/layers/dot11.go b/vendor/github.com/google/gopacket/layers/dot11.go
new file mode 100644
index 0000000..1b53026
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/dot11.go
@@ -0,0 +1,1430 @@
+// Copyright 2014 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// See http://standards.ieee.org/findstds/standard/802.11-2012.html for info on
+// all of the layers in this file.
+
+package layers
+
+import (
+ "bytes"
+ "encoding/binary"
+ "fmt"
+ "hash/crc32"
+ "net"
+
+ "github.com/google/gopacket"
+)
+
+// Dot11Flags contains the set of 8 flags in the IEEE 802.11 frame control
+// header, all in one place.
+type Dot11Flags uint8
+
+const (
+ Dot11FlagsToDS Dot11Flags = 1 << iota
+ Dot11FlagsFromDS
+ Dot11FlagsMF
+ Dot11FlagsRetry
+ Dot11FlagsPowerManagement
+ Dot11FlagsMD
+ Dot11FlagsWEP
+ Dot11FlagsOrder
+)
+
+func (d Dot11Flags) ToDS() bool {
+ return d&Dot11FlagsToDS != 0
+}
+func (d Dot11Flags) FromDS() bool {
+ return d&Dot11FlagsFromDS != 0
+}
+func (d Dot11Flags) MF() bool {
+ return d&Dot11FlagsMF != 0
+}
+func (d Dot11Flags) Retry() bool {
+ return d&Dot11FlagsRetry != 0
+}
+func (d Dot11Flags) PowerManagement() bool {
+ return d&Dot11FlagsPowerManagement != 0
+}
+func (d Dot11Flags) MD() bool {
+ return d&Dot11FlagsMD != 0
+}
+func (d Dot11Flags) WEP() bool {
+ return d&Dot11FlagsWEP != 0
+}
+func (d Dot11Flags) Order() bool {
+ return d&Dot11FlagsOrder != 0
+}
+
+// String provides a human readable string for Dot11Flags.
+// This string is possibly subject to change over time; if you're storing this
+// persistently, you should probably store the Dot11Flags value, not its string.
+func (a Dot11Flags) String() string {
+ var out bytes.Buffer
+ if a.ToDS() {
+ out.WriteString("TO-DS,")
+ }
+ if a.FromDS() {
+ out.WriteString("FROM-DS,")
+ }
+ if a.MF() {
+ out.WriteString("MF,")
+ }
+ if a.Retry() {
+ out.WriteString("Retry,")
+ }
+ if a.PowerManagement() {
+ out.WriteString("PowerManagement,")
+ }
+ if a.MD() {
+ out.WriteString("MD,")
+ }
+ if a.WEP() {
+ out.WriteString("WEP,")
+ }
+ if a.Order() {
+ out.WriteString("Order,")
+ }
+
+ if length := out.Len(); length > 0 {
+ return string(out.Bytes()[:length-1]) // strip final comma
+ }
+ return ""
+}
+
+type Dot11Reason uint16
+
+// TODO: Verify these reasons, and append more reasons if necessary.
+
+const (
+ Dot11ReasonReserved Dot11Reason = 1
+ Dot11ReasonUnspecified Dot11Reason = 2
+ Dot11ReasonAuthExpired Dot11Reason = 3
+ Dot11ReasonDeauthStLeaving Dot11Reason = 4
+ Dot11ReasonInactivity Dot11Reason = 5
+ Dot11ReasonApFull Dot11Reason = 6
+ Dot11ReasonClass2FromNonAuth Dot11Reason = 7
+ Dot11ReasonClass3FromNonAss Dot11Reason = 8
+ Dot11ReasonDisasStLeaving Dot11Reason = 9
+ Dot11ReasonStNotAuth Dot11Reason = 10
+)
+
+// String provides a human readable string for Dot11Reason.
+// This string is possibly subject to change over time; if you're storing this
+// persistently, you should probably store the Dot11Reason value, not its string.
+func (a Dot11Reason) String() string {
+ switch a {
+ case Dot11ReasonReserved:
+ return "Reserved"
+ case Dot11ReasonUnspecified:
+ return "Unspecified"
+ case Dot11ReasonAuthExpired:
+ return "Auth. expired"
+ case Dot11ReasonDeauthStLeaving:
+ return "Deauth. st. leaving"
+ case Dot11ReasonInactivity:
+ return "Inactivity"
+ case Dot11ReasonApFull:
+ return "Ap. full"
+ case Dot11ReasonClass2FromNonAuth:
+ return "Class2 from non auth."
+ case Dot11ReasonClass3FromNonAss:
+ return "Class3 from non ass."
+ case Dot11ReasonDisasStLeaving:
+ return "Disass st. leaving"
+ case Dot11ReasonStNotAuth:
+ return "St. not auth."
+ default:
+ return "Unknown reason"
+ }
+}
+
+type Dot11Status uint16
+
+const (
+ Dot11StatusSuccess Dot11Status = 0
+ Dot11StatusFailure Dot11Status = 1 // Unspecified failure
+ Dot11StatusCannotSupportAllCapabilities Dot11Status = 10 // Cannot support all requested capabilities in the Capability Information field
+ Dot11StatusInabilityExistsAssociation Dot11Status = 11 // Reassociation denied due to inability to confirm that association exists
+ Dot11StatusAssociationDenied Dot11Status = 12 // Association denied due to reason outside the scope of this standard
+ Dot11StatusAlgorithmUnsupported Dot11Status = 13 // Responding station does not support the specified authentication algorithm
+ Dot11StatusOufOfExpectedSequence Dot11Status = 14 // Received an Authentication frame with authentication transaction sequence number out of expected sequence
+ Dot11StatusChallengeFailure Dot11Status = 15 // Authentication rejected because of challenge failure
+ Dot11StatusTimeout Dot11Status = 16 // Authentication rejected due to timeout waiting for next frame in sequence
+ Dot11StatusAPUnableToHandle Dot11Status = 17 // Association denied because AP is unable to handle additional associated stations
+ Dot11StatusRateUnsupported Dot11Status = 18 // Association denied due to requesting station not supporting all of the data rates in the BSSBasicRateSet parameter
+)
+
+// String provides a human readable string for Dot11Status.
+// This string is possibly subject to change over time; if you're storing this
+// persistently, you should probably store the Dot11Status value, not its string.
+func (a Dot11Status) String() string {
+ switch a {
+ case Dot11StatusSuccess:
+ return "success"
+ case Dot11StatusFailure:
+ return "failure"
+ case Dot11StatusCannotSupportAllCapabilities:
+ return "cannot-support-all-capabilities"
+ case Dot11StatusInabilityExistsAssociation:
+ return "inability-exists-association"
+ case Dot11StatusAssociationDenied:
+ return "association-denied"
+ case Dot11StatusAlgorithmUnsupported:
+ return "algorithm-unsupported"
+ case Dot11StatusOufOfExpectedSequence:
+ return "out-of-expected-sequence"
+ case Dot11StatusChallengeFailure:
+ return "challenge-failure"
+ case Dot11StatusTimeout:
+ return "timeout"
+ case Dot11StatusAPUnableToHandle:
+ return "ap-unable-to-handle"
+ case Dot11StatusRateUnsupported:
+ return "rate-unsupported"
+ default:
+ return "unknown status"
+ }
+}
+
+type Dot11AckPolicy uint8
+
+const (
+ Dot11AckPolicyNormal Dot11AckPolicy = 0
+ Dot11AckPolicyNone Dot11AckPolicy = 1
+ Dot11AckPolicyNoExplicit Dot11AckPolicy = 2
+ Dot11AckPolicyBlock Dot11AckPolicy = 3
+)
+
+// String provides a human readable string for Dot11AckPolicy.
+// This string is possibly subject to change over time; if you're storing this
+// persistently, you should probably store the Dot11AckPolicy value, not its string.
+func (a Dot11AckPolicy) String() string {
+ switch a {
+ case Dot11AckPolicyNormal:
+ return "normal-ack"
+ case Dot11AckPolicyNone:
+ return "no-ack"
+ case Dot11AckPolicyNoExplicit:
+ return "no-explicit-ack"
+ case Dot11AckPolicyBlock:
+ return "block-ack"
+ default:
+ return "unknown-ack-policy"
+ }
+}
+
+type Dot11Algorithm uint16
+
+const (
+ Dot11AlgorithmOpen Dot11Algorithm = 0
+ Dot11AlgorithmSharedKey Dot11Algorithm = 1
+)
+
+// String provides a human readable string for Dot11Algorithm.
+// This string is possibly subject to change over time; if you're storing this
+// persistently, you should probably store the Dot11Algorithm value, not its string.
+func (a Dot11Algorithm) String() string {
+ switch a {
+ case Dot11AlgorithmOpen:
+ return "open"
+ case Dot11AlgorithmSharedKey:
+ return "shared-key"
+ default:
+ return "unknown-algorithm"
+ }
+}
+
+type Dot11InformationElementID uint8
+
+// TODO: Verify these element ids, and append more ids if more.
+
+const (
+ Dot11InformationElementIDSSID Dot11InformationElementID = 0
+ Dot11InformationElementIDRates Dot11InformationElementID = 1
+ Dot11InformationElementIDFHSet Dot11InformationElementID = 2
+ Dot11InformationElementIDDSSet Dot11InformationElementID = 3
+ Dot11InformationElementIDCFSet Dot11InformationElementID = 4
+ Dot11InformationElementIDTIM Dot11InformationElementID = 5
+ Dot11InformationElementIDIBSSSet Dot11InformationElementID = 6
+ Dot11InformationElementIDChallenge Dot11InformationElementID = 16
+ Dot11InformationElementIDERPInfo Dot11InformationElementID = 42
+ Dot11InformationElementIDQOSCapability Dot11InformationElementID = 46
+ Dot11InformationElementIDERPInfo2 Dot11InformationElementID = 47
+ Dot11InformationElementIDRSNInfo Dot11InformationElementID = 48
+ Dot11InformationElementIDESRates Dot11InformationElementID = 50
+ Dot11InformationElementIDVendor Dot11InformationElementID = 221
+ Dot11InformationElementIDReserved Dot11InformationElementID = 68
+)
+
+// String provides a human readable string for Dot11InformationElementID.
+// This string is possibly subject to change over time; if you're storing this
+// persistently, you should probably store the Dot11InformationElementID value,
+// not its string.
+func (a Dot11InformationElementID) String() string {
+ switch a {
+ case Dot11InformationElementIDSSID:
+ return "SSID"
+ case Dot11InformationElementIDRates:
+ return "Rates"
+ case Dot11InformationElementIDFHSet:
+ return "FHset"
+ case Dot11InformationElementIDDSSet:
+ return "DSset"
+ case Dot11InformationElementIDCFSet:
+ return "CFset"
+ case Dot11InformationElementIDTIM:
+ return "TIM"
+ case Dot11InformationElementIDIBSSSet:
+ return "IBSSset"
+ case Dot11InformationElementIDChallenge:
+ return "Challenge"
+ case Dot11InformationElementIDERPInfo:
+ return "ERPinfo"
+ case Dot11InformationElementIDQOSCapability:
+ return "QOS capability"
+ case Dot11InformationElementIDERPInfo2:
+ return "ERPinfo2"
+ case Dot11InformationElementIDRSNInfo:
+ return "RSNinfo"
+ case Dot11InformationElementIDESRates:
+ return "ESrates"
+ case Dot11InformationElementIDVendor:
+ return "Vendor"
+ case Dot11InformationElementIDReserved:
+ return "Reserved"
+ default:
+ return "Unknown information element id"
+ }
+}
+
+// Dot11 provides an IEEE 802.11 base packet header.
+// See http://standards.ieee.org/findstds/standard/802.11-2012.html
+// for excrutiating detail.
+type Dot11 struct {
+ BaseLayer
+ Type Dot11Type
+ Proto uint8
+ Flags Dot11Flags
+ DurationID uint16
+ Address1 net.HardwareAddr
+ Address2 net.HardwareAddr
+ Address3 net.HardwareAddr
+ Address4 net.HardwareAddr
+ SequenceNumber uint16
+ FragmentNumber uint16
+ Checksum uint32
+}
+
+func decodeDot11(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11) LayerType() gopacket.LayerType { return LayerTypeDot11 }
+func (m *Dot11) CanDecode() gopacket.LayerClass { return LayerTypeDot11 }
+func (m *Dot11) NextLayerType() gopacket.LayerType {
+ if m.Flags.WEP() {
+ return (LayerTypeDot11WEP)
+ }
+
+ return m.Type.LayerType()
+}
+
+func (m *Dot11) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 10 {
+ df.SetTruncated()
+ return fmt.Errorf("Dot11 length %v too short, %v required", len(data), 10)
+ }
+ m.Type = Dot11Type((data[0])&0xFC) >> 2
+
+ m.Proto = uint8(data[0]) & 0x0003
+ m.Flags = Dot11Flags(data[1])
+ m.DurationID = binary.LittleEndian.Uint16(data[2:4])
+ m.Address1 = net.HardwareAddr(data[4:10])
+
+ offset := 10
+
+ mainType := m.Type.MainType()
+
+ switch mainType {
+ case Dot11TypeCtrl:
+ switch m.Type {
+ case Dot11TypeCtrlRTS, Dot11TypeCtrlPowersavePoll, Dot11TypeCtrlCFEnd, Dot11TypeCtrlCFEndAck:
+ if len(data) < offset+6 {
+ df.SetTruncated()
+ return fmt.Errorf("Dot11 length %v too short, %v required", len(data), offset+6)
+ }
+ m.Address2 = net.HardwareAddr(data[offset : offset+6])
+ offset += 6
+ }
+ case Dot11TypeMgmt, Dot11TypeData:
+ if len(data) < offset+14 {
+ df.SetTruncated()
+ return fmt.Errorf("Dot11 length %v too short, %v required", len(data), offset+14)
+ }
+ m.Address2 = net.HardwareAddr(data[offset : offset+6])
+ offset += 6
+ m.Address3 = net.HardwareAddr(data[offset : offset+6])
+ offset += 6
+
+ m.SequenceNumber = (binary.LittleEndian.Uint16(data[offset:offset+2]) & 0xFFF0) >> 4
+ m.FragmentNumber = (binary.LittleEndian.Uint16(data[offset:offset+2]) & 0x000F)
+ offset += 2
+ }
+
+ if mainType == Dot11TypeData && m.Flags.FromDS() && m.Flags.ToDS() {
+ if len(data) < offset+6 {
+ df.SetTruncated()
+ return fmt.Errorf("Dot11 length %v too short, %v required", len(data), offset+6)
+ }
+ m.Address4 = net.HardwareAddr(data[offset : offset+6])
+ offset += 6
+ }
+
+ m.BaseLayer = BaseLayer{Contents: data[0:offset], Payload: data[offset : len(data)-4]}
+ m.Checksum = binary.LittleEndian.Uint32(data[len(data)-4 : len(data)])
+ return nil
+}
+
+func (m *Dot11) ChecksumValid() bool {
+ // only for CTRL and MGMT frames
+ h := crc32.NewIEEE()
+ h.Write(m.Contents)
+ h.Write(m.Payload)
+ return m.Checksum == h.Sum32()
+}
+
+func (m Dot11) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ buf, err := b.PrependBytes(24)
+
+ if err != nil {
+ return err
+ }
+
+ buf[0] = (uint8(m.Type) << 2) | m.Proto
+ buf[1] = uint8(m.Flags)
+
+ binary.LittleEndian.PutUint16(buf[2:4], m.DurationID)
+
+ copy(buf[4:10], m.Address1)
+
+ offset := 10
+
+ switch m.Type.MainType() {
+ case Dot11TypeCtrl:
+ switch m.Type {
+ case Dot11TypeCtrlRTS, Dot11TypeCtrlPowersavePoll, Dot11TypeCtrlCFEnd, Dot11TypeCtrlCFEndAck:
+ copy(buf[offset:offset+6], m.Address2)
+ offset += 6
+ }
+ case Dot11TypeMgmt, Dot11TypeData:
+ copy(buf[offset:offset+6], m.Address2)
+ offset += 6
+ copy(buf[offset:offset+6], m.Address3)
+ offset += 6
+
+ binary.LittleEndian.PutUint16(buf[offset:offset+2], (m.SequenceNumber<<4)|m.FragmentNumber)
+ offset += 2
+ }
+
+ if m.Type.MainType() == Dot11TypeData && m.Flags.FromDS() && m.Flags.ToDS() {
+ copy(buf[offset:offset+6], m.Address4)
+ offset += 6
+ }
+
+ return nil
+}
+
+// Dot11Mgmt is a base for all IEEE 802.11 management layers.
+type Dot11Mgmt struct {
+ BaseLayer
+}
+
+func (m *Dot11Mgmt) NextLayerType() gopacket.LayerType { return gopacket.LayerTypePayload }
+func (m *Dot11Mgmt) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ m.Contents = data
+ return nil
+}
+
+// Dot11Ctrl is a base for all IEEE 802.11 control layers.
+type Dot11Ctrl struct {
+ BaseLayer
+}
+
+func (m *Dot11Ctrl) NextLayerType() gopacket.LayerType { return gopacket.LayerTypePayload }
+
+func (m *Dot11Ctrl) LayerType() gopacket.LayerType { return LayerTypeDot11Ctrl }
+func (m *Dot11Ctrl) CanDecode() gopacket.LayerClass { return LayerTypeDot11Ctrl }
+func (m *Dot11Ctrl) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ m.Contents = data
+ return nil
+}
+
+func decodeDot11Ctrl(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11Ctrl{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+// Dot11WEP contains WEP encrpted IEEE 802.11 data.
+type Dot11WEP struct {
+ BaseLayer
+}
+
+func (m *Dot11WEP) NextLayerType() gopacket.LayerType { return LayerTypeLLC }
+
+func (m *Dot11WEP) LayerType() gopacket.LayerType { return LayerTypeDot11WEP }
+func (m *Dot11WEP) CanDecode() gopacket.LayerClass { return LayerTypeDot11WEP }
+func (m *Dot11WEP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ m.Contents = data
+ return nil
+}
+
+func decodeDot11WEP(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11WEP{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+// Dot11Data is a base for all IEEE 802.11 data layers.
+type Dot11Data struct {
+ BaseLayer
+}
+
+func (m *Dot11Data) NextLayerType() gopacket.LayerType { return LayerTypeLLC }
+
+func (m *Dot11Data) LayerType() gopacket.LayerType { return LayerTypeDot11Data }
+func (m *Dot11Data) CanDecode() gopacket.LayerClass { return LayerTypeDot11Data }
+func (m *Dot11Data) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ m.Payload = data
+ return nil
+}
+
+func decodeDot11Data(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11Data{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+type Dot11DataCFAck struct {
+ Dot11Data
+}
+
+func decodeDot11DataCFAck(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11DataCFAck{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataCFAck) LayerType() gopacket.LayerType { return LayerTypeDot11DataCFAck }
+func (m *Dot11DataCFAck) CanDecode() gopacket.LayerClass { return LayerTypeDot11DataCFAck }
+func (m *Dot11DataCFAck) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ return m.Dot11Data.DecodeFromBytes(data, df)
+}
+
+type Dot11DataCFPoll struct {
+ Dot11Data
+}
+
+func decodeDot11DataCFPoll(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11DataCFPoll{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataCFPoll) LayerType() gopacket.LayerType { return LayerTypeDot11DataCFPoll }
+func (m *Dot11DataCFPoll) CanDecode() gopacket.LayerClass { return LayerTypeDot11DataCFPoll }
+func (m *Dot11DataCFPoll) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ return m.Dot11Data.DecodeFromBytes(data, df)
+}
+
+type Dot11DataCFAckPoll struct {
+ Dot11Data
+}
+
+func decodeDot11DataCFAckPoll(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11DataCFAckPoll{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataCFAckPoll) LayerType() gopacket.LayerType { return LayerTypeDot11DataCFAckPoll }
+func (m *Dot11DataCFAckPoll) CanDecode() gopacket.LayerClass { return LayerTypeDot11DataCFAckPoll }
+func (m *Dot11DataCFAckPoll) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ return m.Dot11Data.DecodeFromBytes(data, df)
+}
+
+type Dot11DataNull struct {
+ Dot11Data
+}
+
+func decodeDot11DataNull(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11DataNull{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataNull) LayerType() gopacket.LayerType { return LayerTypeDot11DataNull }
+func (m *Dot11DataNull) CanDecode() gopacket.LayerClass { return LayerTypeDot11DataNull }
+func (m *Dot11DataNull) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ return m.Dot11Data.DecodeFromBytes(data, df)
+}
+
+type Dot11DataCFAckNoData struct {
+ Dot11Data
+}
+
+func decodeDot11DataCFAckNoData(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11DataCFAckNoData{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataCFAckNoData) LayerType() gopacket.LayerType { return LayerTypeDot11DataCFAckNoData }
+func (m *Dot11DataCFAckNoData) CanDecode() gopacket.LayerClass { return LayerTypeDot11DataCFAckNoData }
+func (m *Dot11DataCFAckNoData) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ return m.Dot11Data.DecodeFromBytes(data, df)
+}
+
+type Dot11DataCFPollNoData struct {
+ Dot11Data
+}
+
+func decodeDot11DataCFPollNoData(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11DataCFPollNoData{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataCFPollNoData) LayerType() gopacket.LayerType { return LayerTypeDot11DataCFPollNoData }
+func (m *Dot11DataCFPollNoData) CanDecode() gopacket.LayerClass { return LayerTypeDot11DataCFPollNoData }
+func (m *Dot11DataCFPollNoData) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ return m.Dot11Data.DecodeFromBytes(data, df)
+}
+
+type Dot11DataCFAckPollNoData struct {
+ Dot11Data
+}
+
+func decodeDot11DataCFAckPollNoData(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11DataCFAckPollNoData{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataCFAckPollNoData) LayerType() gopacket.LayerType {
+ return LayerTypeDot11DataCFAckPollNoData
+}
+func (m *Dot11DataCFAckPollNoData) CanDecode() gopacket.LayerClass {
+ return LayerTypeDot11DataCFAckPollNoData
+}
+func (m *Dot11DataCFAckPollNoData) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ return m.Dot11Data.DecodeFromBytes(data, df)
+}
+
+type Dot11DataQOS struct {
+ Dot11Ctrl
+ TID uint8 /* Traffic IDentifier */
+ EOSP bool /* End of service period */
+ AckPolicy Dot11AckPolicy
+ TXOP uint8
+}
+
+func (m *Dot11DataQOS) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 4 {
+ df.SetTruncated()
+ return fmt.Errorf("Dot11DataQOS length %v too short, %v required", len(data), 4)
+ }
+ m.TID = (uint8(data[0]) & 0x0F)
+ m.EOSP = (uint8(data[0]) & 0x10) == 0x10
+ m.AckPolicy = Dot11AckPolicy((uint8(data[0]) & 0x60) >> 5)
+ m.TXOP = uint8(data[1])
+ // TODO: Mesh Control bytes 2:4
+ m.BaseLayer = BaseLayer{Contents: data[0:4], Payload: data[4:]}
+ return nil
+}
+
+type Dot11DataQOSData struct {
+ Dot11DataQOS
+}
+
+func decodeDot11DataQOSData(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11DataQOSData{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataQOSData) LayerType() gopacket.LayerType { return LayerTypeDot11DataQOSData }
+func (m *Dot11DataQOSData) CanDecode() gopacket.LayerClass { return LayerTypeDot11DataQOSData }
+
+func (m *Dot11DataQOSData) NextLayerType() gopacket.LayerType {
+ return LayerTypeDot11Data
+}
+
+type Dot11DataQOSDataCFAck struct {
+ Dot11DataQOS
+}
+
+func decodeDot11DataQOSDataCFAck(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11DataQOSDataCFAck{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataQOSDataCFAck) LayerType() gopacket.LayerType { return LayerTypeDot11DataQOSDataCFAck }
+func (m *Dot11DataQOSDataCFAck) CanDecode() gopacket.LayerClass { return LayerTypeDot11DataQOSDataCFAck }
+func (m *Dot11DataQOSDataCFAck) NextLayerType() gopacket.LayerType { return LayerTypeDot11DataCFAck }
+
+type Dot11DataQOSDataCFPoll struct {
+ Dot11DataQOS
+}
+
+func decodeDot11DataQOSDataCFPoll(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11DataQOSDataCFPoll{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataQOSDataCFPoll) LayerType() gopacket.LayerType {
+ return LayerTypeDot11DataQOSDataCFPoll
+}
+func (m *Dot11DataQOSDataCFPoll) CanDecode() gopacket.LayerClass {
+ return LayerTypeDot11DataQOSDataCFPoll
+}
+func (m *Dot11DataQOSDataCFPoll) NextLayerType() gopacket.LayerType { return LayerTypeDot11DataCFPoll }
+
+type Dot11DataQOSDataCFAckPoll struct {
+ Dot11DataQOS
+}
+
+func decodeDot11DataQOSDataCFAckPoll(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11DataQOSDataCFAckPoll{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataQOSDataCFAckPoll) LayerType() gopacket.LayerType {
+ return LayerTypeDot11DataQOSDataCFAckPoll
+}
+func (m *Dot11DataQOSDataCFAckPoll) CanDecode() gopacket.LayerClass {
+ return LayerTypeDot11DataQOSDataCFAckPoll
+}
+func (m *Dot11DataQOSDataCFAckPoll) NextLayerType() gopacket.LayerType {
+ return LayerTypeDot11DataCFAckPoll
+}
+
+type Dot11DataQOSNull struct {
+ Dot11DataQOS
+}
+
+func decodeDot11DataQOSNull(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11DataQOSNull{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataQOSNull) LayerType() gopacket.LayerType { return LayerTypeDot11DataQOSNull }
+func (m *Dot11DataQOSNull) CanDecode() gopacket.LayerClass { return LayerTypeDot11DataQOSNull }
+func (m *Dot11DataQOSNull) NextLayerType() gopacket.LayerType { return LayerTypeDot11DataNull }
+
+type Dot11DataQOSCFPollNoData struct {
+ Dot11DataQOS
+}
+
+func decodeDot11DataQOSCFPollNoData(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11DataQOSCFPollNoData{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataQOSCFPollNoData) LayerType() gopacket.LayerType {
+ return LayerTypeDot11DataQOSCFPollNoData
+}
+func (m *Dot11DataQOSCFPollNoData) CanDecode() gopacket.LayerClass {
+ return LayerTypeDot11DataQOSCFPollNoData
+}
+func (m *Dot11DataQOSCFPollNoData) NextLayerType() gopacket.LayerType {
+ return LayerTypeDot11DataCFPollNoData
+}
+
+type Dot11DataQOSCFAckPollNoData struct {
+ Dot11DataQOS
+}
+
+func decodeDot11DataQOSCFAckPollNoData(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11DataQOSCFAckPollNoData{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataQOSCFAckPollNoData) LayerType() gopacket.LayerType {
+ return LayerTypeDot11DataQOSCFAckPollNoData
+}
+func (m *Dot11DataQOSCFAckPollNoData) CanDecode() gopacket.LayerClass {
+ return LayerTypeDot11DataQOSCFAckPollNoData
+}
+func (m *Dot11DataQOSCFAckPollNoData) NextLayerType() gopacket.LayerType {
+ return LayerTypeDot11DataCFAckPollNoData
+}
+
+type Dot11InformationElement struct {
+ BaseLayer
+ ID Dot11InformationElementID
+ Length uint8
+ OUI []byte
+ Info []byte
+}
+
+func (m *Dot11InformationElement) LayerType() gopacket.LayerType {
+ return LayerTypeDot11InformationElement
+}
+func (m *Dot11InformationElement) CanDecode() gopacket.LayerClass {
+ return LayerTypeDot11InformationElement
+}
+
+func (m *Dot11InformationElement) NextLayerType() gopacket.LayerType {
+ return LayerTypeDot11InformationElement
+}
+
+func (m *Dot11InformationElement) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 2 {
+ df.SetTruncated()
+ return fmt.Errorf("Dot11InformationElement length %v too short, %v required", len(data), 2)
+ }
+ m.ID = Dot11InformationElementID(data[0])
+ m.Length = data[1]
+ offset := int(2)
+
+ if len(data) < offset+int(m.Length) {
+ df.SetTruncated()
+ return fmt.Errorf("Dot11InformationElement length %v too short, %v required", len(data), offset+int(m.Length))
+ }
+ if m.ID == 221 {
+ // Vendor extension
+ m.OUI = data[offset : offset+4]
+ m.Info = data[offset+4 : offset+int(m.Length)]
+ } else {
+ m.Info = data[offset : offset+int(m.Length)]
+ }
+
+ offset += int(m.Length)
+
+ m.BaseLayer = BaseLayer{Contents: data[:offset], Payload: data[offset:]}
+ return nil
+}
+
+func (d *Dot11InformationElement) String() string {
+ if d.ID == 0 {
+ return fmt.Sprintf("802.11 Information Element (SSID: %v)", string(d.Info))
+ } else if d.ID == 1 {
+ rates := ""
+ for i := 0; i < len(d.Info); i++ {
+ if d.Info[i]&0x80 == 0 {
+ rates += fmt.Sprintf("%.1f ", float32(d.Info[i])*0.5)
+ } else {
+ rates += fmt.Sprintf("%.1f* ", float32(d.Info[i]&0x7F)*0.5)
+ }
+ }
+ return fmt.Sprintf("802.11 Information Element (Rates: %s Mbit)", rates)
+ } else if d.ID == 221 {
+ return fmt.Sprintf("802.11 Information Element (Vendor: ID: %v, Length: %v, OUI: %X, Info: %X)", d.ID, d.Length, d.OUI, d.Info)
+ } else {
+ return fmt.Sprintf("802.11 Information Element (ID: %v, Length: %v, Info: %X)", d.ID, d.Length, d.Info)
+ }
+}
+
+func (m Dot11InformationElement) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ length := len(m.Info) + len(m.OUI)
+ if buf, err := b.PrependBytes(2 + length); err != nil {
+ return err
+ } else {
+ buf[0] = uint8(m.ID)
+ buf[1] = uint8(length)
+ copy(buf[2:], m.OUI)
+ copy(buf[2+len(m.OUI):], m.Info)
+ }
+ return nil
+}
+
+func decodeDot11InformationElement(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11InformationElement{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+type Dot11CtrlCTS struct {
+ Dot11Ctrl
+}
+
+func decodeDot11CtrlCTS(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11CtrlCTS{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11CtrlCTS) LayerType() gopacket.LayerType {
+ return LayerTypeDot11CtrlCTS
+}
+func (m *Dot11CtrlCTS) CanDecode() gopacket.LayerClass {
+ return LayerTypeDot11CtrlCTS
+}
+func (m *Dot11CtrlCTS) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ return m.Dot11Ctrl.DecodeFromBytes(data, df)
+}
+
+type Dot11CtrlRTS struct {
+ Dot11Ctrl
+}
+
+func decodeDot11CtrlRTS(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11CtrlRTS{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11CtrlRTS) LayerType() gopacket.LayerType {
+ return LayerTypeDot11CtrlRTS
+}
+func (m *Dot11CtrlRTS) CanDecode() gopacket.LayerClass {
+ return LayerTypeDot11CtrlRTS
+}
+func (m *Dot11CtrlRTS) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ return m.Dot11Ctrl.DecodeFromBytes(data, df)
+}
+
+type Dot11CtrlBlockAckReq struct {
+ Dot11Ctrl
+}
+
+func decodeDot11CtrlBlockAckReq(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11CtrlBlockAckReq{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11CtrlBlockAckReq) LayerType() gopacket.LayerType {
+ return LayerTypeDot11CtrlBlockAckReq
+}
+func (m *Dot11CtrlBlockAckReq) CanDecode() gopacket.LayerClass {
+ return LayerTypeDot11CtrlBlockAckReq
+}
+func (m *Dot11CtrlBlockAckReq) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ return m.Dot11Ctrl.DecodeFromBytes(data, df)
+}
+
+type Dot11CtrlBlockAck struct {
+ Dot11Ctrl
+}
+
+func decodeDot11CtrlBlockAck(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11CtrlBlockAck{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11CtrlBlockAck) LayerType() gopacket.LayerType { return LayerTypeDot11CtrlBlockAck }
+func (m *Dot11CtrlBlockAck) CanDecode() gopacket.LayerClass { return LayerTypeDot11CtrlBlockAck }
+func (m *Dot11CtrlBlockAck) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ return m.Dot11Ctrl.DecodeFromBytes(data, df)
+}
+
+type Dot11CtrlPowersavePoll struct {
+ Dot11Ctrl
+}
+
+func decodeDot11CtrlPowersavePoll(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11CtrlPowersavePoll{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11CtrlPowersavePoll) LayerType() gopacket.LayerType {
+ return LayerTypeDot11CtrlPowersavePoll
+}
+func (m *Dot11CtrlPowersavePoll) CanDecode() gopacket.LayerClass {
+ return LayerTypeDot11CtrlPowersavePoll
+}
+func (m *Dot11CtrlPowersavePoll) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ return m.Dot11Ctrl.DecodeFromBytes(data, df)
+}
+
+type Dot11CtrlAck struct {
+ Dot11Ctrl
+}
+
+func decodeDot11CtrlAck(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11CtrlAck{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11CtrlAck) LayerType() gopacket.LayerType { return LayerTypeDot11CtrlAck }
+func (m *Dot11CtrlAck) CanDecode() gopacket.LayerClass { return LayerTypeDot11CtrlAck }
+func (m *Dot11CtrlAck) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ return m.Dot11Ctrl.DecodeFromBytes(data, df)
+}
+
+type Dot11CtrlCFEnd struct {
+ Dot11Ctrl
+}
+
+func decodeDot11CtrlCFEnd(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11CtrlCFEnd{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11CtrlCFEnd) LayerType() gopacket.LayerType {
+ return LayerTypeDot11CtrlCFEnd
+}
+func (m *Dot11CtrlCFEnd) CanDecode() gopacket.LayerClass {
+ return LayerTypeDot11CtrlCFEnd
+}
+func (m *Dot11CtrlCFEnd) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ return m.Dot11Ctrl.DecodeFromBytes(data, df)
+}
+
+type Dot11CtrlCFEndAck struct {
+ Dot11Ctrl
+}
+
+func decodeDot11CtrlCFEndAck(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11CtrlCFEndAck{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11CtrlCFEndAck) LayerType() gopacket.LayerType {
+ return LayerTypeDot11CtrlCFEndAck
+}
+func (m *Dot11CtrlCFEndAck) CanDecode() gopacket.LayerClass {
+ return LayerTypeDot11CtrlCFEndAck
+}
+func (m *Dot11CtrlCFEndAck) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ return m.Dot11Ctrl.DecodeFromBytes(data, df)
+}
+
+type Dot11MgmtAssociationReq struct {
+ Dot11Mgmt
+ CapabilityInfo uint16
+ ListenInterval uint16
+}
+
+func decodeDot11MgmtAssociationReq(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11MgmtAssociationReq{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtAssociationReq) LayerType() gopacket.LayerType {
+ return LayerTypeDot11MgmtAssociationReq
+}
+func (m *Dot11MgmtAssociationReq) CanDecode() gopacket.LayerClass {
+ return LayerTypeDot11MgmtAssociationReq
+}
+func (m *Dot11MgmtAssociationReq) NextLayerType() gopacket.LayerType {
+ return LayerTypeDot11InformationElement
+}
+func (m *Dot11MgmtAssociationReq) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 4 {
+ df.SetTruncated()
+ return fmt.Errorf("Dot11MgmtAssociationReq length %v too short, %v required", len(data), 4)
+ }
+ m.CapabilityInfo = binary.LittleEndian.Uint16(data[0:2])
+ m.ListenInterval = binary.LittleEndian.Uint16(data[2:4])
+ m.Payload = data[4:]
+ return m.Dot11Mgmt.DecodeFromBytes(data, df)
+}
+
+func (m Dot11MgmtAssociationReq) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ buf, err := b.PrependBytes(4)
+
+ if err != nil {
+ return err
+ }
+
+ binary.LittleEndian.PutUint16(buf[0:2], m.CapabilityInfo)
+ binary.LittleEndian.PutUint16(buf[2:4], m.ListenInterval)
+
+ return nil
+}
+
+type Dot11MgmtAssociationResp struct {
+ Dot11Mgmt
+ CapabilityInfo uint16
+ Status Dot11Status
+ AID uint16
+}
+
+func decodeDot11MgmtAssociationResp(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11MgmtAssociationResp{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtAssociationResp) CanDecode() gopacket.LayerClass {
+ return LayerTypeDot11MgmtAssociationResp
+}
+func (m *Dot11MgmtAssociationResp) LayerType() gopacket.LayerType {
+ return LayerTypeDot11MgmtAssociationResp
+}
+func (m *Dot11MgmtAssociationResp) NextLayerType() gopacket.LayerType {
+ return LayerTypeDot11InformationElement
+}
+func (m *Dot11MgmtAssociationResp) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 6 {
+ df.SetTruncated()
+ return fmt.Errorf("Dot11MgmtAssociationResp length %v too short, %v required", len(data), 6)
+ }
+ m.CapabilityInfo = binary.LittleEndian.Uint16(data[0:2])
+ m.Status = Dot11Status(binary.LittleEndian.Uint16(data[2:4]))
+ m.AID = binary.LittleEndian.Uint16(data[4:6])
+ m.Payload = data[6:]
+ return m.Dot11Mgmt.DecodeFromBytes(data, df)
+}
+
+func (m Dot11MgmtAssociationResp) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ buf, err := b.PrependBytes(6)
+
+ if err != nil {
+ return err
+ }
+
+ binary.LittleEndian.PutUint16(buf[0:2], m.CapabilityInfo)
+ binary.LittleEndian.PutUint16(buf[2:4], uint16(m.Status))
+ binary.LittleEndian.PutUint16(buf[4:6], m.AID)
+
+ return nil
+}
+
+type Dot11MgmtReassociationReq struct {
+ Dot11Mgmt
+ CapabilityInfo uint16
+ ListenInterval uint16
+ CurrentApAddress net.HardwareAddr
+}
+
+func decodeDot11MgmtReassociationReq(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11MgmtReassociationReq{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtReassociationReq) LayerType() gopacket.LayerType {
+ return LayerTypeDot11MgmtReassociationReq
+}
+func (m *Dot11MgmtReassociationReq) CanDecode() gopacket.LayerClass {
+ return LayerTypeDot11MgmtReassociationReq
+}
+func (m *Dot11MgmtReassociationReq) NextLayerType() gopacket.LayerType {
+ return LayerTypeDot11InformationElement
+}
+func (m *Dot11MgmtReassociationReq) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 10 {
+ df.SetTruncated()
+ return fmt.Errorf("Dot11MgmtReassociationReq length %v too short, %v required", len(data), 10)
+ }
+ m.CapabilityInfo = binary.LittleEndian.Uint16(data[0:2])
+ m.ListenInterval = binary.LittleEndian.Uint16(data[2:4])
+ m.CurrentApAddress = net.HardwareAddr(data[4:10])
+ m.Payload = data[10:]
+ return m.Dot11Mgmt.DecodeFromBytes(data, df)
+}
+
+func (m Dot11MgmtReassociationReq) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ buf, err := b.PrependBytes(10)
+
+ if err != nil {
+ return err
+ }
+
+ binary.LittleEndian.PutUint16(buf[0:2], m.CapabilityInfo)
+ binary.LittleEndian.PutUint16(buf[2:4], m.ListenInterval)
+
+ copy(buf[4:10], m.CurrentApAddress)
+
+ return nil
+}
+
+type Dot11MgmtReassociationResp struct {
+ Dot11Mgmt
+}
+
+func decodeDot11MgmtReassociationResp(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11MgmtReassociationResp{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtReassociationResp) LayerType() gopacket.LayerType {
+ return LayerTypeDot11MgmtReassociationResp
+}
+func (m *Dot11MgmtReassociationResp) CanDecode() gopacket.LayerClass {
+ return LayerTypeDot11MgmtReassociationResp
+}
+func (m *Dot11MgmtReassociationResp) NextLayerType() gopacket.LayerType {
+ return LayerTypeDot11InformationElement
+}
+
+type Dot11MgmtProbeReq struct {
+ Dot11Mgmt
+}
+
+func decodeDot11MgmtProbeReq(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11MgmtProbeReq{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtProbeReq) LayerType() gopacket.LayerType { return LayerTypeDot11MgmtProbeReq }
+func (m *Dot11MgmtProbeReq) CanDecode() gopacket.LayerClass { return LayerTypeDot11MgmtProbeReq }
+func (m *Dot11MgmtProbeReq) NextLayerType() gopacket.LayerType {
+ return LayerTypeDot11InformationElement
+}
+
+type Dot11MgmtProbeResp struct {
+ Dot11Mgmt
+ Timestamp uint64
+ Interval uint16
+ Flags uint16
+}
+
+func decodeDot11MgmtProbeResp(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11MgmtProbeResp{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtProbeResp) LayerType() gopacket.LayerType { return LayerTypeDot11MgmtProbeResp }
+func (m *Dot11MgmtProbeResp) CanDecode() gopacket.LayerClass { return LayerTypeDot11MgmtProbeResp }
+func (m *Dot11MgmtProbeResp) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 12 {
+ df.SetTruncated()
+
+ return fmt.Errorf("Dot11MgmtProbeResp length %v too short, %v required", len(data), 12)
+ }
+
+ m.Timestamp = binary.LittleEndian.Uint64(data[0:8])
+ m.Interval = binary.LittleEndian.Uint16(data[8:10])
+ m.Flags = binary.LittleEndian.Uint16(data[10:12])
+ m.Payload = data[12:]
+
+ return m.Dot11Mgmt.DecodeFromBytes(data, df)
+}
+
+func (m *Dot11MgmtProbeResp) NextLayerType() gopacket.LayerType {
+ return LayerTypeDot11InformationElement
+}
+
+func (m Dot11MgmtProbeResp) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ buf, err := b.PrependBytes(12)
+
+ if err != nil {
+ return err
+ }
+
+ binary.LittleEndian.PutUint64(buf[0:8], m.Timestamp)
+ binary.LittleEndian.PutUint16(buf[8:10], m.Interval)
+ binary.LittleEndian.PutUint16(buf[10:12], m.Flags)
+
+ return nil
+}
+
+type Dot11MgmtMeasurementPilot struct {
+ Dot11Mgmt
+}
+
+func decodeDot11MgmtMeasurementPilot(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11MgmtMeasurementPilot{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtMeasurementPilot) LayerType() gopacket.LayerType {
+ return LayerTypeDot11MgmtMeasurementPilot
+}
+func (m *Dot11MgmtMeasurementPilot) CanDecode() gopacket.LayerClass {
+ return LayerTypeDot11MgmtMeasurementPilot
+}
+
+type Dot11MgmtBeacon struct {
+ Dot11Mgmt
+ Timestamp uint64
+ Interval uint16
+ Flags uint16
+}
+
+func decodeDot11MgmtBeacon(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11MgmtBeacon{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtBeacon) LayerType() gopacket.LayerType { return LayerTypeDot11MgmtBeacon }
+func (m *Dot11MgmtBeacon) CanDecode() gopacket.LayerClass { return LayerTypeDot11MgmtBeacon }
+func (m *Dot11MgmtBeacon) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 12 {
+ df.SetTruncated()
+ return fmt.Errorf("Dot11MgmtBeacon length %v too short, %v required", len(data), 12)
+ }
+ m.Timestamp = binary.LittleEndian.Uint64(data[0:8])
+ m.Interval = binary.LittleEndian.Uint16(data[8:10])
+ m.Flags = binary.LittleEndian.Uint16(data[10:12])
+ m.Payload = data[12:]
+ return m.Dot11Mgmt.DecodeFromBytes(data, df)
+}
+
+func (m *Dot11MgmtBeacon) NextLayerType() gopacket.LayerType { return LayerTypeDot11InformationElement }
+
+func (m Dot11MgmtBeacon) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ buf, err := b.PrependBytes(12)
+
+ if err != nil {
+ return err
+ }
+
+ binary.LittleEndian.PutUint64(buf[0:8], m.Timestamp)
+ binary.LittleEndian.PutUint16(buf[8:10], m.Interval)
+ binary.LittleEndian.PutUint16(buf[10:12], m.Flags)
+
+ return nil
+}
+
+type Dot11MgmtATIM struct {
+ Dot11Mgmt
+}
+
+func decodeDot11MgmtATIM(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11MgmtATIM{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtATIM) LayerType() gopacket.LayerType { return LayerTypeDot11MgmtATIM }
+func (m *Dot11MgmtATIM) CanDecode() gopacket.LayerClass { return LayerTypeDot11MgmtATIM }
+
+type Dot11MgmtDisassociation struct {
+ Dot11Mgmt
+ Reason Dot11Reason
+}
+
+func decodeDot11MgmtDisassociation(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11MgmtDisassociation{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtDisassociation) LayerType() gopacket.LayerType {
+ return LayerTypeDot11MgmtDisassociation
+}
+func (m *Dot11MgmtDisassociation) CanDecode() gopacket.LayerClass {
+ return LayerTypeDot11MgmtDisassociation
+}
+func (m *Dot11MgmtDisassociation) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 2 {
+ df.SetTruncated()
+ return fmt.Errorf("Dot11MgmtDisassociation length %v too short, %v required", len(data), 2)
+ }
+ m.Reason = Dot11Reason(binary.LittleEndian.Uint16(data[0:2]))
+ return m.Dot11Mgmt.DecodeFromBytes(data, df)
+}
+
+func (m Dot11MgmtDisassociation) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ buf, err := b.PrependBytes(2)
+
+ if err != nil {
+ return err
+ }
+
+ binary.LittleEndian.PutUint16(buf[0:2], uint16(m.Reason))
+
+ return nil
+}
+
+type Dot11MgmtAuthentication struct {
+ Dot11Mgmt
+ Algorithm Dot11Algorithm
+ Sequence uint16
+ Status Dot11Status
+}
+
+func decodeDot11MgmtAuthentication(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11MgmtAuthentication{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtAuthentication) LayerType() gopacket.LayerType {
+ return LayerTypeDot11MgmtAuthentication
+}
+func (m *Dot11MgmtAuthentication) CanDecode() gopacket.LayerClass {
+ return LayerTypeDot11MgmtAuthentication
+}
+func (m *Dot11MgmtAuthentication) NextLayerType() gopacket.LayerType {
+ return LayerTypeDot11InformationElement
+}
+func (m *Dot11MgmtAuthentication) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 6 {
+ df.SetTruncated()
+ return fmt.Errorf("Dot11MgmtAuthentication length %v too short, %v required", len(data), 6)
+ }
+ m.Algorithm = Dot11Algorithm(binary.LittleEndian.Uint16(data[0:2]))
+ m.Sequence = binary.LittleEndian.Uint16(data[2:4])
+ m.Status = Dot11Status(binary.LittleEndian.Uint16(data[4:6]))
+ m.Payload = data[6:]
+ return m.Dot11Mgmt.DecodeFromBytes(data, df)
+}
+
+func (m Dot11MgmtAuthentication) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ buf, err := b.PrependBytes(6)
+
+ if err != nil {
+ return err
+ }
+
+ binary.LittleEndian.PutUint16(buf[0:2], uint16(m.Algorithm))
+ binary.LittleEndian.PutUint16(buf[2:4], m.Sequence)
+ binary.LittleEndian.PutUint16(buf[4:6], uint16(m.Status))
+
+ return nil
+}
+
+type Dot11MgmtDeauthentication struct {
+ Dot11Mgmt
+ Reason Dot11Reason
+}
+
+func decodeDot11MgmtDeauthentication(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11MgmtDeauthentication{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtDeauthentication) LayerType() gopacket.LayerType {
+ return LayerTypeDot11MgmtDeauthentication
+}
+func (m *Dot11MgmtDeauthentication) CanDecode() gopacket.LayerClass {
+ return LayerTypeDot11MgmtDeauthentication
+}
+func (m *Dot11MgmtDeauthentication) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 2 {
+ df.SetTruncated()
+ return fmt.Errorf("Dot11MgmtDeauthentication length %v too short, %v required", len(data), 2)
+ }
+ m.Reason = Dot11Reason(binary.LittleEndian.Uint16(data[0:2]))
+ return m.Dot11Mgmt.DecodeFromBytes(data, df)
+}
+
+func (m Dot11MgmtDeauthentication) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ buf, err := b.PrependBytes(2)
+
+ if err != nil {
+ return err
+ }
+
+ binary.LittleEndian.PutUint16(buf[0:2], uint16(m.Reason))
+
+ return nil
+}
+
+type Dot11MgmtAction struct {
+ Dot11Mgmt
+}
+
+func decodeDot11MgmtAction(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11MgmtAction{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtAction) LayerType() gopacket.LayerType { return LayerTypeDot11MgmtAction }
+func (m *Dot11MgmtAction) CanDecode() gopacket.LayerClass { return LayerTypeDot11MgmtAction }
+
+type Dot11MgmtActionNoAck struct {
+ Dot11Mgmt
+}
+
+func decodeDot11MgmtActionNoAck(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11MgmtActionNoAck{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtActionNoAck) LayerType() gopacket.LayerType { return LayerTypeDot11MgmtActionNoAck }
+func (m *Dot11MgmtActionNoAck) CanDecode() gopacket.LayerClass { return LayerTypeDot11MgmtActionNoAck }
+
+type Dot11MgmtArubaWLAN struct {
+ Dot11Mgmt
+}
+
+func decodeDot11MgmtArubaWLAN(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot11MgmtArubaWLAN{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtArubaWLAN) LayerType() gopacket.LayerType { return LayerTypeDot11MgmtArubaWLAN }
+func (m *Dot11MgmtArubaWLAN) CanDecode() gopacket.LayerClass { return LayerTypeDot11MgmtArubaWLAN }
diff --git a/vendor/github.com/google/gopacket/layers/dot11_test.go b/vendor/github.com/google/gopacket/layers/dot11_test.go
new file mode 100644
index 0000000..b0299fc
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/dot11_test.go
@@ -0,0 +1,495 @@
+// Copyright 2014, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "bytes"
+ "net"
+ "reflect"
+ "testing"
+
+ "github.com/google/gopacket"
+)
+
+// Generator: python layers/test_creator.py --layerType=LayerTypeRadioTap --linkType=LinkTypeIEEE80211Radio --name=Dot11%s ~/Downloads/mesh.pcap
+// http://wiki.wireshark.org/SampleCaptures#Sample_Captures
+
+// testPacketDot11CtrlCTS is the packet:
+// 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
+// 0x0000: 0000 1900 6f08 0000 3768 3a01 0000 0000 ....o...7h:.....
+// 0x0010: 1230 7814 4001 b1a4 01c4 0094 00d8 a25e .0x.@..........^
+// 0x0020: 9761 c136 5095 8e .a.6P..
+
+var testPacketDot11CtrlCTS = []byte{
+ 0x00, 0x00, 0x19, 0x00, 0x6f, 0x08, 0x00, 0x00, 0x37, 0x68, 0x3a, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x30, 0x78, 0x14, 0x40, 0x01, 0xb1, 0xa4, 0x01, 0xc4, 0x00, 0x94, 0x00, 0xd8, 0xa2, 0x5e,
+ 0x97, 0x61, 0xc1, 0x36, 0x50, 0x95, 0x8e,
+}
+
+func TestPacketDot11CtrlCTS(t *testing.T) {
+ p := gopacket.NewPacket(testPacketDot11CtrlCTS, LinkTypeIEEE80211Radio, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11}, t)
+
+ if got, ok := p.Layer(LayerTypeRadioTap).(*RadioTap); ok {
+ want := &RadioTap{
+ BaseLayer: BaseLayer{
+ Contents: []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},
+ Payload: []uint8{0xc4, 0x0, 0x94, 0x0, 0xd8, 0xa2, 0x5e, 0x97, 0x61, 0xc1, 0x36, 0x50, 0x95, 0x8e},
+ },
+ Version: 0x0,
+ Length: 0x19,
+ Present: 0x86f,
+ TSFT: 0x13a6837,
+ Flags: 0x12,
+ Rate: 0x30,
+ ChannelFrequency: 0x1478,
+ ChannelFlags: 0x140,
+ FHSS: 0x0,
+ DBMAntennaSignal: -79,
+ DBMAntennaNoise: -92,
+ LockQuality: 0x0,
+ TxAttenuation: 0x0,
+ DBTxAttenuation: 0x0,
+ DBMTxPower: 0,
+ Antenna: 1,
+ DBAntennaSignal: 0x0,
+ DBAntennaNoise: 0x0,
+ }
+
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("RadioTap packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want)
+ }
+ }
+
+ if got, ok := p.Layer(LayerTypeDot11).(*Dot11); ok {
+ if !got.ChecksumValid() {
+ t.Errorf("Dot11 packet processing failed:\nchecksum failed. got :\n%#v\n\n", got)
+ }
+
+ want := &Dot11{
+ BaseLayer: BaseLayer{
+ Contents: []uint8{0xc4, 0x0, 0x94, 0x0, 0xd8, 0xa2, 0x5e, 0x97, 0x61, 0xc1},
+ Payload: []uint8{},
+ },
+ Type: Dot11TypeCtrlCTS,
+ Proto: 0x0,
+ Flags: 0x0,
+ DurationID: 0x94,
+ Address1: net.HardwareAddr{0xd8, 0xa2, 0x5e, 0x97, 0x61, 0xc1}, // check
+ Address2: net.HardwareAddr(nil),
+ Address3: net.HardwareAddr(nil),
+ Address4: net.HardwareAddr(nil),
+ Checksum: 0x8e955036,
+ }
+
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("Dot11 packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want)
+ }
+ }
+}
+
+func BenchmarkDecodePacketDot11CtrlCTS(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketDot11CtrlCTS, LinkTypeIEEE80211Radio, gopacket.NoCopy)
+ }
+}
+
+// testPacketDot11MgmtBeacon is the packet:
+// 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
+// 0x0000: 0000 1200 2e48 0000 100c 6c09 c000 af05 .....H....l.....
+// 0x0010: 0000 8000 0000 ffff ffff ffff c08a de01 ................
+// 0x0020: 11b8 c08a de01 11b8 f097 80f1 30bc 1300 ............0...
+// 0x0030: 0000 6400 2104 0003 5769 3201 088c 1298 ..d.!...Wi2.....
+// 0x0040: 24b0 4860 6c03 0101 0504 0001 0000 2a01 $.H`l.........*.
+// 0x0050: 00dd 1800 50f2 0201 0181 0007 a400 0023 ....P..........#
+// 0x0060: a400 0042 435e 0062 322f 00dd 1e00 904c ...BC^.b2/.....L
+// 0x0070: 338c 011b ffff 0000 0000 0000 0000 0000 3...............
+// 0x0080: 1000 0000 0000 0000 0000 002d 1a8c 011b ...........-....
+// 0x0090: ffff 0000 0000 0000 0000 0000 1000 0000 ................
+// 0x00a0: 0000 0000 0000 00dd 1a00 904c 3401 0000 ...........L4...
+// 0x00b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
+// 0x00c0: 0000 003d 1601 0000 0000 0000 0000 0000 ...=............
+// 0x00d0: 0000 0000 0000 0000 0000 007f 0400 0000 ................
+// 0x00e0: 00dd 0800 1392 0100 0185 0094 0b90 15 ...............
+var testPacketDot11MgmtBeacon = []byte{
+ 0x00, 0x00, 0x12, 0x00, 0x2e, 0x48, 0x00, 0x00, 0x10, 0x0c, 0x6c, 0x09, 0xc0, 0x00, 0xaf, 0x05,
+ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x8a, 0xde, 0x01,
+ 0x11, 0xb8, 0xc0, 0x8a, 0xde, 0x01, 0x11, 0xb8, 0xf0, 0x97, 0x80, 0xf1, 0x30, 0xbc, 0x13, 0x00,
+ 0x00, 0x00, 0x64, 0x00, 0x21, 0x04, 0x00, 0x03, 0x57, 0x69, 0x32, 0x01, 0x08, 0x8c, 0x12, 0x98,
+ 0x24, 0xb0, 0x48, 0x60, 0x6c, 0x03, 0x01, 0x01, 0x05, 0x04, 0x00, 0x01, 0x00, 0x00, 0x2a, 0x01,
+ 0x00, 0xdd, 0x18, 0x00, 0x50, 0xf2, 0x02, 0x01, 0x01, 0x81, 0x00, 0x07, 0xa4, 0x00, 0x00, 0x23,
+ 0xa4, 0x00, 0x00, 0x42, 0x43, 0x5e, 0x00, 0x62, 0x32, 0x2f, 0x00, 0xdd, 0x1e, 0x00, 0x90, 0x4c,
+ 0x33, 0x8c, 0x01, 0x1b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x1a, 0x8c, 0x01, 0x1b,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, 0x1a, 0x00, 0x90, 0x4c, 0x34, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x3d, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0xdd, 0x08, 0x00, 0x13, 0x92, 0x01, 0x00, 0x01, 0x85, 0x00, 0x94, 0x0b, 0x90, 0x15,
+}
+
+func TestPacketDot11MgmtBeacon(t *testing.T) {
+ p := gopacket.NewPacket(testPacketDot11MgmtBeacon, LinkTypeIEEE80211Radio, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ expectedLayers := []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11MgmtBeacon}
+ for i := 0; i < 12; i++ {
+ expectedLayers = append(expectedLayers, LayerTypeDot11InformationElement)
+ }
+ checkLayers(p, expectedLayers, t)
+
+ if p.Layer(LayerTypeDot11).(*Dot11).SequenceNumber != 2431 {
+ t.Error("dot11 invalid sequence number")
+ }
+ if p.Layer(LayerTypeDot11).(*Dot11).FragmentNumber != 0 {
+ t.Error("dot11 invalid fragment number")
+ }
+ if _, ok := p.Layer(LayerTypeDot11MgmtBeacon).(*Dot11MgmtBeacon); !ok {
+ t.Errorf("dot11 management beacon frame was expected")
+ }
+}
+
+func BenchmarkDecodePacketDot11MgmtBeacon(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketDot11MgmtBeacon, LinkTypeIEEE80211Radio, gopacket.NoCopy)
+ }
+}
+
+// testPacketDot11DataQOSData is the packet:
+// 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
+// 0x0000: 0000 2000 6708 0400 6d2c 1326 0000 0000 ....g...m,.&....
+// 0x0010: 226c cda0 0200 0000 4001 0000 3c14 2411 "l......@...<.$.
+// 0x0020: 8801 2c00 0603 7f07 a016 0019 e3d3 5352 ..,...........SR
+// 0x0030: ffff ffff ffff 5064 0000 50aa aaaa 0300 ......Pd..P.....
+// 0x0040: 0000 0806 0001 0800 0604 0001 0019 e3d3 ................
+// 0x0050: 5352 a9fe f700 0000 0000 0000 8cb4 3344 SR............3D
+var testPacketDot11DataQOSData = []byte{
+ 0x00, 0x00, 0x20, 0x00, 0x67, 0x08, 0x04, 0x00, 0x6d, 0x2c, 0x13, 0x26, 0x00, 0x00, 0x00, 0x00,
+ 0x22, 0x6c, 0xcd, 0xa0, 0x02, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x3c, 0x14, 0x24, 0x11,
+ 0x88, 0x01, 0x2c, 0x00, 0x06, 0x03, 0x7f, 0x07, 0xa0, 0x16, 0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, 0x64, 0x00, 0x00, 0x50, 0xaa, 0xaa, 0xaa, 0x03, 0x00,
+ 0x00, 0x00, 0x08, 0x06, 0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x01, 0x00, 0x19, 0xe3, 0xd3,
+ 0x53, 0x52, 0xa9, 0xfe, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0xb4, 0x33, 0x44,
+}
+
+func TestPacketDot11DataQOSData(t *testing.T) {
+ p := gopacket.NewPacket(testPacketDot11DataQOSData, LinkTypeIEEE80211Radio, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11DataQOSData, LayerTypeDot11Data, LayerTypeLLC, LayerTypeSNAP, LayerTypeARP}, t)
+
+ if got, ok := p.Layer(LayerTypeARP).(*ARP); ok {
+ want := &ARP{BaseLayer: BaseLayer{
+ Contents: []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},
+ Payload: []uint8{},
+ },
+ AddrType: 0x1,
+ Protocol: 0x800,
+ HwAddressSize: 0x6,
+ ProtAddressSize: 0x4,
+ Operation: 0x1,
+ SourceHwAddress: []uint8{0x0, 0x19, 0xe3, 0xd3, 0x53, 0x52},
+ SourceProtAddress: []uint8{0xa9, 0xfe, 0xf7, 0x0},
+ DstHwAddress: []uint8{0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
+ DstProtAddress: []uint8{0x8c, 0xb4, 0x33, 0x44},
+ }
+
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("ARP packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want)
+ }
+ }
+}
+func BenchmarkDecodePacketDot11DataQOSData(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketDot11DataQOSData, LinkTypeIEEE80211Radio, gopacket.NoCopy)
+ }
+}
+
+// testPacketDot11MgmtAction is the packet:
+// 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
+// 0x0000: 0000 1200 2e48 0000 1002 6c09 a000 bd05 .....H....l.....
+// 0x0010: 0000 d000 0000 ffff ffff ffff 8e3a e344 .............:.D
+// 0x0020: acc6 8e3a e344 acc6 001b 0004 2503 0001 ...:.D......%...
+// 0x0030: 0055 39f0 33 .U9.3
+var testPacketDot11MgmtAction = []byte{
+ 0x00, 0x00, 0x12, 0x00, 0x2e, 0x48, 0x00, 0x00, 0x10, 0x02, 0x6c, 0x09, 0xa0, 0x00, 0xbd, 0x05,
+ 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8e, 0x3a, 0xe3, 0x44,
+ 0xac, 0xc6, 0x8e, 0x3a, 0xe3, 0x44, 0xac, 0xc6, 0x00, 0x1b, 0x00, 0x04, 0x25, 0x03, 0x00, 0x01,
+ 0x00, 0x55, 0x39, 0xf0, 0x33,
+}
+
+func TestPacketDot11MgmtAction(t *testing.T) {
+ p := gopacket.NewPacket(testPacketDot11MgmtAction, LinkTypeIEEE80211Radio, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11MgmtAction}, t)
+ if got, ok := p.Layer(LayerTypeDot11).(*Dot11); !ok {
+ t.Errorf("dot11 frame was not parsed")
+ } else if !got.ChecksumValid() {
+ t.Errorf("Dot11 packet processing failed: checksum failed")
+ }
+ if got, ok := p.Layer(LayerTypeDot11MgmtAction).(*Dot11MgmtAction); !ok {
+ t.Errorf("management action frame was not parsed")
+ } else if got.Contents[0] != 0 {
+ t.Errorf("action category was not spectrum management")
+ }
+}
+
+func BenchmarkDecodePacketDot11MgmtAction(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketDot11MgmtAction, LinkTypeIEEE80211Radio, gopacket.NoCopy)
+ }
+}
+
+// testPacketDot11CtrlAck is the packet:
+// 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
+// 0x0000: 0000 2000 6708 0400 96ac 1226 0000 0000 ....g......&....
+// 0x0010: 2230 d9a0 0200 0000 4001 0000 3c14 2411 "0......@...<.$.
+// 0x0020: d400 0000 0019 e3d3 5352 46e9 7687 ........SRF.v.
+var testPacketDot11CtrlAck = []byte{
+ 0x00, 0x00, 0x20, 0x00, 0x67, 0x08, 0x04, 0x00, 0x96, 0xac, 0x12, 0x26, 0x00, 0x00, 0x00, 0x00,
+ 0x32, 0x30, 0xd9, 0xa0, 0x02, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x3c, 0x14, 0x24, 0x11,
+ 0xd4, 0x00, 0x00, 0x00, 0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0x46, 0xe9, 0x76, 0x87,
+}
+
+func TestPacketDot11CtrlAck(t *testing.T) {
+ p := gopacket.NewPacket(testPacketDot11CtrlAck, LinkTypeIEEE80211Radio, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11}, t)
+
+ if got, ok := p.Layer(LayerTypeDot11).(*Dot11); ok {
+ if !got.ChecksumValid() {
+ t.Errorf("Dot11 packet processing failed:\nchecksum failed. got :\n%#v\n\n", got)
+ }
+ }
+
+ if got, ok := p.Layer(LayerTypeDot11).(*Dot11); ok {
+ if !got.ChecksumValid() {
+ t.Errorf("Dot11 packet processing failed:\nchecksum failed. got :\n%#v\n\n", got)
+ }
+ want := &Dot11{
+ BaseLayer: BaseLayer{
+ Contents: []uint8{0xd4, 0x0, 0x0, 0x0, 0x0, 0x19, 0xe3, 0xd3, 0x53, 0x52},
+ Payload: []uint8{},
+ },
+ Type: Dot11TypeCtrlAck,
+ Proto: 0x0,
+ Flags: 0x0,
+ DurationID: 0x0,
+ Address1: net.HardwareAddr{0x0, 0x19, 0xe3, 0xd3, 0x53, 0x52},
+ Address2: net.HardwareAddr(nil),
+ Address3: net.HardwareAddr(nil),
+ Address4: net.HardwareAddr(nil),
+ Checksum: 0x8776e946,
+ }
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("Dot11 packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want)
+ }
+ }
+}
+func BenchmarkDecodePacketDot11CtrlAck(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketDot11CtrlAck, LinkTypeIEEE80211Radio, gopacket.NoCopy)
+ }
+}
+
+// testPacketDot11DataARP is the packet:
+// 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
+// 0x0000: 0000 2000 6708 0400 360b 1a25 0000 0000 ....g...6..%....
+// 0x0010: 220c d9a0 0200 0000 4001 0000 3c14 2411 ".......@...<.$.
+// 0x0020: 0802 0000 ffff ffff ffff 0603 7f07 a016 ................
+// 0x0030: 0019 e3d3 5352 e07f aaaa 0300 0000 0806 ....SR..........
+// 0x0040: 0001 0800 0604 0001 0019 e3d3 5352 a9fe ............SR..
+// 0x0050: f700 0000 0000 0000 4308 0e36 ........C..6
+var testPacketDot11DataARP = []byte{
+ 0x00, 0x00, 0x20, 0x00, 0x67, 0x08, 0x04, 0x00, 0x36, 0x0b, 0x1a, 0x25, 0x00, 0x00, 0x00, 0x00,
+ 0x22, 0x0c, 0xd9, 0xa0, 0x02, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x3c, 0x14, 0x24, 0x11,
+ 0x08, 0x02, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x06, 0x03, 0x7f, 0x07, 0xa0, 0x16,
+ 0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0xe0, 0x7f, 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x08, 0x06,
+ 0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x01, 0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0xa9, 0xfe,
+ 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x08, 0x0e, 0x36,
+}
+
+func TestPacketDot11DataARP(t *testing.T) {
+ p := gopacket.NewPacket(testPacketDot11DataARP, LinkTypeIEEE80211Radio, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11Data, LayerTypeLLC, LayerTypeSNAP, LayerTypeARP}, t)
+
+ if got, ok := p.Layer(LayerTypeARP).(*ARP); ok {
+ want := &ARP{
+ BaseLayer: BaseLayer{
+ Contents: []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},
+ Payload: []uint8{},
+ },
+ AddrType: 0x1,
+ Protocol: 0x800,
+ HwAddressSize: 0x6,
+ ProtAddressSize: 0x4,
+ Operation: 0x1,
+ SourceHwAddress: []uint8{0x0, 0x19, 0xe3, 0xd3, 0x53, 0x52},
+ SourceProtAddress: []uint8{0xa9, 0xfe, 0xf7, 0x0},
+ DstHwAddress: []uint8{0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
+ DstProtAddress: []uint8{0x43, 0x8, 0xe, 0x36},
+ }
+
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("ARP packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want)
+ }
+ }
+}
+
+func BenchmarkDecodePacketDot11DataARP(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketDot11DataARP, LinkTypeIEEE80211Radio, gopacket.NoCopy)
+ }
+}
+
+// testPacketDot11DataIP is the packet:
+// 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
+// 0x0000: 0000 2000 6708 0400 07c0 b025 0000 0000 ....g......%....
+// 0x0010: 220c d8a0 0100 0000 4001 0000 3c14 2411 ".......@...<.$.
+// 0x0020: 0802 0000 ffff ffff ffff 0603 7f07 a016 ................
+// 0x0030: 0019 e3d3 5352 4095 aaaa 0300 0000 0800 ....SR@.........
+// 0x0040: 4500 0148 c514 0000 ff11 f590 0000 0000 E..H............
+// 0x0050: ffff ffff 0044 0043 0134 2b39 0101 0600 .....D.C.4+9....
+// 0x0060: 131f 8c43 003c 0000 0000 0000 0000 0000 ...C.<..........
+// 0x0070: 0000 0000 0000 0000 0019 e3d3 5352 0000 ............SR..
+// 0x0080: 0000 0000 0000 0000 0000 0000 0000 0000 ................
+// 0x0090: 0000 0000 0000 0000 0000 0000 0000 0000 ................
+// 0x00a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
+// 0x00b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
+// 0x00c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
+// 0x00d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
+// 0x00e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
+// 0x00f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
+// 0x0100: 0000 0000 0000 0000 0000 0000 0000 0000 ................
+// 0x0110: 0000 0000 0000 0000 0000 0000 0000 0000 ................
+// 0x0120: 0000 0000 0000 0000 0000 0000 0000 0000 ................
+// 0x0130: 0000 0000 0000 0000 0000 0000 0000 0000 ................
+// 0x0140: 0000 0000 0000 0000 6382 5363 3501 0137 ........c.Sc5..7
+// 0x0150: 0a01 0306 0f77 5ffc 2c2e 2f39 0205 dc3d .....w_.,./9...=
+// 0x0160: 0701 0019 e3d3 5352 3304 0076 a700 0c0b ......SR3..v....
+// 0x0170: 4d61 6369 6e74 6f73 682d 34ff 0000 0000 Macintosh-4.....
+// 0x0180: 0000 0000 0000 0000 ........
+var testPacketDot11DataIP = []byte{
+ 0x00, 0x00, 0x20, 0x00, 0x67, 0x08, 0x04, 0x00, 0x07, 0xc0, 0xb0, 0x25, 0x00, 0x00, 0x00, 0x00,
+ 0x22, 0x0c, 0xd8, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x3c, 0x14, 0x24, 0x11,
+ 0x08, 0x02, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x06, 0x03, 0x7f, 0x07, 0xa0, 0x16,
+ 0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0x40, 0x95, 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00,
+ 0x45, 0x00, 0x01, 0x48, 0xc5, 0x14, 0x00, 0x00, 0xff, 0x11, 0xf5, 0x90, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0x00, 0x44, 0x00, 0x43, 0x01, 0x34, 0x2b, 0x39, 0x01, 0x01, 0x06, 0x00,
+ 0x13, 0x1f, 0x8c, 0x43, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x82, 0x53, 0x63, 0x35, 0x01, 0x01, 0x37,
+ 0x0a, 0x01, 0x03, 0x06, 0x0f, 0x77, 0x5f, 0xfc, 0x2c, 0x2e, 0x2f, 0x39, 0x02, 0x05, 0xdc, 0x3d,
+ 0x07, 0x01, 0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0x33, 0x04, 0x00, 0x76, 0xa7, 0x00, 0x0c, 0x0b,
+ 0x4d, 0x61, 0x63, 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x68, 0x2d, 0x34, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestPacketDot11DataIP(t *testing.T) {
+ p := gopacket.NewPacket(testPacketDot11DataIP, LinkTypeIEEE80211Radio, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11Data, LayerTypeLLC, LayerTypeSNAP, LayerTypeIPv4, LayerTypeUDP, LayerTypeDHCPv4}, t)
+}
+func BenchmarkDecodePacketDot11DataIP(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketDot11DataIP, LinkTypeIEEE80211Radio, gopacket.NoCopy)
+ }
+}
+
+// Encrypted
+
+/// testPacketP6196 is the packet:
+// 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
+// 0x0000: 0000 3000 6b08 1c00 6c68 3a01 0000 0000 ..0.k...lh:.....
+// 0x0010: 1400 7814 4001 bba4 0160 0e1a 4001 0400 ..x.@....`..@...
+// 0x0020: 7814 3022 1f01 0cff b10d 0000 0400 0000 x.0"............
+// 0x0030: 8841 2c00 0025 9c42 c262 d8a2 5e97 61c1 .A,..%.B.b..^.a.
+// 0x0040: 0025 9c42 c25f 10db 0000 a950 0020 0000 .%.B._.....P....
+// 0x0050: 0000 f8ab a97e 3fbd d6e1 785b 0040 5f15 .....~?...x[.@_.
+// 0x0060: 7123 8711 bd1f ffb9 e5b3 84bb ec2a 0a90 q#...........*..
+// 0x0070: d0a0 1a6f 9033 1083 5179 a0da f833 3a00 ...o.3..Qy...3:.
+// 0x0080: 5471 f596 539b 1823 a33c 4908 545c 266a Tq..S..#.<I.T\&j
+// 0x0090: 8540 515a 1da9 c49e a85a fbf7 de09 7f9c .@QZ.....Z......
+// 0x00a0: 6f35 0b8b 6831 2c10 43dc 8983 b1d9 dd29 o5..h1,.C......)
+// 0x00b0: 7395 65b9 4b43 b391 16ec 4201 86c9 ca s.e.KC....B....
+var testPacketP6196 = []byte{
+ 0x00, 0x00, 0x30, 0x00, 0x6b, 0x08, 0x1c, 0x00, 0x6c, 0x68, 0x3a, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x14, 0x00, 0x78, 0x14, 0x40, 0x01, 0xbb, 0xa4, 0x01, 0x60, 0x0e, 0x1a, 0x40, 0x01, 0x04, 0x00,
+ 0x78, 0x14, 0x30, 0x22, 0x1f, 0x01, 0x0c, 0xff, 0xb1, 0x0d, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x88, 0x41, 0x2c, 0x00, 0x00, 0x25, 0x9c, 0x42, 0xc2, 0x62, 0xd8, 0xa2, 0x5e, 0x97, 0x61, 0xc1,
+ 0x00, 0x25, 0x9c, 0x42, 0xc2, 0x5f, 0x10, 0xdb, 0x00, 0x00, 0xa9, 0x50, 0x00, 0x20, 0x00, 0x00,
+ 0x00, 0x00, 0xf8, 0xab, 0xa9, 0x7e, 0x3f, 0xbd, 0xd6, 0xe1, 0x78, 0x5b, 0x00, 0x40, 0x5f, 0x15,
+ 0x71, 0x23, 0x87, 0x11, 0xbd, 0x1f, 0xff, 0xb9, 0xe5, 0xb3, 0x84, 0xbb, 0xec, 0x2a, 0x0a, 0x90,
+ 0xd0, 0xa0, 0x1a, 0x6f, 0x90, 0x33, 0x10, 0x83, 0x51, 0x79, 0xa0, 0xda, 0xf8, 0x33, 0x3a, 0x00,
+ 0x54, 0x71, 0xf5, 0x96, 0x53, 0x9b, 0x18, 0x23, 0xa3, 0x3c, 0x49, 0x08, 0x54, 0x5c, 0x26, 0x6a,
+ 0x85, 0x40, 0x51, 0x5a, 0x1d, 0xa9, 0xc4, 0x9e, 0xa8, 0x5a, 0xfb, 0xf7, 0xde, 0x09, 0x7f, 0x9c,
+ 0x6f, 0x35, 0x0b, 0x8b, 0x68, 0x31, 0x2c, 0x10, 0x43, 0xdc, 0x89, 0x83, 0xb1, 0xd9, 0xdd, 0x29,
+ 0x73, 0x95, 0x65, 0xb9, 0x4b, 0x43, 0xb3, 0x91, 0x16, 0xec, 0x42, 0x01, 0x86, 0xc9, 0xca,
+}
+
+func TestPacketP6196(t *testing.T) {
+ p := gopacket.NewPacket(testPacketP6196, LinkTypeIEEE80211Radio, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+
+ checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11WEP}, t)
+}
+
+func BenchmarkDecodePacketP6196(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketP6196, LinkTypeIEEE80211Radio, gopacket.NoCopy)
+ }
+}
+
+func TestInformationElement(t *testing.T) {
+ bin := []byte{
+ 0, 0,
+ 0, 2, 1, 3,
+ 221, 5, 1, 2, 3, 4, 5,
+ }
+ pkt := gopacket.NewPacket(bin, LayerTypeDot11InformationElement, gopacket.NoCopy)
+
+ buf := gopacket.NewSerializeBuffer()
+ var sLayers []gopacket.SerializableLayer
+ for _, l := range pkt.Layers() {
+ sLayers = append(sLayers, l.(*Dot11InformationElement))
+ }
+ if err := gopacket.SerializeLayers(buf, gopacket.SerializeOptions{}, sLayers...); err != nil {
+ t.Error(err.Error())
+ }
+ if !bytes.Equal(bin, buf.Bytes()) {
+ t.Error("build failed")
+ }
+}
diff --git a/vendor/github.com/google/gopacket/layers/dot1q.go b/vendor/github.com/google/gopacket/layers/dot1q.go
new file mode 100644
index 0000000..47f93d7
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/dot1q.go
@@ -0,0 +1,71 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "fmt"
+ "github.com/google/gopacket"
+)
+
+// Dot1Q is the packet layer for 802.1Q VLAN headers.
+type Dot1Q struct {
+ BaseLayer
+ Priority uint8
+ DropEligible bool
+ VLANIdentifier uint16
+ Type EthernetType
+}
+
+// LayerType returns gopacket.LayerTypeDot1Q
+func (d *Dot1Q) LayerType() gopacket.LayerType { return LayerTypeDot1Q }
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (d *Dot1Q) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ d.Priority = (data[0] & 0xE0) >> 5
+ d.DropEligible = data[0]&0x10 != 0
+ d.VLANIdentifier = binary.BigEndian.Uint16(data[:2]) & 0x0FFF
+ d.Type = EthernetType(binary.BigEndian.Uint16(data[2:4]))
+ d.BaseLayer = BaseLayer{Contents: data[:4], Payload: data[4:]}
+ return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (d *Dot1Q) CanDecode() gopacket.LayerClass {
+ return LayerTypeDot1Q
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (d *Dot1Q) NextLayerType() gopacket.LayerType {
+ return d.Type.LayerType()
+}
+
+func decodeDot1Q(data []byte, p gopacket.PacketBuilder) error {
+ d := &Dot1Q{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (d *Dot1Q) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ bytes, err := b.PrependBytes(4)
+ if err != nil {
+ return err
+ }
+ if d.VLANIdentifier > 0xFFF {
+ return fmt.Errorf("vlan identifier %v is too high", d.VLANIdentifier)
+ }
+ firstBytes := uint16(d.Priority)<<13 | d.VLANIdentifier
+ if d.DropEligible {
+ firstBytes |= 0x1000
+ }
+ binary.BigEndian.PutUint16(bytes, firstBytes)
+ binary.BigEndian.PutUint16(bytes[2:], uint16(d.Type))
+ return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/dot1q_test.go b/vendor/github.com/google/gopacket/layers/dot1q_test.go
new file mode 100644
index 0000000..4a409c7
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/dot1q_test.go
@@ -0,0 +1,62 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+package layers
+
+import (
+ "fmt"
+ "reflect"
+ "testing"
+
+ "github.com/google/gopacket"
+)
+
+// test harness to ensure the dot1q layer can be encoded/decoded properly
+// return error if decoded data not match.
+func testEncodeDecodeDot1Q(dot1Q *Dot1Q) error {
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{}
+ expectedDot1Q := dot1Q
+
+ err := dot1Q.SerializeTo(buf, opts)
+ if err != nil {
+ return err
+ }
+
+ newDot1q := &Dot1Q{}
+ err = newDot1q.DecodeFromBytes(buf.Bytes(), gopacket.NilDecodeFeedback)
+ if err != nil {
+ return err
+ }
+ newDot1q.BaseLayer = BaseLayer{}
+
+ if !reflect.DeepEqual(expectedDot1Q, newDot1q) {
+ return fmt.Errorf("Expect %v actual %v", expectedDot1Q, newDot1q)
+ }
+ return nil
+
+}
+
+// Test to ensure what has been encode can be decoded
+func TestEncodeDecodeDot1Q(t *testing.T) {
+ dot1Qs := []*Dot1Q{
+ &Dot1Q{
+ Priority: uint8(3),
+ VLANIdentifier: uint16(30),
+ },
+ &Dot1Q{
+ Priority: uint8(0x07),
+ DropEligible: true,
+ VLANIdentifier: uint16(0xFFF),
+ },
+ }
+
+ for i, curTest := range dot1Qs {
+ err := testEncodeDecodeDot1Q(curTest)
+ if err != nil {
+ t.Error("Error with item ", i, " with error message :", err)
+ }
+ }
+}
diff --git a/vendor/github.com/google/gopacket/layers/eap.go b/vendor/github.com/google/gopacket/layers/eap.go
new file mode 100644
index 0000000..250f857
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/eap.go
@@ -0,0 +1,106 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "fmt"
+ "github.com/google/gopacket"
+)
+
+type EAPCode uint8
+type EAPType uint8
+
+const (
+ EAPCodeRequest EAPCode = 1
+ EAPCodeResponse EAPCode = 2
+ EAPCodeSuccess EAPCode = 3
+ EAPCodeFailure EAPCode = 4
+
+ // EAPTypeNone means that this EAP layer has no Type or TypeData.
+ // Success and Failure EAPs will have this set.
+ EAPTypeNone EAPType = 0
+
+ EAPTypeIdentity EAPType = 1
+ EAPTypeNotification EAPType = 2
+ EAPTypeNACK EAPType = 3
+ EAPTypeOTP EAPType = 4
+ EAPTypeTokenCard EAPType = 5
+)
+
+// EAP defines an Extensible Authentication Protocol (rfc 3748) layer.
+type EAP struct {
+ BaseLayer
+ Code EAPCode
+ Id uint8
+ Length uint16
+ Type EAPType
+ TypeData []byte
+}
+
+// LayerType returns LayerTypeEAP.
+func (e *EAP) LayerType() gopacket.LayerType { return LayerTypeEAP }
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (e *EAP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ e.Code = EAPCode(data[0])
+ e.Id = data[1]
+ e.Length = binary.BigEndian.Uint16(data[2:4])
+ switch {
+ case e.Length > 4:
+ e.Type = EAPType(data[4])
+ e.TypeData = data[5:]
+ case e.Length == 4:
+ e.Type = 0
+ e.TypeData = nil
+ default:
+ return fmt.Errorf("invalid EAP length %d", e.Length)
+ }
+ e.BaseLayer.Contents = data[:e.Length]
+ e.BaseLayer.Payload = data[e.Length:] // Should be 0 bytes
+ return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (e *EAP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ if opts.FixLengths {
+ e.Length = uint16(len(e.TypeData) + 1)
+ }
+ size := len(e.TypeData) + 4
+ if size > 4 {
+ size++
+ }
+ bytes, err := b.PrependBytes(size)
+ if err != nil {
+ return err
+ }
+ bytes[0] = byte(e.Code)
+ bytes[1] = e.Id
+ binary.BigEndian.PutUint16(bytes[2:], e.Length)
+ if size > 4 {
+ bytes[4] = byte(e.Type)
+ copy(bytes[5:], e.TypeData)
+ }
+ return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (e *EAP) CanDecode() gopacket.LayerClass {
+ return LayerTypeEAP
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (e *EAP) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypeZero
+}
+
+func decodeEAP(data []byte, p gopacket.PacketBuilder) error {
+ e := &EAP{}
+ return decodingLayerDecoder(e, data, p)
+}
diff --git a/vendor/github.com/google/gopacket/layers/eapol.go b/vendor/github.com/google/gopacket/layers/eapol.go
new file mode 100644
index 0000000..041cd59
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/eapol.go
@@ -0,0 +1,57 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "github.com/google/gopacket"
+)
+
+// EAPOL defines an EAP over LAN (802.1x) layer.
+type EAPOL struct {
+ BaseLayer
+ Version uint8
+ Type EAPOLType
+ Length uint16
+}
+
+// LayerType returns LayerTypeEAPOL.
+func (e *EAPOL) LayerType() gopacket.LayerType { return LayerTypeEAPOL }
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (e *EAPOL) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ e.Version = data[0]
+ e.Type = EAPOLType(data[1])
+ e.Length = binary.BigEndian.Uint16(data[2:4])
+ e.BaseLayer = BaseLayer{data[:4], data[4:]}
+ return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer
+func (e *EAPOL) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ bytes, _ := b.PrependBytes(4)
+ bytes[0] = e.Version
+ bytes[1] = byte(e.Type)
+ binary.BigEndian.PutUint16(bytes[2:], e.Length)
+ return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (e *EAPOL) CanDecode() gopacket.LayerClass {
+ return LayerTypeEAPOL
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (e *EAPOL) NextLayerType() gopacket.LayerType {
+ return e.Type.LayerType()
+}
+
+func decodeEAPOL(data []byte, p gopacket.PacketBuilder) error {
+ e := &EAPOL{}
+ return decodingLayerDecoder(e, data, p)
+}
diff --git a/vendor/github.com/google/gopacket/layers/endpoints.go b/vendor/github.com/google/gopacket/layers/endpoints.go
new file mode 100644
index 0000000..4c91cc3
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/endpoints.go
@@ -0,0 +1,97 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "github.com/google/gopacket"
+ "net"
+ "strconv"
+)
+
+var (
+ // We use two different endpoint types for IPv4 vs IPv6 addresses, so that
+ // ordering with endpointA.LessThan(endpointB) sanely groups all IPv4
+ // addresses and all IPv6 addresses, such that IPv6 > IPv4 for all addresses.
+ EndpointIPv4 = gopacket.RegisterEndpointType(1, gopacket.EndpointTypeMetadata{Name: "IPv4", Formatter: func(b []byte) string {
+ return net.IP(b).String()
+ }})
+ EndpointIPv6 = gopacket.RegisterEndpointType(2, gopacket.EndpointTypeMetadata{Name: "IPv6", Formatter: func(b []byte) string {
+ return net.IP(b).String()
+ }})
+
+ EndpointMAC = gopacket.RegisterEndpointType(3, gopacket.EndpointTypeMetadata{Name: "MAC", Formatter: func(b []byte) string {
+ return net.HardwareAddr(b).String()
+ }})
+ EndpointTCPPort = gopacket.RegisterEndpointType(4, gopacket.EndpointTypeMetadata{Name: "TCP", Formatter: func(b []byte) string {
+ return strconv.Itoa(int(binary.BigEndian.Uint16(b)))
+ }})
+ EndpointUDPPort = gopacket.RegisterEndpointType(5, gopacket.EndpointTypeMetadata{Name: "UDP", Formatter: func(b []byte) string {
+ return strconv.Itoa(int(binary.BigEndian.Uint16(b)))
+ }})
+ EndpointSCTPPort = gopacket.RegisterEndpointType(6, gopacket.EndpointTypeMetadata{Name: "SCTP", Formatter: func(b []byte) string {
+ return strconv.Itoa(int(binary.BigEndian.Uint16(b)))
+ }})
+ EndpointRUDPPort = gopacket.RegisterEndpointType(7, gopacket.EndpointTypeMetadata{Name: "RUDP", Formatter: func(b []byte) string {
+ return strconv.Itoa(int(b[0]))
+ }})
+ EndpointUDPLitePort = gopacket.RegisterEndpointType(8, gopacket.EndpointTypeMetadata{Name: "UDPLite", Formatter: func(b []byte) string {
+ return strconv.Itoa(int(binary.BigEndian.Uint16(b)))
+ }})
+ EndpointPPP = gopacket.RegisterEndpointType(9, gopacket.EndpointTypeMetadata{Name: "PPP", Formatter: func([]byte) string {
+ return "point"
+ }})
+)
+
+// NewIPEndpoint creates a new IP (v4 or v6) endpoint from a net.IP address.
+// It returns gopacket.InvalidEndpoint if the IP address is invalid.
+func NewIPEndpoint(a net.IP) gopacket.Endpoint {
+ ipv4 := a.To4()
+ if ipv4 != nil {
+ return gopacket.NewEndpoint(EndpointIPv4, []byte(ipv4))
+ }
+
+ ipv6 := a.To16()
+ if ipv6 != nil {
+ return gopacket.NewEndpoint(EndpointIPv6, []byte(ipv6))
+ }
+
+ return gopacket.InvalidEndpoint
+}
+
+// NewMACEndpoint returns a new MAC address endpoint.
+func NewMACEndpoint(a net.HardwareAddr) gopacket.Endpoint {
+ return gopacket.NewEndpoint(EndpointMAC, []byte(a))
+}
+func newPortEndpoint(t gopacket.EndpointType, p uint16) gopacket.Endpoint {
+ return gopacket.NewEndpoint(t, []byte{byte(p >> 8), byte(p)})
+}
+
+// NewTCPPortEndpoint returns an endpoint based on a TCP port.
+func NewTCPPortEndpoint(p TCPPort) gopacket.Endpoint {
+ return newPortEndpoint(EndpointTCPPort, uint16(p))
+}
+
+// NewUDPPortEndpoint returns an endpoint based on a UDP port.
+func NewUDPPortEndpoint(p UDPPort) gopacket.Endpoint {
+ return newPortEndpoint(EndpointUDPPort, uint16(p))
+}
+
+// NewSCTPPortEndpoint returns an endpoint based on a SCTP port.
+func NewSCTPPortEndpoint(p SCTPPort) gopacket.Endpoint {
+ return newPortEndpoint(EndpointSCTPPort, uint16(p))
+}
+
+// NewRUDPPortEndpoint returns an endpoint based on a RUDP port.
+func NewRUDPPortEndpoint(p RUDPPort) gopacket.Endpoint {
+ return gopacket.NewEndpoint(EndpointRUDPPort, []byte{byte(p)})
+}
+
+// NewUDPLitePortEndpoint returns an endpoint based on a UDPLite port.
+func NewUDPLitePortEndpoint(p UDPLitePort) gopacket.Endpoint {
+ return newPortEndpoint(EndpointUDPLitePort, uint16(p))
+}
diff --git a/vendor/github.com/google/gopacket/layers/endpoints_test.go b/vendor/github.com/google/gopacket/layers/endpoints_test.go
new file mode 100644
index 0000000..906762a
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/endpoints_test.go
@@ -0,0 +1,37 @@
+// Copyright 2017, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "net"
+ "testing"
+
+ "github.com/google/gopacket"
+)
+
+func TestNewIPEndpoint(t *testing.T) {
+ cases := []struct {
+ ip net.IP
+ endpointType gopacket.EndpointType
+ }{
+ {net.ParseIP("192.168.0.1").To4(), EndpointIPv4},
+ {net.ParseIP("192.168.0.1").To16(), EndpointIPv4},
+ {net.ParseIP("2001:0db8:85a3:0000:0000:8a2e:0370:7334"), EndpointIPv6},
+ }
+
+ for _, c := range cases {
+ endpoint := NewIPEndpoint(c.ip)
+ if endpoint == gopacket.InvalidEndpoint {
+ t.Errorf("Failed to create an IP endpoint for %s (%d-bytes)",
+ c.ip, len(c.ip))
+ }
+ if endpoint.EndpointType() != c.endpointType {
+ t.Errorf("Wrong endpoint type created for %s (%d-bytes): expected %s, got %s",
+ c.ip, len(c.ip), c.endpointType, endpoint.EndpointType())
+ }
+ }
+}
diff --git a/vendor/github.com/google/gopacket/layers/enums.go b/vendor/github.com/google/gopacket/layers/enums.go
new file mode 100644
index 0000000..0ea2058
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/enums.go
@@ -0,0 +1,564 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "errors"
+ "fmt"
+
+ "github.com/google/gopacket"
+)
+
+// EnumMetadata keeps track of a set of metadata for each enumeration value
+// for protocol enumerations.
+type EnumMetadata struct {
+ // DecodeWith is the decoder to use to decode this protocol's data.
+ DecodeWith gopacket.Decoder
+ // Name is the name of the enumeration value.
+ Name string
+ // LayerType is the layer type implied by the given enum.
+ LayerType gopacket.LayerType
+}
+
+// errorFunc returns a decoder that spits out a specific error message.
+func errorFunc(msg string) gopacket.Decoder {
+ var e = errors.New(msg)
+ return gopacket.DecodeFunc(func([]byte, gopacket.PacketBuilder) error {
+ return e
+ })
+}
+
+// EthernetType is an enumeration of ethernet type values, and acts as a decoder
+// for any type it supports.
+type EthernetType uint16
+
+const (
+ // EthernetTypeLLC is not an actual ethernet type. It is instead a
+ // placeholder we use in Ethernet frames that use the 802.3 standard of
+ // srcmac|dstmac|length|LLC instead of srcmac|dstmac|ethertype.
+ EthernetTypeLLC EthernetType = 0
+ EthernetTypeIPv4 EthernetType = 0x0800
+ EthernetTypeARP EthernetType = 0x0806
+ EthernetTypeIPv6 EthernetType = 0x86DD
+ EthernetTypeCiscoDiscovery EthernetType = 0x2000
+ EthernetTypeNortelDiscovery EthernetType = 0x01a2
+ EthernetTypeTransparentEthernetBridging EthernetType = 0x6558
+ EthernetTypeDot1Q EthernetType = 0x8100
+ EthernetTypePPPoEDiscovery EthernetType = 0x8863
+ EthernetTypePPPoESession EthernetType = 0x8864
+ EthernetTypeMPLSUnicast EthernetType = 0x8847
+ EthernetTypeMPLSMulticast EthernetType = 0x8848
+ EthernetTypeEAPOL EthernetType = 0x888e
+ EthernetTypeQinQ EthernetType = 0x88a8
+ EthernetTypeLinkLayerDiscovery EthernetType = 0x88cc
+ EthernetTypeEthernetCTP EthernetType = 0x9000
+)
+
+// IPProtocol is an enumeration of IP protocol values, and acts as a decoder
+// for any type it supports.
+type IPProtocol uint8
+
+const (
+ IPProtocolIPv6HopByHop IPProtocol = 0
+ IPProtocolICMPv4 IPProtocol = 1
+ IPProtocolIGMP IPProtocol = 2
+ IPProtocolIPv4 IPProtocol = 4
+ IPProtocolTCP IPProtocol = 6
+ IPProtocolUDP IPProtocol = 17
+ IPProtocolRUDP IPProtocol = 27
+ IPProtocolIPv6 IPProtocol = 41
+ IPProtocolIPv6Routing IPProtocol = 43
+ IPProtocolIPv6Fragment IPProtocol = 44
+ IPProtocolGRE IPProtocol = 47
+ IPProtocolESP IPProtocol = 50
+ IPProtocolAH IPProtocol = 51
+ IPProtocolICMPv6 IPProtocol = 58
+ IPProtocolNoNextHeader IPProtocol = 59
+ IPProtocolIPv6Destination IPProtocol = 60
+ IPProtocolOSPF IPProtocol = 89
+ IPProtocolIPIP IPProtocol = 94
+ IPProtocolEtherIP IPProtocol = 97
+ IPProtocolVRRP IPProtocol = 112
+ IPProtocolSCTP IPProtocol = 132
+ IPProtocolUDPLite IPProtocol = 136
+ IPProtocolMPLSInIP IPProtocol = 137
+)
+
+// LinkType is an enumeration of link types, and acts as a decoder for any
+// link type it supports.
+type LinkType uint8
+
+const (
+ // According to pcap-linktype(7) and http://www.tcpdump.org/linktypes.html
+ LinkTypeNull LinkType = 0
+ LinkTypeEthernet LinkType = 1
+ LinkTypeAX25 LinkType = 3
+ LinkTypeTokenRing LinkType = 6
+ LinkTypeArcNet LinkType = 7
+ LinkTypeSLIP LinkType = 8
+ LinkTypePPP LinkType = 9
+ LinkTypeFDDI LinkType = 10
+ LinkTypePPP_HDLC LinkType = 50
+ LinkTypePPPEthernet LinkType = 51
+ LinkTypeATM_RFC1483 LinkType = 100
+ LinkTypeRaw LinkType = 101
+ LinkTypeC_HDLC LinkType = 104
+ LinkTypeIEEE802_11 LinkType = 105
+ LinkTypeFRelay LinkType = 107
+ LinkTypeLoop LinkType = 108
+ LinkTypeLinuxSLL LinkType = 113
+ LinkTypeLTalk LinkType = 114
+ LinkTypePFLog LinkType = 117
+ LinkTypePrismHeader LinkType = 119
+ LinkTypeIPOverFC LinkType = 122
+ LinkTypeSunATM LinkType = 123
+ LinkTypeIEEE80211Radio LinkType = 127
+ LinkTypeARCNetLinux LinkType = 129
+ LinkTypeIPOver1394 LinkType = 138
+ LinkTypeMTP2Phdr LinkType = 139
+ LinkTypeMTP2 LinkType = 140
+ LinkTypeMTP3 LinkType = 141
+ LinkTypeSCCP LinkType = 142
+ LinkTypeDOCSIS LinkType = 143
+ LinkTypeLinuxIRDA LinkType = 144
+ LinkTypeLinuxLAPD LinkType = 177
+ LinkTypeLinuxUSB LinkType = 220
+ LinkTypeIPv4 LinkType = 228
+ LinkTypeIPv6 LinkType = 229
+)
+
+// PPPoECode is the PPPoE code enum, taken from http://tools.ietf.org/html/rfc2516
+type PPPoECode uint8
+
+const (
+ PPPoECodePADI PPPoECode = 0x09
+ PPPoECodePADO PPPoECode = 0x07
+ PPPoECodePADR PPPoECode = 0x19
+ PPPoECodePADS PPPoECode = 0x65
+ PPPoECodePADT PPPoECode = 0xA7
+ PPPoECodeSession PPPoECode = 0x00
+)
+
+// PPPType is an enumeration of PPP type values, and acts as a decoder for any
+// type it supports.
+type PPPType uint16
+
+const (
+ PPPTypeIPv4 PPPType = 0x0021
+ PPPTypeIPv6 PPPType = 0x0057
+ PPPTypeMPLSUnicast PPPType = 0x0281
+ PPPTypeMPLSMulticast PPPType = 0x0283
+)
+
+// SCTPChunkType is an enumeration of chunk types inside SCTP packets.
+type SCTPChunkType uint8
+
+const (
+ SCTPChunkTypeData SCTPChunkType = 0
+ SCTPChunkTypeInit SCTPChunkType = 1
+ SCTPChunkTypeInitAck SCTPChunkType = 2
+ SCTPChunkTypeSack SCTPChunkType = 3
+ SCTPChunkTypeHeartbeat SCTPChunkType = 4
+ SCTPChunkTypeHeartbeatAck SCTPChunkType = 5
+ SCTPChunkTypeAbort SCTPChunkType = 6
+ SCTPChunkTypeShutdown SCTPChunkType = 7
+ SCTPChunkTypeShutdownAck SCTPChunkType = 8
+ SCTPChunkTypeError SCTPChunkType = 9
+ SCTPChunkTypeCookieEcho SCTPChunkType = 10
+ SCTPChunkTypeCookieAck SCTPChunkType = 11
+ SCTPChunkTypeShutdownComplete SCTPChunkType = 14
+)
+
+// FDDIFrameControl is an enumeration of FDDI frame control bytes.
+type FDDIFrameControl uint8
+
+const (
+ FDDIFrameControlLLC FDDIFrameControl = 0x50
+)
+
+// EAPOLType is an enumeration of EAPOL packet types.
+type EAPOLType uint8
+
+const (
+ EAPOLTypeEAP EAPOLType = 0
+ EAPOLTypeStart EAPOLType = 1
+ EAPOLTypeLogOff EAPOLType = 2
+ EAPOLTypeKey EAPOLType = 3
+ EAPOLTypeASFAlert EAPOLType = 4
+)
+
+// ProtocolFamily is the set of values defined as PF_* in sys/socket.h
+type ProtocolFamily uint8
+
+const (
+ ProtocolFamilyIPv4 ProtocolFamily = 2
+ // BSDs use different values for INET6... glory be. These values taken from
+ // tcpdump 4.3.0.
+ ProtocolFamilyIPv6BSD ProtocolFamily = 24
+ ProtocolFamilyIPv6FreeBSD ProtocolFamily = 28
+ ProtocolFamilyIPv6Darwin ProtocolFamily = 30
+ ProtocolFamilyIPv6Linux ProtocolFamily = 10
+)
+
+// Dot11Type is a combination of IEEE 802.11 frame's Type and Subtype fields.
+// By combining these two fields together into a single type, we're able to
+// provide a String function that correctly displays the subtype given the
+// top-level type.
+//
+// If you just care about the top-level type, use the MainType function.
+type Dot11Type uint8
+
+// MainType strips the subtype information from the given type,
+// returning just the overarching type (Mgmt, Ctrl, Data, Reserved).
+func (d Dot11Type) MainType() Dot11Type {
+ return d & dot11TypeMask
+}
+
+const (
+ Dot11TypeMgmt Dot11Type = 0x00
+ Dot11TypeCtrl Dot11Type = 0x01
+ Dot11TypeData Dot11Type = 0x02
+ Dot11TypeReserved Dot11Type = 0x03
+ dot11TypeMask = 0x03
+
+ // The following are type/subtype conglomerations.
+
+ // Management
+ Dot11TypeMgmtAssociationReq Dot11Type = 0x00
+ Dot11TypeMgmtAssociationResp Dot11Type = 0x04
+ Dot11TypeMgmtReassociationReq Dot11Type = 0x08
+ Dot11TypeMgmtReassociationResp Dot11Type = 0x0c
+ Dot11TypeMgmtProbeReq Dot11Type = 0x10
+ Dot11TypeMgmtProbeResp Dot11Type = 0x14
+ Dot11TypeMgmtMeasurementPilot Dot11Type = 0x18
+ Dot11TypeMgmtBeacon Dot11Type = 0x20
+ Dot11TypeMgmtATIM Dot11Type = 0x24
+ Dot11TypeMgmtDisassociation Dot11Type = 0x28
+ Dot11TypeMgmtAuthentication Dot11Type = 0x2c
+ Dot11TypeMgmtDeauthentication Dot11Type = 0x30
+ Dot11TypeMgmtAction Dot11Type = 0x34
+ Dot11TypeMgmtActionNoAck Dot11Type = 0x38
+
+ // Control
+ Dot11TypeCtrlWrapper Dot11Type = 0x1d
+ Dot11TypeCtrlBlockAckReq Dot11Type = 0x21
+ Dot11TypeCtrlBlockAck Dot11Type = 0x25
+ Dot11TypeCtrlPowersavePoll Dot11Type = 0x29
+ Dot11TypeCtrlRTS Dot11Type = 0x2d
+ Dot11TypeCtrlCTS Dot11Type = 0x31
+ Dot11TypeCtrlAck Dot11Type = 0x35
+ Dot11TypeCtrlCFEnd Dot11Type = 0x39
+ Dot11TypeCtrlCFEndAck Dot11Type = 0x3d
+
+ // Data
+ Dot11TypeDataCFAck Dot11Type = 0x06
+ Dot11TypeDataCFPoll Dot11Type = 0x0a
+ Dot11TypeDataCFAckPoll Dot11Type = 0x0e
+ Dot11TypeDataNull Dot11Type = 0x12
+ Dot11TypeDataCFAckNoData Dot11Type = 0x16
+ Dot11TypeDataCFPollNoData Dot11Type = 0x1a
+ Dot11TypeDataCFAckPollNoData Dot11Type = 0x1e
+ Dot11TypeDataQOSData Dot11Type = 0x22
+ Dot11TypeDataQOSDataCFAck Dot11Type = 0x26
+ Dot11TypeDataQOSDataCFPoll Dot11Type = 0x2a
+ Dot11TypeDataQOSDataCFAckPoll Dot11Type = 0x2e
+ Dot11TypeDataQOSNull Dot11Type = 0x32
+ Dot11TypeDataQOSCFPollNoData Dot11Type = 0x3a
+ Dot11TypeDataQOSCFAckPollNoData Dot11Type = 0x3e
+)
+
+var (
+ // Each of the following arrays contains mappings of how to handle enum
+ // values for various enum types in gopacket/layers.
+ //
+ // So, EthernetTypeMetadata[2] contains information on how to handle EthernetType
+ // 2, including which name to give it and which decoder to use to decode
+ // packet data of that type. These arrays are filled by default with all of the
+ // protocols gopacket/layers knows how to handle, but users of the library can
+ // add new decoders or override existing ones. For example, if you write a better
+ // TCP decoder, you can override IPProtocolMetadata[IPProtocolTCP].DecodeWith
+ // with your new decoder, and all gopacket/layers decoding will use your new
+ // decoder whenever they encounter that IPProtocol.
+ EthernetTypeMetadata [65536]EnumMetadata
+ IPProtocolMetadata [256]EnumMetadata
+ SCTPChunkTypeMetadata [256]EnumMetadata
+ PPPTypeMetadata [65536]EnumMetadata
+ PPPoECodeMetadata [256]EnumMetadata
+ LinkTypeMetadata [256]EnumMetadata
+ FDDIFrameControlMetadata [256]EnumMetadata
+ EAPOLTypeMetadata [256]EnumMetadata
+ ProtocolFamilyMetadata [256]EnumMetadata
+ Dot11TypeMetadata [256]EnumMetadata
+ USBTypeMetadata [256]EnumMetadata
+)
+
+func (a EthernetType) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return EthernetTypeMetadata[a].DecodeWith.Decode(data, p)
+}
+func (a EthernetType) String() string {
+ return EthernetTypeMetadata[a].Name
+}
+func (a EthernetType) LayerType() gopacket.LayerType {
+ return EthernetTypeMetadata[a].LayerType
+}
+func (a IPProtocol) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return IPProtocolMetadata[a].DecodeWith.Decode(data, p)
+}
+func (a IPProtocol) String() string {
+ return IPProtocolMetadata[a].Name
+}
+func (a IPProtocol) LayerType() gopacket.LayerType {
+ return IPProtocolMetadata[a].LayerType
+}
+func (a SCTPChunkType) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return SCTPChunkTypeMetadata[a].DecodeWith.Decode(data, p)
+}
+func (a SCTPChunkType) String() string {
+ return SCTPChunkTypeMetadata[a].Name
+}
+func (a PPPType) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return PPPTypeMetadata[a].DecodeWith.Decode(data, p)
+}
+func (a PPPType) String() string {
+ return PPPTypeMetadata[a].Name
+}
+func (a LinkType) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return LinkTypeMetadata[a].DecodeWith.Decode(data, p)
+}
+func (a LinkType) String() string {
+ return LinkTypeMetadata[a].Name
+}
+func (a PPPoECode) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return PPPoECodeMetadata[a].DecodeWith.Decode(data, p)
+}
+func (a PPPoECode) String() string {
+ return PPPoECodeMetadata[a].Name
+}
+func (a FDDIFrameControl) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return FDDIFrameControlMetadata[a].DecodeWith.Decode(data, p)
+}
+func (a FDDIFrameControl) String() string {
+ return FDDIFrameControlMetadata[a].Name
+}
+func (a EAPOLType) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return EAPOLTypeMetadata[a].DecodeWith.Decode(data, p)
+}
+func (a EAPOLType) String() string {
+ return EAPOLTypeMetadata[a].Name
+}
+func (a EAPOLType) LayerType() gopacket.LayerType {
+ return EAPOLTypeMetadata[a].LayerType
+}
+func (a ProtocolFamily) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return ProtocolFamilyMetadata[a].DecodeWith.Decode(data, p)
+}
+func (a ProtocolFamily) String() string {
+ return ProtocolFamilyMetadata[a].Name
+}
+func (a ProtocolFamily) LayerType() gopacket.LayerType {
+ return ProtocolFamilyMetadata[a].LayerType
+}
+func (a Dot11Type) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return Dot11TypeMetadata[a].DecodeWith.Decode(data, p)
+}
+func (a Dot11Type) String() string {
+ return Dot11TypeMetadata[a].Name
+}
+func (a Dot11Type) LayerType() gopacket.LayerType {
+ return Dot11TypeMetadata[a].LayerType
+}
+
+// Decode a raw v4 or v6 IP packet.
+func decodeIPv4or6(data []byte, p gopacket.PacketBuilder) error {
+ version := data[0] >> 4
+ switch version {
+ case 4:
+ return decodeIPv4(data, p)
+ case 6:
+ return decodeIPv6(data, p)
+ }
+ return fmt.Errorf("Invalid IP packet version %v", version)
+}
+
+func init() {
+ // Here we link up all enumerations with their respective names and decoders.
+ for i := 0; i < 65536; i++ {
+ EthernetTypeMetadata[i] = EnumMetadata{
+ DecodeWith: errorFunc(fmt.Sprintf("Unable to decode ethernet type %d", i)),
+ Name: fmt.Sprintf("UnknownEthernetType(%d)", i),
+ }
+ PPPTypeMetadata[i] = EnumMetadata{
+ DecodeWith: errorFunc(fmt.Sprintf("Unable to decode PPP type %d", i)),
+ Name: fmt.Sprintf("UnknownPPPType(%d)", i),
+ }
+ }
+ for i := 0; i < 256; i++ {
+ IPProtocolMetadata[i] = EnumMetadata{
+ DecodeWith: errorFunc(fmt.Sprintf("Unable to decode IP protocol %d", i)),
+ Name: fmt.Sprintf("UnknownIPProtocol(%d)", i),
+ }
+ SCTPChunkTypeMetadata[i] = EnumMetadata{
+ DecodeWith: errorFunc(fmt.Sprintf("Unable to decode SCTP chunk type %d", i)),
+ Name: fmt.Sprintf("UnknownSCTPChunkType(%d)", i),
+ }
+ PPPoECodeMetadata[i] = EnumMetadata{
+ DecodeWith: errorFunc(fmt.Sprintf("Unable to decode PPPoE code %d", i)),
+ Name: fmt.Sprintf("UnknownPPPoECode(%d)", i),
+ }
+ LinkTypeMetadata[i] = EnumMetadata{
+ DecodeWith: errorFunc(fmt.Sprintf("Unable to decode link type %d", i)),
+ Name: fmt.Sprintf("UnknownLinkType(%d)", i),
+ }
+ FDDIFrameControlMetadata[i] = EnumMetadata{
+ DecodeWith: errorFunc(fmt.Sprintf("Unable to decode FDDI frame control %d", i)),
+ Name: fmt.Sprintf("UnknownFDDIFrameControl(%d)", i),
+ }
+ EAPOLTypeMetadata[i] = EnumMetadata{
+ DecodeWith: errorFunc(fmt.Sprintf("Unable to decode EAPOL type %d", i)),
+ Name: fmt.Sprintf("UnknownEAPOLType(%d)", i),
+ }
+ ProtocolFamilyMetadata[i] = EnumMetadata{
+ DecodeWith: errorFunc(fmt.Sprintf("Unable to decode protocol family %d", i)),
+ Name: fmt.Sprintf("UnknownProtocolFamily(%d)", i),
+ }
+ Dot11TypeMetadata[i] = EnumMetadata{
+ DecodeWith: errorFunc(fmt.Sprintf("Unable to decode Dot11 type %d", i)),
+ Name: fmt.Sprintf("UnknownDot11Type(%d)", i),
+ }
+ }
+
+ EthernetTypeMetadata[EthernetTypeLLC] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeLLC), Name: "LLC", LayerType: LayerTypeLLC}
+ EthernetTypeMetadata[EthernetTypeIPv4] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv4), Name: "IPv4", LayerType: LayerTypeIPv4}
+ EthernetTypeMetadata[EthernetTypeIPv6] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6), Name: "IPv6", LayerType: LayerTypeIPv6}
+ EthernetTypeMetadata[EthernetTypeARP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeARP), Name: "ARP", LayerType: LayerTypeARP}
+ EthernetTypeMetadata[EthernetTypeDot1Q] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot1Q), Name: "Dot1Q", LayerType: LayerTypeDot1Q}
+ EthernetTypeMetadata[EthernetTypePPPoEDiscovery] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodePPPoE), Name: "PPPoEDiscovery", LayerType: LayerTypePPPoE}
+ EthernetTypeMetadata[EthernetTypePPPoESession] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodePPPoE), Name: "PPPoESession", LayerType: LayerTypePPPoE}
+ EthernetTypeMetadata[EthernetTypeEthernetCTP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeEthernetCTP), Name: "EthernetCTP", LayerType: LayerTypeEthernetCTP}
+ EthernetTypeMetadata[EthernetTypeCiscoDiscovery] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeCiscoDiscovery), Name: "CiscoDiscovery", LayerType: LayerTypeCiscoDiscovery}
+ EthernetTypeMetadata[EthernetTypeNortelDiscovery] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeNortelDiscovery), Name: "NortelDiscovery", LayerType: LayerTypeNortelDiscovery}
+ EthernetTypeMetadata[EthernetTypeLinkLayerDiscovery] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeLinkLayerDiscovery), Name: "LinkLayerDiscovery", LayerType: LayerTypeLinkLayerDiscovery}
+ EthernetTypeMetadata[EthernetTypeMPLSUnicast] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeMPLS), Name: "MPLSUnicast", LayerType: LayerTypeMPLS}
+ EthernetTypeMetadata[EthernetTypeMPLSMulticast] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeMPLS), Name: "MPLSMulticast", LayerType: LayerTypeMPLS}
+ EthernetTypeMetadata[EthernetTypeEAPOL] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeEAPOL), Name: "EAPOL", LayerType: LayerTypeEAPOL}
+ EthernetTypeMetadata[EthernetTypeQinQ] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot1Q), Name: "Dot1Q", LayerType: LayerTypeDot1Q}
+ EthernetTypeMetadata[EthernetTypeTransparentEthernetBridging] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeEthernet), Name: "TransparentEthernetBridging", LayerType: LayerTypeEthernet}
+
+ IPProtocolMetadata[IPProtocolIPv4] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv4), Name: "IPv4", LayerType: LayerTypeIPv4}
+ IPProtocolMetadata[IPProtocolTCP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeTCP), Name: "TCP", LayerType: LayerTypeTCP}
+ IPProtocolMetadata[IPProtocolUDP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeUDP), Name: "UDP", LayerType: LayerTypeUDP}
+ IPProtocolMetadata[IPProtocolICMPv4] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeICMPv4), Name: "ICMPv4", LayerType: LayerTypeICMPv4}
+ IPProtocolMetadata[IPProtocolICMPv6] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeICMPv6), Name: "ICMPv6", LayerType: LayerTypeICMPv6}
+ IPProtocolMetadata[IPProtocolSCTP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTP), Name: "SCTP", LayerType: LayerTypeSCTP}
+ IPProtocolMetadata[IPProtocolIPv6] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6), Name: "IPv6", LayerType: LayerTypeIPv6}
+ IPProtocolMetadata[IPProtocolIPIP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv4), Name: "IPv4", LayerType: LayerTypeIPv4}
+ IPProtocolMetadata[IPProtocolEtherIP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeEtherIP), Name: "EtherIP", LayerType: LayerTypeEtherIP}
+ IPProtocolMetadata[IPProtocolRUDP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeRUDP), Name: "RUDP", LayerType: LayerTypeRUDP}
+ IPProtocolMetadata[IPProtocolGRE] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeGRE), Name: "GRE", LayerType: LayerTypeGRE}
+ IPProtocolMetadata[IPProtocolIPv6HopByHop] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6HopByHop), Name: "IPv6HopByHop", LayerType: LayerTypeIPv6HopByHop}
+ IPProtocolMetadata[IPProtocolIPv6Routing] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6Routing), Name: "IPv6Routing", LayerType: LayerTypeIPv6Routing}
+ IPProtocolMetadata[IPProtocolIPv6Fragment] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6Fragment), Name: "IPv6Fragment", LayerType: LayerTypeIPv6Fragment}
+ IPProtocolMetadata[IPProtocolIPv6Destination] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6Destination), Name: "IPv6Destination", LayerType: LayerTypeIPv6Destination}
+ IPProtocolMetadata[IPProtocolOSPF] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeOSPF), Name: "OSPF", LayerType: LayerTypeOSPF}
+ IPProtocolMetadata[IPProtocolAH] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPSecAH), Name: "IPSecAH", LayerType: LayerTypeIPSecAH}
+ IPProtocolMetadata[IPProtocolESP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPSecESP), Name: "IPSecESP", LayerType: LayerTypeIPSecESP}
+ IPProtocolMetadata[IPProtocolUDPLite] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeUDPLite), Name: "UDPLite", LayerType: LayerTypeUDPLite}
+ IPProtocolMetadata[IPProtocolMPLSInIP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeMPLS), Name: "MPLS", LayerType: LayerTypeMPLS}
+ IPProtocolMetadata[IPProtocolNoNextHeader] = EnumMetadata{DecodeWith: gopacket.DecodePayload, Name: "NoNextHeader", LayerType: gopacket.LayerTypePayload}
+ IPProtocolMetadata[IPProtocolIGMP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIGMP), Name: "IGMP", LayerType: LayerTypeIGMP}
+ IPProtocolMetadata[IPProtocolVRRP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeVRRP), Name: "VRRP", LayerType: LayerTypeVRRP}
+
+ SCTPChunkTypeMetadata[SCTPChunkTypeData] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPData), Name: "Data"}
+ SCTPChunkTypeMetadata[SCTPChunkTypeInit] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPInit), Name: "Init"}
+ SCTPChunkTypeMetadata[SCTPChunkTypeInitAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPInit), Name: "InitAck"}
+ SCTPChunkTypeMetadata[SCTPChunkTypeSack] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPSack), Name: "Sack"}
+ SCTPChunkTypeMetadata[SCTPChunkTypeHeartbeat] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPHeartbeat), Name: "Heartbeat"}
+ SCTPChunkTypeMetadata[SCTPChunkTypeHeartbeatAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPHeartbeat), Name: "HeartbeatAck"}
+ SCTPChunkTypeMetadata[SCTPChunkTypeAbort] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPError), Name: "Abort"}
+ SCTPChunkTypeMetadata[SCTPChunkTypeError] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPError), Name: "Error"}
+ SCTPChunkTypeMetadata[SCTPChunkTypeShutdown] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPShutdown), Name: "Shutdown"}
+ SCTPChunkTypeMetadata[SCTPChunkTypeShutdownAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPShutdownAck), Name: "ShutdownAck"}
+ SCTPChunkTypeMetadata[SCTPChunkTypeCookieEcho] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPCookieEcho), Name: "CookieEcho"}
+ SCTPChunkTypeMetadata[SCTPChunkTypeCookieAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPEmptyLayer), Name: "CookieAck"}
+ SCTPChunkTypeMetadata[SCTPChunkTypeShutdownComplete] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPEmptyLayer), Name: "ShutdownComplete"}
+
+ PPPTypeMetadata[PPPTypeIPv4] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv4), Name: "IPv4"}
+ PPPTypeMetadata[PPPTypeIPv6] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6), Name: "IPv6"}
+ PPPTypeMetadata[PPPTypeMPLSUnicast] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeMPLS), Name: "MPLSUnicast"}
+ PPPTypeMetadata[PPPTypeMPLSMulticast] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeMPLS), Name: "MPLSMulticast"}
+
+ PPPoECodeMetadata[PPPoECodeSession] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodePPP), Name: "PPP"}
+
+ LinkTypeMetadata[LinkTypeEthernet] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeEthernet), Name: "Ethernet"}
+ LinkTypeMetadata[LinkTypePPP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodePPP), Name: "PPP"}
+ LinkTypeMetadata[LinkTypeFDDI] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeFDDI), Name: "FDDI"}
+ LinkTypeMetadata[LinkTypeNull] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeLoopback), Name: "Null"}
+ LinkTypeMetadata[LinkTypeIEEE802_11] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11), Name: "Dot11"}
+ LinkTypeMetadata[LinkTypeLoop] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeLoopback), Name: "Loop"}
+ LinkTypeMetadata[LinkTypeIEEE802_11] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11), Name: "802.11"}
+ LinkTypeMetadata[LinkTypeRaw] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv4or6), Name: "Raw"}
+ LinkTypeMetadata[LinkTypePFLog] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodePFLog), Name: "PFLog"}
+ LinkTypeMetadata[LinkTypeIEEE80211Radio] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeRadioTap), Name: "RadioTap"}
+ LinkTypeMetadata[LinkTypeLinuxUSB] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeUSB), Name: "USB"}
+ LinkTypeMetadata[LinkTypeLinuxSLL] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeLinuxSLL), Name: "Linux SLL"}
+ LinkTypeMetadata[LinkTypePrismHeader] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodePrismHeader), Name: "Prism"}
+
+ FDDIFrameControlMetadata[FDDIFrameControlLLC] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeLLC), Name: "LLC"}
+
+ EAPOLTypeMetadata[EAPOLTypeEAP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeEAP), Name: "EAP", LayerType: LayerTypeEAP}
+
+ ProtocolFamilyMetadata[ProtocolFamilyIPv4] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv4), Name: "IPv4", LayerType: LayerTypeIPv4}
+ ProtocolFamilyMetadata[ProtocolFamilyIPv6BSD] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6), Name: "IPv6", LayerType: LayerTypeIPv6}
+ ProtocolFamilyMetadata[ProtocolFamilyIPv6FreeBSD] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6), Name: "IPv6", LayerType: LayerTypeIPv6}
+ ProtocolFamilyMetadata[ProtocolFamilyIPv6Darwin] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6), Name: "IPv6", LayerType: LayerTypeIPv6}
+ ProtocolFamilyMetadata[ProtocolFamilyIPv6Linux] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6), Name: "IPv6", LayerType: LayerTypeIPv6}
+
+ Dot11TypeMetadata[Dot11TypeMgmtAssociationReq] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtAssociationReq), Name: "MgmtAssociationReq", LayerType: LayerTypeDot11MgmtAssociationReq}
+ Dot11TypeMetadata[Dot11TypeMgmtAssociationResp] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtAssociationResp), Name: "MgmtAssociationResp", LayerType: LayerTypeDot11MgmtAssociationResp}
+ Dot11TypeMetadata[Dot11TypeMgmtReassociationReq] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtReassociationReq), Name: "MgmtReassociationReq", LayerType: LayerTypeDot11MgmtReassociationReq}
+ Dot11TypeMetadata[Dot11TypeMgmtReassociationResp] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtReassociationResp), Name: "MgmtReassociationResp", LayerType: LayerTypeDot11MgmtReassociationResp}
+ Dot11TypeMetadata[Dot11TypeMgmtProbeReq] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtProbeReq), Name: "MgmtProbeReq", LayerType: LayerTypeDot11MgmtProbeReq}
+ Dot11TypeMetadata[Dot11TypeMgmtProbeResp] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtProbeResp), Name: "MgmtProbeResp", LayerType: LayerTypeDot11MgmtProbeResp}
+ Dot11TypeMetadata[Dot11TypeMgmtMeasurementPilot] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtMeasurementPilot), Name: "MgmtMeasurementPilot", LayerType: LayerTypeDot11MgmtMeasurementPilot}
+ Dot11TypeMetadata[Dot11TypeMgmtBeacon] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtBeacon), Name: "MgmtBeacon", LayerType: LayerTypeDot11MgmtBeacon}
+ Dot11TypeMetadata[Dot11TypeMgmtATIM] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtATIM), Name: "MgmtATIM", LayerType: LayerTypeDot11MgmtATIM}
+ Dot11TypeMetadata[Dot11TypeMgmtDisassociation] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtDisassociation), Name: "MgmtDisassociation", LayerType: LayerTypeDot11MgmtDisassociation}
+ Dot11TypeMetadata[Dot11TypeMgmtAuthentication] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtAuthentication), Name: "MgmtAuthentication", LayerType: LayerTypeDot11MgmtAuthentication}
+ Dot11TypeMetadata[Dot11TypeMgmtDeauthentication] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtDeauthentication), Name: "MgmtDeauthentication", LayerType: LayerTypeDot11MgmtDeauthentication}
+ Dot11TypeMetadata[Dot11TypeMgmtAction] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtAction), Name: "MgmtAction", LayerType: LayerTypeDot11MgmtAction}
+ Dot11TypeMetadata[Dot11TypeMgmtActionNoAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtActionNoAck), Name: "MgmtActionNoAck", LayerType: LayerTypeDot11MgmtActionNoAck}
+ Dot11TypeMetadata[Dot11TypeCtrl] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11Ctrl), Name: "Ctrl", LayerType: LayerTypeDot11Ctrl}
+ Dot11TypeMetadata[Dot11TypeCtrlWrapper] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11Ctrl), Name: "CtrlWrapper", LayerType: LayerTypeDot11Ctrl}
+ Dot11TypeMetadata[Dot11TypeCtrlBlockAckReq] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11CtrlBlockAckReq), Name: "CtrlBlockAckReq", LayerType: LayerTypeDot11CtrlBlockAckReq}
+ Dot11TypeMetadata[Dot11TypeCtrlBlockAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11CtrlBlockAck), Name: "CtrlBlockAck", LayerType: LayerTypeDot11CtrlBlockAck}
+ Dot11TypeMetadata[Dot11TypeCtrlPowersavePoll] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11CtrlPowersavePoll), Name: "CtrlPowersavePoll", LayerType: LayerTypeDot11CtrlPowersavePoll}
+ Dot11TypeMetadata[Dot11TypeCtrlRTS] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11CtrlRTS), Name: "CtrlRTS", LayerType: LayerTypeDot11CtrlRTS}
+ Dot11TypeMetadata[Dot11TypeCtrlCTS] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11CtrlCTS), Name: "CtrlCTS", LayerType: LayerTypeDot11CtrlCTS}
+ Dot11TypeMetadata[Dot11TypeCtrlAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11CtrlAck), Name: "CtrlAck", LayerType: LayerTypeDot11CtrlAck}
+ Dot11TypeMetadata[Dot11TypeCtrlCFEnd] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11CtrlCFEnd), Name: "CtrlCFEnd", LayerType: LayerTypeDot11CtrlCFEnd}
+ Dot11TypeMetadata[Dot11TypeCtrlCFEndAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11CtrlCFEndAck), Name: "CtrlCFEndAck", LayerType: LayerTypeDot11CtrlCFEndAck}
+ Dot11TypeMetadata[Dot11TypeData] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11Data), Name: "Data", LayerType: LayerTypeDot11Data}
+ Dot11TypeMetadata[Dot11TypeDataCFAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataCFAck), Name: "DataCFAck", LayerType: LayerTypeDot11DataCFAck}
+ Dot11TypeMetadata[Dot11TypeDataCFPoll] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataCFPoll), Name: "DataCFPoll", LayerType: LayerTypeDot11DataCFPoll}
+ Dot11TypeMetadata[Dot11TypeDataCFAckPoll] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataCFAckPoll), Name: "DataCFAckPoll", LayerType: LayerTypeDot11DataCFAckPoll}
+ Dot11TypeMetadata[Dot11TypeDataNull] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataNull), Name: "DataNull", LayerType: LayerTypeDot11DataNull}
+ Dot11TypeMetadata[Dot11TypeDataCFAckNoData] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataCFAckNoData), Name: "DataCFAckNoData", LayerType: LayerTypeDot11DataCFAckNoData}
+ Dot11TypeMetadata[Dot11TypeDataCFPollNoData] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataCFPollNoData), Name: "DataCFPollNoData", LayerType: LayerTypeDot11DataCFPollNoData}
+ Dot11TypeMetadata[Dot11TypeDataCFAckPollNoData] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataCFAckPollNoData), Name: "DataCFAckPollNoData", LayerType: LayerTypeDot11DataCFAckPollNoData}
+ Dot11TypeMetadata[Dot11TypeDataQOSData] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataQOSData), Name: "DataQOSData", LayerType: LayerTypeDot11DataQOSData}
+ Dot11TypeMetadata[Dot11TypeDataQOSDataCFAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataQOSDataCFAck), Name: "DataQOSDataCFAck", LayerType: LayerTypeDot11DataQOSDataCFAck}
+ Dot11TypeMetadata[Dot11TypeDataQOSDataCFPoll] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataQOSDataCFPoll), Name: "DataQOSDataCFPoll", LayerType: LayerTypeDot11DataQOSDataCFPoll}
+ Dot11TypeMetadata[Dot11TypeDataQOSDataCFAckPoll] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataQOSDataCFAckPoll), Name: "DataQOSDataCFAckPoll", LayerType: LayerTypeDot11DataQOSDataCFAckPoll}
+ Dot11TypeMetadata[Dot11TypeDataQOSNull] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataQOSNull), Name: "DataQOSNull", LayerType: LayerTypeDot11DataQOSNull}
+ Dot11TypeMetadata[Dot11TypeDataQOSCFPollNoData] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataQOSCFPollNoData), Name: "DataQOSCFPollNoData", LayerType: LayerTypeDot11DataQOSCFPollNoData}
+ Dot11TypeMetadata[Dot11TypeDataQOSCFAckPollNoData] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataQOSCFAckPollNoData), Name: "DataQOSCFAckPollNoData", LayerType: LayerTypeDot11DataQOSCFAckPollNoData}
+
+ USBTypeMetadata[USBTransportTypeInterrupt] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeUSBInterrupt), Name: "Interrupt", LayerType: LayerTypeUSBInterrupt}
+ USBTypeMetadata[USBTransportTypeControl] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeUSBControl), Name: "Control", LayerType: LayerTypeUSBControl}
+ USBTypeMetadata[USBTransportTypeBulk] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeUSBBulk), Name: "Bulk", LayerType: LayerTypeUSBBulk}
+}
diff --git a/vendor/github.com/google/gopacket/layers/etherip.go b/vendor/github.com/google/gopacket/layers/etherip.go
new file mode 100644
index 0000000..5b7b722
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/etherip.go
@@ -0,0 +1,45 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "github.com/google/gopacket"
+)
+
+// EtherIP is the struct for storing RFC 3378 EtherIP packet headers.
+type EtherIP struct {
+ BaseLayer
+ Version uint8
+ Reserved uint16
+}
+
+// LayerType returns gopacket.LayerTypeEtherIP.
+func (e *EtherIP) LayerType() gopacket.LayerType { return LayerTypeEtherIP }
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (e *EtherIP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ e.Version = data[0] >> 4
+ e.Reserved = binary.BigEndian.Uint16(data[:2]) & 0x0fff
+ e.BaseLayer = BaseLayer{data[:2], data[2:]}
+ return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (e *EtherIP) CanDecode() gopacket.LayerClass {
+ return LayerTypeEtherIP
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (e *EtherIP) NextLayerType() gopacket.LayerType {
+ return LayerTypeEthernet
+}
+
+func decodeEtherIP(data []byte, p gopacket.PacketBuilder) error {
+ e := &EtherIP{}
+ return decodingLayerDecoder(e, data, p)
+}
diff --git a/vendor/github.com/google/gopacket/layers/ethernet.go b/vendor/github.com/google/gopacket/layers/ethernet.go
new file mode 100644
index 0000000..4eebf8c
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/ethernet.go
@@ -0,0 +1,122 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "errors"
+ "fmt"
+ "github.com/google/gopacket"
+ "net"
+)
+
+// EthernetBroadcast is the broadcast MAC address used by Ethernet.
+var EthernetBroadcast = net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
+
+// Ethernet is the layer for Ethernet frame headers.
+type Ethernet struct {
+ BaseLayer
+ SrcMAC, DstMAC net.HardwareAddr
+ EthernetType EthernetType
+ // Length is only set if a length field exists within this header. Ethernet
+ // headers follow two different standards, one that uses an EthernetType, the
+ // other which defines a length the follows with a LLC header (802.3). If the
+ // former is the case, we set EthernetType and Length stays 0. In the latter
+ // case, we set Length and EthernetType = EthernetTypeLLC.
+ Length uint16
+}
+
+// LayerType returns LayerTypeEthernet
+func (e *Ethernet) LayerType() gopacket.LayerType { return LayerTypeEthernet }
+
+func (e *Ethernet) LinkFlow() gopacket.Flow {
+ return gopacket.NewFlow(EndpointMAC, e.SrcMAC, e.DstMAC)
+}
+
+func (eth *Ethernet) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 14 {
+ return errors.New("Ethernet packet too small")
+ }
+ eth.DstMAC = net.HardwareAddr(data[0:6])
+ eth.SrcMAC = net.HardwareAddr(data[6:12])
+ eth.EthernetType = EthernetType(binary.BigEndian.Uint16(data[12:14]))
+ eth.BaseLayer = BaseLayer{data[:14], data[14:]}
+ if eth.EthernetType < 0x0600 {
+ eth.Length = uint16(eth.EthernetType)
+ eth.EthernetType = EthernetTypeLLC
+ if cmp := len(eth.Payload) - int(eth.Length); cmp < 0 {
+ df.SetTruncated()
+ } else if cmp > 0 {
+ // Strip off bytes at the end, since we have too many bytes
+ eth.Payload = eth.Payload[:len(eth.Payload)-cmp]
+ }
+ // fmt.Println(eth)
+ }
+ return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (eth *Ethernet) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ if len(eth.DstMAC) != 6 {
+ return fmt.Errorf("invalid dst MAC: %v", eth.DstMAC)
+ }
+ if len(eth.SrcMAC) != 6 {
+ return fmt.Errorf("invalid src MAC: %v", eth.SrcMAC)
+ }
+ payload := b.Bytes()
+ bytes, err := b.PrependBytes(14)
+ if err != nil {
+ return err
+ }
+ copy(bytes, eth.DstMAC)
+ copy(bytes[6:], eth.SrcMAC)
+ if eth.Length != 0 || eth.EthernetType == EthernetTypeLLC {
+ if opts.FixLengths {
+ eth.Length = uint16(len(payload))
+ }
+ if eth.EthernetType != EthernetTypeLLC {
+ return fmt.Errorf("ethernet type %v not compatible with length value %v", eth.EthernetType, eth.Length)
+ } else if eth.Length > 0x0600 {
+ return fmt.Errorf("invalid ethernet length %v", eth.Length)
+ }
+ binary.BigEndian.PutUint16(bytes[12:], eth.Length)
+ } else {
+ binary.BigEndian.PutUint16(bytes[12:], uint16(eth.EthernetType))
+ }
+ length := len(b.Bytes())
+ if length < 60 {
+ // Pad out to 60 bytes.
+ padding, err := b.AppendBytes(60 - length)
+ if err != nil {
+ return err
+ }
+ copy(padding, lotsOfZeros[:])
+ }
+ return nil
+}
+
+func (eth *Ethernet) CanDecode() gopacket.LayerClass {
+ return LayerTypeEthernet
+}
+
+func (eth *Ethernet) NextLayerType() gopacket.LayerType {
+ return eth.EthernetType.LayerType()
+}
+
+func decodeEthernet(data []byte, p gopacket.PacketBuilder) error {
+ eth := &Ethernet{}
+ err := eth.DecodeFromBytes(data, p)
+ if err != nil {
+ return err
+ }
+ p.AddLayer(eth)
+ p.SetLinkLayer(eth)
+ return p.NextDecoder(eth.EthernetType)
+}
diff --git a/vendor/github.com/google/gopacket/layers/fddi.go b/vendor/github.com/google/gopacket/layers/fddi.go
new file mode 100644
index 0000000..ed9e195
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/fddi.go
@@ -0,0 +1,41 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "github.com/google/gopacket"
+ "net"
+)
+
+// FDDI contains the header for FDDI frames.
+type FDDI struct {
+ BaseLayer
+ FrameControl FDDIFrameControl
+ Priority uint8
+ SrcMAC, DstMAC net.HardwareAddr
+}
+
+// LayerType returns LayerTypeFDDI.
+func (f *FDDI) LayerType() gopacket.LayerType { return LayerTypeFDDI }
+
+// LinkFlow returns a new flow of type EndpointMAC.
+func (f *FDDI) LinkFlow() gopacket.Flow {
+ return gopacket.NewFlow(EndpointMAC, f.SrcMAC, f.DstMAC)
+}
+
+func decodeFDDI(data []byte, p gopacket.PacketBuilder) error {
+ f := &FDDI{
+ FrameControl: FDDIFrameControl(data[0] & 0xF8),
+ Priority: data[0] & 0x07,
+ SrcMAC: net.HardwareAddr(data[1:7]),
+ DstMAC: net.HardwareAddr(data[7:13]),
+ BaseLayer: BaseLayer{data[:13], data[13:]},
+ }
+ p.SetLinkLayer(f)
+ p.AddLayer(f)
+ return p.NextDecoder(f.FrameControl)
+}
diff --git a/vendor/github.com/google/gopacket/layers/gen.go b/vendor/github.com/google/gopacket/layers/gen.go
new file mode 100644
index 0000000..ab7a0c0
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/gen.go
@@ -0,0 +1,109 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build ignore
+
+// This binary pulls known ports from IANA, and uses them to populate
+// iana_ports.go's TCPPortNames and UDPPortNames maps.
+//
+// go run gen.go | gofmt > iana_ports.go
+package main
+
+import (
+ "bytes"
+ "encoding/xml"
+ "flag"
+ "fmt"
+ "io/ioutil"
+ "net/http"
+ "os"
+ "strconv"
+ "time"
+)
+
+const fmtString = `// Copyright 2012 Google, Inc. All rights reserved.
+
+package layers
+
+// Created by gen.go, don't edit manually
+// Generated at %s
+// Fetched from %q
+
+// TCPPortNames contains the port names for all TCP ports.
+var TCPPortNames = tcpPortNames
+
+// UDPPortNames contains the port names for all UDP ports.
+var UDPPortNames = udpPortNames
+
+// SCTPPortNames contains the port names for all SCTP ports.
+var SCTPPortNames = sctpPortNames
+
+var tcpPortNames = map[TCPPort]string{
+%s}
+var udpPortNames = map[UDPPort]string{
+%s}
+var sctpPortNames = map[SCTPPort]string{
+%s}
+`
+
+var url = flag.String("url", "http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml", "URL to grab port numbers from")
+
+func main() {
+ fmt.Fprintf(os.Stderr, "Fetching ports from %q\n", *url)
+ resp, err := http.Get(*url)
+ if err != nil {
+ panic(err)
+ }
+ defer resp.Body.Close()
+ body, err := ioutil.ReadAll(resp.Body)
+ if err != nil {
+ panic(err)
+ }
+ fmt.Fprintln(os.Stderr, "Parsing XML")
+ var registry struct {
+ Records []struct {
+ Protocol string `xml:"protocol"`
+ Number string `xml:"number"`
+ Name string `xml:"name"`
+ } `xml:"record"`
+ }
+ xml.Unmarshal(body, &registry)
+ var tcpPorts bytes.Buffer
+ var udpPorts bytes.Buffer
+ var sctpPorts bytes.Buffer
+ done := map[string]map[int]bool{
+ "tcp": map[int]bool{},
+ "udp": map[int]bool{},
+ "sctp": map[int]bool{},
+ }
+ for _, r := range registry.Records {
+ port, err := strconv.Atoi(r.Number)
+ if err != nil {
+ continue
+ }
+ if r.Name == "" {
+ continue
+ }
+ var b *bytes.Buffer
+ switch r.Protocol {
+ case "tcp":
+ b = &tcpPorts
+ case "udp":
+ b = &udpPorts
+ case "sctp":
+ b = &sctpPorts
+ default:
+ continue
+ }
+ if done[r.Protocol][port] {
+ continue
+ }
+ done[r.Protocol][port] = true
+ fmt.Fprintf(b, "\t%d: %q,\n", port, r.Name)
+ }
+ fmt.Fprintln(os.Stderr, "Writing results to stdout")
+ fmt.Printf(fmtString, time.Now(), *url, tcpPorts.String(), udpPorts.String(), sctpPorts.String())
+}
diff --git a/vendor/github.com/google/gopacket/layers/gen_linted.sh b/vendor/github.com/google/gopacket/layers/gen_linted.sh
new file mode 100644
index 0000000..75c701f
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/gen_linted.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+for i in *.go; do golint $i | grep -q . || echo $i; done > .linted
diff --git a/vendor/github.com/google/gopacket/layers/geneve.go b/vendor/github.com/google/gopacket/layers/geneve.go
new file mode 100644
index 0000000..6dc05cf
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/geneve.go
@@ -0,0 +1,98 @@
+// Copyright 2016 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+
+ "github.com/google/gopacket"
+)
+
+// Geneve is specifed here https://tools.ietf.org/html/draft-ietf-nvo3-geneve-03
+// Geneve Header:
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |Ver| Opt Len |O|C| Rsvd. | Protocol Type |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Virtual Network Identifier (VNI) | Reserved |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Variable Length Options |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+type Geneve struct {
+ BaseLayer
+ Version uint8 // 2 bits
+ OptionsLength uint8 // 6 bits
+ OAMPacket bool // 1 bits
+ CriticalOption bool // 1 bits
+ Protocol EthernetType // 16 bits
+ VNI uint32 // 24bits
+ Options []*GeneveOption
+}
+
+// Geneve Tunnel Options
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Option Class | Type |R|R|R| Length |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Variable Option Data |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+type GeneveOption struct {
+ Class uint16 // 16 bits
+ Type uint8 // 8 bits
+ Flags uint8 // 3 bits
+ Length uint8 // 5 bits
+ Data []byte
+}
+
+// LayerType returns LayerTypeGeneve
+func (gn *Geneve) LayerType() gopacket.LayerType { return LayerTypeGeneve }
+
+func decodeGeneveOption(data []byte, gn *Geneve) (*GeneveOption, uint8) {
+ opt := &GeneveOption{}
+
+ opt.Class = binary.BigEndian.Uint16(data[0:1])
+ opt.Type = data[2]
+ opt.Flags = data[3] >> 4
+ opt.Length = data[3] & 0xf
+
+ copy(opt.Data, data[4:opt.Length])
+
+ return opt, 4 + opt.Length
+}
+
+func (gn *Geneve) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ gn.Version = data[0] >> 7
+ gn.OptionsLength = data[0] & 0x3f
+
+ gn.OAMPacket = data[1]&0x80 > 0
+ gn.CriticalOption = data[1]&0x40 > 0
+ gn.Protocol = EthernetType(binary.BigEndian.Uint16(data[2:4]))
+
+ var buf [4]byte
+ copy(buf[1:], data[4:7])
+ gn.VNI = binary.BigEndian.Uint32(buf[:])
+
+ offset, length := uint8(8), gn.OptionsLength
+ for length > 0 {
+ opt, len := decodeGeneveOption(data[offset:], gn)
+ gn.Options = append(gn.Options, opt)
+
+ length -= len
+ offset += len
+ }
+
+ gn.BaseLayer = BaseLayer{data[:offset], data[offset:]}
+
+ return nil
+}
+
+func (gn *Geneve) NextLayerType() gopacket.LayerType {
+ return gn.Protocol.LayerType()
+}
+
+func decodeGeneve(data []byte, p gopacket.PacketBuilder) error {
+ gn := &Geneve{}
+ return decodingLayerDecoder(gn, data, p)
+}
diff --git a/vendor/github.com/google/gopacket/layers/geneve_test.go b/vendor/github.com/google/gopacket/layers/geneve_test.go
new file mode 100644
index 0000000..ee34d52
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/geneve_test.go
@@ -0,0 +1,108 @@
+// Copyright 2016 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "reflect"
+ "testing"
+
+ "github.com/google/gopacket"
+)
+
+var testPacketGeneve1 = []byte{
+ 0x00, 0x04, 0x00, 0x01, 0x00, 0x06, 0xfa, 0x16, 0x3e, 0x23, 0xd3, 0x42,
+ 0x00, 0x00, 0x08, 0x00, 0x45, 0x00, 0x00, 0x86, 0x87, 0x39, 0x40, 0x00,
+ 0x40, 0x11, 0x31, 0x35, 0xc0, 0xa8, 0x00, 0x53, 0xc0, 0xa8, 0x00, 0x55,
+ 0x31, 0x57, 0x17, 0xc1, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x65, 0x58,
+ 0x00, 0x00, 0x00, 0x00, 0xba, 0x09, 0x60, 0x5f, 0xa0, 0x91, 0xa2, 0xfe,
+ 0x54, 0x48, 0x88, 0x51, 0x08, 0x00, 0x45, 0x00, 0x00, 0x54, 0x01, 0xf6,
+ 0x40, 0x00, 0x40, 0x01, 0xb7, 0x5f, 0xc0, 0xa8, 0x00, 0x01, 0xc0, 0xa8,
+ 0x00, 0x02, 0x08, 0x00, 0x79, 0xdf, 0x0c, 0xfa, 0x63, 0xc4, 0x03, 0x0b,
+ 0x50, 0x58, 0x00, 0x00, 0x00, 0x00, 0xee, 0x2b, 0x0d, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
+ 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25,
+ 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31,
+ 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+}
+
+var testPacketGeneve2 = []byte{
+ 0x12, 0xbe, 0x4e, 0xb6, 0xa7, 0xc7, 0x02, 0x88, 0x0a, 0x81, 0xbd, 0x6d,
+ 0x08, 0x00, 0x45, 0x00, 0x00, 0x86, 0x20, 0xf2, 0x00, 0x00, 0x40, 0x11,
+ 0x01, 0x52, 0xac, 0x10, 0x00, 0x01, 0xac, 0x10, 0x00, 0x02, 0x40, 0xa6,
+ 0x17, 0xc1, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x65, 0x58, 0x00, 0x00,
+ 0x0a, 0x00, 0xd2, 0x8c, 0xdb, 0x12, 0x53, 0xd5, 0x8e, 0xab, 0xa2, 0xa5,
+ 0x02, 0xf7, 0x08, 0x00, 0x45, 0x00, 0x00, 0x54, 0x38, 0x1a, 0x40, 0x00,
+ 0x40, 0x01, 0x81, 0x3b, 0xc0, 0xa8, 0x00, 0x01, 0xc0, 0xa8, 0x00, 0x02,
+ 0x08, 0x00, 0xdd, 0x9d, 0x7e, 0xde, 0x02, 0xc3, 0xcb, 0x07, 0x51, 0x58,
+ 0x00, 0x00, 0x00, 0x00, 0xba, 0x8d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b,
+ 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33,
+ 0x34, 0x35, 0x36, 0x37,
+}
+
+func TestDecodeGeneve1(t *testing.T) {
+ p := gopacket.NewPacket(testPacketGeneve1, LinkTypeLinuxSLL, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{
+ LayerTypeLinuxSLL, LayerTypeIPv4, LayerTypeUDP, LayerTypeGeneve,
+ LayerTypeEthernet, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload,
+ }, t)
+ if got, ok := p.Layer(LayerTypeGeneve).(*Geneve); ok {
+ want := &Geneve{
+ BaseLayer: BaseLayer{
+ Contents: testPacketGeneve1[44:52],
+ Payload: testPacketGeneve1[52:150],
+ },
+ Version: 0x0,
+ OptionsLength: 0x0,
+ OAMPacket: false,
+ CriticalOption: false,
+ Protocol: EthernetTypeTransparentEthernetBridging,
+ VNI: 0x0,
+ }
+ if !reflect.DeepEqual(want, got) {
+ t.Errorf("Geneve layer mismatch, \nwant %#v\ngot %#v\n", want, got)
+ }
+ }
+}
+
+func TestDecodeGeneve2(t *testing.T) {
+ p := gopacket.NewPacket(testPacketGeneve2, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{
+ LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeGeneve,
+ LayerTypeEthernet, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload,
+ }, t)
+ if got, ok := p.Layer(LayerTypeGeneve).(*Geneve); ok {
+ want := &Geneve{
+ BaseLayer: BaseLayer{
+ Contents: testPacketGeneve2[42:50],
+ Payload: testPacketGeneve2[50:148],
+ },
+ Version: 0x0,
+ OptionsLength: 0x0,
+ OAMPacket: false,
+ CriticalOption: false,
+ Protocol: EthernetTypeTransparentEthernetBridging,
+ VNI: 0xa,
+ }
+ if !reflect.DeepEqual(want, got) {
+ t.Errorf("Geneve layer mismatch, \nwant %#v\ngot %#v\n", want, got)
+ }
+ }
+}
+
+func BenchmarkDecodeGeneve1(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketGeneve1, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
diff --git a/vendor/github.com/google/gopacket/layers/gre.go b/vendor/github.com/google/gopacket/layers/gre.go
new file mode 100644
index 0000000..15d5290
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/gre.go
@@ -0,0 +1,185 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+
+ "github.com/google/gopacket"
+)
+
+// GRE is a Generic Routing Encapsulation header.
+type GRE struct {
+ BaseLayer
+ ChecksumPresent, RoutingPresent, KeyPresent, SeqPresent, StrictSourceRoute bool
+ RecursionControl, Flags, Version uint8
+ Protocol EthernetType
+ Checksum, Offset uint16
+ Key, Seq uint32
+ *GRERouting
+}
+
+// GRERouting is GRE routing information, present if the RoutingPresent flag is
+// set.
+type GRERouting struct {
+ AddressFamily uint16
+ SREOffset, SRELength uint8
+ RoutingInformation []byte
+ Next *GRERouting
+}
+
+// LayerType returns gopacket.LayerTypeGRE.
+func (g *GRE) LayerType() gopacket.LayerType { return LayerTypeGRE }
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (g *GRE) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ g.ChecksumPresent = data[0]&0x80 != 0
+ g.RoutingPresent = data[0]&0x40 != 0
+ g.KeyPresent = data[0]&0x20 != 0
+ g.SeqPresent = data[0]&0x10 != 0
+ g.StrictSourceRoute = data[0]&0x08 != 0
+ g.RecursionControl = data[0] & 0x7
+ g.Flags = data[1] >> 3
+ g.Version = data[1] & 0x7
+ g.Protocol = EthernetType(binary.BigEndian.Uint16(data[2:4]))
+ offset := 4
+ if g.ChecksumPresent || g.RoutingPresent {
+ g.Checksum = binary.BigEndian.Uint16(data[offset : offset+2])
+ g.Offset = binary.BigEndian.Uint16(data[offset+2 : offset+4])
+ offset += 4
+ }
+ if g.KeyPresent {
+ g.Key = binary.BigEndian.Uint32(data[offset : offset+4])
+ offset += 4
+ }
+ if g.SeqPresent {
+ g.Seq = binary.BigEndian.Uint32(data[offset : offset+4])
+ offset += 4
+ }
+ if g.RoutingPresent {
+ tail := &g.GRERouting
+ for {
+ sre := &GRERouting{
+ AddressFamily: binary.BigEndian.Uint16(data[offset : offset+2]),
+ SREOffset: data[offset+2],
+ SRELength: data[offset+3],
+ }
+ sre.RoutingInformation = data[offset+4 : offset+4+int(sre.SRELength)]
+ offset += 4 + int(sre.SRELength)
+ if sre.AddressFamily == 0 && sre.SRELength == 0 {
+ break
+ }
+ (*tail) = sre
+ tail = &sre.Next
+ }
+ }
+ g.BaseLayer = BaseLayer{data[:offset], data[offset:]}
+ return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the SerializationBuffer,
+// implementing gopacket.SerializableLayer. See the docs for gopacket.SerializableLayer for more info.
+func (g *GRE) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ size := 4
+ if g.ChecksumPresent || g.RoutingPresent {
+ size += 4
+ }
+ if g.KeyPresent {
+ size += 4
+ }
+ if g.SeqPresent {
+ size += 4
+ }
+ if g.RoutingPresent {
+ r := g.GRERouting
+ for r != nil {
+ size += 4 + int(r.SRELength)
+ r = r.Next
+ }
+ size += 4
+ }
+ buf, err := b.PrependBytes(size)
+ if err != nil {
+ return err
+ }
+ // Reset any potentially dirty memory in the first 2 bytes, as these use OR to set flags.
+ buf[0] = 0
+ buf[1] = 0
+ if g.ChecksumPresent {
+ buf[0] |= 0x80
+ }
+ if g.RoutingPresent {
+ buf[0] |= 0x40
+ }
+ if g.KeyPresent {
+ buf[0] |= 0x20
+ }
+ if g.SeqPresent {
+ buf[0] |= 0x10
+ }
+ if g.StrictSourceRoute {
+ buf[0] |= 0x08
+ }
+ buf[0] |= g.RecursionControl
+ buf[1] |= g.Flags << 3
+ buf[1] |= g.Version
+ binary.BigEndian.PutUint16(buf[2:4], uint16(g.Protocol))
+ offset := 4
+ if g.ChecksumPresent || g.RoutingPresent {
+ // Don't write the checksum value yet, as we may need to compute it,
+ // which requires the entire header be complete.
+ // Instead we zeroize the memory in case it is dirty.
+ buf[offset] = 0
+ buf[offset+1] = 0
+ binary.BigEndian.PutUint16(buf[offset+2:offset+4], g.Offset)
+ offset += 4
+ }
+ if g.KeyPresent {
+ binary.BigEndian.PutUint32(buf[offset:offset+4], g.Key)
+ offset += 4
+ }
+ if g.SeqPresent {
+ binary.BigEndian.PutUint32(buf[offset:offset+4], g.Seq)
+ offset += 4
+ }
+ if g.RoutingPresent {
+ sre := g.GRERouting
+ for sre != nil {
+ binary.BigEndian.PutUint16(buf[offset:offset+2], sre.AddressFamily)
+ buf[offset+2] = sre.SREOffset
+ buf[offset+3] = sre.SRELength
+ copy(buf[offset+4:offset+4+int(sre.SRELength)], sre.RoutingInformation)
+ offset += 4 + int(sre.SRELength)
+ sre = sre.Next
+ }
+ // Terminate routing field with a "NULL" SRE.
+ binary.BigEndian.PutUint32(buf[offset:offset+4], 0)
+ }
+ if g.ChecksumPresent {
+ if opts.ComputeChecksums {
+ g.Checksum = tcpipChecksum(b.Bytes(), 0)
+ }
+
+ binary.BigEndian.PutUint16(buf[4:6], g.Checksum)
+ }
+ return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (g *GRE) CanDecode() gopacket.LayerClass {
+ return LayerTypeGRE
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (g *GRE) NextLayerType() gopacket.LayerType {
+ return g.Protocol.LayerType()
+}
+
+func decodeGRE(data []byte, p gopacket.PacketBuilder) error {
+ g := &GRE{}
+ return decodingLayerDecoder(g, data, p)
+}
diff --git a/vendor/github.com/google/gopacket/layers/gre_test.go b/vendor/github.com/google/gopacket/layers/gre_test.go
new file mode 100644
index 0000000..af2e38e
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/gre_test.go
@@ -0,0 +1,389 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+package layers
+
+import (
+ "fmt"
+ "net"
+ "reflect"
+ "testing"
+
+ "github.com/google/gopacket"
+)
+
+// testPacketGRE is the packet:
+// 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
+// 0x0000: 3a56 6b69 595e 8e7a 12c3 a971 0800 4500 :VkiY^.z...q..E.
+// 0x0010: 006c 843c 4000 402f 32d3 c0a8 0101 c0a8 .l.<@.@/2.......
+// 0x0020: 0102 0000 0800 4500 0054 0488 4000 4001 ......E..T..@.@.
+// 0x0030: dafe ac10 0101 ac10 0201 0800 82c4 1274 ...............t
+// 0x0040: 0001 c892 a354 0000 0000 380c 0000 0000 .....T....8.....
+// 0x0050: 0000 1011 1213 1415 1617 1819 1a1b 1c1d ................
+// 0x0060: 1e1f 2021 2223 2425 2627 2829 2a2b 2c2d ...!"#$%&'()*+,-
+// 0x0070: 2e2f 3031 3233 3435 3637 ./01234567
+var testPacketGRE = []byte{
+ 0x3a, 0x56, 0x6b, 0x69, 0x59, 0x5e, 0x8e, 0x7a, 0x12, 0xc3, 0xa9, 0x71, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0x6c, 0x84, 0x3c, 0x40, 0x00, 0x40, 0x2f, 0x32, 0xd3, 0xc0, 0xa8, 0x01, 0x01, 0xc0, 0xa8,
+ 0x01, 0x02, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00, 0x00, 0x54, 0x04, 0x88, 0x40, 0x00, 0x40, 0x01,
+ 0xda, 0xfe, 0xac, 0x10, 0x01, 0x01, 0xac, 0x10, 0x02, 0x01, 0x08, 0x00, 0x82, 0xc4, 0x12, 0x74,
+ 0x00, 0x01, 0xc8, 0x92, 0xa3, 0x54, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d,
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+}
+
+func TestPacketGRE(t *testing.T) {
+ p := gopacket.NewPacket(testPacketGRE, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeGRE, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)
+ if got, ok := p.Layer(LayerTypeGRE).(*GRE); ok {
+ want := &GRE{
+ BaseLayer: BaseLayer{testPacketGRE[34:38], testPacketGRE[38:]},
+ Protocol: EthernetTypeIPv4,
+ }
+ if !reflect.DeepEqual(want, got) {
+ t.Errorf("GRE layer mismatch, \nwant %#v\ngot %#v\n", want, got)
+ }
+ }
+}
+
+func BenchmarkDecodePacketGRE(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketGRE, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+var testIPv4OverGRE = []gopacket.SerializableLayer{
+ &Ethernet{
+ SrcMAC: net.HardwareAddr{142, 122, 18, 195, 169, 113},
+ DstMAC: net.HardwareAddr{58, 86, 107, 105, 89, 94},
+ EthernetType: EthernetTypeIPv4,
+ },
+ &IPv4{
+ Version: 4,
+ SrcIP: net.IP{192, 168, 1, 1},
+ DstIP: net.IP{192, 168, 1, 2},
+ Protocol: IPProtocolGRE,
+ Flags: IPv4DontFragment,
+ TTL: 64,
+ Id: 33852,
+ IHL: 5,
+ },
+ &GRE{
+ Protocol: EthernetTypeIPv4,
+ },
+ &IPv4{
+ Version: 4,
+ SrcIP: net.IP{172, 16, 1, 1},
+ DstIP: net.IP{172, 16, 2, 1},
+ Protocol: IPProtocolICMPv4,
+ Flags: IPv4DontFragment,
+ TTL: 64,
+ IHL: 5,
+ Id: 1160,
+ },
+ &ICMPv4{
+ TypeCode: CreateICMPv4TypeCode(ICMPv4TypeEchoRequest, 0),
+ Id: 4724,
+ Seq: 1,
+ },
+ gopacket.Payload{
+ 0xc8, 0x92, 0xa3, 0x54, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ },
+}
+
+func TestIPv4OverGREEncode(t *testing.T) {
+ b := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{
+ ComputeChecksums: true,
+ FixLengths: true,
+ }
+ if err := gopacket.SerializeLayers(b, opts, testIPv4OverGRE...); err != nil {
+ t.Errorf("Unable to serialize: %v", err)
+ }
+ p := gopacket.NewPacket(b.Bytes(), LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeGRE, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)
+ if got, want := b.Bytes(), testPacketGRE; !reflect.DeepEqual(want, got) {
+ t.Errorf("Encoding mismatch, \nwant: %v\ngot %v\n", want, got)
+ }
+}
+
+func BenchmarkEncodePacketGRE(b *testing.B) {
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{
+ ComputeChecksums: true,
+ FixLengths: true,
+ }
+ for i := 0; i < b.N; i++ {
+ gopacket.SerializeLayers(buf, opts, testIPv4OverGRE...)
+ buf.Clear()
+ }
+}
+
+// testPacketEthernetOverGRE is the packet:
+// 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
+// 0x0000: ea6b 4cd3 5513 d6b9 d880 56ef 0800 4500 .kL.U.....V...E.
+// 0x0010: 007a 0acd 4000 402f ac34 c0a8 0101 c0a8 .z..@.@/.4......
+// 0x0020: 0102 0000 6558 aa6a 36e6 c630 6e32 3ec7 ....eX.j6..0n2>.
+// 0x0030: 9def 0800 4500 0054 d970 4000 4001 0715 ....E..T.p@.@...
+// 0x0040: ac10 0101 ac10 0102 0800 3f15 0f02 0001 ..........?.....
+// 0x0050: 82d9 b154 0000 0000 b5e6 0100 0000 0000 ...T............
+// 0x0060: 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f ................
+// 0x0070: 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f .!"#$%&'()*+,-./
+// 0x0080: 3031 3233 3435 3637 01234567
+var testPacketEthernetOverGRE = []byte{
+ 0xea, 0x6b, 0x4c, 0xd3, 0x55, 0x13, 0xd6, 0xb9, 0xd8, 0x80, 0x56, 0xef, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0x7a, 0x0a, 0xcd, 0x40, 0x00, 0x40, 0x2f, 0xac, 0x34, 0xc0, 0xa8, 0x01, 0x01, 0xc0, 0xa8,
+ 0x01, 0x02, 0x00, 0x00, 0x65, 0x58, 0xaa, 0x6a, 0x36, 0xe6, 0xc6, 0x30, 0x6e, 0x32, 0x3e, 0xc7,
+ 0x9d, 0xef, 0x08, 0x00, 0x45, 0x00, 0x00, 0x54, 0xd9, 0x70, 0x40, 0x00, 0x40, 0x01, 0x07, 0x15,
+ 0xac, 0x10, 0x01, 0x01, 0xac, 0x10, 0x01, 0x02, 0x08, 0x00, 0x3f, 0x15, 0x0f, 0x02, 0x00, 0x01,
+ 0x82, 0xd9, 0xb1, 0x54, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xe6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+}
+
+func TestPacketEthernetOverGRE(t *testing.T) {
+ p := gopacket.NewPacket(testPacketEthernetOverGRE, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeGRE, LayerTypeEthernet, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)
+ if got, ok := p.Layer(LayerTypeGRE).(*GRE); ok {
+ want := &GRE{
+ BaseLayer: BaseLayer{testPacketEthernetOverGRE[34:38], testPacketEthernetOverGRE[38:]},
+ Protocol: EthernetTypeTransparentEthernetBridging,
+ }
+ if !reflect.DeepEqual(want, got) {
+ t.Errorf("GRE layer mismatch, \nwant %#v\ngot %#v\n", want, got)
+ }
+ }
+}
+
+func BenchmarkDecodePacketEthernetOverGRE(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketEthernetOverGRE, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+var testEthernetOverGRE = []gopacket.SerializableLayer{
+ &Ethernet{
+ SrcMAC: net.HardwareAddr{0xd6, 0xb9, 0xd8, 0x80, 0x56, 0xef},
+ DstMAC: net.HardwareAddr{0xea, 0x6b, 0x4c, 0xd3, 0x55, 0x13},
+ EthernetType: EthernetTypeIPv4,
+ },
+ &IPv4{
+ Version: 4,
+ SrcIP: net.IP{192, 168, 1, 1},
+ DstIP: net.IP{192, 168, 1, 2},
+ Protocol: IPProtocolGRE,
+ Flags: IPv4DontFragment,
+ TTL: 64,
+ Id: 2765,
+ IHL: 5,
+ },
+ &GRE{
+ Protocol: EthernetTypeTransparentEthernetBridging,
+ },
+ &Ethernet{
+ SrcMAC: net.HardwareAddr{0x6e, 0x32, 0x3e, 0xc7, 0x9d, 0xef},
+ DstMAC: net.HardwareAddr{0xaa, 0x6a, 0x36, 0xe6, 0xc6, 0x30},
+ EthernetType: EthernetTypeIPv4,
+ },
+ &IPv4{
+ Version: 4,
+ SrcIP: net.IP{172, 16, 1, 1},
+ DstIP: net.IP{172, 16, 1, 2},
+ Protocol: IPProtocolICMPv4,
+ Flags: IPv4DontFragment,
+ TTL: 64,
+ IHL: 5,
+ Id: 55664,
+ },
+ &ICMPv4{
+ TypeCode: CreateICMPv4TypeCode(ICMPv4TypeEchoRequest, 0),
+ Id: 3842,
+ Seq: 1,
+ },
+ gopacket.Payload{
+ 0x82, 0xd9, 0xb1, 0x54, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xe6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ },
+}
+
+func TestEthernetOverGREEncode(t *testing.T) {
+ b := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{
+ ComputeChecksums: true,
+ FixLengths: true,
+ }
+ if err := gopacket.SerializeLayers(b, opts, testEthernetOverGRE...); err != nil {
+ t.Errorf("Unable to serialize: %v", err)
+ }
+ p := gopacket.NewPacket(b.Bytes(), LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeGRE, LayerTypeEthernet, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)
+ if got, want := b.Bytes(), testPacketEthernetOverGRE; !reflect.DeepEqual(want, got) {
+ t.Errorf("Encoding mismatch, \nwant: %v\ngot %v\n", want, got)
+ }
+}
+
+func BenchmarkEncodePacketEthernetOverGRE(b *testing.B) {
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{
+ ComputeChecksums: true,
+ FixLengths: true,
+ }
+ for i := 0; i < b.N; i++ {
+ gopacket.SerializeLayers(buf, opts, testEthernetOverGRE...)
+ buf.Clear()
+ }
+}
+
+var testGREChecksum = map[uint16][]gopacket.SerializableLayer{
+ 0x77ff: {
+ &Ethernet{
+ SrcMAC: net.HardwareAddr{0xc2, 0x00, 0x57, 0x75, 0x00, 0x00},
+ DstMAC: net.HardwareAddr{0xc2, 0x01, 0x57, 0x75, 0x00, 0x00},
+ EthernetType: EthernetTypeIPv4,
+ },
+ &IPv4{
+ Version: 4,
+ SrcIP: net.IP{10, 0, 0, 1},
+ DstIP: net.IP{10, 0, 0, 2},
+ Protocol: IPProtocolGRE,
+ TTL: 255,
+ Id: 10,
+ IHL: 5,
+ },
+ &GRE{
+ Protocol: EthernetTypeIPv4,
+ ChecksumPresent: true,
+ },
+ &IPv4{
+ Version: 4,
+ SrcIP: net.IP{1, 1, 1, 1},
+ DstIP: net.IP{2, 2, 2, 2},
+ Protocol: IPProtocolICMPv4,
+ TTL: 255,
+ IHL: 5,
+ Id: 10,
+ },
+ &ICMPv4{
+ TypeCode: CreateICMPv4TypeCode(ICMPv4TypeEchoRequest, 0),
+ Id: 2,
+ Seq: 0,
+ },
+ gopacket.Payload{
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xbe, 0x70, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ },
+ },
+ 0x8475: {
+ &Ethernet{
+ SrcMAC: net.HardwareAddr{0xc2, 0x00, 0x57, 0x75, 0x00, 0x00},
+ DstMAC: net.HardwareAddr{0xc2, 0x01, 0x57, 0x75, 0x00, 0x00},
+ EthernetType: EthernetTypeIPv4,
+ },
+ &IPv4{
+ Version: 4,
+ SrcIP: net.IP{10, 0, 0, 1},
+ DstIP: net.IP{10, 0, 0, 2},
+ Protocol: IPProtocolGRE,
+ TTL: 255,
+ Id: 10,
+ IHL: 5,
+ },
+ &GRE{
+ Protocol: EthernetTypeIPv4,
+ ChecksumPresent: true,
+ },
+ &IPv4{
+ Version: 4,
+ SrcIP: net.IP{2, 3, 4, 5},
+ DstIP: net.IP{2, 3, 4, 50},
+ Protocol: IPProtocolUDP,
+ TTL: 1,
+ IHL: 5,
+ Flags: IPv4DontFragment,
+ Id: 964,
+ },
+ &UDP{
+ SrcPort: 41781,
+ DstPort: 33434,
+ },
+ gopacket.Payload{
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ },
+ },
+}
+
+func TestGREChecksum(t *testing.T) {
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{
+ ComputeChecksums: true,
+ FixLengths: true,
+ }
+ for cksum, packet := range testGREChecksum {
+ buf.Clear()
+ if err := setNetworkLayer(packet); err != nil {
+ t.Errorf("Failed to set network layer: %v", err)
+ continue
+ }
+ if err := gopacket.SerializeLayers(buf, opts, packet...); err != nil {
+ t.Errorf("Failed to serialize packet: %v", err)
+ continue
+ }
+ p := gopacket.NewPacket(buf.Bytes(), LinkTypeEthernet, gopacket.Default)
+ t.Log(p)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ continue
+ }
+ if got, ok := p.Layer(LayerTypeGRE).(*GRE); ok {
+ if got.Checksum != cksum {
+ t.Errorf("Incorrect checksum calculated for GRE packet: want %v, got %v", cksum, got.Checksum)
+ }
+ }
+ }
+}
+
+func setNetworkLayer(layers []gopacket.SerializableLayer) error {
+ type setNetworkLayerForChecksum interface {
+ SetNetworkLayerForChecksum(gopacket.NetworkLayer) error
+ }
+ var l gopacket.NetworkLayer
+ for _, layer := range layers {
+ if n, ok := layer.(gopacket.NetworkLayer); ok {
+ l = n
+ }
+ if s, ok := layer.(setNetworkLayerForChecksum); ok {
+ if l == nil {
+ return fmt.Errorf("no enclosing network layer found before: %v", s)
+ }
+ if err := s.SetNetworkLayerForChecksum(l); err != nil {
+ return fmt.Errorf("failed to set network layer(%v) on layer(%v): %v", l, s, err)
+ }
+ }
+ }
+ return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/iana_ports.go b/vendor/github.com/google/gopacket/layers/iana_ports.go
new file mode 100644
index 0000000..c217a69
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/iana_ports.go
@@ -0,0 +1,11350 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+
+package layers
+
+// Created by gen.go, don't edit manually
+// Generated at 2017-09-19 13:08:22.987239325 -0600 MDT
+// Fetched from "http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml"
+
+// TCPPortNames contains the port names for all TCP ports.
+var TCPPortNames = tcpPortNames
+
+// UDPPortNames contains the port names for all UDP ports.
+var UDPPortNames = udpPortNames
+
+// SCTPPortNames contains the port names for all SCTP ports.
+var SCTPPortNames = sctpPortNames
+
+var tcpPortNames = map[TCPPort]string{
+ 1: "tcpmux",
+ 2: "compressnet",
+ 3: "compressnet",
+ 5: "rje",
+ 7: "echo",
+ 9: "discard",
+ 11: "systat",
+ 13: "daytime",
+ 17: "qotd",
+ 18: "msp",
+ 19: "chargen",
+ 20: "ftp-data",
+ 21: "ftp",
+ 22: "ssh",
+ 23: "telnet",
+ 25: "smtp",
+ 27: "nsw-fe",
+ 29: "msg-icp",
+ 31: "msg-auth",
+ 33: "dsp",
+ 37: "time",
+ 38: "rap",
+ 39: "rlp",
+ 41: "graphics",
+ 42: "name",
+ 43: "nicname",
+ 44: "mpm-flags",
+ 45: "mpm",
+ 46: "mpm-snd",
+ 48: "auditd",
+ 49: "tacacs",
+ 50: "re-mail-ck",
+ 52: "xns-time",
+ 53: "domain",
+ 54: "xns-ch",
+ 55: "isi-gl",
+ 56: "xns-auth",
+ 58: "xns-mail",
+ 62: "acas",
+ 63: "whoispp",
+ 64: "covia",
+ 65: "tacacs-ds",
+ 66: "sql-net",
+ 67: "bootps",
+ 68: "bootpc",
+ 69: "tftp",
+ 70: "gopher",
+ 71: "netrjs-1",
+ 72: "netrjs-2",
+ 73: "netrjs-3",
+ 74: "netrjs-4",
+ 76: "deos",
+ 78: "vettcp",
+ 79: "finger",
+ 80: "http",
+ 82: "xfer",
+ 83: "mit-ml-dev",
+ 84: "ctf",
+ 85: "mit-ml-dev",
+ 86: "mfcobol",
+ 88: "kerberos",
+ 89: "su-mit-tg",
+ 90: "dnsix",
+ 91: "mit-dov",
+ 92: "npp",
+ 93: "dcp",
+ 94: "objcall",
+ 95: "supdup",
+ 96: "dixie",
+ 97: "swift-rvf",
+ 98: "tacnews",
+ 99: "metagram",
+ 101: "hostname",
+ 102: "iso-tsap",
+ 103: "gppitnp",
+ 104: "acr-nema",
+ 105: "cso",
+ 106: "3com-tsmux",
+ 107: "rtelnet",
+ 108: "snagas",
+ 109: "pop2",
+ 110: "pop3",
+ 111: "sunrpc",
+ 112: "mcidas",
+ 113: "ident",
+ 115: "sftp",
+ 116: "ansanotify",
+ 117: "uucp-path",
+ 118: "sqlserv",
+ 119: "nntp",
+ 120: "cfdptkt",
+ 121: "erpc",
+ 122: "smakynet",
+ 123: "ntp",
+ 124: "ansatrader",
+ 125: "locus-map",
+ 126: "nxedit",
+ 127: "locus-con",
+ 128: "gss-xlicen",
+ 129: "pwdgen",
+ 130: "cisco-fna",
+ 131: "cisco-tna",
+ 132: "cisco-sys",
+ 133: "statsrv",
+ 134: "ingres-net",
+ 135: "epmap",
+ 136: "profile",
+ 137: "netbios-ns",
+ 138: "netbios-dgm",
+ 139: "netbios-ssn",
+ 140: "emfis-data",
+ 141: "emfis-cntl",
+ 142: "bl-idm",
+ 143: "imap",
+ 144: "uma",
+ 145: "uaac",
+ 146: "iso-tp0",
+ 147: "iso-ip",
+ 148: "jargon",
+ 149: "aed-512",
+ 150: "sql-net",
+ 151: "hems",
+ 152: "bftp",
+ 153: "sgmp",
+ 154: "netsc-prod",
+ 155: "netsc-dev",
+ 156: "sqlsrv",
+ 157: "knet-cmp",
+ 158: "pcmail-srv",
+ 159: "nss-routing",
+ 160: "sgmp-traps",
+ 161: "snmp",
+ 162: "snmptrap",
+ 163: "cmip-man",
+ 164: "cmip-agent",
+ 165: "xns-courier",
+ 166: "s-net",
+ 167: "namp",
+ 168: "rsvd",
+ 169: "send",
+ 170: "print-srv",
+ 171: "multiplex",
+ 172: "cl-1",
+ 173: "xyplex-mux",
+ 174: "mailq",
+ 175: "vmnet",
+ 176: "genrad-mux",
+ 177: "xdmcp",
+ 178: "nextstep",
+ 179: "bgp",
+ 180: "ris",
+ 181: "unify",
+ 182: "audit",
+ 183: "ocbinder",
+ 184: "ocserver",
+ 185: "remote-kis",
+ 186: "kis",
+ 187: "aci",
+ 188: "mumps",
+ 189: "qft",
+ 190: "gacp",
+ 191: "prospero",
+ 192: "osu-nms",
+ 193: "srmp",
+ 194: "irc",
+ 195: "dn6-nlm-aud",
+ 196: "dn6-smm-red",
+ 197: "dls",
+ 198: "dls-mon",
+ 199: "smux",
+ 200: "src",
+ 201: "at-rtmp",
+ 202: "at-nbp",
+ 203: "at-3",
+ 204: "at-echo",
+ 205: "at-5",
+ 206: "at-zis",
+ 207: "at-7",
+ 208: "at-8",
+ 209: "qmtp",
+ 210: "z39-50",
+ 211: "914c-g",
+ 212: "anet",
+ 213: "ipx",
+ 214: "vmpwscs",
+ 215: "softpc",
+ 216: "CAIlic",
+ 217: "dbase",
+ 218: "mpp",
+ 219: "uarps",
+ 220: "imap3",
+ 221: "fln-spx",
+ 222: "rsh-spx",
+ 223: "cdc",
+ 224: "masqdialer",
+ 242: "direct",
+ 243: "sur-meas",
+ 244: "inbusiness",
+ 245: "link",
+ 246: "dsp3270",
+ 247: "subntbcst-tftp",
+ 248: "bhfhs",
+ 256: "rap",
+ 257: "set",
+ 259: "esro-gen",
+ 260: "openport",
+ 261: "nsiiops",
+ 262: "arcisdms",
+ 263: "hdap",
+ 264: "bgmp",
+ 265: "x-bone-ctl",
+ 266: "sst",
+ 267: "td-service",
+ 268: "td-replica",
+ 269: "manet",
+ 271: "pt-tls",
+ 280: "http-mgmt",
+ 281: "personal-link",
+ 282: "cableport-ax",
+ 283: "rescap",
+ 284: "corerjd",
+ 286: "fxp",
+ 287: "k-block",
+ 308: "novastorbakcup",
+ 309: "entrusttime",
+ 310: "bhmds",
+ 311: "asip-webadmin",
+ 312: "vslmp",
+ 313: "magenta-logic",
+ 314: "opalis-robot",
+ 315: "dpsi",
+ 316: "decauth",
+ 317: "zannet",
+ 318: "pkix-timestamp",
+ 319: "ptp-event",
+ 320: "ptp-general",
+ 321: "pip",
+ 322: "rtsps",
+ 323: "rpki-rtr",
+ 324: "rpki-rtr-tls",
+ 333: "texar",
+ 344: "pdap",
+ 345: "pawserv",
+ 346: "zserv",
+ 347: "fatserv",
+ 348: "csi-sgwp",
+ 349: "mftp",
+ 350: "matip-type-a",
+ 351: "matip-type-b",
+ 352: "dtag-ste-sb",
+ 353: "ndsauth",
+ 354: "bh611",
+ 355: "datex-asn",
+ 356: "cloanto-net-1",
+ 357: "bhevent",
+ 358: "shrinkwrap",
+ 359: "nsrmp",
+ 360: "scoi2odialog",
+ 361: "semantix",
+ 362: "srssend",
+ 363: "rsvp-tunnel",
+ 364: "aurora-cmgr",
+ 365: "dtk",
+ 366: "odmr",
+ 367: "mortgageware",
+ 368: "qbikgdp",
+ 369: "rpc2portmap",
+ 370: "codaauth2",
+ 371: "clearcase",
+ 372: "ulistproc",
+ 373: "legent-1",
+ 374: "legent-2",
+ 375: "hassle",
+ 376: "nip",
+ 377: "tnETOS",
+ 378: "dsETOS",
+ 379: "is99c",
+ 380: "is99s",
+ 381: "hp-collector",
+ 382: "hp-managed-node",
+ 383: "hp-alarm-mgr",
+ 384: "arns",
+ 385: "ibm-app",
+ 386: "asa",
+ 387: "aurp",
+ 388: "unidata-ldm",
+ 389: "ldap",
+ 390: "uis",
+ 391: "synotics-relay",
+ 392: "synotics-broker",
+ 393: "meta5",
+ 394: "embl-ndt",
+ 395: "netcp",
+ 396: "netware-ip",
+ 397: "mptn",
+ 398: "kryptolan",
+ 399: "iso-tsap-c2",
+ 400: "osb-sd",
+ 401: "ups",
+ 402: "genie",
+ 403: "decap",
+ 404: "nced",
+ 405: "ncld",
+ 406: "imsp",
+ 407: "timbuktu",
+ 408: "prm-sm",
+ 409: "prm-nm",
+ 410: "decladebug",
+ 411: "rmt",
+ 412: "synoptics-trap",
+ 413: "smsp",
+ 414: "infoseek",
+ 415: "bnet",
+ 416: "silverplatter",
+ 417: "onmux",
+ 418: "hyper-g",
+ 419: "ariel1",
+ 420: "smpte",
+ 421: "ariel2",
+ 422: "ariel3",
+ 423: "opc-job-start",
+ 424: "opc-job-track",
+ 425: "icad-el",
+ 426: "smartsdp",
+ 427: "svrloc",
+ 428: "ocs-cmu",
+ 429: "ocs-amu",
+ 430: "utmpsd",
+ 431: "utmpcd",
+ 432: "iasd",
+ 433: "nnsp",
+ 434: "mobileip-agent",
+ 435: "mobilip-mn",
+ 436: "dna-cml",
+ 437: "comscm",
+ 438: "dsfgw",
+ 439: "dasp",
+ 440: "sgcp",
+ 441: "decvms-sysmgt",
+ 442: "cvc-hostd",
+ 443: "https",
+ 444: "snpp",
+ 445: "microsoft-ds",
+ 446: "ddm-rdb",
+ 447: "ddm-dfm",
+ 448: "ddm-ssl",
+ 449: "as-servermap",
+ 450: "tserver",
+ 451: "sfs-smp-net",
+ 452: "sfs-config",
+ 453: "creativeserver",
+ 454: "contentserver",
+ 455: "creativepartnr",
+ 456: "macon-tcp",
+ 457: "scohelp",
+ 458: "appleqtc",
+ 459: "ampr-rcmd",
+ 460: "skronk",
+ 461: "datasurfsrv",
+ 462: "datasurfsrvsec",
+ 463: "alpes",
+ 464: "kpasswd",
+ 465: "urd",
+ 466: "digital-vrc",
+ 467: "mylex-mapd",
+ 468: "photuris",
+ 469: "rcp",
+ 470: "scx-proxy",
+ 471: "mondex",
+ 472: "ljk-login",
+ 473: "hybrid-pop",
+ 474: "tn-tl-w1",
+ 475: "tcpnethaspsrv",
+ 476: "tn-tl-fd1",
+ 477: "ss7ns",
+ 478: "spsc",
+ 479: "iafserver",
+ 480: "iafdbase",
+ 481: "ph",
+ 482: "bgs-nsi",
+ 483: "ulpnet",
+ 484: "integra-sme",
+ 485: "powerburst",
+ 486: "avian",
+ 487: "saft",
+ 488: "gss-http",
+ 489: "nest-protocol",
+ 490: "micom-pfs",
+ 491: "go-login",
+ 492: "ticf-1",
+ 493: "ticf-2",
+ 494: "pov-ray",
+ 495: "intecourier",
+ 496: "pim-rp-disc",
+ 497: "retrospect",
+ 498: "siam",
+ 499: "iso-ill",
+ 500: "isakmp",
+ 501: "stmf",
+ 502: "mbap",
+ 503: "intrinsa",
+ 504: "citadel",
+ 505: "mailbox-lm",
+ 506: "ohimsrv",
+ 507: "crs",
+ 508: "xvttp",
+ 509: "snare",
+ 510: "fcp",
+ 511: "passgo",
+ 512: "exec",
+ 513: "login",
+ 514: "shell",
+ 515: "printer",
+ 516: "videotex",
+ 517: "talk",
+ 518: "ntalk",
+ 519: "utime",
+ 520: "efs",
+ 521: "ripng",
+ 522: "ulp",
+ 523: "ibm-db2",
+ 524: "ncp",
+ 525: "timed",
+ 526: "tempo",
+ 527: "stx",
+ 528: "custix",
+ 529: "irc-serv",
+ 530: "courier",
+ 531: "conference",
+ 532: "netnews",
+ 533: "netwall",
+ 534: "windream",
+ 535: "iiop",
+ 536: "opalis-rdv",
+ 537: "nmsp",
+ 538: "gdomap",
+ 539: "apertus-ldp",
+ 540: "uucp",
+ 541: "uucp-rlogin",
+ 542: "commerce",
+ 543: "klogin",
+ 544: "kshell",
+ 545: "appleqtcsrvr",
+ 546: "dhcpv6-client",
+ 547: "dhcpv6-server",
+ 548: "afpovertcp",
+ 549: "idfp",
+ 550: "new-rwho",
+ 551: "cybercash",
+ 552: "devshr-nts",
+ 553: "pirp",
+ 554: "rtsp",
+ 555: "dsf",
+ 556: "remotefs",
+ 557: "openvms-sysipc",
+ 558: "sdnskmp",
+ 559: "teedtap",
+ 560: "rmonitor",
+ 561: "monitor",
+ 562: "chshell",
+ 563: "nntps",
+ 564: "9pfs",
+ 565: "whoami",
+ 566: "streettalk",
+ 567: "banyan-rpc",
+ 568: "ms-shuttle",
+ 569: "ms-rome",
+ 570: "meter",
+ 571: "meter",
+ 572: "sonar",
+ 573: "banyan-vip",
+ 574: "ftp-agent",
+ 575: "vemmi",
+ 576: "ipcd",
+ 577: "vnas",
+ 578: "ipdd",
+ 579: "decbsrv",
+ 580: "sntp-heartbeat",
+ 581: "bdp",
+ 582: "scc-security",
+ 583: "philips-vc",
+ 584: "keyserver",
+ 586: "password-chg",
+ 587: "submission",
+ 588: "cal",
+ 589: "eyelink",
+ 590: "tns-cml",
+ 591: "http-alt",
+ 592: "eudora-set",
+ 593: "http-rpc-epmap",
+ 594: "tpip",
+ 595: "cab-protocol",
+ 596: "smsd",
+ 597: "ptcnameservice",
+ 598: "sco-websrvrmg3",
+ 599: "acp",
+ 600: "ipcserver",
+ 601: "syslog-conn",
+ 602: "xmlrpc-beep",
+ 603: "idxp",
+ 604: "tunnel",
+ 605: "soap-beep",
+ 606: "urm",
+ 607: "nqs",
+ 608: "sift-uft",
+ 609: "npmp-trap",
+ 610: "npmp-local",
+ 611: "npmp-gui",
+ 612: "hmmp-ind",
+ 613: "hmmp-op",
+ 614: "sshell",
+ 615: "sco-inetmgr",
+ 616: "sco-sysmgr",
+ 617: "sco-dtmgr",
+ 618: "dei-icda",
+ 619: "compaq-evm",
+ 620: "sco-websrvrmgr",
+ 621: "escp-ip",
+ 622: "collaborator",
+ 623: "oob-ws-http",
+ 624: "cryptoadmin",
+ 625: "dec-dlm",
+ 626: "asia",
+ 627: "passgo-tivoli",
+ 628: "qmqp",
+ 629: "3com-amp3",
+ 630: "rda",
+ 631: "ipp",
+ 632: "bmpp",
+ 633: "servstat",
+ 634: "ginad",
+ 635: "rlzdbase",
+ 636: "ldaps",
+ 637: "lanserver",
+ 638: "mcns-sec",
+ 639: "msdp",
+ 640: "entrust-sps",
+ 641: "repcmd",
+ 642: "esro-emsdp",
+ 643: "sanity",
+ 644: "dwr",
+ 645: "pssc",
+ 646: "ldp",
+ 647: "dhcp-failover",
+ 648: "rrp",
+ 649: "cadview-3d",
+ 650: "obex",
+ 651: "ieee-mms",
+ 652: "hello-port",
+ 653: "repscmd",
+ 654: "aodv",
+ 655: "tinc",
+ 656: "spmp",
+ 657: "rmc",
+ 658: "tenfold",
+ 660: "mac-srvr-admin",
+ 661: "hap",
+ 662: "pftp",
+ 663: "purenoise",
+ 664: "oob-ws-https",
+ 665: "sun-dr",
+ 666: "mdqs",
+ 667: "disclose",
+ 668: "mecomm",
+ 669: "meregister",
+ 670: "vacdsm-sws",
+ 671: "vacdsm-app",
+ 672: "vpps-qua",
+ 673: "cimplex",
+ 674: "acap",
+ 675: "dctp",
+ 676: "vpps-via",
+ 677: "vpp",
+ 678: "ggf-ncp",
+ 679: "mrm",
+ 680: "entrust-aaas",
+ 681: "entrust-aams",
+ 682: "xfr",
+ 683: "corba-iiop",
+ 684: "corba-iiop-ssl",
+ 685: "mdc-portmapper",
+ 686: "hcp-wismar",
+ 687: "asipregistry",
+ 688: "realm-rusd",
+ 689: "nmap",
+ 690: "vatp",
+ 691: "msexch-routing",
+ 692: "hyperwave-isp",
+ 693: "connendp",
+ 694: "ha-cluster",
+ 695: "ieee-mms-ssl",
+ 696: "rushd",
+ 697: "uuidgen",
+ 698: "olsr",
+ 699: "accessnetwork",
+ 700: "epp",
+ 701: "lmp",
+ 702: "iris-beep",
+ 704: "elcsd",
+ 705: "agentx",
+ 706: "silc",
+ 707: "borland-dsj",
+ 709: "entrust-kmsh",
+ 710: "entrust-ash",
+ 711: "cisco-tdp",
+ 712: "tbrpf",
+ 713: "iris-xpc",
+ 714: "iris-xpcs",
+ 715: "iris-lwz",
+ 729: "netviewdm1",
+ 730: "netviewdm2",
+ 731: "netviewdm3",
+ 741: "netgw",
+ 742: "netrcs",
+ 744: "flexlm",
+ 747: "fujitsu-dev",
+ 748: "ris-cm",
+ 749: "kerberos-adm",
+ 750: "rfile",
+ 751: "pump",
+ 752: "qrh",
+ 753: "rrh",
+ 754: "tell",
+ 758: "nlogin",
+ 759: "con",
+ 760: "ns",
+ 761: "rxe",
+ 762: "quotad",
+ 763: "cycleserv",
+ 764: "omserv",
+ 765: "webster",
+ 767: "phonebook",
+ 769: "vid",
+ 770: "cadlock",
+ 771: "rtip",
+ 772: "cycleserv2",
+ 773: "submit",
+ 774: "rpasswd",
+ 775: "entomb",
+ 776: "wpages",
+ 777: "multiling-http",
+ 780: "wpgs",
+ 800: "mdbs-daemon",
+ 801: "device",
+ 802: "mbap-s",
+ 810: "fcp-udp",
+ 828: "itm-mcell-s",
+ 829: "pkix-3-ca-ra",
+ 830: "netconf-ssh",
+ 831: "netconf-beep",
+ 832: "netconfsoaphttp",
+ 833: "netconfsoapbeep",
+ 847: "dhcp-failover2",
+ 848: "gdoi",
+ 853: "domain-s",
+ 854: "dlep",
+ 860: "iscsi",
+ 861: "owamp-control",
+ 862: "twamp-control",
+ 873: "rsync",
+ 886: "iclcnet-locate",
+ 887: "iclcnet-svinfo",
+ 888: "accessbuilder",
+ 900: "omginitialrefs",
+ 901: "smpnameres",
+ 902: "ideafarm-door",
+ 903: "ideafarm-panic",
+ 910: "kink",
+ 911: "xact-backup",
+ 912: "apex-mesh",
+ 913: "apex-edge",
+ 953: "rndc",
+ 989: "ftps-data",
+ 990: "ftps",
+ 991: "nas",
+ 992: "telnets",
+ 993: "imaps",
+ 995: "pop3s",
+ 996: "vsinet",
+ 997: "maitrd",
+ 998: "busboy",
+ 999: "garcon",
+ 1000: "cadlock2",
+ 1001: "webpush",
+ 1010: "surf",
+ 1021: "exp1",
+ 1022: "exp2",
+ 1025: "blackjack",
+ 1026: "cap",
+ 1029: "solid-mux",
+ 1033: "netinfo-local",
+ 1034: "activesync",
+ 1035: "mxxrlogin",
+ 1036: "nsstp",
+ 1037: "ams",
+ 1038: "mtqp",
+ 1039: "sbl",
+ 1040: "netarx",
+ 1041: "danf-ak2",
+ 1042: "afrog",
+ 1043: "boinc-client",
+ 1044: "dcutility",
+ 1045: "fpitp",
+ 1046: "wfremotertm",
+ 1047: "neod1",
+ 1048: "neod2",
+ 1049: "td-postman",
+ 1050: "cma",
+ 1051: "optima-vnet",
+ 1052: "ddt",
+ 1053: "remote-as",
+ 1054: "brvread",
+ 1055: "ansyslmd",
+ 1056: "vfo",
+ 1057: "startron",
+ 1058: "nim",
+ 1059: "nimreg",
+ 1060: "polestar",
+ 1061: "kiosk",
+ 1062: "veracity",
+ 1063: "kyoceranetdev",
+ 1064: "jstel",
+ 1065: "syscomlan",
+ 1066: "fpo-fns",
+ 1067: "instl-boots",
+ 1068: "instl-bootc",
+ 1069: "cognex-insight",
+ 1070: "gmrupdateserv",
+ 1071: "bsquare-voip",
+ 1072: "cardax",
+ 1073: "bridgecontrol",
+ 1074: "warmspotMgmt",
+ 1075: "rdrmshc",
+ 1076: "dab-sti-c",
+ 1077: "imgames",
+ 1078: "avocent-proxy",
+ 1079: "asprovatalk",
+ 1080: "socks",
+ 1081: "pvuniwien",
+ 1082: "amt-esd-prot",
+ 1083: "ansoft-lm-1",
+ 1084: "ansoft-lm-2",
+ 1085: "webobjects",
+ 1086: "cplscrambler-lg",
+ 1087: "cplscrambler-in",
+ 1088: "cplscrambler-al",
+ 1089: "ff-annunc",
+ 1090: "ff-fms",
+ 1091: "ff-sm",
+ 1092: "obrpd",
+ 1093: "proofd",
+ 1094: "rootd",
+ 1095: "nicelink",
+ 1096: "cnrprotocol",
+ 1097: "sunclustermgr",
+ 1098: "rmiactivation",
+ 1099: "rmiregistry",
+ 1100: "mctp",
+ 1101: "pt2-discover",
+ 1102: "adobeserver-1",
+ 1103: "adobeserver-2",
+ 1104: "xrl",
+ 1105: "ftranhc",
+ 1106: "isoipsigport-1",
+ 1107: "isoipsigport-2",
+ 1108: "ratio-adp",
+ 1110: "webadmstart",
+ 1111: "lmsocialserver",
+ 1112: "icp",
+ 1113: "ltp-deepspace",
+ 1114: "mini-sql",
+ 1115: "ardus-trns",
+ 1116: "ardus-cntl",
+ 1117: "ardus-mtrns",
+ 1118: "sacred",
+ 1119: "bnetgame",
+ 1120: "bnetfile",
+ 1121: "rmpp",
+ 1122: "availant-mgr",
+ 1123: "murray",
+ 1124: "hpvmmcontrol",
+ 1125: "hpvmmagent",
+ 1126: "hpvmmdata",
+ 1127: "kwdb-commn",
+ 1128: "saphostctrl",
+ 1129: "saphostctrls",
+ 1130: "casp",
+ 1131: "caspssl",
+ 1132: "kvm-via-ip",
+ 1133: "dfn",
+ 1134: "aplx",
+ 1135: "omnivision",
+ 1136: "hhb-gateway",
+ 1137: "trim",
+ 1138: "encrypted-admin",
+ 1139: "evm",
+ 1140: "autonoc",
+ 1141: "mxomss",
+ 1142: "edtools",
+ 1143: "imyx",
+ 1144: "fuscript",
+ 1145: "x9-icue",
+ 1146: "audit-transfer",
+ 1147: "capioverlan",
+ 1148: "elfiq-repl",
+ 1149: "bvtsonar",
+ 1150: "blaze",
+ 1151: "unizensus",
+ 1152: "winpoplanmess",
+ 1153: "c1222-acse",
+ 1154: "resacommunity",
+ 1155: "nfa",
+ 1156: "iascontrol-oms",
+ 1157: "iascontrol",
+ 1158: "dbcontrol-oms",
+ 1159: "oracle-oms",
+ 1160: "olsv",
+ 1161: "health-polling",
+ 1162: "health-trap",
+ 1163: "sddp",
+ 1164: "qsm-proxy",
+ 1165: "qsm-gui",
+ 1166: "qsm-remote",
+ 1167: "cisco-ipsla",
+ 1168: "vchat",
+ 1169: "tripwire",
+ 1170: "atc-lm",
+ 1171: "atc-appserver",
+ 1172: "dnap",
+ 1173: "d-cinema-rrp",
+ 1174: "fnet-remote-ui",
+ 1175: "dossier",
+ 1176: "indigo-server",
+ 1177: "dkmessenger",
+ 1178: "sgi-storman",
+ 1179: "b2n",
+ 1180: "mc-client",
+ 1181: "3comnetman",
+ 1182: "accelenet",
+ 1183: "llsurfup-http",
+ 1184: "llsurfup-https",
+ 1185: "catchpole",
+ 1186: "mysql-cluster",
+ 1187: "alias",
+ 1188: "hp-webadmin",
+ 1189: "unet",
+ 1190: "commlinx-avl",
+ 1191: "gpfs",
+ 1192: "caids-sensor",
+ 1193: "fiveacross",
+ 1194: "openvpn",
+ 1195: "rsf-1",
+ 1196: "netmagic",
+ 1197: "carrius-rshell",
+ 1198: "cajo-discovery",
+ 1199: "dmidi",
+ 1200: "scol",
+ 1201: "nucleus-sand",
+ 1202: "caiccipc",
+ 1203: "ssslic-mgr",
+ 1204: "ssslog-mgr",
+ 1205: "accord-mgc",
+ 1206: "anthony-data",
+ 1207: "metasage",
+ 1208: "seagull-ais",
+ 1209: "ipcd3",
+ 1210: "eoss",
+ 1211: "groove-dpp",
+ 1212: "lupa",
+ 1213: "mpc-lifenet",
+ 1214: "kazaa",
+ 1215: "scanstat-1",
+ 1216: "etebac5",
+ 1217: "hpss-ndapi",
+ 1218: "aeroflight-ads",
+ 1219: "aeroflight-ret",
+ 1220: "qt-serveradmin",
+ 1221: "sweetware-apps",
+ 1222: "nerv",
+ 1223: "tgp",
+ 1224: "vpnz",
+ 1225: "slinkysearch",
+ 1226: "stgxfws",
+ 1227: "dns2go",
+ 1228: "florence",
+ 1229: "zented",
+ 1230: "periscope",
+ 1231: "menandmice-lpm",
+ 1232: "first-defense",
+ 1233: "univ-appserver",
+ 1234: "search-agent",
+ 1235: "mosaicsyssvc1",
+ 1236: "bvcontrol",
+ 1237: "tsdos390",
+ 1238: "hacl-qs",
+ 1239: "nmsd",
+ 1240: "instantia",
+ 1241: "nessus",
+ 1242: "nmasoverip",
+ 1243: "serialgateway",
+ 1244: "isbconference1",
+ 1245: "isbconference2",
+ 1246: "payrouter",
+ 1247: "visionpyramid",
+ 1248: "hermes",
+ 1249: "mesavistaco",
+ 1250: "swldy-sias",
+ 1251: "servergraph",
+ 1252: "bspne-pcc",
+ 1253: "q55-pcc",
+ 1254: "de-noc",
+ 1255: "de-cache-query",
+ 1256: "de-server",
+ 1257: "shockwave2",
+ 1258: "opennl",
+ 1259: "opennl-voice",
+ 1260: "ibm-ssd",
+ 1261: "mpshrsv",
+ 1262: "qnts-orb",
+ 1263: "dka",
+ 1264: "prat",
+ 1265: "dssiapi",
+ 1266: "dellpwrappks",
+ 1267: "epc",
+ 1268: "propel-msgsys",
+ 1269: "watilapp",
+ 1270: "opsmgr",
+ 1271: "excw",
+ 1272: "cspmlockmgr",
+ 1273: "emc-gateway",
+ 1274: "t1distproc",
+ 1275: "ivcollector",
+ 1277: "miva-mqs",
+ 1278: "dellwebadmin-1",
+ 1279: "dellwebadmin-2",
+ 1280: "pictrography",
+ 1281: "healthd",
+ 1282: "emperion",
+ 1283: "productinfo",
+ 1284: "iee-qfx",
+ 1285: "neoiface",
+ 1286: "netuitive",
+ 1287: "routematch",
+ 1288: "navbuddy",
+ 1289: "jwalkserver",
+ 1290: "winjaserver",
+ 1291: "seagulllms",
+ 1292: "dsdn",
+ 1293: "pkt-krb-ipsec",
+ 1294: "cmmdriver",
+ 1295: "ehtp",
+ 1296: "dproxy",
+ 1297: "sdproxy",
+ 1298: "lpcp",
+ 1299: "hp-sci",
+ 1300: "h323hostcallsc",
+ 1301: "ci3-software-1",
+ 1302: "ci3-software-2",
+ 1303: "sftsrv",
+ 1304: "boomerang",
+ 1305: "pe-mike",
+ 1306: "re-conn-proto",
+ 1307: "pacmand",
+ 1308: "odsi",
+ 1309: "jtag-server",
+ 1310: "husky",
+ 1311: "rxmon",
+ 1312: "sti-envision",
+ 1313: "bmc-patroldb",
+ 1314: "pdps",
+ 1315: "els",
+ 1316: "exbit-escp",
+ 1317: "vrts-ipcserver",
+ 1318: "krb5gatekeeper",
+ 1319: "amx-icsp",
+ 1320: "amx-axbnet",
+ 1321: "pip",
+ 1322: "novation",
+ 1323: "brcd",
+ 1324: "delta-mcp",
+ 1325: "dx-instrument",
+ 1326: "wimsic",
+ 1327: "ultrex",
+ 1328: "ewall",
+ 1329: "netdb-export",
+ 1330: "streetperfect",
+ 1331: "intersan",
+ 1332: "pcia-rxp-b",
+ 1333: "passwrd-policy",
+ 1334: "writesrv",
+ 1335: "digital-notary",
+ 1336: "ischat",
+ 1337: "menandmice-dns",
+ 1338: "wmc-log-svc",
+ 1339: "kjtsiteserver",
+ 1340: "naap",
+ 1341: "qubes",
+ 1342: "esbroker",
+ 1343: "re101",
+ 1344: "icap",
+ 1345: "vpjp",
+ 1346: "alta-ana-lm",
+ 1347: "bbn-mmc",
+ 1348: "bbn-mmx",
+ 1349: "sbook",
+ 1350: "editbench",
+ 1351: "equationbuilder",
+ 1352: "lotusnote",
+ 1353: "relief",
+ 1354: "XSIP-network",
+ 1355: "intuitive-edge",
+ 1356: "cuillamartin",
+ 1357: "pegboard",
+ 1358: "connlcli",
+ 1359: "ftsrv",
+ 1360: "mimer",
+ 1361: "linx",
+ 1362: "timeflies",
+ 1363: "ndm-requester",
+ 1364: "ndm-server",
+ 1365: "adapt-sna",
+ 1366: "netware-csp",
+ 1367: "dcs",
+ 1368: "screencast",
+ 1369: "gv-us",
+ 1370: "us-gv",
+ 1371: "fc-cli",
+ 1372: "fc-ser",
+ 1373: "chromagrafx",
+ 1374: "molly",
+ 1375: "bytex",
+ 1376: "ibm-pps",
+ 1377: "cichlid",
+ 1378: "elan",
+ 1379: "dbreporter",
+ 1380: "telesis-licman",
+ 1381: "apple-licman",
+ 1382: "udt-os",
+ 1383: "gwha",
+ 1384: "os-licman",
+ 1385: "atex-elmd",
+ 1386: "checksum",
+ 1387: "cadsi-lm",
+ 1388: "objective-dbc",
+ 1389: "iclpv-dm",
+ 1390: "iclpv-sc",
+ 1391: "iclpv-sas",
+ 1392: "iclpv-pm",
+ 1393: "iclpv-nls",
+ 1394: "iclpv-nlc",
+ 1395: "iclpv-wsm",
+ 1396: "dvl-activemail",
+ 1397: "audio-activmail",
+ 1398: "video-activmail",
+ 1399: "cadkey-licman",
+ 1400: "cadkey-tablet",
+ 1401: "goldleaf-licman",
+ 1402: "prm-sm-np",
+ 1403: "prm-nm-np",
+ 1404: "igi-lm",
+ 1405: "ibm-res",
+ 1406: "netlabs-lm",
+ 1407: "tibet-server",
+ 1408: "sophia-lm",
+ 1409: "here-lm",
+ 1410: "hiq",
+ 1411: "af",
+ 1412: "innosys",
+ 1413: "innosys-acl",
+ 1414: "ibm-mqseries",
+ 1415: "dbstar",
+ 1416: "novell-lu6-2",
+ 1417: "timbuktu-srv1",
+ 1418: "timbuktu-srv2",
+ 1419: "timbuktu-srv3",
+ 1420: "timbuktu-srv4",
+ 1421: "gandalf-lm",
+ 1422: "autodesk-lm",
+ 1423: "essbase",
+ 1424: "hybrid",
+ 1425: "zion-lm",
+ 1426: "sais",
+ 1427: "mloadd",
+ 1428: "informatik-lm",
+ 1429: "nms",
+ 1430: "tpdu",
+ 1431: "rgtp",
+ 1432: "blueberry-lm",
+ 1433: "ms-sql-s",
+ 1434: "ms-sql-m",
+ 1435: "ibm-cics",
+ 1436: "saism",
+ 1437: "tabula",
+ 1438: "eicon-server",
+ 1439: "eicon-x25",
+ 1440: "eicon-slp",
+ 1441: "cadis-1",
+ 1442: "cadis-2",
+ 1443: "ies-lm",
+ 1444: "marcam-lm",
+ 1445: "proxima-lm",
+ 1446: "ora-lm",
+ 1447: "apri-lm",
+ 1448: "oc-lm",
+ 1449: "peport",
+ 1450: "dwf",
+ 1451: "infoman",
+ 1452: "gtegsc-lm",
+ 1453: "genie-lm",
+ 1454: "interhdl-elmd",
+ 1455: "esl-lm",
+ 1456: "dca",
+ 1457: "valisys-lm",
+ 1458: "nrcabq-lm",
+ 1459: "proshare1",
+ 1460: "proshare2",
+ 1461: "ibm-wrless-lan",
+ 1462: "world-lm",
+ 1463: "nucleus",
+ 1464: "msl-lmd",
+ 1465: "pipes",
+ 1466: "oceansoft-lm",
+ 1467: "csdmbase",
+ 1468: "csdm",
+ 1469: "aal-lm",
+ 1470: "uaiact",
+ 1471: "csdmbase",
+ 1472: "csdm",
+ 1473: "openmath",
+ 1474: "telefinder",
+ 1475: "taligent-lm",
+ 1476: "clvm-cfg",
+ 1477: "ms-sna-server",
+ 1478: "ms-sna-base",
+ 1479: "dberegister",
+ 1480: "pacerforum",
+ 1481: "airs",
+ 1482: "miteksys-lm",
+ 1483: "afs",
+ 1484: "confluent",
+ 1485: "lansource",
+ 1486: "nms-topo-serv",
+ 1487: "localinfosrvr",
+ 1488: "docstor",
+ 1489: "dmdocbroker",
+ 1490: "insitu-conf",
+ 1492: "stone-design-1",
+ 1493: "netmap-lm",
+ 1494: "ica",
+ 1495: "cvc",
+ 1496: "liberty-lm",
+ 1497: "rfx-lm",
+ 1498: "sybase-sqlany",
+ 1499: "fhc",
+ 1500: "vlsi-lm",
+ 1501: "saiscm",
+ 1502: "shivadiscovery",
+ 1503: "imtc-mcs",
+ 1504: "evb-elm",
+ 1505: "funkproxy",
+ 1506: "utcd",
+ 1507: "symplex",
+ 1508: "diagmond",
+ 1509: "robcad-lm",
+ 1510: "mvx-lm",
+ 1511: "3l-l1",
+ 1512: "wins",
+ 1513: "fujitsu-dtc",
+ 1514: "fujitsu-dtcns",
+ 1515: "ifor-protocol",
+ 1516: "vpad",
+ 1517: "vpac",
+ 1518: "vpvd",
+ 1519: "vpvc",
+ 1520: "atm-zip-office",
+ 1521: "ncube-lm",
+ 1522: "ricardo-lm",
+ 1523: "cichild-lm",
+ 1524: "ingreslock",
+ 1525: "orasrv",
+ 1526: "pdap-np",
+ 1527: "tlisrv",
+ 1529: "coauthor",
+ 1530: "rap-service",
+ 1531: "rap-listen",
+ 1532: "miroconnect",
+ 1533: "virtual-places",
+ 1534: "micromuse-lm",
+ 1535: "ampr-info",
+ 1536: "ampr-inter",
+ 1537: "sdsc-lm",
+ 1538: "3ds-lm",
+ 1539: "intellistor-lm",
+ 1540: "rds",
+ 1541: "rds2",
+ 1542: "gridgen-elmd",
+ 1543: "simba-cs",
+ 1544: "aspeclmd",
+ 1545: "vistium-share",
+ 1546: "abbaccuray",
+ 1547: "laplink",
+ 1548: "axon-lm",
+ 1549: "shivahose",
+ 1550: "3m-image-lm",
+ 1551: "hecmtl-db",
+ 1552: "pciarray",
+ 1553: "sna-cs",
+ 1554: "caci-lm",
+ 1555: "livelan",
+ 1556: "veritas-pbx",
+ 1557: "arbortext-lm",
+ 1558: "xingmpeg",
+ 1559: "web2host",
+ 1560: "asci-val",
+ 1561: "facilityview",
+ 1562: "pconnectmgr",
+ 1563: "cadabra-lm",
+ 1564: "pay-per-view",
+ 1565: "winddlb",
+ 1566: "corelvideo",
+ 1567: "jlicelmd",
+ 1568: "tsspmap",
+ 1569: "ets",
+ 1570: "orbixd",
+ 1571: "rdb-dbs-disp",
+ 1572: "chip-lm",
+ 1573: "itscomm-ns",
+ 1574: "mvel-lm",
+ 1575: "oraclenames",
+ 1576: "moldflow-lm",
+ 1577: "hypercube-lm",
+ 1578: "jacobus-lm",
+ 1579: "ioc-sea-lm",
+ 1580: "tn-tl-r1",
+ 1581: "mil-2045-47001",
+ 1582: "msims",
+ 1583: "simbaexpress",
+ 1584: "tn-tl-fd2",
+ 1585: "intv",
+ 1586: "ibm-abtact",
+ 1587: "pra-elmd",
+ 1588: "triquest-lm",
+ 1589: "vqp",
+ 1590: "gemini-lm",
+ 1591: "ncpm-pm",
+ 1592: "commonspace",
+ 1593: "mainsoft-lm",
+ 1594: "sixtrak",
+ 1595: "radio",
+ 1596: "radio-sm",
+ 1597: "orbplus-iiop",
+ 1598: "picknfs",
+ 1599: "simbaservices",
+ 1600: "issd",
+ 1601: "aas",
+ 1602: "inspect",
+ 1603: "picodbc",
+ 1604: "icabrowser",
+ 1605: "slp",
+ 1606: "slm-api",
+ 1607: "stt",
+ 1608: "smart-lm",
+ 1609: "isysg-lm",
+ 1610: "taurus-wh",
+ 1611: "ill",
+ 1612: "netbill-trans",
+ 1613: "netbill-keyrep",
+ 1614: "netbill-cred",
+ 1615: "netbill-auth",
+ 1616: "netbill-prod",
+ 1617: "nimrod-agent",
+ 1618: "skytelnet",
+ 1619: "xs-openstorage",
+ 1620: "faxportwinport",
+ 1621: "softdataphone",
+ 1622: "ontime",
+ 1623: "jaleosnd",
+ 1624: "udp-sr-port",
+ 1625: "svs-omagent",
+ 1626: "shockwave",
+ 1627: "t128-gateway",
+ 1628: "lontalk-norm",
+ 1629: "lontalk-urgnt",
+ 1630: "oraclenet8cman",
+ 1631: "visitview",
+ 1632: "pammratc",
+ 1633: "pammrpc",
+ 1634: "loaprobe",
+ 1635: "edb-server1",
+ 1636: "isdc",
+ 1637: "islc",
+ 1638: "ismc",
+ 1639: "cert-initiator",
+ 1640: "cert-responder",
+ 1641: "invision",
+ 1642: "isis-am",
+ 1643: "isis-ambc",
+ 1644: "saiseh",
+ 1645: "sightline",
+ 1646: "sa-msg-port",
+ 1647: "rsap",
+ 1648: "concurrent-lm",
+ 1649: "kermit",
+ 1650: "nkd",
+ 1651: "shiva-confsrvr",
+ 1652: "xnmp",
+ 1653: "alphatech-lm",
+ 1654: "stargatealerts",
+ 1655: "dec-mbadmin",
+ 1656: "dec-mbadmin-h",
+ 1657: "fujitsu-mmpdc",
+ 1658: "sixnetudr",
+ 1659: "sg-lm",
+ 1660: "skip-mc-gikreq",
+ 1661: "netview-aix-1",
+ 1662: "netview-aix-2",
+ 1663: "netview-aix-3",
+ 1664: "netview-aix-4",
+ 1665: "netview-aix-5",
+ 1666: "netview-aix-6",
+ 1667: "netview-aix-7",
+ 1668: "netview-aix-8",
+ 1669: "netview-aix-9",
+ 1670: "netview-aix-10",
+ 1671: "netview-aix-11",
+ 1672: "netview-aix-12",
+ 1673: "proshare-mc-1",
+ 1674: "proshare-mc-2",
+ 1675: "pdp",
+ 1676: "netcomm1",
+ 1677: "groupwise",
+ 1678: "prolink",
+ 1679: "darcorp-lm",
+ 1680: "microcom-sbp",
+ 1681: "sd-elmd",
+ 1682: "lanyon-lantern",
+ 1683: "ncpm-hip",
+ 1684: "snaresecure",
+ 1685: "n2nremote",
+ 1686: "cvmon",
+ 1687: "nsjtp-ctrl",
+ 1688: "nsjtp-data",
+ 1689: "firefox",
+ 1690: "ng-umds",
+ 1691: "empire-empuma",
+ 1692: "sstsys-lm",
+ 1693: "rrirtr",
+ 1694: "rrimwm",
+ 1695: "rrilwm",
+ 1696: "rrifmm",
+ 1697: "rrisat",
+ 1698: "rsvp-encap-1",
+ 1699: "rsvp-encap-2",
+ 1700: "mps-raft",
+ 1701: "l2f",
+ 1702: "deskshare",
+ 1703: "hb-engine",
+ 1704: "bcs-broker",
+ 1705: "slingshot",
+ 1706: "jetform",
+ 1707: "vdmplay",
+ 1708: "gat-lmd",
+ 1709: "centra",
+ 1710: "impera",
+ 1711: "pptconference",
+ 1712: "registrar",
+ 1713: "conferencetalk",
+ 1714: "sesi-lm",
+ 1715: "houdini-lm",
+ 1716: "xmsg",
+ 1717: "fj-hdnet",
+ 1718: "h323gatedisc",
+ 1719: "h323gatestat",
+ 1720: "h323hostcall",
+ 1721: "caicci",
+ 1722: "hks-lm",
+ 1723: "pptp",
+ 1724: "csbphonemaster",
+ 1725: "iden-ralp",
+ 1726: "iberiagames",
+ 1727: "winddx",
+ 1728: "telindus",
+ 1729: "citynl",
+ 1730: "roketz",
+ 1731: "msiccp",
+ 1732: "proxim",
+ 1733: "siipat",
+ 1734: "cambertx-lm",
+ 1735: "privatechat",
+ 1736: "street-stream",
+ 1737: "ultimad",
+ 1738: "gamegen1",
+ 1739: "webaccess",
+ 1740: "encore",
+ 1741: "cisco-net-mgmt",
+ 1742: "3Com-nsd",
+ 1743: "cinegrfx-lm",
+ 1744: "ncpm-ft",
+ 1745: "remote-winsock",
+ 1746: "ftrapid-1",
+ 1747: "ftrapid-2",
+ 1748: "oracle-em1",
+ 1749: "aspen-services",
+ 1750: "sslp",
+ 1751: "swiftnet",
+ 1752: "lofr-lm",
+ 1753: "predatar-comms",
+ 1754: "oracle-em2",
+ 1755: "ms-streaming",
+ 1756: "capfast-lmd",
+ 1757: "cnhrp",
+ 1758: "tftp-mcast",
+ 1759: "spss-lm",
+ 1760: "www-ldap-gw",
+ 1761: "cft-0",
+ 1762: "cft-1",
+ 1763: "cft-2",
+ 1764: "cft-3",
+ 1765: "cft-4",
+ 1766: "cft-5",
+ 1767: "cft-6",
+ 1768: "cft-7",
+ 1769: "bmc-net-adm",
+ 1770: "bmc-net-svc",
+ 1771: "vaultbase",
+ 1772: "essweb-gw",
+ 1773: "kmscontrol",
+ 1774: "global-dtserv",
+ 1775: "vdab",
+ 1776: "femis",
+ 1777: "powerguardian",
+ 1778: "prodigy-intrnet",
+ 1779: "pharmasoft",
+ 1780: "dpkeyserv",
+ 1781: "answersoft-lm",
+ 1782: "hp-hcip",
+ 1784: "finle-lm",
+ 1785: "windlm",
+ 1786: "funk-logger",
+ 1787: "funk-license",
+ 1788: "psmond",
+ 1789: "hello",
+ 1790: "nmsp",
+ 1791: "ea1",
+ 1792: "ibm-dt-2",
+ 1793: "rsc-robot",
+ 1794: "cera-bcm",
+ 1795: "dpi-proxy",
+ 1796: "vocaltec-admin",
+ 1797: "uma",
+ 1798: "etp",
+ 1799: "netrisk",
+ 1800: "ansys-lm",
+ 1801: "msmq",
+ 1802: "concomp1",
+ 1803: "hp-hcip-gwy",
+ 1804: "enl",
+ 1805: "enl-name",
+ 1806: "musiconline",
+ 1807: "fhsp",
+ 1808: "oracle-vp2",
+ 1809: "oracle-vp1",
+ 1810: "jerand-lm",
+ 1811: "scientia-sdb",
+ 1812: "radius",
+ 1813: "radius-acct",
+ 1814: "tdp-suite",
+ 1815: "mmpft",
+ 1816: "harp",
+ 1817: "rkb-oscs",
+ 1818: "etftp",
+ 1819: "plato-lm",
+ 1820: "mcagent",
+ 1821: "donnyworld",
+ 1822: "es-elmd",
+ 1823: "unisys-lm",
+ 1824: "metrics-pas",
+ 1825: "direcpc-video",
+ 1826: "ardt",
+ 1827: "asi",
+ 1828: "itm-mcell-u",
+ 1829: "optika-emedia",
+ 1830: "net8-cman",
+ 1831: "myrtle",
+ 1832: "tht-treasure",
+ 1833: "udpradio",
+ 1834: "ardusuni",
+ 1835: "ardusmul",
+ 1836: "ste-smsc",
+ 1837: "csoft1",
+ 1838: "talnet",
+ 1839: "netopia-vo1",
+ 1840: "netopia-vo2",
+ 1841: "netopia-vo3",
+ 1842: "netopia-vo4",
+ 1843: "netopia-vo5",
+ 1844: "direcpc-dll",
+ 1845: "altalink",
+ 1846: "tunstall-pnc",
+ 1847: "slp-notify",
+ 1848: "fjdocdist",
+ 1849: "alpha-sms",
+ 1850: "gsi",
+ 1851: "ctcd",
+ 1852: "virtual-time",
+ 1853: "vids-avtp",
+ 1854: "buddy-draw",
+ 1855: "fiorano-rtrsvc",
+ 1856: "fiorano-msgsvc",
+ 1857: "datacaptor",
+ 1858: "privateark",
+ 1859: "gammafetchsvr",
+ 1860: "sunscalar-svc",
+ 1861: "lecroy-vicp",
+ 1862: "mysql-cm-agent",
+ 1863: "msnp",
+ 1864: "paradym-31port",
+ 1865: "entp",
+ 1866: "swrmi",
+ 1867: "udrive",
+ 1868: "viziblebrowser",
+ 1869: "transact",
+ 1870: "sunscalar-dns",
+ 1871: "canocentral0",
+ 1872: "canocentral1",
+ 1873: "fjmpjps",
+ 1874: "fjswapsnp",
+ 1875: "westell-stats",
+ 1876: "ewcappsrv",
+ 1877: "hp-webqosdb",
+ 1878: "drmsmc",
+ 1879: "nettgain-nms",
+ 1880: "vsat-control",
+ 1881: "ibm-mqseries2",
+ 1882: "ecsqdmn",
+ 1883: "mqtt",
+ 1884: "idmaps",
+ 1885: "vrtstrapserver",
+ 1886: "leoip",
+ 1887: "filex-lport",
+ 1888: "ncconfig",
+ 1889: "unify-adapter",
+ 1890: "wilkenlistener",
+ 1891: "childkey-notif",
+ 1892: "childkey-ctrl",
+ 1893: "elad",
+ 1894: "o2server-port",
+ 1896: "b-novative-ls",
+ 1897: "metaagent",
+ 1898: "cymtec-port",
+ 1899: "mc2studios",
+ 1900: "ssdp",
+ 1901: "fjicl-tep-a",
+ 1902: "fjicl-tep-b",
+ 1903: "linkname",
+ 1904: "fjicl-tep-c",
+ 1905: "sugp",
+ 1906: "tpmd",
+ 1907: "intrastar",
+ 1908: "dawn",
+ 1909: "global-wlink",
+ 1910: "ultrabac",
+ 1911: "mtp",
+ 1912: "rhp-iibp",
+ 1913: "armadp",
+ 1914: "elm-momentum",
+ 1915: "facelink",
+ 1916: "persona",
+ 1917: "noagent",
+ 1918: "can-nds",
+ 1919: "can-dch",
+ 1920: "can-ferret",
+ 1921: "noadmin",
+ 1922: "tapestry",
+ 1923: "spice",
+ 1924: "xiip",
+ 1925: "discovery-port",
+ 1926: "egs",
+ 1927: "videte-cipc",
+ 1928: "emsd-port",
+ 1929: "bandwiz-system",
+ 1930: "driveappserver",
+ 1931: "amdsched",
+ 1932: "ctt-broker",
+ 1933: "xmapi",
+ 1934: "xaapi",
+ 1935: "macromedia-fcs",
+ 1936: "jetcmeserver",
+ 1937: "jwserver",
+ 1938: "jwclient",
+ 1939: "jvserver",
+ 1940: "jvclient",
+ 1941: "dic-aida",
+ 1942: "res",
+ 1943: "beeyond-media",
+ 1944: "close-combat",
+ 1945: "dialogic-elmd",
+ 1946: "tekpls",
+ 1947: "sentinelsrm",
+ 1948: "eye2eye",
+ 1949: "ismaeasdaqlive",
+ 1950: "ismaeasdaqtest",
+ 1951: "bcs-lmserver",
+ 1952: "mpnjsc",
+ 1953: "rapidbase",
+ 1954: "abr-api",
+ 1955: "abr-secure",
+ 1956: "vrtl-vmf-ds",
+ 1957: "unix-status",
+ 1958: "dxadmind",
+ 1959: "simp-all",
+ 1960: "nasmanager",
+ 1961: "bts-appserver",
+ 1962: "biap-mp",
+ 1963: "webmachine",
+ 1964: "solid-e-engine",
+ 1965: "tivoli-npm",
+ 1966: "slush",
+ 1967: "sns-quote",
+ 1968: "lipsinc",
+ 1969: "lipsinc1",
+ 1970: "netop-rc",
+ 1971: "netop-school",
+ 1972: "intersys-cache",
+ 1973: "dlsrap",
+ 1974: "drp",
+ 1975: "tcoflashagent",
+ 1976: "tcoregagent",
+ 1977: "tcoaddressbook",
+ 1978: "unisql",
+ 1979: "unisql-java",
+ 1980: "pearldoc-xact",
+ 1981: "p2pq",
+ 1982: "estamp",
+ 1983: "lhtp",
+ 1984: "bb",
+ 1985: "hsrp",
+ 1986: "licensedaemon",
+ 1987: "tr-rsrb-p1",
+ 1988: "tr-rsrb-p2",
+ 1989: "tr-rsrb-p3",
+ 1990: "stun-p1",
+ 1991: "stun-p2",
+ 1992: "stun-p3",
+ 1993: "snmp-tcp-port",
+ 1994: "stun-port",
+ 1995: "perf-port",
+ 1996: "tr-rsrb-port",
+ 1997: "gdp-port",
+ 1998: "x25-svc-port",
+ 1999: "tcp-id-port",
+ 2000: "cisco-sccp",
+ 2001: "dc",
+ 2002: "globe",
+ 2003: "brutus",
+ 2004: "mailbox",
+ 2005: "berknet",
+ 2006: "invokator",
+ 2007: "dectalk",
+ 2008: "conf",
+ 2009: "news",
+ 2010: "search",
+ 2011: "raid-cc",
+ 2012: "ttyinfo",
+ 2013: "raid-am",
+ 2014: "troff",
+ 2015: "cypress",
+ 2016: "bootserver",
+ 2017: "cypress-stat",
+ 2018: "terminaldb",
+ 2019: "whosockami",
+ 2020: "xinupageserver",
+ 2021: "servexec",
+ 2022: "down",
+ 2023: "xinuexpansion3",
+ 2024: "xinuexpansion4",
+ 2025: "ellpack",
+ 2026: "scrabble",
+ 2027: "shadowserver",
+ 2028: "submitserver",
+ 2029: "hsrpv6",
+ 2030: "device2",
+ 2031: "mobrien-chat",
+ 2032: "blackboard",
+ 2033: "glogger",
+ 2034: "scoremgr",
+ 2035: "imsldoc",
+ 2036: "e-dpnet",
+ 2037: "applus",
+ 2038: "objectmanager",
+ 2039: "prizma",
+ 2040: "lam",
+ 2041: "interbase",
+ 2042: "isis",
+ 2043: "isis-bcast",
+ 2044: "rimsl",
+ 2045: "cdfunc",
+ 2046: "sdfunc",
+ 2047: "dls",
+ 2048: "dls-monitor",
+ 2049: "shilp",
+ 2050: "av-emb-config",
+ 2051: "epnsdp",
+ 2052: "clearvisn",
+ 2053: "lot105-ds-upd",
+ 2054: "weblogin",
+ 2055: "iop",
+ 2056: "omnisky",
+ 2057: "rich-cp",
+ 2058: "newwavesearch",
+ 2059: "bmc-messaging",
+ 2060: "teleniumdaemon",
+ 2061: "netmount",
+ 2062: "icg-swp",
+ 2063: "icg-bridge",
+ 2064: "icg-iprelay",
+ 2065: "dlsrpn",
+ 2066: "aura",
+ 2067: "dlswpn",
+ 2068: "avauthsrvprtcl",
+ 2069: "event-port",
+ 2070: "ah-esp-encap",
+ 2071: "acp-port",
+ 2072: "msync",
+ 2073: "gxs-data-port",
+ 2074: "vrtl-vmf-sa",
+ 2075: "newlixengine",
+ 2076: "newlixconfig",
+ 2077: "tsrmagt",
+ 2078: "tpcsrvr",
+ 2079: "idware-router",
+ 2080: "autodesk-nlm",
+ 2081: "kme-trap-port",
+ 2082: "infowave",
+ 2083: "radsec",
+ 2084: "sunclustergeo",
+ 2085: "ada-cip",
+ 2086: "gnunet",
+ 2087: "eli",
+ 2088: "ip-blf",
+ 2089: "sep",
+ 2090: "lrp",
+ 2091: "prp",
+ 2092: "descent3",
+ 2093: "nbx-cc",
+ 2094: "nbx-au",
+ 2095: "nbx-ser",
+ 2096: "nbx-dir",
+ 2097: "jetformpreview",
+ 2098: "dialog-port",
+ 2099: "h2250-annex-g",
+ 2100: "amiganetfs",
+ 2101: "rtcm-sc104",
+ 2102: "zephyr-srv",
+ 2103: "zephyr-clt",
+ 2104: "zephyr-hm",
+ 2105: "minipay",
+ 2106: "mzap",
+ 2107: "bintec-admin",
+ 2108: "comcam",
+ 2109: "ergolight",
+ 2110: "umsp",
+ 2111: "dsatp",
+ 2112: "idonix-metanet",
+ 2113: "hsl-storm",
+ 2114: "newheights",
+ 2115: "kdm",
+ 2116: "ccowcmr",
+ 2117: "mentaclient",
+ 2118: "mentaserver",
+ 2119: "gsigatekeeper",
+ 2120: "qencp",
+ 2121: "scientia-ssdb",
+ 2122: "caupc-remote",
+ 2123: "gtp-control",
+ 2124: "elatelink",
+ 2125: "lockstep",
+ 2126: "pktcable-cops",
+ 2127: "index-pc-wb",
+ 2128: "net-steward",
+ 2129: "cs-live",
+ 2130: "xds",
+ 2131: "avantageb2b",
+ 2132: "solera-epmap",
+ 2133: "zymed-zpp",
+ 2134: "avenue",
+ 2135: "gris",
+ 2136: "appworxsrv",
+ 2137: "connect",
+ 2138: "unbind-cluster",
+ 2139: "ias-auth",
+ 2140: "ias-reg",
+ 2141: "ias-admind",
+ 2142: "tdmoip",
+ 2143: "lv-jc",
+ 2144: "lv-ffx",
+ 2145: "lv-pici",
+ 2146: "lv-not",
+ 2147: "lv-auth",
+ 2148: "veritas-ucl",
+ 2149: "acptsys",
+ 2150: "dynamic3d",
+ 2151: "docent",
+ 2152: "gtp-user",
+ 2153: "ctlptc",
+ 2154: "stdptc",
+ 2155: "brdptc",
+ 2156: "trp",
+ 2157: "xnds",
+ 2158: "touchnetplus",
+ 2159: "gdbremote",
+ 2160: "apc-2160",
+ 2161: "apc-2161",
+ 2162: "navisphere",
+ 2163: "navisphere-sec",
+ 2164: "ddns-v3",
+ 2165: "x-bone-api",
+ 2166: "iwserver",
+ 2167: "raw-serial",
+ 2168: "easy-soft-mux",
+ 2169: "brain",
+ 2170: "eyetv",
+ 2171: "msfw-storage",
+ 2172: "msfw-s-storage",
+ 2173: "msfw-replica",
+ 2174: "msfw-array",
+ 2175: "airsync",
+ 2176: "rapi",
+ 2177: "qwave",
+ 2178: "bitspeer",
+ 2179: "vmrdp",
+ 2180: "mc-gt-srv",
+ 2181: "eforward",
+ 2182: "cgn-stat",
+ 2183: "cgn-config",
+ 2184: "nvd",
+ 2185: "onbase-dds",
+ 2186: "gtaua",
+ 2187: "ssmc",
+ 2188: "radware-rpm",
+ 2189: "radware-rpm-s",
+ 2190: "tivoconnect",
+ 2191: "tvbus",
+ 2192: "asdis",
+ 2193: "drwcs",
+ 2197: "mnp-exchange",
+ 2198: "onehome-remote",
+ 2199: "onehome-help",
+ 2200: "ici",
+ 2201: "ats",
+ 2202: "imtc-map",
+ 2203: "b2-runtime",
+ 2204: "b2-license",
+ 2205: "jps",
+ 2206: "hpocbus",
+ 2207: "hpssd",
+ 2208: "hpiod",
+ 2209: "rimf-ps",
+ 2210: "noaaport",
+ 2211: "emwin",
+ 2212: "leecoposserver",
+ 2213: "kali",
+ 2214: "rpi",
+ 2215: "ipcore",
+ 2216: "vtu-comms",
+ 2217: "gotodevice",
+ 2218: "bounzza",
+ 2219: "netiq-ncap",
+ 2220: "netiq",
+ 2221: "ethernet-ip-s",
+ 2222: "EtherNet-IP-1",
+ 2223: "rockwell-csp2",
+ 2224: "efi-mg",
+ 2225: "rcip-itu",
+ 2226: "di-drm",
+ 2227: "di-msg",
+ 2228: "ehome-ms",
+ 2229: "datalens",
+ 2230: "queueadm",
+ 2231: "wimaxasncp",
+ 2232: "ivs-video",
+ 2233: "infocrypt",
+ 2234: "directplay",
+ 2235: "sercomm-wlink",
+ 2236: "nani",
+ 2237: "optech-port1-lm",
+ 2238: "aviva-sna",
+ 2239: "imagequery",
+ 2240: "recipe",
+ 2241: "ivsd",
+ 2242: "foliocorp",
+ 2243: "magicom",
+ 2244: "nmsserver",
+ 2245: "hao",
+ 2246: "pc-mta-addrmap",
+ 2247: "antidotemgrsvr",
+ 2248: "ums",
+ 2249: "rfmp",
+ 2250: "remote-collab",
+ 2251: "dif-port",
+ 2252: "njenet-ssl",
+ 2253: "dtv-chan-req",
+ 2254: "seispoc",
+ 2255: "vrtp",
+ 2256: "pcc-mfp",
+ 2257: "simple-tx-rx",
+ 2258: "rcts",
+ 2260: "apc-2260",
+ 2261: "comotionmaster",
+ 2262: "comotionback",
+ 2263: "ecwcfg",
+ 2264: "apx500api-1",
+ 2265: "apx500api-2",
+ 2266: "mfserver",
+ 2267: "ontobroker",
+ 2268: "amt",
+ 2269: "mikey",
+ 2270: "starschool",
+ 2271: "mmcals",
+ 2272: "mmcal",
+ 2273: "mysql-im",
+ 2274: "pcttunnell",
+ 2275: "ibridge-data",
+ 2276: "ibridge-mgmt",
+ 2277: "bluectrlproxy",
+ 2278: "s3db",
+ 2279: "xmquery",
+ 2280: "lnvpoller",
+ 2281: "lnvconsole",
+ 2282: "lnvalarm",
+ 2283: "lnvstatus",
+ 2284: "lnvmaps",
+ 2285: "lnvmailmon",
+ 2286: "nas-metering",
+ 2287: "dna",
+ 2288: "netml",
+ 2289: "dict-lookup",
+ 2290: "sonus-logging",
+ 2291: "eapsp",
+ 2292: "mib-streaming",
+ 2293: "npdbgmngr",
+ 2294: "konshus-lm",
+ 2295: "advant-lm",
+ 2296: "theta-lm",
+ 2297: "d2k-datamover1",
+ 2298: "d2k-datamover2",
+ 2299: "pc-telecommute",
+ 2300: "cvmmon",
+ 2301: "cpq-wbem",
+ 2302: "binderysupport",
+ 2303: "proxy-gateway",
+ 2304: "attachmate-uts",
+ 2305: "mt-scaleserver",
+ 2306: "tappi-boxnet",
+ 2307: "pehelp",
+ 2308: "sdhelp",
+ 2309: "sdserver",
+ 2310: "sdclient",
+ 2311: "messageservice",
+ 2312: "wanscaler",
+ 2313: "iapp",
+ 2314: "cr-websystems",
+ 2315: "precise-sft",
+ 2316: "sent-lm",
+ 2317: "attachmate-g32",
+ 2318: "cadencecontrol",
+ 2319: "infolibria",
+ 2320: "siebel-ns",
+ 2321: "rdlap",
+ 2322: "ofsd",
+ 2323: "3d-nfsd",
+ 2324: "cosmocall",
+ 2325: "ansysli",
+ 2326: "idcp",
+ 2327: "xingcsm",
+ 2328: "netrix-sftm",
+ 2329: "nvd",
+ 2330: "tscchat",
+ 2331: "agentview",
+ 2332: "rcc-host",
+ 2333: "snapp",
+ 2334: "ace-client",
+ 2335: "ace-proxy",
+ 2336: "appleugcontrol",
+ 2337: "ideesrv",
+ 2338: "norton-lambert",
+ 2339: "3com-webview",
+ 2340: "wrs-registry",
+ 2341: "xiostatus",
+ 2342: "manage-exec",
+ 2343: "nati-logos",
+ 2344: "fcmsys",
+ 2345: "dbm",
+ 2346: "redstorm-join",
+ 2347: "redstorm-find",
+ 2348: "redstorm-info",
+ 2349: "redstorm-diag",
+ 2350: "psbserver",
+ 2351: "psrserver",
+ 2352: "pslserver",
+ 2353: "pspserver",
+ 2354: "psprserver",
+ 2355: "psdbserver",
+ 2356: "gxtelmd",
+ 2357: "unihub-server",
+ 2358: "futrix",
+ 2359: "flukeserver",
+ 2360: "nexstorindltd",
+ 2361: "tl1",
+ 2362: "digiman",
+ 2363: "mediacntrlnfsd",
+ 2364: "oi-2000",
+ 2365: "dbref",
+ 2366: "qip-login",
+ 2367: "service-ctrl",
+ 2368: "opentable",
+ 2370: "l3-hbmon",
+ 2371: "hp-rda",
+ 2372: "lanmessenger",
+ 2373: "remographlm",
+ 2374: "hydra",
+ 2375: "docker",
+ 2376: "docker-s",
+ 2377: "swarm",
+ 2379: "etcd-client",
+ 2380: "etcd-server",
+ 2381: "compaq-https",
+ 2382: "ms-olap3",
+ 2383: "ms-olap4",
+ 2384: "sd-request",
+ 2385: "sd-data",
+ 2386: "virtualtape",
+ 2387: "vsamredirector",
+ 2388: "mynahautostart",
+ 2389: "ovsessionmgr",
+ 2390: "rsmtp",
+ 2391: "3com-net-mgmt",
+ 2392: "tacticalauth",
+ 2393: "ms-olap1",
+ 2394: "ms-olap2",
+ 2395: "lan900-remote",
+ 2396: "wusage",
+ 2397: "ncl",
+ 2398: "orbiter",
+ 2399: "fmpro-fdal",
+ 2400: "opequus-server",
+ 2401: "cvspserver",
+ 2402: "taskmaster2000",
+ 2403: "taskmaster2000",
+ 2404: "iec-104",
+ 2405: "trc-netpoll",
+ 2406: "jediserver",
+ 2407: "orion",
+ 2408: "railgun-webaccl",
+ 2409: "sns-protocol",
+ 2410: "vrts-registry",
+ 2411: "netwave-ap-mgmt",
+ 2412: "cdn",
+ 2413: "orion-rmi-reg",
+ 2414: "beeyond",
+ 2415: "codima-rtp",
+ 2416: "rmtserver",
+ 2417: "composit-server",
+ 2418: "cas",
+ 2419: "attachmate-s2s",
+ 2420: "dslremote-mgmt",
+ 2421: "g-talk",
+ 2422: "crmsbits",
+ 2423: "rnrp",
+ 2424: "kofax-svr",
+ 2425: "fjitsuappmgr",
+ 2426: "vcmp",
+ 2427: "mgcp-gateway",
+ 2428: "ott",
+ 2429: "ft-role",
+ 2430: "venus",
+ 2431: "venus-se",
+ 2432: "codasrv",
+ 2433: "codasrv-se",
+ 2434: "pxc-epmap",
+ 2435: "optilogic",
+ 2436: "topx",
+ 2437: "unicontrol",
+ 2438: "msp",
+ 2439: "sybasedbsynch",
+ 2440: "spearway",
+ 2441: "pvsw-inet",
+ 2442: "netangel",
+ 2443: "powerclientcsf",
+ 2444: "btpp2sectrans",
+ 2445: "dtn1",
+ 2446: "bues-service",
+ 2447: "ovwdb",
+ 2448: "hpppssvr",
+ 2449: "ratl",
+ 2450: "netadmin",
+ 2451: "netchat",
+ 2452: "snifferclient",
+ 2453: "madge-ltd",
+ 2454: "indx-dds",
+ 2455: "wago-io-system",
+ 2456: "altav-remmgt",
+ 2457: "rapido-ip",
+ 2458: "griffin",
+ 2459: "community",
+ 2460: "ms-theater",
+ 2461: "qadmifoper",
+ 2462: "qadmifevent",
+ 2463: "lsi-raid-mgmt",
+ 2464: "direcpc-si",
+ 2465: "lbm",
+ 2466: "lbf",
+ 2467: "high-criteria",
+ 2468: "qip-msgd",
+ 2469: "mti-tcs-comm",
+ 2470: "taskman-port",
+ 2471: "seaodbc",
+ 2472: "c3",
+ 2473: "aker-cdp",
+ 2474: "vitalanalysis",
+ 2475: "ace-server",
+ 2476: "ace-svr-prop",
+ 2477: "ssm-cvs",
+ 2478: "ssm-cssps",
+ 2479: "ssm-els",
+ 2480: "powerexchange",
+ 2481: "giop",
+ 2482: "giop-ssl",
+ 2483: "ttc",
+ 2484: "ttc-ssl",
+ 2485: "netobjects1",
+ 2486: "netobjects2",
+ 2487: "pns",
+ 2488: "moy-corp",
+ 2489: "tsilb",
+ 2490: "qip-qdhcp",
+ 2491: "conclave-cpp",
+ 2492: "groove",
+ 2493: "talarian-mqs",
+ 2494: "bmc-ar",
+ 2495: "fast-rem-serv",
+ 2496: "dirgis",
+ 2497: "quaddb",
+ 2498: "odn-castraq",
+ 2499: "unicontrol",
+ 2500: "rtsserv",
+ 2501: "rtsclient",
+ 2502: "kentrox-prot",
+ 2503: "nms-dpnss",
+ 2504: "wlbs",
+ 2505: "ppcontrol",
+ 2506: "jbroker",
+ 2507: "spock",
+ 2508: "jdatastore",
+ 2509: "fjmpss",
+ 2510: "fjappmgrbulk",
+ 2511: "metastorm",
+ 2512: "citrixima",
+ 2513: "citrixadmin",
+ 2514: "facsys-ntp",
+ 2515: "facsys-router",
+ 2516: "maincontrol",
+ 2517: "call-sig-trans",
+ 2518: "willy",
+ 2519: "globmsgsvc",
+ 2520: "pvsw",
+ 2521: "adaptecmgr",
+ 2522: "windb",
+ 2523: "qke-llc-v3",
+ 2524: "optiwave-lm",
+ 2525: "ms-v-worlds",
+ 2526: "ema-sent-lm",
+ 2527: "iqserver",
+ 2528: "ncr-ccl",
+ 2529: "utsftp",
+ 2530: "vrcommerce",
+ 2531: "ito-e-gui",
+ 2532: "ovtopmd",
+ 2533: "snifferserver",
+ 2534: "combox-web-acc",
+ 2535: "madcap",
+ 2536: "btpp2audctr1",
+ 2537: "upgrade",
+ 2538: "vnwk-prapi",
+ 2539: "vsiadmin",
+ 2540: "lonworks",
+ 2541: "lonworks2",
+ 2542: "udrawgraph",
+ 2543: "reftek",
+ 2544: "novell-zen",
+ 2545: "sis-emt",
+ 2546: "vytalvaultbrtp",
+ 2547: "vytalvaultvsmp",
+ 2548: "vytalvaultpipe",
+ 2549: "ipass",
+ 2550: "ads",
+ 2551: "isg-uda-server",
+ 2552: "call-logging",
+ 2553: "efidiningport",
+ 2554: "vcnet-link-v10",
+ 2555: "compaq-wcp",
+ 2556: "nicetec-nmsvc",
+ 2557: "nicetec-mgmt",
+ 2558: "pclemultimedia",
+ 2559: "lstp",
+ 2560: "labrat",
+ 2561: "mosaixcc",
+ 2562: "delibo",
+ 2563: "cti-redwood",
+ 2564: "hp-3000-telnet",
+ 2565: "coord-svr",
+ 2566: "pcs-pcw",
+ 2567: "clp",
+ 2568: "spamtrap",
+ 2569: "sonuscallsig",
+ 2570: "hs-port",
+ 2571: "cecsvc",
+ 2572: "ibp",
+ 2573: "trustestablish",
+ 2574: "blockade-bpsp",
+ 2575: "hl7",
+ 2576: "tclprodebugger",
+ 2577: "scipticslsrvr",
+ 2578: "rvs-isdn-dcp",
+ 2579: "mpfoncl",
+ 2580: "tributary",
+ 2581: "argis-te",
+ 2582: "argis-ds",
+ 2583: "mon",
+ 2584: "cyaserv",
+ 2585: "netx-server",
+ 2586: "netx-agent",
+ 2587: "masc",
+ 2588: "privilege",
+ 2589: "quartus-tcl",
+ 2590: "idotdist",
+ 2591: "maytagshuffle",
+ 2592: "netrek",
+ 2593: "mns-mail",
+ 2594: "dts",
+ 2595: "worldfusion1",
+ 2596: "worldfusion2",
+ 2597: "homesteadglory",
+ 2598: "citriximaclient",
+ 2599: "snapd",
+ 2600: "hpstgmgr",
+ 2601: "discp-client",
+ 2602: "discp-server",
+ 2603: "servicemeter",
+ 2604: "nsc-ccs",
+ 2605: "nsc-posa",
+ 2606: "netmon",
+ 2607: "connection",
+ 2608: "wag-service",
+ 2609: "system-monitor",
+ 2610: "versa-tek",
+ 2611: "lionhead",
+ 2612: "qpasa-agent",
+ 2613: "smntubootstrap",
+ 2614: "neveroffline",
+ 2615: "firepower",
+ 2616: "appswitch-emp",
+ 2617: "cmadmin",
+ 2618: "priority-e-com",
+ 2619: "bruce",
+ 2620: "lpsrecommender",
+ 2621: "miles-apart",
+ 2622: "metricadbc",
+ 2623: "lmdp",
+ 2624: "aria",
+ 2625: "blwnkl-port",
+ 2626: "gbjd816",
+ 2627: "moshebeeri",
+ 2628: "dict",
+ 2629: "sitaraserver",
+ 2630: "sitaramgmt",
+ 2631: "sitaradir",
+ 2632: "irdg-post",
+ 2633: "interintelli",
+ 2634: "pk-electronics",
+ 2635: "backburner",
+ 2636: "solve",
+ 2637: "imdocsvc",
+ 2638: "sybaseanywhere",
+ 2639: "aminet",
+ 2640: "ami-control",
+ 2641: "hdl-srv",
+ 2642: "tragic",
+ 2643: "gte-samp",
+ 2644: "travsoft-ipx-t",
+ 2645: "novell-ipx-cmd",
+ 2646: "and-lm",
+ 2647: "syncserver",
+ 2648: "upsnotifyprot",
+ 2649: "vpsipport",
+ 2650: "eristwoguns",
+ 2651: "ebinsite",
+ 2652: "interpathpanel",
+ 2653: "sonus",
+ 2654: "corel-vncadmin",
+ 2655: "unglue",
+ 2656: "kana",
+ 2657: "sns-dispatcher",
+ 2658: "sns-admin",
+ 2659: "sns-query",
+ 2660: "gcmonitor",
+ 2661: "olhost",
+ 2662: "bintec-capi",
+ 2663: "bintec-tapi",
+ 2664: "patrol-mq-gm",
+ 2665: "patrol-mq-nm",
+ 2666: "extensis",
+ 2667: "alarm-clock-s",
+ 2668: "alarm-clock-c",
+ 2669: "toad",
+ 2670: "tve-announce",
+ 2671: "newlixreg",
+ 2672: "nhserver",
+ 2673: "firstcall42",
+ 2674: "ewnn",
+ 2675: "ttc-etap",
+ 2676: "simslink",
+ 2677: "gadgetgate1way",
+ 2678: "gadgetgate2way",
+ 2679: "syncserverssl",
+ 2680: "pxc-sapxom",
+ 2681: "mpnjsomb",
+ 2683: "ncdloadbalance",
+ 2684: "mpnjsosv",
+ 2685: "mpnjsocl",
+ 2686: "mpnjsomg",
+ 2687: "pq-lic-mgmt",
+ 2688: "md-cg-http",
+ 2689: "fastlynx",
+ 2690: "hp-nnm-data",
+ 2691: "itinternet",
+ 2692: "admins-lms",
+ 2694: "pwrsevent",
+ 2695: "vspread",
+ 2696: "unifyadmin",
+ 2697: "oce-snmp-trap",
+ 2698: "mck-ivpip",
+ 2699: "csoft-plusclnt",
+ 2700: "tqdata",
+ 2701: "sms-rcinfo",
+ 2702: "sms-xfer",
+ 2703: "sms-chat",
+ 2704: "sms-remctrl",
+ 2705: "sds-admin",
+ 2706: "ncdmirroring",
+ 2707: "emcsymapiport",
+ 2708: "banyan-net",
+ 2709: "supermon",
+ 2710: "sso-service",
+ 2711: "sso-control",
+ 2712: "aocp",
+ 2713: "raventbs",
+ 2714: "raventdm",
+ 2715: "hpstgmgr2",
+ 2716: "inova-ip-disco",
+ 2717: "pn-requester",
+ 2718: "pn-requester2",
+ 2719: "scan-change",
+ 2720: "wkars",
+ 2721: "smart-diagnose",
+ 2722: "proactivesrvr",
+ 2723: "watchdog-nt",
+ 2724: "qotps",
+ 2725: "msolap-ptp2",
+ 2726: "tams",
+ 2727: "mgcp-callagent",
+ 2728: "sqdr",
+ 2729: "tcim-control",
+ 2730: "nec-raidplus",
+ 2731: "fyre-messanger",
+ 2732: "g5m",
+ 2733: "signet-ctf",
+ 2734: "ccs-software",
+ 2735: "netiq-mc",
+ 2736: "radwiz-nms-srv",
+ 2737: "srp-feedback",
+ 2738: "ndl-tcp-ois-gw",
+ 2739: "tn-timing",
+ 2740: "alarm",
+ 2741: "tsb",
+ 2742: "tsb2",
+ 2743: "murx",
+ 2744: "honyaku",
+ 2745: "urbisnet",
+ 2746: "cpudpencap",
+ 2747: "fjippol-swrly",
+ 2748: "fjippol-polsvr",
+ 2749: "fjippol-cnsl",
+ 2750: "fjippol-port1",
+ 2751: "fjippol-port2",
+ 2752: "rsisysaccess",
+ 2753: "de-spot",
+ 2754: "apollo-cc",
+ 2755: "expresspay",
+ 2756: "simplement-tie",
+ 2757: "cnrp",
+ 2758: "apollo-status",
+ 2759: "apollo-gms",
+ 2760: "sabams",
+ 2761: "dicom-iscl",
+ 2762: "dicom-tls",
+ 2763: "desktop-dna",
+ 2764: "data-insurance",
+ 2765: "qip-audup",
+ 2766: "compaq-scp",
+ 2767: "uadtc",
+ 2768: "uacs",
+ 2769: "exce",
+ 2770: "veronica",
+ 2771: "vergencecm",
+ 2772: "auris",
+ 2773: "rbakcup1",
+ 2774: "rbakcup2",
+ 2775: "smpp",
+ 2776: "ridgeway1",
+ 2777: "ridgeway2",
+ 2778: "gwen-sonya",
+ 2779: "lbc-sync",
+ 2780: "lbc-control",
+ 2781: "whosells",
+ 2782: "everydayrc",
+ 2783: "aises",
+ 2784: "www-dev",
+ 2785: "aic-np",
+ 2786: "aic-oncrpc",
+ 2787: "piccolo",
+ 2788: "fryeserv",
+ 2789: "media-agent",
+ 2790: "plgproxy",
+ 2791: "mtport-regist",
+ 2792: "f5-globalsite",
+ 2793: "initlsmsad",
+ 2795: "livestats",
+ 2796: "ac-tech",
+ 2797: "esp-encap",
+ 2798: "tmesis-upshot",
+ 2799: "icon-discover",
+ 2800: "acc-raid",
+ 2801: "igcp",
+ 2802: "veritas-tcp1",
+ 2803: "btprjctrl",
+ 2804: "dvr-esm",
+ 2805: "wta-wsp-s",
+ 2806: "cspuni",
+ 2807: "cspmulti",
+ 2808: "j-lan-p",
+ 2809: "corbaloc",
+ 2810: "netsteward",
+ 2811: "gsiftp",
+ 2812: "atmtcp",
+ 2813: "llm-pass",
+ 2814: "llm-csv",
+ 2815: "lbc-measure",
+ 2816: "lbc-watchdog",
+ 2817: "nmsigport",
+ 2818: "rmlnk",
+ 2819: "fc-faultnotify",
+ 2820: "univision",
+ 2821: "vrts-at-port",
+ 2822: "ka0wuc",
+ 2823: "cqg-netlan",
+ 2824: "cqg-netlan-1",
+ 2826: "slc-systemlog",
+ 2827: "slc-ctrlrloops",
+ 2828: "itm-lm",
+ 2829: "silkp1",
+ 2830: "silkp2",
+ 2831: "silkp3",
+ 2832: "silkp4",
+ 2833: "glishd",
+ 2834: "evtp",
+ 2835: "evtp-data",
+ 2836: "catalyst",
+ 2837: "repliweb",
+ 2838: "starbot",
+ 2839: "nmsigport",
+ 2840: "l3-exprt",
+ 2841: "l3-ranger",
+ 2842: "l3-hawk",
+ 2843: "pdnet",
+ 2844: "bpcp-poll",
+ 2845: "bpcp-trap",
+ 2846: "aimpp-hello",
+ 2847: "aimpp-port-req",
+ 2848: "amt-blc-port",
+ 2849: "fxp",
+ 2850: "metaconsole",
+ 2851: "webemshttp",
+ 2852: "bears-01",
+ 2853: "ispipes",
+ 2854: "infomover",
+ 2855: "msrp",
+ 2856: "cesdinv",
+ 2857: "simctlp",
+ 2858: "ecnp",
+ 2859: "activememory",
+ 2860: "dialpad-voice1",
+ 2861: "dialpad-voice2",
+ 2862: "ttg-protocol",
+ 2863: "sonardata",
+ 2864: "astromed-main",
+ 2865: "pit-vpn",
+ 2866: "iwlistener",
+ 2867: "esps-portal",
+ 2868: "npep-messaging",
+ 2869: "icslap",
+ 2870: "daishi",
+ 2871: "msi-selectplay",
+ 2872: "radix",
+ 2874: "dxmessagebase1",
+ 2875: "dxmessagebase2",
+ 2876: "sps-tunnel",
+ 2877: "bluelance",
+ 2878: "aap",
+ 2879: "ucentric-ds",
+ 2880: "synapse",
+ 2881: "ndsp",
+ 2882: "ndtp",
+ 2883: "ndnp",
+ 2884: "flashmsg",
+ 2885: "topflow",
+ 2886: "responselogic",
+ 2887: "aironetddp",
+ 2888: "spcsdlobby",
+ 2889: "rsom",
+ 2890: "cspclmulti",
+ 2891: "cinegrfx-elmd",
+ 2892: "snifferdata",
+ 2893: "vseconnector",
+ 2894: "abacus-remote",
+ 2895: "natuslink",
+ 2896: "ecovisiong6-1",
+ 2897: "citrix-rtmp",
+ 2898: "appliance-cfg",
+ 2899: "powergemplus",
+ 2900: "quicksuite",
+ 2901: "allstorcns",
+ 2902: "netaspi",
+ 2903: "suitcase",
+ 2904: "m2ua",
+ 2905: "m3ua",
+ 2906: "caller9",
+ 2907: "webmethods-b2b",
+ 2908: "mao",
+ 2909: "funk-dialout",
+ 2910: "tdaccess",
+ 2911: "blockade",
+ 2912: "epicon",
+ 2913: "boosterware",
+ 2914: "gamelobby",
+ 2915: "tksocket",
+ 2916: "elvin-server",
+ 2917: "elvin-client",
+ 2918: "kastenchasepad",
+ 2919: "roboer",
+ 2920: "roboeda",
+ 2921: "cesdcdman",
+ 2922: "cesdcdtrn",
+ 2923: "wta-wsp-wtp-s",
+ 2924: "precise-vip",
+ 2926: "mobile-file-dl",
+ 2927: "unimobilectrl",
+ 2928: "redstone-cpss",
+ 2929: "amx-webadmin",
+ 2930: "amx-weblinx",
+ 2931: "circle-x",
+ 2932: "incp",
+ 2933: "4-tieropmgw",
+ 2934: "4-tieropmcli",
+ 2935: "qtp",
+ 2936: "otpatch",
+ 2937: "pnaconsult-lm",
+ 2938: "sm-pas-1",
+ 2939: "sm-pas-2",
+ 2940: "sm-pas-3",
+ 2941: "sm-pas-4",
+ 2942: "sm-pas-5",
+ 2943: "ttnrepository",
+ 2944: "megaco-h248",
+ 2945: "h248-binary",
+ 2946: "fjsvmpor",
+ 2947: "gpsd",
+ 2948: "wap-push",
+ 2949: "wap-pushsecure",
+ 2950: "esip",
+ 2951: "ottp",
+ 2952: "mpfwsas",
+ 2953: "ovalarmsrv",
+ 2954: "ovalarmsrv-cmd",
+ 2955: "csnotify",
+ 2956: "ovrimosdbman",
+ 2957: "jmact5",
+ 2958: "jmact6",
+ 2959: "rmopagt",
+ 2960: "dfoxserver",
+ 2961: "boldsoft-lm",
+ 2962: "iph-policy-cli",
+ 2963: "iph-policy-adm",
+ 2964: "bullant-srap",
+ 2965: "bullant-rap",
+ 2966: "idp-infotrieve",
+ 2967: "ssc-agent",
+ 2968: "enpp",
+ 2969: "essp",
+ 2970: "index-net",
+ 2971: "netclip",
+ 2972: "pmsm-webrctl",
+ 2973: "svnetworks",
+ 2974: "signal",
+ 2975: "fjmpcm",
+ 2976: "cns-srv-port",
+ 2977: "ttc-etap-ns",
+ 2978: "ttc-etap-ds",
+ 2979: "h263-video",
+ 2980: "wimd",
+ 2981: "mylxamport",
+ 2982: "iwb-whiteboard",
+ 2983: "netplan",
+ 2984: "hpidsadmin",
+ 2985: "hpidsagent",
+ 2986: "stonefalls",
+ 2987: "identify",
+ 2988: "hippad",
+ 2989: "zarkov",
+ 2990: "boscap",
+ 2991: "wkstn-mon",
+ 2992: "avenyo",
+ 2993: "veritas-vis1",
+ 2994: "veritas-vis2",
+ 2995: "idrs",
+ 2996: "vsixml",
+ 2997: "rebol",
+ 2998: "realsecure",
+ 2999: "remoteware-un",
+ 3000: "hbci",
+ 3001: "origo-native",
+ 3002: "exlm-agent",
+ 3003: "cgms",
+ 3004: "csoftragent",
+ 3005: "geniuslm",
+ 3006: "ii-admin",
+ 3007: "lotusmtap",
+ 3008: "midnight-tech",
+ 3009: "pxc-ntfy",
+ 3010: "gw",
+ 3011: "trusted-web",
+ 3012: "twsdss",
+ 3013: "gilatskysurfer",
+ 3014: "broker-service",
+ 3015: "nati-dstp",
+ 3016: "notify-srvr",
+ 3017: "event-listener",
+ 3018: "srvc-registry",
+ 3019: "resource-mgr",
+ 3020: "cifs",
+ 3021: "agriserver",
+ 3022: "csregagent",
+ 3023: "magicnotes",
+ 3024: "nds-sso",
+ 3025: "arepa-raft",
+ 3026: "agri-gateway",
+ 3027: "LiebDevMgmt-C",
+ 3028: "LiebDevMgmt-DM",
+ 3029: "LiebDevMgmt-A",
+ 3030: "arepa-cas",
+ 3031: "eppc",
+ 3032: "redwood-chat",
+ 3033: "pdb",
+ 3034: "osmosis-aeea",
+ 3035: "fjsv-gssagt",
+ 3036: "hagel-dump",
+ 3037: "hp-san-mgmt",
+ 3038: "santak-ups",
+ 3039: "cogitate",
+ 3040: "tomato-springs",
+ 3041: "di-traceware",
+ 3042: "journee",
+ 3043: "brp",
+ 3044: "epp",
+ 3045: "responsenet",
+ 3046: "di-ase",
+ 3047: "hlserver",
+ 3048: "pctrader",
+ 3049: "nsws",
+ 3050: "gds-db",
+ 3051: "galaxy-server",
+ 3052: "apc-3052",
+ 3053: "dsom-server",
+ 3054: "amt-cnf-prot",
+ 3055: "policyserver",
+ 3056: "cdl-server",
+ 3057: "goahead-fldup",
+ 3058: "videobeans",
+ 3059: "qsoft",
+ 3060: "interserver",
+ 3061: "cautcpd",
+ 3062: "ncacn-ip-tcp",
+ 3063: "ncadg-ip-udp",
+ 3064: "rprt",
+ 3065: "slinterbase",
+ 3066: "netattachsdmp",
+ 3067: "fjhpjp",
+ 3068: "ls3bcast",
+ 3069: "ls3",
+ 3070: "mgxswitch",
+ 3071: "xplat-replicate",
+ 3072: "csd-monitor",
+ 3073: "vcrp",
+ 3074: "xbox",
+ 3075: "orbix-locator",
+ 3076: "orbix-config",
+ 3077: "orbix-loc-ssl",
+ 3078: "orbix-cfg-ssl",
+ 3079: "lv-frontpanel",
+ 3080: "stm-pproc",
+ 3081: "tl1-lv",
+ 3082: "tl1-raw",
+ 3083: "tl1-telnet",
+ 3084: "itm-mccs",
+ 3085: "pcihreq",
+ 3086: "jdl-dbkitchen",
+ 3087: "asoki-sma",
+ 3088: "xdtp",
+ 3089: "ptk-alink",
+ 3090: "stss",
+ 3091: "1ci-smcs",
+ 3093: "rapidmq-center",
+ 3094: "rapidmq-reg",
+ 3095: "panasas",
+ 3096: "ndl-aps",
+ 3098: "umm-port",
+ 3099: "chmd",
+ 3100: "opcon-xps",
+ 3101: "hp-pxpib",
+ 3102: "slslavemon",
+ 3103: "autocuesmi",
+ 3104: "autocuelog",
+ 3105: "cardbox",
+ 3106: "cardbox-http",
+ 3107: "business",
+ 3108: "geolocate",
+ 3109: "personnel",
+ 3110: "sim-control",
+ 3111: "wsynch",
+ 3112: "ksysguard",
+ 3113: "cs-auth-svr",
+ 3114: "ccmad",
+ 3115: "mctet-master",
+ 3116: "mctet-gateway",
+ 3117: "mctet-jserv",
+ 3118: "pkagent",
+ 3119: "d2000kernel",
+ 3120: "d2000webserver",
+ 3121: "pcmk-remote",
+ 3122: "vtr-emulator",
+ 3123: "edix",
+ 3124: "beacon-port",
+ 3125: "a13-an",
+ 3127: "ctx-bridge",
+ 3128: "ndl-aas",
+ 3129: "netport-id",
+ 3130: "icpv2",
+ 3131: "netbookmark",
+ 3132: "ms-rule-engine",
+ 3133: "prism-deploy",
+ 3134: "ecp",
+ 3135: "peerbook-port",
+ 3136: "grubd",
+ 3137: "rtnt-1",
+ 3138: "rtnt-2",
+ 3139: "incognitorv",
+ 3140: "ariliamulti",
+ 3141: "vmodem",
+ 3142: "rdc-wh-eos",
+ 3143: "seaview",
+ 3144: "tarantella",
+ 3145: "csi-lfap",
+ 3146: "bears-02",
+ 3147: "rfio",
+ 3148: "nm-game-admin",
+ 3149: "nm-game-server",
+ 3150: "nm-asses-admin",
+ 3151: "nm-assessor",
+ 3152: "feitianrockey",
+ 3153: "s8-client-port",
+ 3154: "ccmrmi",
+ 3155: "jpegmpeg",
+ 3156: "indura",
+ 3157: "e3consultants",
+ 3158: "stvp",
+ 3159: "navegaweb-port",
+ 3160: "tip-app-server",
+ 3161: "doc1lm",
+ 3162: "sflm",
+ 3163: "res-sap",
+ 3164: "imprs",
+ 3165: "newgenpay",
+ 3166: "sossecollector",
+ 3167: "nowcontact",
+ 3168: "poweronnud",
+ 3169: "serverview-as",
+ 3170: "serverview-asn",
+ 3171: "serverview-gf",
+ 3172: "serverview-rm",
+ 3173: "serverview-icc",
+ 3174: "armi-server",
+ 3175: "t1-e1-over-ip",
+ 3176: "ars-master",
+ 3177: "phonex-port",
+ 3178: "radclientport",
+ 3179: "h2gf-w-2m",
+ 3180: "mc-brk-srv",
+ 3181: "bmcpatrolagent",
+ 3182: "bmcpatrolrnvu",
+ 3183: "cops-tls",
+ 3184: "apogeex-port",
+ 3185: "smpppd",
+ 3186: "iiw-port",
+ 3187: "odi-port",
+ 3188: "brcm-comm-port",
+ 3189: "pcle-infex",
+ 3190: "csvr-proxy",
+ 3191: "csvr-sslproxy",
+ 3192: "firemonrcc",
+ 3193: "spandataport",
+ 3194: "magbind",
+ 3195: "ncu-1",
+ 3196: "ncu-2",
+ 3197: "embrace-dp-s",
+ 3198: "embrace-dp-c",
+ 3199: "dmod-workspace",
+ 3200: "tick-port",
+ 3201: "cpq-tasksmart",
+ 3202: "intraintra",
+ 3203: "netwatcher-mon",
+ 3204: "netwatcher-db",
+ 3205: "isns",
+ 3206: "ironmail",
+ 3207: "vx-auth-port",
+ 3208: "pfu-prcallback",
+ 3209: "netwkpathengine",
+ 3210: "flamenco-proxy",
+ 3211: "avsecuremgmt",
+ 3212: "surveyinst",
+ 3213: "neon24x7",
+ 3214: "jmq-daemon-1",
+ 3215: "jmq-daemon-2",
+ 3216: "ferrari-foam",
+ 3217: "unite",
+ 3218: "smartpackets",
+ 3219: "wms-messenger",
+ 3220: "xnm-ssl",
+ 3221: "xnm-clear-text",
+ 3222: "glbp",
+ 3223: "digivote",
+ 3224: "aes-discovery",
+ 3225: "fcip-port",
+ 3226: "isi-irp",
+ 3227: "dwnmshttp",
+ 3228: "dwmsgserver",
+ 3229: "global-cd-port",
+ 3230: "sftdst-port",
+ 3231: "vidigo",
+ 3232: "mdtp",
+ 3233: "whisker",
+ 3234: "alchemy",
+ 3235: "mdap-port",
+ 3236: "apparenet-ts",
+ 3237: "apparenet-tps",
+ 3238: "apparenet-as",
+ 3239: "apparenet-ui",
+ 3240: "triomotion",
+ 3241: "sysorb",
+ 3242: "sdp-id-port",
+ 3243: "timelot",
+ 3244: "onesaf",
+ 3245: "vieo-fe",
+ 3246: "dvt-system",
+ 3247: "dvt-data",
+ 3248: "procos-lm",
+ 3249: "ssp",
+ 3250: "hicp",
+ 3251: "sysscanner",
+ 3252: "dhe",
+ 3253: "pda-data",
+ 3254: "pda-sys",
+ 3255: "semaphore",
+ 3256: "cpqrpm-agent",
+ 3257: "cpqrpm-server",
+ 3258: "ivecon-port",
+ 3259: "epncdp2",
+ 3260: "iscsi-target",
+ 3261: "winshadow",
+ 3262: "necp",
+ 3263: "ecolor-imager",
+ 3264: "ccmail",
+ 3265: "altav-tunnel",
+ 3266: "ns-cfg-server",
+ 3267: "ibm-dial-out",
+ 3268: "msft-gc",
+ 3269: "msft-gc-ssl",
+ 3270: "verismart",
+ 3271: "csoft-prev",
+ 3272: "user-manager",
+ 3273: "sxmp",
+ 3274: "ordinox-server",
+ 3275: "samd",
+ 3276: "maxim-asics",
+ 3277: "awg-proxy",
+ 3278: "lkcmserver",
+ 3279: "admind",
+ 3280: "vs-server",
+ 3281: "sysopt",
+ 3282: "datusorb",
+ 3283: "Apple Remote Desktop (Net Assistant)",
+ 3284: "4talk",
+ 3285: "plato",
+ 3286: "e-net",
+ 3287: "directvdata",
+ 3288: "cops",
+ 3289: "enpc",
+ 3290: "caps-lm",
+ 3291: "sah-lm",
+ 3292: "cart-o-rama",
+ 3293: "fg-fps",
+ 3294: "fg-gip",
+ 3295: "dyniplookup",
+ 3296: "rib-slm",
+ 3297: "cytel-lm",
+ 3298: "deskview",
+ 3299: "pdrncs",
+ 3300: "ceph",
+ 3302: "mcs-fastmail",
+ 3303: "opsession-clnt",
+ 3304: "opsession-srvr",
+ 3305: "odette-ftp",
+ 3306: "mysql",
+ 3307: "opsession-prxy",
+ 3308: "tns-server",
+ 3309: "tns-adv",
+ 3310: "dyna-access",
+ 3311: "mcns-tel-ret",
+ 3312: "appman-server",
+ 3313: "uorb",
+ 3314: "uohost",
+ 3315: "cdid",
+ 3316: "aicc-cmi",
+ 3317: "vsaiport",
+ 3318: "ssrip",
+ 3319: "sdt-lmd",
+ 3320: "officelink2000",
+ 3321: "vnsstr",
+ 3326: "sftu",
+ 3327: "bbars",
+ 3328: "egptlm",
+ 3329: "hp-device-disc",
+ 3330: "mcs-calypsoicf",
+ 3331: "mcs-messaging",
+ 3332: "mcs-mailsvr",
+ 3333: "dec-notes",
+ 3334: "directv-web",
+ 3335: "directv-soft",
+ 3336: "directv-tick",
+ 3337: "directv-catlg",
+ 3338: "anet-b",
+ 3339: "anet-l",
+ 3340: "anet-m",
+ 3341: "anet-h",
+ 3342: "webtie",
+ 3343: "ms-cluster-net",
+ 3344: "bnt-manager",
+ 3345: "influence",
+ 3346: "trnsprntproxy",
+ 3347: "phoenix-rpc",
+ 3348: "pangolin-laser",
+ 3349: "chevinservices",
+ 3350: "findviatv",
+ 3351: "btrieve",
+ 3352: "ssql",
+ 3353: "fatpipe",
+ 3354: "suitjd",
+ 3355: "ordinox-dbase",
+ 3356: "upnotifyps",
+ 3357: "adtech-test",
+ 3358: "mpsysrmsvr",
+ 3359: "wg-netforce",
+ 3360: "kv-server",
+ 3361: "kv-agent",
+ 3362: "dj-ilm",
+ 3363: "nati-vi-server",
+ 3364: "creativeserver",
+ 3365: "contentserver",
+ 3366: "creativepartnr",
+ 3372: "tip2",
+ 3373: "lavenir-lm",
+ 3374: "cluster-disc",
+ 3375: "vsnm-agent",
+ 3376: "cdbroker",
+ 3377: "cogsys-lm",
+ 3378: "wsicopy",
+ 3379: "socorfs",
+ 3380: "sns-channels",
+ 3381: "geneous",
+ 3382: "fujitsu-neat",
+ 3383: "esp-lm",
+ 3384: "hp-clic",
+ 3385: "qnxnetman",
+ 3386: "gprs-data",
+ 3387: "backroomnet",
+ 3388: "cbserver",
+ 3389: "ms-wbt-server",
+ 3390: "dsc",
+ 3391: "savant",
+ 3392: "efi-lm",
+ 3393: "d2k-tapestry1",
+ 3394: "d2k-tapestry2",
+ 3395: "dyna-lm",
+ 3396: "printer-agent",
+ 3397: "cloanto-lm",
+ 3398: "mercantile",
+ 3399: "csms",
+ 3400: "csms2",
+ 3401: "filecast",
+ 3402: "fxaengine-net",
+ 3405: "nokia-ann-ch1",
+ 3406: "nokia-ann-ch2",
+ 3407: "ldap-admin",
+ 3408: "BESApi",
+ 3409: "networklens",
+ 3410: "networklenss",
+ 3411: "biolink-auth",
+ 3412: "xmlblaster",
+ 3413: "svnet",
+ 3414: "wip-port",
+ 3415: "bcinameservice",
+ 3416: "commandport",
+ 3417: "csvr",
+ 3418: "rnmap",
+ 3419: "softaudit",
+ 3420: "ifcp-port",
+ 3421: "bmap",
+ 3422: "rusb-sys-port",
+ 3423: "xtrm",
+ 3424: "xtrms",
+ 3425: "agps-port",
+ 3426: "arkivio",
+ 3427: "websphere-snmp",
+ 3428: "twcss",
+ 3429: "gcsp",
+ 3430: "ssdispatch",
+ 3431: "ndl-als",
+ 3432: "osdcp",
+ 3433: "opnet-smp",
+ 3434: "opencm",
+ 3435: "pacom",
+ 3436: "gc-config",
+ 3437: "autocueds",
+ 3438: "spiral-admin",
+ 3439: "hri-port",
+ 3440: "ans-console",
+ 3441: "connect-client",
+ 3442: "connect-server",
+ 3443: "ov-nnm-websrv",
+ 3444: "denali-server",
+ 3445: "monp",
+ 3446: "3comfaxrpc",
+ 3447: "directnet",
+ 3448: "dnc-port",
+ 3449: "hotu-chat",
+ 3450: "castorproxy",
+ 3451: "asam",
+ 3452: "sabp-signal",
+ 3453: "pscupd",
+ 3454: "mira",
+ 3455: "prsvp",
+ 3456: "vat",
+ 3457: "vat-control",
+ 3458: "d3winosfi",
+ 3459: "integral",
+ 3460: "edm-manager",
+ 3461: "edm-stager",
+ 3462: "edm-std-notify",
+ 3463: "edm-adm-notify",
+ 3464: "edm-mgr-sync",
+ 3465: "edm-mgr-cntrl",
+ 3466: "workflow",
+ 3467: "rcst",
+ 3468: "ttcmremotectrl",
+ 3469: "pluribus",
+ 3470: "jt400",
+ 3471: "jt400-ssl",
+ 3472: "jaugsremotec-1",
+ 3473: "jaugsremotec-2",
+ 3474: "ttntspauto",
+ 3475: "genisar-port",
+ 3476: "nppmp",
+ 3477: "ecomm",
+ 3478: "stun",
+ 3479: "twrpc",
+ 3480: "plethora",
+ 3481: "cleanerliverc",
+ 3482: "vulture",
+ 3483: "slim-devices",
+ 3484: "gbs-stp",
+ 3485: "celatalk",
+ 3486: "ifsf-hb-port",
+ 3487: "ltctcp",
+ 3488: "fs-rh-srv",
+ 3489: "dtp-dia",
+ 3490: "colubris",
+ 3491: "swr-port",
+ 3492: "tvdumtray-port",
+ 3493: "nut",
+ 3494: "ibm3494",
+ 3495: "seclayer-tcp",
+ 3496: "seclayer-tls",
+ 3497: "ipether232port",
+ 3498: "dashpas-port",
+ 3499: "sccip-media",
+ 3500: "rtmp-port",
+ 3501: "isoft-p2p",
+ 3502: "avinstalldisc",
+ 3503: "lsp-ping",
+ 3504: "ironstorm",
+ 3505: "ccmcomm",
+ 3506: "apc-3506",
+ 3507: "nesh-broker",
+ 3508: "interactionweb",
+ 3509: "vt-ssl",
+ 3510: "xss-port",
+ 3511: "webmail-2",
+ 3512: "aztec",
+ 3513: "arcpd",
+ 3514: "must-p2p",
+ 3515: "must-backplane",
+ 3516: "smartcard-port",
+ 3517: "802-11-iapp",
+ 3518: "artifact-msg",
+ 3519: "nvmsgd",
+ 3520: "galileolog",
+ 3521: "mc3ss",
+ 3522: "nssocketport",
+ 3523: "odeumservlink",
+ 3524: "ecmport",
+ 3525: "eisport",
+ 3526: "starquiz-port",
+ 3527: "beserver-msg-q",
+ 3528: "jboss-iiop",
+ 3529: "jboss-iiop-ssl",
+ 3530: "gf",
+ 3531: "joltid",
+ 3532: "raven-rmp",
+ 3533: "raven-rdp",
+ 3534: "urld-port",
+ 3535: "ms-la",
+ 3536: "snac",
+ 3537: "ni-visa-remote",
+ 3538: "ibm-diradm",
+ 3539: "ibm-diradm-ssl",
+ 3540: "pnrp-port",
+ 3541: "voispeed-port",
+ 3542: "hacl-monitor",
+ 3543: "qftest-lookup",
+ 3544: "teredo",
+ 3545: "camac",
+ 3547: "symantec-sim",
+ 3548: "interworld",
+ 3549: "tellumat-nms",
+ 3550: "ssmpp",
+ 3551: "apcupsd",
+ 3552: "taserver",
+ 3553: "rbr-discovery",
+ 3554: "questnotify",
+ 3555: "razor",
+ 3556: "sky-transport",
+ 3557: "personalos-001",
+ 3558: "mcp-port",
+ 3559: "cctv-port",
+ 3560: "iniserve-port",
+ 3561: "bmc-onekey",
+ 3562: "sdbproxy",
+ 3563: "watcomdebug",
+ 3564: "esimport",
+ 3565: "m2pa",
+ 3566: "quest-data-hub",
+ 3567: "dof-eps",
+ 3568: "dof-tunnel-sec",
+ 3569: "mbg-ctrl",
+ 3570: "mccwebsvr-port",
+ 3571: "megardsvr-port",
+ 3572: "megaregsvrport",
+ 3573: "tag-ups-1",
+ 3574: "dmaf-server",
+ 3575: "ccm-port",
+ 3576: "cmc-port",
+ 3577: "config-port",
+ 3578: "data-port",
+ 3579: "ttat3lb",
+ 3580: "nati-svrloc",
+ 3581: "kfxaclicensing",
+ 3582: "press",
+ 3583: "canex-watch",
+ 3584: "u-dbap",
+ 3585: "emprise-lls",
+ 3586: "emprise-lsc",
+ 3587: "p2pgroup",
+ 3588: "sentinel",
+ 3589: "isomair",
+ 3590: "wv-csp-sms",
+ 3591: "gtrack-server",
+ 3592: "gtrack-ne",
+ 3593: "bpmd",
+ 3594: "mediaspace",
+ 3595: "shareapp",
+ 3596: "iw-mmogame",
+ 3597: "a14",
+ 3598: "a15",
+ 3599: "quasar-server",
+ 3600: "trap-daemon",
+ 3601: "visinet-gui",
+ 3602: "infiniswitchcl",
+ 3603: "int-rcv-cntrl",
+ 3604: "bmc-jmx-port",
+ 3605: "comcam-io",
+ 3606: "splitlock",
+ 3607: "precise-i3",
+ 3608: "trendchip-dcp",
+ 3609: "cpdi-pidas-cm",
+ 3610: "echonet",
+ 3611: "six-degrees",
+ 3612: "hp-dataprotect",
+ 3613: "alaris-disc",
+ 3614: "sigma-port",
+ 3615: "start-network",
+ 3616: "cd3o-protocol",
+ 3617: "sharp-server",
+ 3618: "aairnet-1",
+ 3619: "aairnet-2",
+ 3620: "ep-pcp",
+ 3621: "ep-nsp",
+ 3622: "ff-lr-port",
+ 3623: "haipe-discover",
+ 3624: "dist-upgrade",
+ 3625: "volley",
+ 3626: "bvcdaemon-port",
+ 3627: "jamserverport",
+ 3628: "ept-machine",
+ 3629: "escvpnet",
+ 3630: "cs-remote-db",
+ 3631: "cs-services",
+ 3632: "distcc",
+ 3633: "wacp",
+ 3634: "hlibmgr",
+ 3635: "sdo",
+ 3636: "servistaitsm",
+ 3637: "scservp",
+ 3638: "ehp-backup",
+ 3639: "xap-ha",
+ 3640: "netplay-port1",
+ 3641: "netplay-port2",
+ 3642: "juxml-port",
+ 3643: "audiojuggler",
+ 3644: "ssowatch",
+ 3645: "cyc",
+ 3646: "xss-srv-port",
+ 3647: "splitlock-gw",
+ 3648: "fjcp",
+ 3649: "nmmp",
+ 3650: "prismiq-plugin",
+ 3651: "xrpc-registry",
+ 3652: "vxcrnbuport",
+ 3653: "tsp",
+ 3654: "vaprtm",
+ 3655: "abatemgr",
+ 3656: "abatjss",
+ 3657: "immedianet-bcn",
+ 3658: "ps-ams",
+ 3659: "apple-sasl",
+ 3660: "can-nds-ssl",
+ 3661: "can-ferret-ssl",
+ 3662: "pserver",
+ 3663: "dtp",
+ 3664: "ups-engine",
+ 3665: "ent-engine",
+ 3666: "eserver-pap",
+ 3667: "infoexch",
+ 3668: "dell-rm-port",
+ 3669: "casanswmgmt",
+ 3670: "smile",
+ 3671: "efcp",
+ 3672: "lispworks-orb",
+ 3673: "mediavault-gui",
+ 3674: "wininstall-ipc",
+ 3675: "calltrax",
+ 3676: "va-pacbase",
+ 3677: "roverlog",
+ 3678: "ipr-dglt",
+ 3679: "Escale (Newton Dock)",
+ 3680: "npds-tracker",
+ 3681: "bts-x73",
+ 3682: "cas-mapi",
+ 3683: "bmc-ea",
+ 3684: "faxstfx-port",
+ 3685: "dsx-agent",
+ 3686: "tnmpv2",
+ 3687: "simple-push",
+ 3688: "simple-push-s",
+ 3689: "daap",
+ 3690: "svn",
+ 3691: "magaya-network",
+ 3692: "intelsync",
+ 3693: "easl",
+ 3695: "bmc-data-coll",
+ 3696: "telnetcpcd",
+ 3697: "nw-license",
+ 3698: "sagectlpanel",
+ 3699: "kpn-icw",
+ 3700: "lrs-paging",
+ 3701: "netcelera",
+ 3702: "ws-discovery",
+ 3703: "adobeserver-3",
+ 3704: "adobeserver-4",
+ 3705: "adobeserver-5",
+ 3706: "rt-event",
+ 3707: "rt-event-s",
+ 3708: "sun-as-iiops",
+ 3709: "ca-idms",
+ 3710: "portgate-auth",
+ 3711: "edb-server2",
+ 3712: "sentinel-ent",
+ 3713: "tftps",
+ 3714: "delos-dms",
+ 3715: "anoto-rendezv",
+ 3716: "wv-csp-sms-cir",
+ 3717: "wv-csp-udp-cir",
+ 3718: "opus-services",
+ 3719: "itelserverport",
+ 3720: "ufastro-instr",
+ 3721: "xsync",
+ 3722: "xserveraid",
+ 3723: "sychrond",
+ 3724: "blizwow",
+ 3725: "na-er-tip",
+ 3726: "array-manager",
+ 3727: "e-mdu",
+ 3728: "e-woa",
+ 3729: "fksp-audit",
+ 3730: "client-ctrl",
+ 3731: "smap",
+ 3732: "m-wnn",
+ 3733: "multip-msg",
+ 3734: "synel-data",
+ 3735: "pwdis",
+ 3736: "rs-rmi",
+ 3737: "xpanel",
+ 3738: "versatalk",
+ 3739: "launchbird-lm",
+ 3740: "heartbeat",
+ 3741: "wysdma",
+ 3742: "cst-port",
+ 3743: "ipcs-command",
+ 3744: "sasg",
+ 3745: "gw-call-port",
+ 3746: "linktest",
+ 3747: "linktest-s",
+ 3748: "webdata",
+ 3749: "cimtrak",
+ 3750: "cbos-ip-port",
+ 3751: "gprs-cube",
+ 3752: "vipremoteagent",
+ 3753: "nattyserver",
+ 3754: "timestenbroker",
+ 3755: "sas-remote-hlp",
+ 3756: "canon-capt",
+ 3757: "grf-port",
+ 3758: "apw-registry",
+ 3759: "exapt-lmgr",
+ 3760: "adtempusclient",
+ 3761: "gsakmp",
+ 3762: "gbs-smp",
+ 3763: "xo-wave",
+ 3764: "mni-prot-rout",
+ 3765: "rtraceroute",
+ 3766: "sitewatch-s",
+ 3767: "listmgr-port",
+ 3768: "rblcheckd",
+ 3769: "haipe-otnk",
+ 3770: "cindycollab",
+ 3771: "paging-port",
+ 3772: "ctp",
+ 3773: "ctdhercules",
+ 3774: "zicom",
+ 3775: "ispmmgr",
+ 3776: "dvcprov-port",
+ 3777: "jibe-eb",
+ 3778: "c-h-it-port",
+ 3779: "cognima",
+ 3780: "nnp",
+ 3781: "abcvoice-port",
+ 3782: "iso-tp0s",
+ 3783: "bim-pem",
+ 3784: "bfd-control",
+ 3785: "bfd-echo",
+ 3786: "upstriggervsw",
+ 3787: "fintrx",
+ 3788: "isrp-port",
+ 3789: "remotedeploy",
+ 3790: "quickbooksrds",
+ 3791: "tvnetworkvideo",
+ 3792: "sitewatch",
+ 3793: "dcsoftware",
+ 3794: "jaus",
+ 3795: "myblast",
+ 3796: "spw-dialer",
+ 3797: "idps",
+ 3798: "minilock",
+ 3799: "radius-dynauth",
+ 3800: "pwgpsi",
+ 3801: "ibm-mgr",
+ 3802: "vhd",
+ 3803: "soniqsync",
+ 3804: "iqnet-port",
+ 3805: "tcpdataserver",
+ 3806: "wsmlb",
+ 3807: "spugna",
+ 3808: "sun-as-iiops-ca",
+ 3809: "apocd",
+ 3810: "wlanauth",
+ 3811: "amp",
+ 3812: "neto-wol-server",
+ 3813: "rap-ip",
+ 3814: "neto-dcs",
+ 3815: "lansurveyorxml",
+ 3816: "sunlps-http",
+ 3817: "tapeware",
+ 3818: "crinis-hb",
+ 3819: "epl-slp",
+ 3820: "scp",
+ 3821: "pmcp",
+ 3822: "acp-discovery",
+ 3823: "acp-conduit",
+ 3824: "acp-policy",
+ 3825: "ffserver",
+ 3826: "warmux",
+ 3827: "netmpi",
+ 3828: "neteh",
+ 3829: "neteh-ext",
+ 3830: "cernsysmgmtagt",
+ 3831: "dvapps",
+ 3832: "xxnetserver",
+ 3833: "aipn-auth",
+ 3834: "spectardata",
+ 3835: "spectardb",
+ 3836: "markem-dcp",
+ 3837: "mkm-discovery",
+ 3838: "sos",
+ 3839: "amx-rms",
+ 3840: "flirtmitmir",
+ 3841: "shiprush-db-svr",
+ 3842: "nhci",
+ 3843: "quest-agent",
+ 3844: "rnm",
+ 3845: "v-one-spp",
+ 3846: "an-pcp",
+ 3847: "msfw-control",
+ 3848: "item",
+ 3849: "spw-dnspreload",
+ 3850: "qtms-bootstrap",
+ 3851: "spectraport",
+ 3852: "sse-app-config",
+ 3853: "sscan",
+ 3854: "stryker-com",
+ 3855: "opentrac",
+ 3856: "informer",
+ 3857: "trap-port",
+ 3858: "trap-port-mom",
+ 3859: "nav-port",
+ 3860: "sasp",
+ 3861: "winshadow-hd",
+ 3862: "giga-pocket",
+ 3863: "asap-tcp",
+ 3864: "asap-tcp-tls",
+ 3865: "xpl",
+ 3866: "dzdaemon",
+ 3867: "dzoglserver",
+ 3868: "diameter",
+ 3869: "ovsam-mgmt",
+ 3870: "ovsam-d-agent",
+ 3871: "avocent-adsap",
+ 3872: "oem-agent",
+ 3873: "fagordnc",
+ 3874: "sixxsconfig",
+ 3875: "pnbscada",
+ 3876: "dl-agent",
+ 3877: "xmpcr-interface",
+ 3878: "fotogcad",
+ 3879: "appss-lm",
+ 3880: "igrs",
+ 3881: "idac",
+ 3882: "msdts1",
+ 3883: "vrpn",
+ 3884: "softrack-meter",
+ 3885: "topflow-ssl",
+ 3886: "nei-management",
+ 3887: "ciphire-data",
+ 3888: "ciphire-serv",
+ 3889: "dandv-tester",
+ 3890: "ndsconnect",
+ 3891: "rtc-pm-port",
+ 3892: "pcc-image-port",
+ 3893: "cgi-starapi",
+ 3894: "syam-agent",
+ 3895: "syam-smc",
+ 3896: "sdo-tls",
+ 3897: "sdo-ssh",
+ 3898: "senip",
+ 3899: "itv-control",
+ 3900: "udt-os",
+ 3901: "nimsh",
+ 3902: "nimaux",
+ 3903: "charsetmgr",
+ 3904: "omnilink-port",
+ 3905: "mupdate",
+ 3906: "topovista-data",
+ 3907: "imoguia-port",
+ 3908: "hppronetman",
+ 3909: "surfcontrolcpa",
+ 3910: "prnrequest",
+ 3911: "prnstatus",
+ 3912: "gbmt-stars",
+ 3913: "listcrt-port",
+ 3914: "listcrt-port-2",
+ 3915: "agcat",
+ 3916: "wysdmc",
+ 3917: "aftmux",
+ 3918: "pktcablemmcops",
+ 3919: "hyperip",
+ 3920: "exasoftport1",
+ 3921: "herodotus-net",
+ 3922: "sor-update",
+ 3923: "symb-sb-port",
+ 3924: "mpl-gprs-port",
+ 3925: "zmp",
+ 3926: "winport",
+ 3927: "natdataservice",
+ 3928: "netboot-pxe",
+ 3929: "smauth-port",
+ 3930: "syam-webserver",
+ 3931: "msr-plugin-port",
+ 3932: "dyn-site",
+ 3933: "plbserve-port",
+ 3934: "sunfm-port",
+ 3935: "sdp-portmapper",
+ 3936: "mailprox",
+ 3937: "dvbservdsc",
+ 3938: "dbcontrol-agent",
+ 3939: "aamp",
+ 3940: "xecp-node",
+ 3941: "homeportal-web",
+ 3942: "srdp",
+ 3943: "tig",
+ 3944: "sops",
+ 3945: "emcads",
+ 3946: "backupedge",
+ 3947: "ccp",
+ 3948: "apdap",
+ 3949: "drip",
+ 3950: "namemunge",
+ 3951: "pwgippfax",
+ 3952: "i3-sessionmgr",
+ 3953: "xmlink-connect",
+ 3954: "adrep",
+ 3955: "p2pcommunity",
+ 3956: "gvcp",
+ 3957: "mqe-broker",
+ 3958: "mqe-agent",
+ 3959: "treehopper",
+ 3960: "bess",
+ 3961: "proaxess",
+ 3962: "sbi-agent",
+ 3963: "thrp",
+ 3964: "sasggprs",
+ 3965: "ati-ip-to-ncpe",
+ 3966: "bflckmgr",
+ 3967: "ppsms",
+ 3968: "ianywhere-dbns",
+ 3969: "landmarks",
+ 3970: "lanrevagent",
+ 3971: "lanrevserver",
+ 3972: "iconp",
+ 3973: "progistics",
+ 3974: "citysearch",
+ 3975: "airshot",
+ 3976: "opswagent",
+ 3977: "opswmanager",
+ 3978: "secure-cfg-svr",
+ 3979: "smwan",
+ 3980: "acms",
+ 3981: "starfish",
+ 3982: "eis",
+ 3983: "eisp",
+ 3984: "mapper-nodemgr",
+ 3985: "mapper-mapethd",
+ 3986: "mapper-ws-ethd",
+ 3987: "centerline",
+ 3988: "dcs-config",
+ 3989: "bv-queryengine",
+ 3990: "bv-is",
+ 3991: "bv-smcsrv",
+ 3992: "bv-ds",
+ 3993: "bv-agent",
+ 3995: "iss-mgmt-ssl",
+ 3996: "abcsoftware",
+ 3997: "agentsease-db",
+ 3998: "dnx",
+ 3999: "nvcnet",
+ 4000: "terabase",
+ 4001: "newoak",
+ 4002: "pxc-spvr-ft",
+ 4003: "pxc-splr-ft",
+ 4004: "pxc-roid",
+ 4005: "pxc-pin",
+ 4006: "pxc-spvr",
+ 4007: "pxc-splr",
+ 4008: "netcheque",
+ 4009: "chimera-hwm",
+ 4010: "samsung-unidex",
+ 4011: "altserviceboot",
+ 4012: "pda-gate",
+ 4013: "acl-manager",
+ 4014: "taiclock",
+ 4015: "talarian-mcast1",
+ 4016: "talarian-mcast2",
+ 4017: "talarian-mcast3",
+ 4018: "talarian-mcast4",
+ 4019: "talarian-mcast5",
+ 4020: "trap",
+ 4021: "nexus-portal",
+ 4022: "dnox",
+ 4023: "esnm-zoning",
+ 4024: "tnp1-port",
+ 4025: "partimage",
+ 4026: "as-debug",
+ 4027: "bxp",
+ 4028: "dtserver-port",
+ 4029: "ip-qsig",
+ 4030: "jdmn-port",
+ 4031: "suucp",
+ 4032: "vrts-auth-port",
+ 4033: "sanavigator",
+ 4034: "ubxd",
+ 4035: "wap-push-http",
+ 4036: "wap-push-https",
+ 4037: "ravehd",
+ 4038: "fazzt-ptp",
+ 4039: "fazzt-admin",
+ 4040: "yo-main",
+ 4041: "houston",
+ 4042: "ldxp",
+ 4043: "nirp",
+ 4044: "ltp",
+ 4045: "npp",
+ 4046: "acp-proto",
+ 4047: "ctp-state",
+ 4049: "wafs",
+ 4050: "cisco-wafs",
+ 4051: "cppdp",
+ 4052: "interact",
+ 4053: "ccu-comm-1",
+ 4054: "ccu-comm-2",
+ 4055: "ccu-comm-3",
+ 4056: "lms",
+ 4057: "wfm",
+ 4058: "kingfisher",
+ 4059: "dlms-cosem",
+ 4060: "dsmeter-iatc",
+ 4061: "ice-location",
+ 4062: "ice-slocation",
+ 4063: "ice-router",
+ 4064: "ice-srouter",
+ 4065: "avanti-cdp",
+ 4066: "pmas",
+ 4067: "idp",
+ 4068: "ipfltbcst",
+ 4069: "minger",
+ 4070: "tripe",
+ 4071: "aibkup",
+ 4072: "zieto-sock",
+ 4073: "iRAPP",
+ 4074: "cequint-cityid",
+ 4075: "perimlan",
+ 4076: "seraph",
+ 4078: "cssp",
+ 4079: "santools",
+ 4080: "lorica-in",
+ 4081: "lorica-in-sec",
+ 4082: "lorica-out",
+ 4083: "lorica-out-sec",
+ 4085: "ezmessagesrv",
+ 4087: "applusservice",
+ 4088: "npsp",
+ 4089: "opencore",
+ 4090: "omasgport",
+ 4091: "ewinstaller",
+ 4092: "ewdgs",
+ 4093: "pvxpluscs",
+ 4094: "sysrqd",
+ 4095: "xtgui",
+ 4096: "bre",
+ 4097: "patrolview",
+ 4098: "drmsfsd",
+ 4099: "dpcp",
+ 4100: "igo-incognito",
+ 4101: "brlp-0",
+ 4102: "brlp-1",
+ 4103: "brlp-2",
+ 4104: "brlp-3",
+ 4105: "shofar",
+ 4106: "synchronite",
+ 4107: "j-ac",
+ 4108: "accel",
+ 4109: "izm",
+ 4110: "g2tag",
+ 4111: "xgrid",
+ 4112: "apple-vpns-rp",
+ 4113: "aipn-reg",
+ 4114: "jomamqmonitor",
+ 4115: "cds",
+ 4116: "smartcard-tls",
+ 4117: "hillrserv",
+ 4118: "netscript",
+ 4119: "assuria-slm",
+ 4121: "e-builder",
+ 4122: "fprams",
+ 4123: "z-wave",
+ 4124: "tigv2",
+ 4125: "opsview-envoy",
+ 4126: "ddrepl",
+ 4127: "unikeypro",
+ 4128: "nufw",
+ 4129: "nuauth",
+ 4130: "fronet",
+ 4131: "stars",
+ 4132: "nuts-dem",
+ 4133: "nuts-bootp",
+ 4134: "nifty-hmi",
+ 4135: "cl-db-attach",
+ 4136: "cl-db-request",
+ 4137: "cl-db-remote",
+ 4138: "nettest",
+ 4139: "thrtx",
+ 4140: "cedros-fds",
+ 4141: "oirtgsvc",
+ 4142: "oidocsvc",
+ 4143: "oidsr",
+ 4145: "vvr-control",
+ 4146: "tgcconnect",
+ 4147: "vrxpservman",
+ 4148: "hhb-handheld",
+ 4149: "agslb",
+ 4150: "PowerAlert-nsa",
+ 4151: "menandmice-noh",
+ 4152: "idig-mux",
+ 4153: "mbl-battd",
+ 4154: "atlinks",
+ 4155: "bzr",
+ 4156: "stat-results",
+ 4157: "stat-scanner",
+ 4158: "stat-cc",
+ 4159: "nss",
+ 4160: "jini-discovery",
+ 4161: "omscontact",
+ 4162: "omstopology",
+ 4163: "silverpeakpeer",
+ 4164: "silverpeakcomm",
+ 4165: "altcp",
+ 4166: "joost",
+ 4167: "ddgn",
+ 4168: "pslicser",
+ 4169: "iadt",
+ 4170: "d-cinema-csp",
+ 4171: "ml-svnet",
+ 4172: "pcoip",
+ 4174: "smcluster",
+ 4175: "bccp",
+ 4176: "tl-ipcproxy",
+ 4177: "wello",
+ 4178: "storman",
+ 4179: "MaxumSP",
+ 4180: "httpx",
+ 4181: "macbak",
+ 4182: "pcptcpservice",
+ 4183: "cyborgnet",
+ 4184: "universe-suite",
+ 4185: "wcpp",
+ 4186: "boxbackupstore",
+ 4187: "csc-proxy",
+ 4188: "vatata",
+ 4189: "pcep",
+ 4190: "sieve",
+ 4192: "azeti",
+ 4193: "pvxplusio",
+ 4197: "hctl",
+ 4199: "eims-admin",
+ 4300: "corelccam",
+ 4301: "d-data",
+ 4302: "d-data-control",
+ 4303: "srcp",
+ 4304: "owserver",
+ 4305: "batman",
+ 4306: "pinghgl",
+ 4307: "trueconf",
+ 4308: "compx-lockview",
+ 4309: "dserver",
+ 4310: "mirrtex",
+ 4311: "p6ssmc",
+ 4312: "pscl-mgt",
+ 4313: "perrla",
+ 4314: "choiceview-agt",
+ 4316: "choiceview-clt",
+ 4320: "fdt-rcatp",
+ 4321: "rwhois",
+ 4322: "trim-event",
+ 4323: "trim-ice",
+ 4325: "geognosisman",
+ 4326: "geognosis",
+ 4327: "jaxer-web",
+ 4328: "jaxer-manager",
+ 4329: "publiqare-sync",
+ 4330: "dey-sapi",
+ 4331: "ktickets-rest",
+ 4333: "ahsp",
+ 4334: "netconf-ch-ssh",
+ 4335: "netconf-ch-tls",
+ 4336: "restconf-ch-tls",
+ 4340: "gaia",
+ 4341: "lisp-data",
+ 4342: "lisp-cons",
+ 4343: "unicall",
+ 4344: "vinainstall",
+ 4345: "m4-network-as",
+ 4346: "elanlm",
+ 4347: "lansurveyor",
+ 4348: "itose",
+ 4349: "fsportmap",
+ 4350: "net-device",
+ 4351: "plcy-net-svcs",
+ 4352: "pjlink",
+ 4353: "f5-iquery",
+ 4354: "qsnet-trans",
+ 4355: "qsnet-workst",
+ 4356: "qsnet-assist",
+ 4357: "qsnet-cond",
+ 4358: "qsnet-nucl",
+ 4359: "omabcastltkm",
+ 4360: "matrix-vnet",
+ 4368: "wxbrief",
+ 4369: "epmd",
+ 4370: "elpro-tunnel",
+ 4371: "l2c-control",
+ 4372: "l2c-data",
+ 4373: "remctl",
+ 4374: "psi-ptt",
+ 4375: "tolteces",
+ 4376: "bip",
+ 4377: "cp-spxsvr",
+ 4378: "cp-spxdpy",
+ 4379: "ctdb",
+ 4389: "xandros-cms",
+ 4390: "wiegand",
+ 4391: "apwi-imserver",
+ 4392: "apwi-rxserver",
+ 4393: "apwi-rxspooler",
+ 4395: "omnivisionesx",
+ 4396: "fly",
+ 4400: "ds-srv",
+ 4401: "ds-srvr",
+ 4402: "ds-clnt",
+ 4403: "ds-user",
+ 4404: "ds-admin",
+ 4405: "ds-mail",
+ 4406: "ds-slp",
+ 4407: "nacagent",
+ 4408: "slscc",
+ 4409: "netcabinet-com",
+ 4410: "itwo-server",
+ 4411: "found",
+ 4413: "avi-nms",
+ 4414: "updog",
+ 4415: "brcd-vr-req",
+ 4416: "pjj-player",
+ 4417: "workflowdir",
+ 4419: "cbp",
+ 4420: "nvm-express",
+ 4421: "scaleft",
+ 4422: "tsepisp",
+ 4423: "thingkit",
+ 4425: "netrockey6",
+ 4426: "beacon-port-2",
+ 4427: "drizzle",
+ 4428: "omviserver",
+ 4429: "omviagent",
+ 4430: "rsqlserver",
+ 4431: "wspipe",
+ 4432: "l-acoustics",
+ 4433: "vop",
+ 4442: "saris",
+ 4443: "pharos",
+ 4444: "krb524",
+ 4445: "upnotifyp",
+ 4446: "n1-fwp",
+ 4447: "n1-rmgmt",
+ 4448: "asc-slmd",
+ 4449: "privatewire",
+ 4450: "camp",
+ 4451: "ctisystemmsg",
+ 4452: "ctiprogramload",
+ 4453: "nssalertmgr",
+ 4454: "nssagentmgr",
+ 4455: "prchat-user",
+ 4456: "prchat-server",
+ 4457: "prRegister",
+ 4458: "mcp",
+ 4484: "hpssmgmt",
+ 4485: "assyst-dr",
+ 4486: "icms",
+ 4487: "prex-tcp",
+ 4488: "awacs-ice",
+ 4500: "ipsec-nat-t",
+ 4535: "ehs",
+ 4536: "ehs-ssl",
+ 4537: "wssauthsvc",
+ 4538: "swx-gate",
+ 4545: "worldscores",
+ 4546: "sf-lm",
+ 4547: "lanner-lm",
+ 4548: "synchromesh",
+ 4549: "aegate",
+ 4550: "gds-adppiw-db",
+ 4551: "ieee-mih",
+ 4552: "menandmice-mon",
+ 4553: "icshostsvc",
+ 4554: "msfrs",
+ 4555: "rsip",
+ 4556: "dtn-bundle",
+ 4559: "hylafax",
+ 4563: "amahi-anywhere",
+ 4566: "kwtc",
+ 4567: "tram",
+ 4568: "bmc-reporting",
+ 4569: "iax",
+ 4570: "deploymentmap",
+ 4573: "cardifftec-back",
+ 4590: "rid",
+ 4591: "l3t-at-an",
+ 4593: "ipt-anri-anri",
+ 4594: "ias-session",
+ 4595: "ias-paging",
+ 4596: "ias-neighbor",
+ 4597: "a21-an-1xbs",
+ 4598: "a16-an-an",
+ 4599: "a17-an-an",
+ 4600: "piranha1",
+ 4601: "piranha2",
+ 4602: "mtsserver",
+ 4603: "menandmice-upg",
+ 4604: "irp",
+ 4605: "sixchat",
+ 4658: "playsta2-app",
+ 4659: "playsta2-lob",
+ 4660: "smaclmgr",
+ 4661: "kar2ouche",
+ 4662: "oms",
+ 4663: "noteit",
+ 4664: "ems",
+ 4665: "contclientms",
+ 4666: "eportcomm",
+ 4667: "mmacomm",
+ 4668: "mmaeds",
+ 4669: "eportcommdata",
+ 4670: "light",
+ 4671: "acter",
+ 4672: "rfa",
+ 4673: "cxws",
+ 4674: "appiq-mgmt",
+ 4675: "dhct-status",
+ 4676: "dhct-alerts",
+ 4677: "bcs",
+ 4678: "traversal",
+ 4679: "mgesupervision",
+ 4680: "mgemanagement",
+ 4681: "parliant",
+ 4682: "finisar",
+ 4683: "spike",
+ 4684: "rfid-rp1",
+ 4685: "autopac",
+ 4686: "msp-os",
+ 4687: "nst",
+ 4688: "mobile-p2p",
+ 4689: "altovacentral",
+ 4690: "prelude",
+ 4691: "mtn",
+ 4692: "conspiracy",
+ 4700: "netxms-agent",
+ 4701: "netxms-mgmt",
+ 4702: "netxms-sync",
+ 4703: "npqes-test",
+ 4704: "assuria-ins",
+ 4711: "trinity-dist",
+ 4725: "truckstar",
+ 4727: "fcis",
+ 4728: "capmux",
+ 4730: "gearman",
+ 4731: "remcap",
+ 4733: "resorcs",
+ 4737: "ipdr-sp",
+ 4738: "solera-lpn",
+ 4739: "ipfix",
+ 4740: "ipfixs",
+ 4741: "lumimgrd",
+ 4742: "sicct",
+ 4743: "openhpid",
+ 4744: "ifsp",
+ 4745: "fmp",
+ 4749: "profilemac",
+ 4750: "ssad",
+ 4751: "spocp",
+ 4752: "snap",
+ 4753: "simon",
+ 4756: "RDCenter",
+ 4774: "converge",
+ 4784: "bfd-multi-ctl",
+ 4786: "smart-install",
+ 4787: "sia-ctrl-plane",
+ 4788: "xmcp",
+ 4800: "iims",
+ 4801: "iwec",
+ 4802: "ilss",
+ 4803: "notateit",
+ 4827: "htcp",
+ 4837: "varadero-0",
+ 4838: "varadero-1",
+ 4839: "varadero-2",
+ 4840: "opcua-tcp",
+ 4841: "quosa",
+ 4842: "gw-asv",
+ 4843: "opcua-tls",
+ 4844: "gw-log",
+ 4845: "wcr-remlib",
+ 4846: "contamac-icm",
+ 4847: "wfc",
+ 4848: "appserv-http",
+ 4849: "appserv-https",
+ 4850: "sun-as-nodeagt",
+ 4851: "derby-repli",
+ 4867: "unify-debug",
+ 4868: "phrelay",
+ 4869: "phrelaydbg",
+ 4870: "cc-tracking",
+ 4871: "wired",
+ 4876: "tritium-can",
+ 4877: "lmcs",
+ 4879: "wsdl-event",
+ 4880: "hislip",
+ 4883: "wmlserver",
+ 4884: "hivestor",
+ 4885: "abbs",
+ 4894: "lyskom",
+ 4899: "radmin-port",
+ 4900: "hfcs",
+ 4901: "flr-agent",
+ 4902: "magiccontrol",
+ 4912: "lutap",
+ 4913: "lutcp",
+ 4914: "bones",
+ 4915: "frcs",
+ 4940: "eq-office-4940",
+ 4941: "eq-office-4941",
+ 4942: "eq-office-4942",
+ 4949: "munin",
+ 4950: "sybasesrvmon",
+ 4951: "pwgwims",
+ 4952: "sagxtsds",
+ 4953: "dbsyncarbiter",
+ 4969: "ccss-qmm",
+ 4970: "ccss-qsm",
+ 4971: "burp",
+ 4984: "webyast",
+ 4985: "gerhcs",
+ 4986: "mrip",
+ 4987: "smar-se-port1",
+ 4988: "smar-se-port2",
+ 4989: "parallel",
+ 4990: "busycal",
+ 4991: "vrt",
+ 4999: "hfcs-manager",
+ 5000: "commplex-main",
+ 5001: "commplex-link",
+ 5002: "rfe",
+ 5003: "fmpro-internal",
+ 5004: "avt-profile-1",
+ 5005: "avt-profile-2",
+ 5006: "wsm-server",
+ 5007: "wsm-server-ssl",
+ 5008: "synapsis-edge",
+ 5009: "winfs",
+ 5010: "telelpathstart",
+ 5011: "telelpathattack",
+ 5012: "nsp",
+ 5013: "fmpro-v6",
+ 5015: "fmwp",
+ 5020: "zenginkyo-1",
+ 5021: "zenginkyo-2",
+ 5022: "mice",
+ 5023: "htuilsrv",
+ 5024: "scpi-telnet",
+ 5025: "scpi-raw",
+ 5026: "strexec-d",
+ 5027: "strexec-s",
+ 5028: "qvr",
+ 5029: "infobright",
+ 5030: "surfpass",
+ 5032: "signacert-agent",
+ 5033: "jtnetd-server",
+ 5034: "jtnetd-status",
+ 5042: "asnaacceler8db",
+ 5043: "swxadmin",
+ 5044: "lxi-evntsvc",
+ 5045: "osp",
+ 5048: "texai",
+ 5049: "ivocalize",
+ 5050: "mmcc",
+ 5051: "ita-agent",
+ 5052: "ita-manager",
+ 5053: "rlm",
+ 5054: "rlm-admin",
+ 5055: "unot",
+ 5056: "intecom-ps1",
+ 5057: "intecom-ps2",
+ 5059: "sds",
+ 5060: "sip",
+ 5061: "sips",
+ 5062: "na-localise",
+ 5063: "csrpc",
+ 5064: "ca-1",
+ 5065: "ca-2",
+ 5066: "stanag-5066",
+ 5067: "authentx",
+ 5068: "bitforestsrv",
+ 5069: "i-net-2000-npr",
+ 5070: "vtsas",
+ 5071: "powerschool",
+ 5072: "ayiya",
+ 5073: "tag-pm",
+ 5074: "alesquery",
+ 5075: "pvaccess",
+ 5080: "onscreen",
+ 5081: "sdl-ets",
+ 5082: "qcp",
+ 5083: "qfp",
+ 5084: "llrp",
+ 5085: "encrypted-llrp",
+ 5086: "aprigo-cs",
+ 5087: "biotic",
+ 5093: "sentinel-lm",
+ 5094: "hart-ip",
+ 5099: "sentlm-srv2srv",
+ 5100: "socalia",
+ 5101: "talarian-tcp",
+ 5102: "oms-nonsecure",
+ 5103: "actifio-c2c",
+ 5106: "actifioudsagent",
+ 5107: "actifioreplic",
+ 5111: "taep-as-svc",
+ 5112: "pm-cmdsvr",
+ 5114: "ev-services",
+ 5115: "autobuild",
+ 5117: "gradecam",
+ 5120: "barracuda-bbs",
+ 5133: "nbt-pc",
+ 5134: "ppactivation",
+ 5135: "erp-scale",
+ 5137: "ctsd",
+ 5145: "rmonitor-secure",
+ 5146: "social-alarm",
+ 5150: "atmp",
+ 5151: "esri-sde",
+ 5152: "sde-discovery",
+ 5153: "toruxserver",
+ 5154: "bzflag",
+ 5155: "asctrl-agent",
+ 5156: "rugameonline",
+ 5157: "mediat",
+ 5161: "snmpssh",
+ 5162: "snmpssh-trap",
+ 5163: "sbackup",
+ 5164: "vpa",
+ 5165: "ife-icorp",
+ 5166: "winpcs",
+ 5167: "scte104",
+ 5168: "scte30",
+ 5172: "pcoip-mgmt",
+ 5190: "aol",
+ 5191: "aol-1",
+ 5192: "aol-2",
+ 5193: "aol-3",
+ 5194: "cpscomm",
+ 5195: "ampl-lic",
+ 5196: "ampl-tableproxy",
+ 5197: "tunstall-lwp",
+ 5200: "targus-getdata",
+ 5201: "targus-getdata1",
+ 5202: "targus-getdata2",
+ 5203: "targus-getdata3",
+ 5209: "nomad",
+ 5215: "noteza",
+ 5221: "3exmp",
+ 5222: "xmpp-client",
+ 5223: "hpvirtgrp",
+ 5224: "hpvirtctrl",
+ 5225: "hp-server",
+ 5226: "hp-status",
+ 5227: "perfd",
+ 5228: "hpvroom",
+ 5229: "jaxflow",
+ 5230: "jaxflow-data",
+ 5231: "crusecontrol",
+ 5232: "csedaemon",
+ 5233: "enfs",
+ 5234: "eenet",
+ 5235: "galaxy-network",
+ 5236: "padl2sim",
+ 5237: "mnet-discovery",
+ 5245: "downtools",
+ 5248: "caacws",
+ 5249: "caaclang2",
+ 5250: "soagateway",
+ 5251: "caevms",
+ 5252: "movaz-ssc",
+ 5253: "kpdp",
+ 5254: "logcabin",
+ 5264: "3com-njack-1",
+ 5265: "3com-njack-2",
+ 5269: "xmpp-server",
+ 5270: "cartographerxmp",
+ 5271: "cuelink",
+ 5272: "pk",
+ 5280: "xmpp-bosh",
+ 5281: "undo-lm",
+ 5282: "transmit-port",
+ 5298: "presence",
+ 5299: "nlg-data",
+ 5300: "hacl-hb",
+ 5301: "hacl-gs",
+ 5302: "hacl-cfg",
+ 5303: "hacl-probe",
+ 5304: "hacl-local",
+ 5305: "hacl-test",
+ 5306: "sun-mc-grp",
+ 5307: "sco-aip",
+ 5308: "cfengine",
+ 5309: "jprinter",
+ 5310: "outlaws",
+ 5312: "permabit-cs",
+ 5313: "rrdp",
+ 5314: "opalis-rbt-ipc",
+ 5315: "hacl-poll",
+ 5316: "hpbladems",
+ 5317: "hpdevms",
+ 5318: "pkix-cmc",
+ 5320: "bsfserver-zn",
+ 5321: "bsfsvr-zn-ssl",
+ 5343: "kfserver",
+ 5344: "xkotodrcp",
+ 5349: "stuns",
+ 5352: "dns-llq",
+ 5353: "mdns",
+ 5354: "mdnsresponder",
+ 5355: "llmnr",
+ 5356: "ms-smlbiz",
+ 5357: "wsdapi",
+ 5358: "wsdapi-s",
+ 5359: "ms-alerter",
+ 5360: "ms-sideshow",
+ 5361: "ms-s-sideshow",
+ 5362: "serverwsd2",
+ 5363: "net-projection",
+ 5397: "stresstester",
+ 5398: "elektron-admin",
+ 5399: "securitychase",
+ 5400: "excerpt",
+ 5401: "excerpts",
+ 5402: "mftp",
+ 5403: "hpoms-ci-lstn",
+ 5404: "hpoms-dps-lstn",
+ 5405: "netsupport",
+ 5406: "systemics-sox",
+ 5407: "foresyte-clear",
+ 5408: "foresyte-sec",
+ 5409: "salient-dtasrv",
+ 5410: "salient-usrmgr",
+ 5411: "actnet",
+ 5412: "continuus",
+ 5413: "wwiotalk",
+ 5414: "statusd",
+ 5415: "ns-server",
+ 5416: "sns-gateway",
+ 5417: "sns-agent",
+ 5418: "mcntp",
+ 5419: "dj-ice",
+ 5420: "cylink-c",
+ 5421: "netsupport2",
+ 5422: "salient-mux",
+ 5423: "virtualuser",
+ 5424: "beyond-remote",
+ 5425: "br-channel",
+ 5426: "devbasic",
+ 5427: "sco-peer-tta",
+ 5428: "telaconsole",
+ 5429: "base",
+ 5430: "radec-corp",
+ 5431: "park-agent",
+ 5432: "postgresql",
+ 5433: "pyrrho",
+ 5434: "sgi-arrayd",
+ 5435: "sceanics",
+ 5443: "spss",
+ 5445: "smbdirect",
+ 5450: "tiepie",
+ 5453: "surebox",
+ 5454: "apc-5454",
+ 5455: "apc-5455",
+ 5456: "apc-5456",
+ 5461: "silkmeter",
+ 5462: "ttl-publisher",
+ 5463: "ttlpriceproxy",
+ 5464: "quailnet",
+ 5465: "netops-broker",
+ 5470: "apsolab-col",
+ 5471: "apsolab-cols",
+ 5472: "apsolab-tag",
+ 5473: "apsolab-tags",
+ 5475: "apsolab-data",
+ 5500: "fcp-addr-srvr1",
+ 5501: "fcp-addr-srvr2",
+ 5502: "fcp-srvr-inst1",
+ 5503: "fcp-srvr-inst2",
+ 5504: "fcp-cics-gw1",
+ 5505: "checkoutdb",
+ 5506: "amc",
+ 5507: "psl-management",
+ 5550: "cbus",
+ 5553: "sgi-eventmond",
+ 5554: "sgi-esphttp",
+ 5555: "personal-agent",
+ 5556: "freeciv",
+ 5557: "farenet",
+ 5565: "hpe-dp-bura",
+ 5566: "westec-connect",
+ 5567: "dof-dps-mc-sec",
+ 5568: "sdt",
+ 5569: "rdmnet-ctrl",
+ 5573: "sdmmp",
+ 5574: "lsi-bobcat",
+ 5575: "ora-oap",
+ 5579: "fdtracks",
+ 5580: "tmosms0",
+ 5581: "tmosms1",
+ 5582: "fac-restore",
+ 5583: "tmo-icon-sync",
+ 5584: "bis-web",
+ 5585: "bis-sync",
+ 5586: "att-mt-sms",
+ 5597: "ininmessaging",
+ 5598: "mctfeed",
+ 5599: "esinstall",
+ 5600: "esmmanager",
+ 5601: "esmagent",
+ 5602: "a1-msc",
+ 5603: "a1-bs",
+ 5604: "a3-sdunode",
+ 5605: "a4-sdunode",
+ 5618: "efr",
+ 5627: "ninaf",
+ 5628: "htrust",
+ 5629: "symantec-sfdb",
+ 5630: "precise-comm",
+ 5631: "pcanywheredata",
+ 5632: "pcanywherestat",
+ 5633: "beorl",
+ 5634: "xprtld",
+ 5635: "sfmsso",
+ 5636: "sfm-db-server",
+ 5637: "cssc",
+ 5638: "flcrs",
+ 5639: "ics",
+ 5646: "vfmobile",
+ 5666: "nrpe",
+ 5670: "filemq",
+ 5671: "amqps",
+ 5672: "amqp",
+ 5673: "jms",
+ 5674: "hyperscsi-port",
+ 5675: "v5ua",
+ 5676: "raadmin",
+ 5677: "questdb2-lnchr",
+ 5678: "rrac",
+ 5679: "dccm",
+ 5680: "auriga-router",
+ 5681: "ncxcp",
+ 5688: "ggz",
+ 5689: "qmvideo",
+ 5693: "rbsystem",
+ 5696: "kmip",
+ 5700: "supportassist",
+ 5705: "storageos",
+ 5713: "proshareaudio",
+ 5714: "prosharevideo",
+ 5715: "prosharedata",
+ 5716: "prosharerequest",
+ 5717: "prosharenotify",
+ 5718: "dpm",
+ 5719: "dpm-agent",
+ 5720: "ms-licensing",
+ 5721: "dtpt",
+ 5722: "msdfsr",
+ 5723: "omhs",
+ 5724: "omsdk",
+ 5725: "ms-ilm",
+ 5726: "ms-ilm-sts",
+ 5727: "asgenf",
+ 5728: "io-dist-data",
+ 5729: "openmail",
+ 5730: "unieng",
+ 5741: "ida-discover1",
+ 5742: "ida-discover2",
+ 5743: "watchdoc-pod",
+ 5744: "watchdoc",
+ 5745: "fcopy-server",
+ 5746: "fcopys-server",
+ 5747: "tunatic",
+ 5748: "tunalyzer",
+ 5750: "rscd",
+ 5755: "openmailg",
+ 5757: "x500ms",
+ 5766: "openmailns",
+ 5767: "s-openmail",
+ 5768: "openmailpxy",
+ 5769: "spramsca",
+ 5770: "spramsd",
+ 5771: "netagent",
+ 5777: "dali-port",
+ 5780: "vts-rpc",
+ 5781: "3par-evts",
+ 5782: "3par-mgmt",
+ 5783: "3par-mgmt-ssl",
+ 5785: "3par-rcopy",
+ 5793: "xtreamx",
+ 5813: "icmpd",
+ 5814: "spt-automation",
+ 5841: "shiprush-d-ch",
+ 5842: "reversion",
+ 5859: "wherehoo",
+ 5863: "ppsuitemsg",
+ 5868: "diameters",
+ 5883: "jute",
+ 5900: "rfb",
+ 5910: "cm",
+ 5911: "cpdlc",
+ 5912: "fis",
+ 5913: "ads-c",
+ 5963: "indy",
+ 5968: "mppolicy-v5",
+ 5969: "mppolicy-mgr",
+ 5984: "couchdb",
+ 5985: "wsman",
+ 5986: "wsmans",
+ 5987: "wbem-rmi",
+ 5988: "wbem-http",
+ 5989: "wbem-https",
+ 5990: "wbem-exp-https",
+ 5991: "nuxsl",
+ 5992: "consul-insight",
+ 5993: "cim-rs",
+ 5999: "cvsup",
+ 6064: "ndl-ahp-svc",
+ 6065: "winpharaoh",
+ 6066: "ewctsp",
+ 6068: "gsmp-ancp",
+ 6069: "trip",
+ 6070: "messageasap",
+ 6071: "ssdtp",
+ 6072: "diagnose-proc",
+ 6073: "directplay8",
+ 6074: "max",
+ 6075: "dpm-acm",
+ 6076: "msft-dpm-cert",
+ 6077: "iconstructsrv",
+ 6084: "reload-config",
+ 6085: "konspire2b",
+ 6086: "pdtp",
+ 6087: "ldss",
+ 6088: "doglms",
+ 6099: "raxa-mgmt",
+ 6100: "synchronet-db",
+ 6101: "synchronet-rtc",
+ 6102: "synchronet-upd",
+ 6103: "rets",
+ 6104: "dbdb",
+ 6105: "primaserver",
+ 6106: "mpsserver",
+ 6107: "etc-control",
+ 6108: "sercomm-scadmin",
+ 6109: "globecast-id",
+ 6110: "softcm",
+ 6111: "spc",
+ 6112: "dtspcd",
+ 6113: "dayliteserver",
+ 6114: "wrspice",
+ 6115: "xic",
+ 6116: "xtlserv",
+ 6117: "daylitetouch",
+ 6121: "spdy",
+ 6122: "bex-webadmin",
+ 6123: "backup-express",
+ 6124: "pnbs",
+ 6130: "damewaremobgtwy",
+ 6133: "nbt-wol",
+ 6140: "pulsonixnls",
+ 6141: "meta-corp",
+ 6142: "aspentec-lm",
+ 6143: "watershed-lm",
+ 6144: "statsci1-lm",
+ 6145: "statsci2-lm",
+ 6146: "lonewolf-lm",
+ 6147: "montage-lm",
+ 6148: "ricardo-lm",
+ 6149: "tal-pod",
+ 6159: "efb-aci",
+ 6160: "ecmp",
+ 6161: "patrol-ism",
+ 6162: "patrol-coll",
+ 6163: "pscribe",
+ 6200: "lm-x",
+ 6209: "qmtps",
+ 6222: "radmind",
+ 6241: "jeol-nsdtp-1",
+ 6242: "jeol-nsdtp-2",
+ 6243: "jeol-nsdtp-3",
+ 6244: "jeol-nsdtp-4",
+ 6251: "tl1-raw-ssl",
+ 6252: "tl1-ssh",
+ 6253: "crip",
+ 6267: "gld",
+ 6268: "grid",
+ 6269: "grid-alt",
+ 6300: "bmc-grx",
+ 6301: "bmc-ctd-ldap",
+ 6306: "ufmp",
+ 6315: "scup",
+ 6316: "abb-escp",
+ 6317: "nav-data-cmd",
+ 6320: "repsvc",
+ 6321: "emp-server1",
+ 6322: "emp-server2",
+ 6324: "hrd-ncs",
+ 6325: "dt-mgmtsvc",
+ 6326: "dt-vra",
+ 6343: "sflow",
+ 6344: "streletz",
+ 6346: "gnutella-svc",
+ 6347: "gnutella-rtr",
+ 6350: "adap",
+ 6355: "pmcs",
+ 6360: "metaedit-mu",
+ 6370: "metaedit-se",
+ 6379: "redis",
+ 6382: "metatude-mds",
+ 6389: "clariion-evr01",
+ 6390: "metaedit-ws",
+ 6417: "faxcomservice",
+ 6418: "syserverremote",
+ 6419: "svdrp",
+ 6420: "nim-vdrshell",
+ 6421: "nim-wan",
+ 6432: "pgbouncer",
+ 6442: "tarp",
+ 6443: "sun-sr-https",
+ 6444: "sge-qmaster",
+ 6445: "sge-execd",
+ 6446: "mysql-proxy",
+ 6455: "skip-cert-recv",
+ 6456: "skip-cert-send",
+ 6464: "ieee11073-20701",
+ 6471: "lvision-lm",
+ 6480: "sun-sr-http",
+ 6481: "servicetags",
+ 6482: "ldoms-mgmt",
+ 6483: "SunVTS-RMI",
+ 6484: "sun-sr-jms",
+ 6485: "sun-sr-iiop",
+ 6486: "sun-sr-iiops",
+ 6487: "sun-sr-iiop-aut",
+ 6488: "sun-sr-jmx",
+ 6489: "sun-sr-admin",
+ 6500: "boks",
+ 6501: "boks-servc",
+ 6502: "boks-servm",
+ 6503: "boks-clntd",
+ 6505: "badm-priv",
+ 6506: "badm-pub",
+ 6507: "bdir-priv",
+ 6508: "bdir-pub",
+ 6509: "mgcs-mfp-port",
+ 6510: "mcer-port",
+ 6513: "netconf-tls",
+ 6514: "syslog-tls",
+ 6515: "elipse-rec",
+ 6543: "lds-distrib",
+ 6544: "lds-dump",
+ 6547: "apc-6547",
+ 6548: "apc-6548",
+ 6549: "apc-6549",
+ 6550: "fg-sysupdate",
+ 6551: "sum",
+ 6558: "xdsxdm",
+ 6566: "sane-port",
+ 6568: "canit-store",
+ 6579: "affiliate",
+ 6580: "parsec-master",
+ 6581: "parsec-peer",
+ 6582: "parsec-game",
+ 6583: "joaJewelSuite",
+ 6600: "mshvlm",
+ 6601: "mstmg-sstp",
+ 6602: "wsscomfrmwk",
+ 6619: "odette-ftps",
+ 6620: "kftp-data",
+ 6621: "kftp",
+ 6622: "mcftp",
+ 6623: "ktelnet",
+ 6624: "datascaler-db",
+ 6625: "datascaler-ctl",
+ 6626: "wago-service",
+ 6627: "nexgen",
+ 6628: "afesc-mc",
+ 6629: "nexgen-aux",
+ 6632: "mxodbc-connect",
+ 6640: "ovsdb",
+ 6653: "openflow",
+ 6655: "pcs-sf-ui-man",
+ 6656: "emgmsg",
+ 6670: "vocaltec-gold",
+ 6671: "p4p-portal",
+ 6672: "vision-server",
+ 6673: "vision-elmd",
+ 6678: "vfbp",
+ 6679: "osaut",
+ 6687: "clever-ctrace",
+ 6688: "clever-tcpip",
+ 6689: "tsa",
+ 6690: "cleverdetect",
+ 6697: "ircs-u",
+ 6701: "kti-icad-srvr",
+ 6702: "e-design-net",
+ 6703: "e-design-web",
+ 6714: "ibprotocol",
+ 6715: "fibotrader-com",
+ 6716: "princity-agent",
+ 6767: "bmc-perf-agent",
+ 6768: "bmc-perf-mgrd",
+ 6769: "adi-gxp-srvprt",
+ 6770: "plysrv-http",
+ 6771: "plysrv-https",
+ 6777: "ntz-tracker",
+ 6778: "ntz-p2p-storage",
+ 6785: "dgpf-exchg",
+ 6786: "smc-jmx",
+ 6787: "smc-admin",
+ 6788: "smc-http",
+ 6789: "radg",
+ 6790: "hnmp",
+ 6791: "hnm",
+ 6801: "acnet",
+ 6817: "pentbox-sim",
+ 6831: "ambit-lm",
+ 6841: "netmo-default",
+ 6842: "netmo-http",
+ 6850: "iccrushmore",
+ 6868: "acctopus-cc",
+ 6888: "muse",
+ 6900: "rtimeviewer",
+ 6901: "jetstream",
+ 6935: "ethoscan",
+ 6936: "xsmsvc",
+ 6946: "bioserver",
+ 6951: "otlp",
+ 6961: "jmact3",
+ 6962: "jmevt2",
+ 6963: "swismgr1",
+ 6964: "swismgr2",
+ 6965: "swistrap",
+ 6966: "swispol",
+ 6969: "acmsoda",
+ 6970: "conductor",
+ 6997: "MobilitySrv",
+ 6998: "iatp-highpri",
+ 6999: "iatp-normalpri",
+ 7000: "afs3-fileserver",
+ 7001: "afs3-callback",
+ 7002: "afs3-prserver",
+ 7003: "afs3-vlserver",
+ 7004: "afs3-kaserver",
+ 7005: "afs3-volser",
+ 7006: "afs3-errors",
+ 7007: "afs3-bos",
+ 7008: "afs3-update",
+ 7009: "afs3-rmtsys",
+ 7010: "ups-onlinet",
+ 7011: "talon-disc",
+ 7012: "talon-engine",
+ 7013: "microtalon-dis",
+ 7014: "microtalon-com",
+ 7015: "talon-webserver",
+ 7016: "spg",
+ 7017: "grasp",
+ 7018: "fisa-svc",
+ 7019: "doceri-ctl",
+ 7020: "dpserve",
+ 7021: "dpserveadmin",
+ 7022: "ctdp",
+ 7023: "ct2nmcs",
+ 7024: "vmsvc",
+ 7025: "vmsvc-2",
+ 7030: "op-probe",
+ 7031: "iposplanet",
+ 7070: "arcp",
+ 7071: "iwg1",
+ 7073: "martalk",
+ 7080: "empowerid",
+ 7099: "lazy-ptop",
+ 7100: "font-service",
+ 7101: "elcn",
+ 7117: "rothaga",
+ 7121: "virprot-lm",
+ 7128: "scenidm",
+ 7129: "scenccs",
+ 7161: "cabsm-comm",
+ 7162: "caistoragemgr",
+ 7163: "cacsambroker",
+ 7164: "fsr",
+ 7165: "doc-server",
+ 7166: "aruba-server",
+ 7167: "casrmagent",
+ 7168: "cnckadserver",
+ 7169: "ccag-pib",
+ 7170: "nsrp",
+ 7171: "drm-production",
+ 7172: "metalbend",
+ 7173: "zsecure",
+ 7174: "clutild",
+ 7200: "fodms",
+ 7201: "dlip",
+ 7202: "pon-ictp",
+ 7215: "PS-Server",
+ 7216: "PS-Capture-Pro",
+ 7227: "ramp",
+ 7228: "citrixupp",
+ 7229: "citrixuppg",
+ 7236: "display",
+ 7237: "pads",
+ 7244: "frc-hicp",
+ 7262: "cnap",
+ 7272: "watchme-7272",
+ 7273: "oma-rlp",
+ 7274: "oma-rlp-s",
+ 7275: "oma-ulp",
+ 7276: "oma-ilp",
+ 7277: "oma-ilp-s",
+ 7278: "oma-dcdocbs",
+ 7279: "ctxlic",
+ 7280: "itactionserver1",
+ 7281: "itactionserver2",
+ 7282: "mzca-action",
+ 7283: "genstat",
+ 7365: "lcm-server",
+ 7391: "mindfilesys",
+ 7392: "mrssrendezvous",
+ 7393: "nfoldman",
+ 7394: "fse",
+ 7395: "winqedit",
+ 7397: "hexarc",
+ 7400: "rtps-discovery",
+ 7401: "rtps-dd-ut",
+ 7402: "rtps-dd-mt",
+ 7410: "ionixnetmon",
+ 7411: "daqstream",
+ 7421: "mtportmon",
+ 7426: "pmdmgr",
+ 7427: "oveadmgr",
+ 7428: "ovladmgr",
+ 7429: "opi-sock",
+ 7430: "xmpv7",
+ 7431: "pmd",
+ 7437: "faximum",
+ 7443: "oracleas-https",
+ 7471: "sttunnel",
+ 7473: "rise",
+ 7474: "neo4j",
+ 7478: "openit",
+ 7491: "telops-lmd",
+ 7500: "silhouette",
+ 7501: "ovbus",
+ 7508: "adcp",
+ 7509: "acplt",
+ 7510: "ovhpas",
+ 7511: "pafec-lm",
+ 7542: "saratoga",
+ 7543: "atul",
+ 7544: "nta-ds",
+ 7545: "nta-us",
+ 7546: "cfs",
+ 7547: "cwmp",
+ 7548: "tidp",
+ 7549: "nls-tl",
+ 7551: "controlone-con",
+ 7560: "sncp",
+ 7563: "cfw",
+ 7566: "vsi-omega",
+ 7569: "dell-eql-asm",
+ 7570: "aries-kfinder",
+ 7574: "coherence",
+ 7588: "sun-lm",
+ 7606: "mipi-debug",
+ 7624: "indi",
+ 7626: "simco",
+ 7627: "soap-http",
+ 7628: "zen-pawn",
+ 7629: "xdas",
+ 7630: "hawk",
+ 7631: "tesla-sys-msg",
+ 7633: "pmdfmgt",
+ 7648: "cuseeme",
+ 7672: "imqstomp",
+ 7673: "imqstomps",
+ 7674: "imqtunnels",
+ 7675: "imqtunnel",
+ 7676: "imqbrokerd",
+ 7677: "sun-user-https",
+ 7680: "pando-pub",
+ 7683: "dmt",
+ 7687: "bolt",
+ 7689: "collaber",
+ 7697: "klio",
+ 7700: "em7-secom",
+ 7707: "sync-em7",
+ 7708: "scinet",
+ 7720: "medimageportal",
+ 7724: "nsdeepfreezectl",
+ 7725: "nitrogen",
+ 7726: "freezexservice",
+ 7727: "trident-data",
+ 7728: "osvr",
+ 7734: "smip",
+ 7738: "aiagent",
+ 7741: "scriptview",
+ 7742: "msss",
+ 7743: "sstp-1",
+ 7744: "raqmon-pdu",
+ 7747: "prgp",
+ 7775: "inetfs",
+ 7777: "cbt",
+ 7778: "interwise",
+ 7779: "vstat",
+ 7781: "accu-lmgr",
+ 7786: "minivend",
+ 7787: "popup-reminders",
+ 7789: "office-tools",
+ 7794: "q3ade",
+ 7797: "pnet-conn",
+ 7798: "pnet-enc",
+ 7799: "altbsdp",
+ 7800: "asr",
+ 7801: "ssp-client",
+ 7810: "rbt-wanopt",
+ 7845: "apc-7845",
+ 7846: "apc-7846",
+ 7847: "csoauth",
+ 7869: "mobileanalyzer",
+ 7870: "rbt-smc",
+ 7871: "mdm",
+ 7878: "owms",
+ 7880: "pss",
+ 7887: "ubroker",
+ 7900: "mevent",
+ 7901: "tnos-sp",
+ 7902: "tnos-dp",
+ 7903: "tnos-dps",
+ 7913: "qo-secure",
+ 7932: "t2-drm",
+ 7933: "t2-brm",
+ 7962: "generalsync",
+ 7967: "supercell",
+ 7979: "micromuse-ncps",
+ 7980: "quest-vista",
+ 7981: "sossd-collect",
+ 7982: "sossd-agent",
+ 7997: "pushns",
+ 7999: "irdmi2",
+ 8000: "irdmi",
+ 8001: "vcom-tunnel",
+ 8002: "teradataordbms",
+ 8003: "mcreport",
+ 8005: "mxi",
+ 8006: "wpl-analytics",
+ 8007: "warppipe",
+ 8008: "http-alt",
+ 8019: "qbdb",
+ 8020: "intu-ec-svcdisc",
+ 8021: "intu-ec-client",
+ 8022: "oa-system",
+ 8025: "ca-audit-da",
+ 8026: "ca-audit-ds",
+ 8032: "pro-ed",
+ 8033: "mindprint",
+ 8034: "vantronix-mgmt",
+ 8040: "ampify",
+ 8041: "enguity-xccetp",
+ 8042: "fs-agent",
+ 8043: "fs-server",
+ 8044: "fs-mgmt",
+ 8051: "rocrail",
+ 8052: "senomix01",
+ 8053: "senomix02",
+ 8054: "senomix03",
+ 8055: "senomix04",
+ 8056: "senomix05",
+ 8057: "senomix06",
+ 8058: "senomix07",
+ 8059: "senomix08",
+ 8066: "toad-bi-appsrvr",
+ 8067: "infi-async",
+ 8070: "ucs-isc",
+ 8074: "gadugadu",
+ 8077: "mles",
+ 8080: "http-alt",
+ 8081: "sunproxyadmin",
+ 8082: "us-cli",
+ 8083: "us-srv",
+ 8086: "d-s-n",
+ 8087: "simplifymedia",
+ 8088: "radan-http",
+ 8090: "opsmessaging",
+ 8091: "jamlink",
+ 8097: "sac",
+ 8100: "xprint-server",
+ 8101: "ldoms-migr",
+ 8102: "kz-migr",
+ 8115: "mtl8000-matrix",
+ 8116: "cp-cluster",
+ 8117: "purityrpc",
+ 8118: "privoxy",
+ 8121: "apollo-data",
+ 8122: "apollo-admin",
+ 8128: "paycash-online",
+ 8129: "paycash-wbp",
+ 8130: "indigo-vrmi",
+ 8131: "indigo-vbcp",
+ 8132: "dbabble",
+ 8140: "puppet",
+ 8148: "isdd",
+ 8153: "quantastor",
+ 8160: "patrol",
+ 8161: "patrol-snmp",
+ 8162: "lpar2rrd",
+ 8181: "intermapper",
+ 8182: "vmware-fdm",
+ 8183: "proremote",
+ 8184: "itach",
+ 8190: "gcp-rphy",
+ 8191: "limnerpressure",
+ 8192: "spytechphone",
+ 8194: "blp1",
+ 8195: "blp2",
+ 8199: "vvr-data",
+ 8200: "trivnet1",
+ 8201: "trivnet2",
+ 8204: "lm-perfworks",
+ 8205: "lm-instmgr",
+ 8206: "lm-dta",
+ 8207: "lm-sserver",
+ 8208: "lm-webwatcher",
+ 8230: "rexecj",
+ 8243: "synapse-nhttps",
+ 8270: "robot-remote",
+ 8276: "pando-sec",
+ 8280: "synapse-nhttp",
+ 8282: "libelle",
+ 8292: "blp3",
+ 8293: "hiperscan-id",
+ 8294: "blp4",
+ 8300: "tmi",
+ 8301: "amberon",
+ 8313: "hub-open-net",
+ 8320: "tnp-discover",
+ 8321: "tnp",
+ 8322: "garmin-marine",
+ 8351: "server-find",
+ 8376: "cruise-enum",
+ 8377: "cruise-swroute",
+ 8378: "cruise-config",
+ 8379: "cruise-diags",
+ 8380: "cruise-update",
+ 8383: "m2mservices",
+ 8400: "cvd",
+ 8401: "sabarsd",
+ 8402: "abarsd",
+ 8403: "admind",
+ 8404: "svcloud",
+ 8405: "svbackup",
+ 8415: "dlpx-sp",
+ 8416: "espeech",
+ 8417: "espeech-rtp",
+ 8423: "aritts",
+ 8442: "cybro-a-bus",
+ 8443: "pcsync-https",
+ 8444: "pcsync-http",
+ 8445: "copy",
+ 8450: "npmp",
+ 8457: "nexentamv",
+ 8470: "cisco-avp",
+ 8471: "pim-port",
+ 8472: "otv",
+ 8473: "vp2p",
+ 8474: "noteshare",
+ 8500: "fmtp",
+ 8501: "cmtp-mgt",
+ 8502: "ftnmtp",
+ 8554: "rtsp-alt",
+ 8555: "d-fence",
+ 8567: "dof-tunnel",
+ 8600: "asterix",
+ 8610: "canon-mfnp",
+ 8611: "canon-bjnp1",
+ 8612: "canon-bjnp2",
+ 8613: "canon-bjnp3",
+ 8614: "canon-bjnp4",
+ 8615: "imink",
+ 8665: "monetra",
+ 8666: "monetra-admin",
+ 8675: "msi-cps-rm",
+ 8686: "sun-as-jmxrmi",
+ 8688: "openremote-ctrl",
+ 8699: "vnyx",
+ 8711: "nvc",
+ 8733: "ibus",
+ 8750: "dey-keyneg",
+ 8763: "mc-appserver",
+ 8764: "openqueue",
+ 8765: "ultraseek-http",
+ 8766: "amcs",
+ 8770: "dpap",
+ 8778: "uec",
+ 8786: "msgclnt",
+ 8787: "msgsrvr",
+ 8793: "acd-pm",
+ 8800: "sunwebadmin",
+ 8804: "truecm",
+ 8873: "dxspider",
+ 8880: "cddbp-alt",
+ 8881: "galaxy4d",
+ 8883: "secure-mqtt",
+ 8888: "ddi-tcp-1",
+ 8889: "ddi-tcp-2",
+ 8890: "ddi-tcp-3",
+ 8891: "ddi-tcp-4",
+ 8892: "ddi-tcp-5",
+ 8893: "ddi-tcp-6",
+ 8894: "ddi-tcp-7",
+ 8899: "ospf-lite",
+ 8900: "jmb-cds1",
+ 8901: "jmb-cds2",
+ 8910: "manyone-http",
+ 8911: "manyone-xml",
+ 8912: "wcbackup",
+ 8913: "dragonfly",
+ 8937: "twds",
+ 8953: "ub-dns-control",
+ 8954: "cumulus-admin",
+ 8980: "nod-provider",
+ 8989: "sunwebadmins",
+ 8990: "http-wmap",
+ 8991: "https-wmap",
+ 8997: "oracle-ms-ens",
+ 8998: "canto-roboflow",
+ 8999: "bctp",
+ 9000: "cslistener",
+ 9001: "etlservicemgr",
+ 9002: "dynamid",
+ 9005: "golem",
+ 9008: "ogs-server",
+ 9009: "pichat",
+ 9010: "sdr",
+ 9020: "tambora",
+ 9021: "panagolin-ident",
+ 9022: "paragent",
+ 9023: "swa-1",
+ 9024: "swa-2",
+ 9025: "swa-3",
+ 9026: "swa-4",
+ 9050: "versiera",
+ 9051: "fio-cmgmt",
+ 9060: "CardWeb-IO",
+ 9080: "glrpc",
+ 9083: "emc-pp-mgmtsvc",
+ 9084: "aurora",
+ 9085: "ibm-rsyscon",
+ 9086: "net2display",
+ 9087: "classic",
+ 9088: "sqlexec",
+ 9089: "sqlexec-ssl",
+ 9090: "websm",
+ 9091: "xmltec-xmlmail",
+ 9092: "XmlIpcRegSvc",
+ 9093: "copycat",
+ 9100: "hp-pdl-datastr",
+ 9101: "bacula-dir",
+ 9102: "bacula-fd",
+ 9103: "bacula-sd",
+ 9104: "peerwire",
+ 9105: "xadmin",
+ 9106: "astergate",
+ 9107: "astergatefax",
+ 9119: "mxit",
+ 9122: "grcmp",
+ 9123: "grcp",
+ 9131: "dddp",
+ 9160: "apani1",
+ 9161: "apani2",
+ 9162: "apani3",
+ 9163: "apani4",
+ 9164: "apani5",
+ 9191: "sun-as-jpda",
+ 9200: "wap-wsp",
+ 9201: "wap-wsp-wtp",
+ 9202: "wap-wsp-s",
+ 9203: "wap-wsp-wtp-s",
+ 9204: "wap-vcard",
+ 9205: "wap-vcal",
+ 9206: "wap-vcard-s",
+ 9207: "wap-vcal-s",
+ 9208: "rjcdb-vcards",
+ 9209: "almobile-system",
+ 9210: "oma-mlp",
+ 9211: "oma-mlp-s",
+ 9212: "serverviewdbms",
+ 9213: "serverstart",
+ 9214: "ipdcesgbs",
+ 9215: "insis",
+ 9216: "acme",
+ 9217: "fsc-port",
+ 9222: "teamcoherence",
+ 9255: "mon",
+ 9278: "pegasus",
+ 9279: "pegasus-ctl",
+ 9280: "pgps",
+ 9281: "swtp-port1",
+ 9282: "swtp-port2",
+ 9283: "callwaveiam",
+ 9284: "visd",
+ 9285: "n2h2server",
+ 9287: "cumulus",
+ 9292: "armtechdaemon",
+ 9293: "storview",
+ 9294: "armcenterhttp",
+ 9295: "armcenterhttps",
+ 9300: "vrace",
+ 9306: "sphinxql",
+ 9312: "sphinxapi",
+ 9318: "secure-ts",
+ 9321: "guibase",
+ 9343: "mpidcmgr",
+ 9344: "mphlpdmc",
+ 9345: "rancher",
+ 9346: "ctechlicensing",
+ 9374: "fjdmimgr",
+ 9380: "boxp",
+ 9387: "d2dconfig",
+ 9388: "d2ddatatrans",
+ 9389: "adws",
+ 9390: "otp",
+ 9396: "fjinvmgr",
+ 9397: "mpidcagt",
+ 9400: "sec-t4net-srv",
+ 9401: "sec-t4net-clt",
+ 9402: "sec-pc2fax-srv",
+ 9418: "git",
+ 9443: "tungsten-https",
+ 9444: "wso2esb-console",
+ 9445: "mindarray-ca",
+ 9450: "sntlkeyssrvr",
+ 9500: "ismserver",
+ 9535: "mngsuite",
+ 9536: "laes-bf",
+ 9555: "trispen-sra",
+ 9592: "ldgateway",
+ 9593: "cba8",
+ 9594: "msgsys",
+ 9595: "pds",
+ 9596: "mercury-disc",
+ 9597: "pd-admin",
+ 9598: "vscp",
+ 9599: "robix",
+ 9600: "micromuse-ncpw",
+ 9612: "streamcomm-ds",
+ 9614: "iadt-tls",
+ 9616: "erunbook-agent",
+ 9617: "erunbook-server",
+ 9618: "condor",
+ 9628: "odbcpathway",
+ 9629: "uniport",
+ 9630: "peoctlr",
+ 9631: "peocoll",
+ 9640: "pqsflows",
+ 9666: "zoomcp",
+ 9667: "xmms2",
+ 9668: "tec5-sdctp",
+ 9694: "client-wakeup",
+ 9695: "ccnx",
+ 9700: "board-roar",
+ 9747: "l5nas-parchan",
+ 9750: "board-voip",
+ 9753: "rasadv",
+ 9762: "tungsten-http",
+ 9800: "davsrc",
+ 9801: "sstp-2",
+ 9802: "davsrcs",
+ 9875: "sapv1",
+ 9876: "sd",
+ 9888: "cyborg-systems",
+ 9889: "gt-proxy",
+ 9898: "monkeycom",
+ 9900: "iua",
+ 9909: "domaintime",
+ 9911: "sype-transport",
+ 9925: "xybrid-cloud",
+ 9950: "apc-9950",
+ 9951: "apc-9951",
+ 9952: "apc-9952",
+ 9953: "acis",
+ 9954: "hinp",
+ 9955: "alljoyn-stm",
+ 9966: "odnsp",
+ 9978: "xybrid-rt",
+ 9979: "visweather",
+ 9981: "pumpkindb",
+ 9987: "dsm-scm-target",
+ 9988: "nsesrvr",
+ 9990: "osm-appsrvr",
+ 9991: "osm-oev",
+ 9992: "palace-1",
+ 9993: "palace-2",
+ 9994: "palace-3",
+ 9995: "palace-4",
+ 9996: "palace-5",
+ 9997: "palace-6",
+ 9998: "distinct32",
+ 9999: "distinct",
+ 10000: "ndmp",
+ 10001: "scp-config",
+ 10002: "documentum",
+ 10003: "documentum-s",
+ 10004: "emcrmirccd",
+ 10005: "emcrmird",
+ 10006: "netapp-sync",
+ 10007: "mvs-capacity",
+ 10008: "octopus",
+ 10009: "swdtp-sv",
+ 10010: "rxapi",
+ 10020: "abb-hw",
+ 10050: "zabbix-agent",
+ 10051: "zabbix-trapper",
+ 10055: "qptlmd",
+ 10080: "amanda",
+ 10081: "famdc",
+ 10100: "itap-ddtp",
+ 10101: "ezmeeting-2",
+ 10102: "ezproxy-2",
+ 10103: "ezrelay",
+ 10104: "swdtp",
+ 10107: "bctp-server",
+ 10110: "nmea-0183",
+ 10113: "netiq-endpoint",
+ 10114: "netiq-qcheck",
+ 10115: "netiq-endpt",
+ 10116: "netiq-voipa",
+ 10117: "iqrm",
+ 10125: "cimple",
+ 10128: "bmc-perf-sd",
+ 10129: "bmc-gms",
+ 10160: "qb-db-server",
+ 10161: "snmptls",
+ 10162: "snmptls-trap",
+ 10200: "trisoap",
+ 10201: "rsms",
+ 10252: "apollo-relay",
+ 10260: "axis-wimp-port",
+ 10261: "tile-ml",
+ 10288: "blocks",
+ 10321: "cosir",
+ 10540: "MOS-lower",
+ 10541: "MOS-upper",
+ 10542: "MOS-aux",
+ 10543: "MOS-soap",
+ 10544: "MOS-soap-opt",
+ 10548: "serverdocs",
+ 10631: "printopia",
+ 10800: "gap",
+ 10805: "lpdg",
+ 10809: "nbd",
+ 10860: "helix",
+ 10880: "bveapi",
+ 10933: "octopustentacle",
+ 10990: "rmiaux",
+ 11000: "irisa",
+ 11001: "metasys",
+ 11095: "weave",
+ 11103: "origo-sync",
+ 11104: "netapp-icmgmt",
+ 11105: "netapp-icdata",
+ 11106: "sgi-lk",
+ 11109: "sgi-dmfmgr",
+ 11110: "sgi-soap",
+ 11111: "vce",
+ 11112: "dicom",
+ 11161: "suncacao-snmp",
+ 11162: "suncacao-jmxmp",
+ 11163: "suncacao-rmi",
+ 11164: "suncacao-csa",
+ 11165: "suncacao-websvc",
+ 11172: "oemcacao-jmxmp",
+ 11173: "t5-straton",
+ 11174: "oemcacao-rmi",
+ 11175: "oemcacao-websvc",
+ 11201: "smsqp",
+ 11202: "dcsl-backup",
+ 11208: "wifree",
+ 11211: "memcache",
+ 11319: "imip",
+ 11320: "imip-channels",
+ 11321: "arena-server",
+ 11367: "atm-uhas",
+ 11371: "hkp",
+ 11489: "asgcypresstcps",
+ 11600: "tempest-port",
+ 11623: "emc-xsw-dconfig",
+ 11720: "h323callsigalt",
+ 11723: "emc-xsw-dcache",
+ 11751: "intrepid-ssl",
+ 11796: "lanschool",
+ 11876: "xoraya",
+ 11967: "sysinfo-sp",
+ 12000: "entextxid",
+ 12001: "entextnetwk",
+ 12002: "entexthigh",
+ 12003: "entextmed",
+ 12004: "entextlow",
+ 12005: "dbisamserver1",
+ 12006: "dbisamserver2",
+ 12007: "accuracer",
+ 12008: "accuracer-dbms",
+ 12010: "edbsrvr",
+ 12012: "vipera",
+ 12013: "vipera-ssl",
+ 12109: "rets-ssl",
+ 12121: "nupaper-ss",
+ 12168: "cawas",
+ 12172: "hivep",
+ 12300: "linogridengine",
+ 12302: "rads",
+ 12321: "warehouse-sss",
+ 12322: "warehouse",
+ 12345: "italk",
+ 12753: "tsaf",
+ 12865: "netperf",
+ 13160: "i-zipqd",
+ 13216: "bcslogc",
+ 13217: "rs-pias",
+ 13218: "emc-vcas-tcp",
+ 13223: "powwow-client",
+ 13224: "powwow-server",
+ 13400: "doip-data",
+ 13720: "bprd",
+ 13721: "bpdbm",
+ 13722: "bpjava-msvc",
+ 13724: "vnetd",
+ 13782: "bpcd",
+ 13783: "vopied",
+ 13785: "nbdb",
+ 13786: "nomdb",
+ 13818: "dsmcc-config",
+ 13819: "dsmcc-session",
+ 13820: "dsmcc-passthru",
+ 13821: "dsmcc-download",
+ 13822: "dsmcc-ccp",
+ 13823: "bmdss",
+ 13894: "ucontrol",
+ 13929: "dta-systems",
+ 13930: "medevolve",
+ 14000: "scotty-ft",
+ 14001: "sua",
+ 14033: "sage-best-com1",
+ 14034: "sage-best-com2",
+ 14141: "vcs-app",
+ 14142: "icpp",
+ 14143: "icpps",
+ 14145: "gcm-app",
+ 14149: "vrts-tdd",
+ 14150: "vcscmd",
+ 14154: "vad",
+ 14250: "cps",
+ 14414: "ca-web-update",
+ 14500: "xpra",
+ 14936: "hde-lcesrvr-1",
+ 14937: "hde-lcesrvr-2",
+ 15000: "hydap",
+ 15002: "onep-tls",
+ 15345: "xpilot",
+ 15363: "3link",
+ 15555: "cisco-snat",
+ 15660: "bex-xr",
+ 15740: "ptp",
+ 15999: "programmar",
+ 16000: "fmsas",
+ 16001: "fmsascon",
+ 16002: "gsms",
+ 16020: "jwpc",
+ 16021: "jwpc-bin",
+ 16161: "sun-sea-port",
+ 16162: "solaris-audit",
+ 16309: "etb4j",
+ 16310: "pduncs",
+ 16311: "pdefmns",
+ 16360: "netserialext1",
+ 16361: "netserialext2",
+ 16367: "netserialext3",
+ 16368: "netserialext4",
+ 16384: "connected",
+ 16385: "rdgs",
+ 16619: "xoms",
+ 16665: "axon-tunnel",
+ 16789: "cadsisvr",
+ 16900: "newbay-snc-mc",
+ 16950: "sgcip",
+ 16991: "intel-rci-mp",
+ 16992: "amt-soap-http",
+ 16993: "amt-soap-https",
+ 16994: "amt-redir-tcp",
+ 16995: "amt-redir-tls",
+ 17007: "isode-dua",
+ 17184: "vestasdlp",
+ 17185: "soundsvirtual",
+ 17219: "chipper",
+ 17220: "avtp",
+ 17221: "avdecc",
+ 17223: "isa100-gci",
+ 17225: "trdp-md",
+ 17234: "integrius-stp",
+ 17235: "ssh-mgmt",
+ 17500: "db-lsp",
+ 17555: "ailith",
+ 17729: "ea",
+ 17754: "zep",
+ 17755: "zigbee-ip",
+ 17756: "zigbee-ips",
+ 17777: "sw-orion",
+ 18000: "biimenu",
+ 18104: "radpdf",
+ 18136: "racf",
+ 18181: "opsec-cvp",
+ 18182: "opsec-ufp",
+ 18183: "opsec-sam",
+ 18184: "opsec-lea",
+ 18185: "opsec-omi",
+ 18186: "ohsc",
+ 18187: "opsec-ela",
+ 18241: "checkpoint-rtm",
+ 18242: "iclid",
+ 18243: "clusterxl",
+ 18262: "gv-pf",
+ 18463: "ac-cluster",
+ 18634: "rds-ib",
+ 18635: "rds-ip",
+ 18668: "vdmmesh",
+ 18769: "ique",
+ 18881: "infotos",
+ 18888: "apc-necmp",
+ 19000: "igrid",
+ 19007: "scintilla",
+ 19020: "j-link",
+ 19191: "opsec-uaa",
+ 19194: "ua-secureagent",
+ 19220: "cora",
+ 19283: "keysrvr",
+ 19315: "keyshadow",
+ 19398: "mtrgtrans",
+ 19410: "hp-sco",
+ 19411: "hp-sca",
+ 19412: "hp-sessmon",
+ 19539: "fxuptp",
+ 19540: "sxuptp",
+ 19541: "jcp",
+ 19998: "iec-104-sec",
+ 19999: "dnp-sec",
+ 20000: "dnp",
+ 20001: "microsan",
+ 20002: "commtact-http",
+ 20003: "commtact-https",
+ 20005: "openwebnet",
+ 20013: "ss-idi",
+ 20014: "opendeploy",
+ 20034: "nburn-id",
+ 20046: "tmophl7mts",
+ 20048: "mountd",
+ 20049: "nfsrdma",
+ 20057: "avesterra",
+ 20167: "tolfab",
+ 20202: "ipdtp-port",
+ 20222: "ipulse-ics",
+ 20480: "emwavemsg",
+ 20670: "track",
+ 20999: "athand-mmp",
+ 21000: "irtrans",
+ 21010: "notezilla-lan",
+ 21221: "aigairserver",
+ 21553: "rdm-tfs",
+ 21554: "dfserver",
+ 21590: "vofr-gateway",
+ 21800: "tvpm",
+ 21845: "webphone",
+ 21846: "netspeak-is",
+ 21847: "netspeak-cs",
+ 21848: "netspeak-acd",
+ 21849: "netspeak-cps",
+ 22000: "snapenetio",
+ 22001: "optocontrol",
+ 22002: "optohost002",
+ 22003: "optohost003",
+ 22004: "optohost004",
+ 22005: "optohost004",
+ 22125: "dcap",
+ 22128: "gsidcap",
+ 22222: "easyengine",
+ 22273: "wnn6",
+ 22305: "cis",
+ 22335: "shrewd-control",
+ 22343: "cis-secure",
+ 22347: "wibukey",
+ 22350: "codemeter",
+ 22351: "codemeter-cmwan",
+ 22537: "caldsoft-backup",
+ 22555: "vocaltec-wconf",
+ 22763: "talikaserver",
+ 22800: "aws-brf",
+ 22951: "brf-gw",
+ 23000: "inovaport1",
+ 23001: "inovaport2",
+ 23002: "inovaport3",
+ 23003: "inovaport4",
+ 23004: "inovaport5",
+ 23005: "inovaport6",
+ 23053: "gntp",
+ 23294: "5afe-dir",
+ 23333: "elxmgmt",
+ 23400: "novar-dbase",
+ 23401: "novar-alarm",
+ 23402: "novar-global",
+ 23456: "aequus",
+ 23457: "aequus-alt",
+ 23546: "areaguard-neo",
+ 24000: "med-ltp",
+ 24001: "med-fsp-rx",
+ 24002: "med-fsp-tx",
+ 24003: "med-supp",
+ 24004: "med-ovw",
+ 24005: "med-ci",
+ 24006: "med-net-svc",
+ 24242: "filesphere",
+ 24249: "vista-4gl",
+ 24321: "ild",
+ 24386: "intel-rci",
+ 24465: "tonidods",
+ 24554: "binkp",
+ 24577: "bilobit",
+ 24666: "sdtvwcam",
+ 24676: "canditv",
+ 24677: "flashfiler",
+ 24678: "proactivate",
+ 24680: "tcc-http",
+ 24754: "cslg",
+ 24922: "find",
+ 25000: "icl-twobase1",
+ 25001: "icl-twobase2",
+ 25002: "icl-twobase3",
+ 25003: "icl-twobase4",
+ 25004: "icl-twobase5",
+ 25005: "icl-twobase6",
+ 25006: "icl-twobase7",
+ 25007: "icl-twobase8",
+ 25008: "icl-twobase9",
+ 25009: "icl-twobase10",
+ 25576: "sauterdongle",
+ 25604: "idtp",
+ 25793: "vocaltec-hos",
+ 25900: "tasp-net",
+ 25901: "niobserver",
+ 25902: "nilinkanalyst",
+ 25903: "niprobe",
+ 26000: "quake",
+ 26133: "scscp",
+ 26208: "wnn6-ds",
+ 26257: "cockroach",
+ 26260: "ezproxy",
+ 26261: "ezmeeting",
+ 26262: "k3software-svr",
+ 26263: "k3software-cli",
+ 26486: "exoline-tcp",
+ 26487: "exoconfig",
+ 26489: "exonet",
+ 27345: "imagepump",
+ 27442: "jesmsjc",
+ 27504: "kopek-httphead",
+ 27782: "ars-vista",
+ 27876: "astrolink",
+ 27999: "tw-auth-key",
+ 28000: "nxlmd",
+ 28001: "pqsp",
+ 28200: "voxelstorm",
+ 28240: "siemensgsm",
+ 28589: "bosswave",
+ 29167: "otmp",
+ 29999: "bingbang",
+ 30000: "ndmps",
+ 30001: "pago-services1",
+ 30002: "pago-services2",
+ 30003: "amicon-fpsu-ra",
+ 30100: "rwp",
+ 30260: "kingdomsonline",
+ 30400: "gs-realtime",
+ 30999: "ovobs",
+ 31016: "ka-sddp",
+ 31020: "autotrac-acp",
+ 31400: "pace-licensed",
+ 31416: "xqosd",
+ 31457: "tetrinet",
+ 31620: "lm-mon",
+ 31685: "dsx-monitor",
+ 31765: "gamesmith-port",
+ 31948: "iceedcp-tx",
+ 31949: "iceedcp-rx",
+ 32034: "iracinghelper",
+ 32249: "t1distproc60",
+ 32400: "plex",
+ 32483: "apm-link",
+ 32635: "sec-ntb-clnt",
+ 32636: "DMExpress",
+ 32767: "filenet-powsrm",
+ 32768: "filenet-tms",
+ 32769: "filenet-rpc",
+ 32770: "filenet-nch",
+ 32771: "filenet-rmi",
+ 32772: "filenet-pa",
+ 32773: "filenet-cm",
+ 32774: "filenet-re",
+ 32775: "filenet-pch",
+ 32776: "filenet-peior",
+ 32777: "filenet-obrok",
+ 32801: "mlsn",
+ 32811: "retp",
+ 32896: "idmgratm",
+ 33060: "mysqlx",
+ 33123: "aurora-balaena",
+ 33331: "diamondport",
+ 33333: "dgi-serv",
+ 33334: "speedtrace",
+ 33434: "traceroute",
+ 33656: "snip-slave",
+ 34249: "turbonote-2",
+ 34378: "p-net-local",
+ 34379: "p-net-remote",
+ 34567: "dhanalakshmi",
+ 34962: "profinet-rt",
+ 34963: "profinet-rtm",
+ 34964: "profinet-cm",
+ 34980: "ethercat",
+ 35000: "heathview",
+ 35001: "rt-viewer",
+ 35002: "rt-sound",
+ 35003: "rt-devicemapper",
+ 35004: "rt-classmanager",
+ 35005: "rt-labtracker",
+ 35006: "rt-helper",
+ 35100: "axio-disc",
+ 35354: "kitim",
+ 35355: "altova-lm",
+ 35356: "guttersnex",
+ 35357: "openstack-id",
+ 36001: "allpeers",
+ 36524: "febooti-aw",
+ 36602: "observium-agent",
+ 36700: "mapx",
+ 36865: "kastenxpipe",
+ 37475: "neckar",
+ 37483: "gdrive-sync",
+ 37601: "eftp",
+ 37654: "unisys-eportal",
+ 38000: "ivs-database",
+ 38001: "ivs-insertion",
+ 38002: "cresco-control",
+ 38201: "galaxy7-data",
+ 38202: "fairview",
+ 38203: "agpolicy",
+ 38800: "sruth",
+ 38865: "secrmmsafecopya",
+ 39681: "turbonote-1",
+ 40000: "safetynetp",
+ 40404: "sptx",
+ 40841: "cscp",
+ 40842: "csccredir",
+ 40843: "csccfirewall",
+ 41111: "fs-qos",
+ 41121: "tentacle",
+ 41230: "z-wave-s",
+ 41794: "crestron-cip",
+ 41795: "crestron-ctp",
+ 41796: "crestron-cips",
+ 41797: "crestron-ctps",
+ 42508: "candp",
+ 42509: "candrp",
+ 42510: "caerpc",
+ 43000: "recvr-rc",
+ 43188: "reachout",
+ 43189: "ndm-agent-port",
+ 43190: "ip-provision",
+ 43191: "noit-transport",
+ 43210: "shaperai",
+ 43439: "eq3-update",
+ 43440: "ew-mgmt",
+ 43441: "ciscocsdb",
+ 44123: "z-wave-tunnel",
+ 44321: "pmcd",
+ 44322: "pmcdproxy",
+ 44323: "pmwebapi",
+ 44444: "cognex-dataman",
+ 44553: "rbr-debug",
+ 44818: "EtherNet-IP-2",
+ 44900: "m3da",
+ 45000: "asmp",
+ 45001: "asmps",
+ 45002: "rs-status",
+ 45045: "synctest",
+ 45054: "invision-ag",
+ 45514: "cloudcheck",
+ 45678: "eba",
+ 45824: "dai-shell",
+ 45825: "qdb2service",
+ 45966: "ssr-servermgr",
+ 46336: "inedo",
+ 46998: "spremotetablet",
+ 46999: "mediabox",
+ 47000: "mbus",
+ 47001: "winrm",
+ 47557: "dbbrowse",
+ 47624: "directplaysrvr",
+ 47806: "ap",
+ 47808: "bacnet",
+ 48000: "nimcontroller",
+ 48001: "nimspooler",
+ 48002: "nimhub",
+ 48003: "nimgtw",
+ 48004: "nimbusdb",
+ 48005: "nimbusdbctrl",
+ 48049: "3gpp-cbsp",
+ 48050: "weandsf",
+ 48128: "isnetserv",
+ 48129: "blp5",
+ 48556: "com-bardac-dw",
+ 48619: "iqobject",
+ 48653: "robotraconteur",
+ 49000: "matahari",
+ 49001: "nusrp",
+}
+var udpPortNames = map[UDPPort]string{
+ 1: "tcpmux",
+ 2: "compressnet",
+ 3: "compressnet",
+ 5: "rje",
+ 7: "echo",
+ 9: "discard",
+ 11: "systat",
+ 13: "daytime",
+ 17: "qotd",
+ 18: "msp",
+ 19: "chargen",
+ 20: "ftp-data",
+ 21: "ftp",
+ 22: "ssh",
+ 23: "telnet",
+ 25: "smtp",
+ 27: "nsw-fe",
+ 29: "msg-icp",
+ 31: "msg-auth",
+ 33: "dsp",
+ 37: "time",
+ 38: "rap",
+ 39: "rlp",
+ 41: "graphics",
+ 42: "name",
+ 43: "nicname",
+ 44: "mpm-flags",
+ 45: "mpm",
+ 46: "mpm-snd",
+ 48: "auditd",
+ 49: "tacacs",
+ 50: "re-mail-ck",
+ 52: "xns-time",
+ 53: "domain",
+ 54: "xns-ch",
+ 55: "isi-gl",
+ 56: "xns-auth",
+ 58: "xns-mail",
+ 62: "acas",
+ 63: "whoispp",
+ 64: "covia",
+ 65: "tacacs-ds",
+ 66: "sql-net",
+ 67: "bootps",
+ 68: "bootpc",
+ 69: "tftp",
+ 70: "gopher",
+ 71: "netrjs-1",
+ 72: "netrjs-2",
+ 73: "netrjs-3",
+ 74: "netrjs-4",
+ 76: "deos",
+ 78: "vettcp",
+ 79: "finger",
+ 80: "http",
+ 82: "xfer",
+ 83: "mit-ml-dev",
+ 84: "ctf",
+ 85: "mit-ml-dev",
+ 86: "mfcobol",
+ 88: "kerberos",
+ 89: "su-mit-tg",
+ 90: "dnsix",
+ 91: "mit-dov",
+ 92: "npp",
+ 93: "dcp",
+ 94: "objcall",
+ 95: "supdup",
+ 96: "dixie",
+ 97: "swift-rvf",
+ 98: "tacnews",
+ 99: "metagram",
+ 101: "hostname",
+ 102: "iso-tsap",
+ 103: "gppitnp",
+ 104: "acr-nema",
+ 105: "cso",
+ 106: "3com-tsmux",
+ 107: "rtelnet",
+ 108: "snagas",
+ 109: "pop2",
+ 110: "pop3",
+ 111: "sunrpc",
+ 112: "mcidas",
+ 113: "auth",
+ 115: "sftp",
+ 116: "ansanotify",
+ 117: "uucp-path",
+ 118: "sqlserv",
+ 119: "nntp",
+ 120: "cfdptkt",
+ 121: "erpc",
+ 122: "smakynet",
+ 123: "ntp",
+ 124: "ansatrader",
+ 125: "locus-map",
+ 126: "nxedit",
+ 127: "locus-con",
+ 128: "gss-xlicen",
+ 129: "pwdgen",
+ 130: "cisco-fna",
+ 131: "cisco-tna",
+ 132: "cisco-sys",
+ 133: "statsrv",
+ 134: "ingres-net",
+ 135: "epmap",
+ 136: "profile",
+ 137: "netbios-ns",
+ 138: "netbios-dgm",
+ 139: "netbios-ssn",
+ 140: "emfis-data",
+ 141: "emfis-cntl",
+ 142: "bl-idm",
+ 143: "imap",
+ 144: "uma",
+ 145: "uaac",
+ 146: "iso-tp0",
+ 147: "iso-ip",
+ 148: "jargon",
+ 149: "aed-512",
+ 150: "sql-net",
+ 151: "hems",
+ 152: "bftp",
+ 153: "sgmp",
+ 154: "netsc-prod",
+ 155: "netsc-dev",
+ 156: "sqlsrv",
+ 157: "knet-cmp",
+ 158: "pcmail-srv",
+ 159: "nss-routing",
+ 160: "sgmp-traps",
+ 161: "snmp",
+ 162: "snmptrap",
+ 163: "cmip-man",
+ 164: "cmip-agent",
+ 165: "xns-courier",
+ 166: "s-net",
+ 167: "namp",
+ 168: "rsvd",
+ 169: "send",
+ 170: "print-srv",
+ 171: "multiplex",
+ 172: "cl-1",
+ 173: "xyplex-mux",
+ 174: "mailq",
+ 175: "vmnet",
+ 176: "genrad-mux",
+ 177: "xdmcp",
+ 178: "nextstep",
+ 179: "bgp",
+ 180: "ris",
+ 181: "unify",
+ 182: "audit",
+ 183: "ocbinder",
+ 184: "ocserver",
+ 185: "remote-kis",
+ 186: "kis",
+ 187: "aci",
+ 188: "mumps",
+ 189: "qft",
+ 190: "gacp",
+ 191: "prospero",
+ 192: "osu-nms",
+ 193: "srmp",
+ 194: "irc",
+ 195: "dn6-nlm-aud",
+ 196: "dn6-smm-red",
+ 197: "dls",
+ 198: "dls-mon",
+ 199: "smux",
+ 200: "src",
+ 201: "at-rtmp",
+ 202: "at-nbp",
+ 203: "at-3",
+ 204: "at-echo",
+ 205: "at-5",
+ 206: "at-zis",
+ 207: "at-7",
+ 208: "at-8",
+ 209: "qmtp",
+ 210: "z39-50",
+ 211: "914c-g",
+ 212: "anet",
+ 213: "ipx",
+ 214: "vmpwscs",
+ 215: "softpc",
+ 216: "CAIlic",
+ 217: "dbase",
+ 218: "mpp",
+ 219: "uarps",
+ 220: "imap3",
+ 221: "fln-spx",
+ 222: "rsh-spx",
+ 223: "cdc",
+ 224: "masqdialer",
+ 242: "direct",
+ 243: "sur-meas",
+ 244: "inbusiness",
+ 245: "link",
+ 246: "dsp3270",
+ 247: "subntbcst-tftp",
+ 248: "bhfhs",
+ 256: "rap",
+ 257: "set",
+ 259: "esro-gen",
+ 260: "openport",
+ 261: "nsiiops",
+ 262: "arcisdms",
+ 263: "hdap",
+ 264: "bgmp",
+ 265: "x-bone-ctl",
+ 266: "sst",
+ 267: "td-service",
+ 268: "td-replica",
+ 269: "manet",
+ 270: "gist",
+ 280: "http-mgmt",
+ 281: "personal-link",
+ 282: "cableport-ax",
+ 283: "rescap",
+ 284: "corerjd",
+ 286: "fxp",
+ 287: "k-block",
+ 308: "novastorbakcup",
+ 309: "entrusttime",
+ 310: "bhmds",
+ 311: "asip-webadmin",
+ 312: "vslmp",
+ 313: "magenta-logic",
+ 314: "opalis-robot",
+ 315: "dpsi",
+ 316: "decauth",
+ 317: "zannet",
+ 318: "pkix-timestamp",
+ 319: "ptp-event",
+ 320: "ptp-general",
+ 321: "pip",
+ 322: "rtsps",
+ 333: "texar",
+ 344: "pdap",
+ 345: "pawserv",
+ 346: "zserv",
+ 347: "fatserv",
+ 348: "csi-sgwp",
+ 349: "mftp",
+ 350: "matip-type-a",
+ 351: "matip-type-b",
+ 352: "dtag-ste-sb",
+ 353: "ndsauth",
+ 354: "bh611",
+ 355: "datex-asn",
+ 356: "cloanto-net-1",
+ 357: "bhevent",
+ 358: "shrinkwrap",
+ 359: "nsrmp",
+ 360: "scoi2odialog",
+ 361: "semantix",
+ 362: "srssend",
+ 363: "rsvp-tunnel",
+ 364: "aurora-cmgr",
+ 365: "dtk",
+ 366: "odmr",
+ 367: "mortgageware",
+ 368: "qbikgdp",
+ 369: "rpc2portmap",
+ 370: "codaauth2",
+ 371: "clearcase",
+ 372: "ulistproc",
+ 373: "legent-1",
+ 374: "legent-2",
+ 375: "hassle",
+ 376: "nip",
+ 377: "tnETOS",
+ 378: "dsETOS",
+ 379: "is99c",
+ 380: "is99s",
+ 381: "hp-collector",
+ 382: "hp-managed-node",
+ 383: "hp-alarm-mgr",
+ 384: "arns",
+ 385: "ibm-app",
+ 386: "asa",
+ 387: "aurp",
+ 388: "unidata-ldm",
+ 389: "ldap",
+ 390: "uis",
+ 391: "synotics-relay",
+ 392: "synotics-broker",
+ 393: "meta5",
+ 394: "embl-ndt",
+ 395: "netcp",
+ 396: "netware-ip",
+ 397: "mptn",
+ 398: "kryptolan",
+ 399: "iso-tsap-c2",
+ 400: "osb-sd",
+ 401: "ups",
+ 402: "genie",
+ 403: "decap",
+ 404: "nced",
+ 405: "ncld",
+ 406: "imsp",
+ 407: "timbuktu",
+ 408: "prm-sm",
+ 409: "prm-nm",
+ 410: "decladebug",
+ 411: "rmt",
+ 412: "synoptics-trap",
+ 413: "smsp",
+ 414: "infoseek",
+ 415: "bnet",
+ 416: "silverplatter",
+ 417: "onmux",
+ 418: "hyper-g",
+ 419: "ariel1",
+ 420: "smpte",
+ 421: "ariel2",
+ 422: "ariel3",
+ 423: "opc-job-start",
+ 424: "opc-job-track",
+ 425: "icad-el",
+ 426: "smartsdp",
+ 427: "svrloc",
+ 428: "ocs-cmu",
+ 429: "ocs-amu",
+ 430: "utmpsd",
+ 431: "utmpcd",
+ 432: "iasd",
+ 433: "nnsp",
+ 434: "mobileip-agent",
+ 435: "mobilip-mn",
+ 436: "dna-cml",
+ 437: "comscm",
+ 438: "dsfgw",
+ 439: "dasp",
+ 440: "sgcp",
+ 441: "decvms-sysmgt",
+ 442: "cvc-hostd",
+ 443: "https",
+ 444: "snpp",
+ 445: "microsoft-ds",
+ 446: "ddm-rdb",
+ 447: "ddm-dfm",
+ 448: "ddm-ssl",
+ 449: "as-servermap",
+ 450: "tserver",
+ 451: "sfs-smp-net",
+ 452: "sfs-config",
+ 453: "creativeserver",
+ 454: "contentserver",
+ 455: "creativepartnr",
+ 456: "macon-udp",
+ 457: "scohelp",
+ 458: "appleqtc",
+ 459: "ampr-rcmd",
+ 460: "skronk",
+ 461: "datasurfsrv",
+ 462: "datasurfsrvsec",
+ 463: "alpes",
+ 464: "kpasswd",
+ 465: "igmpv3lite",
+ 466: "digital-vrc",
+ 467: "mylex-mapd",
+ 468: "photuris",
+ 469: "rcp",
+ 470: "scx-proxy",
+ 471: "mondex",
+ 472: "ljk-login",
+ 473: "hybrid-pop",
+ 474: "tn-tl-w2",
+ 475: "tcpnethaspsrv",
+ 476: "tn-tl-fd1",
+ 477: "ss7ns",
+ 478: "spsc",
+ 479: "iafserver",
+ 480: "iafdbase",
+ 481: "ph",
+ 482: "bgs-nsi",
+ 483: "ulpnet",
+ 484: "integra-sme",
+ 485: "powerburst",
+ 486: "avian",
+ 487: "saft",
+ 488: "gss-http",
+ 489: "nest-protocol",
+ 490: "micom-pfs",
+ 491: "go-login",
+ 492: "ticf-1",
+ 493: "ticf-2",
+ 494: "pov-ray",
+ 495: "intecourier",
+ 496: "pim-rp-disc",
+ 497: "retrospect",
+ 498: "siam",
+ 499: "iso-ill",
+ 500: "isakmp",
+ 501: "stmf",
+ 502: "mbap",
+ 503: "intrinsa",
+ 504: "citadel",
+ 505: "mailbox-lm",
+ 506: "ohimsrv",
+ 507: "crs",
+ 508: "xvttp",
+ 509: "snare",
+ 510: "fcp",
+ 511: "passgo",
+ 512: "comsat",
+ 513: "who",
+ 514: "syslog",
+ 515: "printer",
+ 516: "videotex",
+ 517: "talk",
+ 518: "ntalk",
+ 519: "utime",
+ 520: "router",
+ 521: "ripng",
+ 522: "ulp",
+ 523: "ibm-db2",
+ 524: "ncp",
+ 525: "timed",
+ 526: "tempo",
+ 527: "stx",
+ 528: "custix",
+ 529: "irc-serv",
+ 530: "courier",
+ 531: "conference",
+ 532: "netnews",
+ 533: "netwall",
+ 534: "windream",
+ 535: "iiop",
+ 536: "opalis-rdv",
+ 537: "nmsp",
+ 538: "gdomap",
+ 539: "apertus-ldp",
+ 540: "uucp",
+ 541: "uucp-rlogin",
+ 542: "commerce",
+ 543: "klogin",
+ 544: "kshell",
+ 545: "appleqtcsrvr",
+ 546: "dhcpv6-client",
+ 547: "dhcpv6-server",
+ 548: "afpovertcp",
+ 549: "idfp",
+ 550: "new-rwho",
+ 551: "cybercash",
+ 552: "devshr-nts",
+ 553: "pirp",
+ 554: "rtsp",
+ 555: "dsf",
+ 556: "remotefs",
+ 557: "openvms-sysipc",
+ 558: "sdnskmp",
+ 559: "teedtap",
+ 560: "rmonitor",
+ 561: "monitor",
+ 562: "chshell",
+ 563: "nntps",
+ 564: "9pfs",
+ 565: "whoami",
+ 566: "streettalk",
+ 567: "banyan-rpc",
+ 568: "ms-shuttle",
+ 569: "ms-rome",
+ 570: "meter",
+ 571: "meter",
+ 572: "sonar",
+ 573: "banyan-vip",
+ 574: "ftp-agent",
+ 575: "vemmi",
+ 576: "ipcd",
+ 577: "vnas",
+ 578: "ipdd",
+ 579: "decbsrv",
+ 580: "sntp-heartbeat",
+ 581: "bdp",
+ 582: "scc-security",
+ 583: "philips-vc",
+ 584: "keyserver",
+ 586: "password-chg",
+ 587: "submission",
+ 588: "cal",
+ 589: "eyelink",
+ 590: "tns-cml",
+ 591: "http-alt",
+ 592: "eudora-set",
+ 593: "http-rpc-epmap",
+ 594: "tpip",
+ 595: "cab-protocol",
+ 596: "smsd",
+ 597: "ptcnameservice",
+ 598: "sco-websrvrmg3",
+ 599: "acp",
+ 600: "ipcserver",
+ 601: "syslog-conn",
+ 602: "xmlrpc-beep",
+ 603: "idxp",
+ 604: "tunnel",
+ 605: "soap-beep",
+ 606: "urm",
+ 607: "nqs",
+ 608: "sift-uft",
+ 609: "npmp-trap",
+ 610: "npmp-local",
+ 611: "npmp-gui",
+ 612: "hmmp-ind",
+ 613: "hmmp-op",
+ 614: "sshell",
+ 615: "sco-inetmgr",
+ 616: "sco-sysmgr",
+ 617: "sco-dtmgr",
+ 618: "dei-icda",
+ 619: "compaq-evm",
+ 620: "sco-websrvrmgr",
+ 621: "escp-ip",
+ 622: "collaborator",
+ 623: "asf-rmcp",
+ 624: "cryptoadmin",
+ 625: "dec-dlm",
+ 626: "asia",
+ 627: "passgo-tivoli",
+ 628: "qmqp",
+ 629: "3com-amp3",
+ 630: "rda",
+ 631: "ipp",
+ 632: "bmpp",
+ 633: "servstat",
+ 634: "ginad",
+ 635: "rlzdbase",
+ 636: "ldaps",
+ 637: "lanserver",
+ 638: "mcns-sec",
+ 639: "msdp",
+ 640: "entrust-sps",
+ 641: "repcmd",
+ 642: "esro-emsdp",
+ 643: "sanity",
+ 644: "dwr",
+ 645: "pssc",
+ 646: "ldp",
+ 647: "dhcp-failover",
+ 648: "rrp",
+ 649: "cadview-3d",
+ 650: "obex",
+ 651: "ieee-mms",
+ 652: "hello-port",
+ 653: "repscmd",
+ 654: "aodv",
+ 655: "tinc",
+ 656: "spmp",
+ 657: "rmc",
+ 658: "tenfold",
+ 660: "mac-srvr-admin",
+ 661: "hap",
+ 662: "pftp",
+ 663: "purenoise",
+ 664: "asf-secure-rmcp",
+ 665: "sun-dr",
+ 666: "mdqs",
+ 667: "disclose",
+ 668: "mecomm",
+ 669: "meregister",
+ 670: "vacdsm-sws",
+ 671: "vacdsm-app",
+ 672: "vpps-qua",
+ 673: "cimplex",
+ 674: "acap",
+ 675: "dctp",
+ 676: "vpps-via",
+ 677: "vpp",
+ 678: "ggf-ncp",
+ 679: "mrm",
+ 680: "entrust-aaas",
+ 681: "entrust-aams",
+ 682: "xfr",
+ 683: "corba-iiop",
+ 684: "corba-iiop-ssl",
+ 685: "mdc-portmapper",
+ 686: "hcp-wismar",
+ 687: "asipregistry",
+ 688: "realm-rusd",
+ 689: "nmap",
+ 690: "vatp",
+ 691: "msexch-routing",
+ 692: "hyperwave-isp",
+ 693: "connendp",
+ 694: "ha-cluster",
+ 695: "ieee-mms-ssl",
+ 696: "rushd",
+ 697: "uuidgen",
+ 698: "olsr",
+ 699: "accessnetwork",
+ 700: "epp",
+ 701: "lmp",
+ 702: "iris-beep",
+ 704: "elcsd",
+ 705: "agentx",
+ 706: "silc",
+ 707: "borland-dsj",
+ 709: "entrust-kmsh",
+ 710: "entrust-ash",
+ 711: "cisco-tdp",
+ 712: "tbrpf",
+ 713: "iris-xpc",
+ 714: "iris-xpcs",
+ 715: "iris-lwz",
+ 716: "pana",
+ 729: "netviewdm1",
+ 730: "netviewdm2",
+ 731: "netviewdm3",
+ 741: "netgw",
+ 742: "netrcs",
+ 744: "flexlm",
+ 747: "fujitsu-dev",
+ 748: "ris-cm",
+ 749: "kerberos-adm",
+ 750: "loadav",
+ 751: "pump",
+ 752: "qrh",
+ 753: "rrh",
+ 754: "tell",
+ 758: "nlogin",
+ 759: "con",
+ 760: "ns",
+ 761: "rxe",
+ 762: "quotad",
+ 763: "cycleserv",
+ 764: "omserv",
+ 765: "webster",
+ 767: "phonebook",
+ 769: "vid",
+ 770: "cadlock",
+ 771: "rtip",
+ 772: "cycleserv2",
+ 773: "notify",
+ 774: "acmaint-dbd",
+ 775: "acmaint-transd",
+ 776: "wpages",
+ 777: "multiling-http",
+ 780: "wpgs",
+ 800: "mdbs-daemon",
+ 801: "device",
+ 802: "mbap-s",
+ 810: "fcp-udp",
+ 828: "itm-mcell-s",
+ 829: "pkix-3-ca-ra",
+ 830: "netconf-ssh",
+ 831: "netconf-beep",
+ 832: "netconfsoaphttp",
+ 833: "netconfsoapbeep",
+ 847: "dhcp-failover2",
+ 848: "gdoi",
+ 853: "domain-s",
+ 854: "dlep",
+ 860: "iscsi",
+ 861: "owamp-control",
+ 862: "twamp-control",
+ 873: "rsync",
+ 886: "iclcnet-locate",
+ 887: "iclcnet-svinfo",
+ 888: "accessbuilder",
+ 900: "omginitialrefs",
+ 901: "smpnameres",
+ 902: "ideafarm-door",
+ 903: "ideafarm-panic",
+ 910: "kink",
+ 911: "xact-backup",
+ 912: "apex-mesh",
+ 913: "apex-edge",
+ 989: "ftps-data",
+ 990: "ftps",
+ 991: "nas",
+ 992: "telnets",
+ 993: "imaps",
+ 995: "pop3s",
+ 996: "vsinet",
+ 997: "maitrd",
+ 998: "puparp",
+ 999: "applix",
+ 1000: "cadlock2",
+ 1010: "surf",
+ 1021: "exp1",
+ 1022: "exp2",
+ 1025: "blackjack",
+ 1026: "cap",
+ 1027: "6a44",
+ 1029: "solid-mux",
+ 1033: "netinfo-local",
+ 1034: "activesync",
+ 1035: "mxxrlogin",
+ 1036: "nsstp",
+ 1037: "ams",
+ 1038: "mtqp",
+ 1039: "sbl",
+ 1040: "netarx",
+ 1041: "danf-ak2",
+ 1042: "afrog",
+ 1043: "boinc-client",
+ 1044: "dcutility",
+ 1045: "fpitp",
+ 1046: "wfremotertm",
+ 1047: "neod1",
+ 1048: "neod2",
+ 1049: "td-postman",
+ 1050: "cma",
+ 1051: "optima-vnet",
+ 1052: "ddt",
+ 1053: "remote-as",
+ 1054: "brvread",
+ 1055: "ansyslmd",
+ 1056: "vfo",
+ 1057: "startron",
+ 1058: "nim",
+ 1059: "nimreg",
+ 1060: "polestar",
+ 1061: "kiosk",
+ 1062: "veracity",
+ 1063: "kyoceranetdev",
+ 1064: "jstel",
+ 1065: "syscomlan",
+ 1066: "fpo-fns",
+ 1067: "instl-boots",
+ 1068: "instl-bootc",
+ 1069: "cognex-insight",
+ 1070: "gmrupdateserv",
+ 1071: "bsquare-voip",
+ 1072: "cardax",
+ 1073: "bridgecontrol",
+ 1074: "warmspotMgmt",
+ 1075: "rdrmshc",
+ 1076: "dab-sti-c",
+ 1077: "imgames",
+ 1078: "avocent-proxy",
+ 1079: "asprovatalk",
+ 1080: "socks",
+ 1081: "pvuniwien",
+ 1082: "amt-esd-prot",
+ 1083: "ansoft-lm-1",
+ 1084: "ansoft-lm-2",
+ 1085: "webobjects",
+ 1086: "cplscrambler-lg",
+ 1087: "cplscrambler-in",
+ 1088: "cplscrambler-al",
+ 1089: "ff-annunc",
+ 1090: "ff-fms",
+ 1091: "ff-sm",
+ 1092: "obrpd",
+ 1093: "proofd",
+ 1094: "rootd",
+ 1095: "nicelink",
+ 1096: "cnrprotocol",
+ 1097: "sunclustermgr",
+ 1098: "rmiactivation",
+ 1099: "rmiregistry",
+ 1100: "mctp",
+ 1101: "pt2-discover",
+ 1102: "adobeserver-1",
+ 1103: "adobeserver-2",
+ 1104: "xrl",
+ 1105: "ftranhc",
+ 1106: "isoipsigport-1",
+ 1107: "isoipsigport-2",
+ 1108: "ratio-adp",
+ 1110: "nfsd-keepalive",
+ 1111: "lmsocialserver",
+ 1112: "icp",
+ 1113: "ltp-deepspace",
+ 1114: "mini-sql",
+ 1115: "ardus-trns",
+ 1116: "ardus-cntl",
+ 1117: "ardus-mtrns",
+ 1118: "sacred",
+ 1119: "bnetgame",
+ 1120: "bnetfile",
+ 1121: "rmpp",
+ 1122: "availant-mgr",
+ 1123: "murray",
+ 1124: "hpvmmcontrol",
+ 1125: "hpvmmagent",
+ 1126: "hpvmmdata",
+ 1127: "kwdb-commn",
+ 1128: "saphostctrl",
+ 1129: "saphostctrls",
+ 1130: "casp",
+ 1131: "caspssl",
+ 1132: "kvm-via-ip",
+ 1133: "dfn",
+ 1134: "aplx",
+ 1135: "omnivision",
+ 1136: "hhb-gateway",
+ 1137: "trim",
+ 1138: "encrypted-admin",
+ 1139: "evm",
+ 1140: "autonoc",
+ 1141: "mxomss",
+ 1142: "edtools",
+ 1143: "imyx",
+ 1144: "fuscript",
+ 1145: "x9-icue",
+ 1146: "audit-transfer",
+ 1147: "capioverlan",
+ 1148: "elfiq-repl",
+ 1149: "bvtsonar",
+ 1150: "blaze",
+ 1151: "unizensus",
+ 1152: "winpoplanmess",
+ 1153: "c1222-acse",
+ 1154: "resacommunity",
+ 1155: "nfa",
+ 1156: "iascontrol-oms",
+ 1157: "iascontrol",
+ 1158: "dbcontrol-oms",
+ 1159: "oracle-oms",
+ 1160: "olsv",
+ 1161: "health-polling",
+ 1162: "health-trap",
+ 1163: "sddp",
+ 1164: "qsm-proxy",
+ 1165: "qsm-gui",
+ 1166: "qsm-remote",
+ 1167: "cisco-ipsla",
+ 1168: "vchat",
+ 1169: "tripwire",
+ 1170: "atc-lm",
+ 1171: "atc-appserver",
+ 1172: "dnap",
+ 1173: "d-cinema-rrp",
+ 1174: "fnet-remote-ui",
+ 1175: "dossier",
+ 1176: "indigo-server",
+ 1177: "dkmessenger",
+ 1178: "sgi-storman",
+ 1179: "b2n",
+ 1180: "mc-client",
+ 1181: "3comnetman",
+ 1182: "accelenet-data",
+ 1183: "llsurfup-http",
+ 1184: "llsurfup-https",
+ 1185: "catchpole",
+ 1186: "mysql-cluster",
+ 1187: "alias",
+ 1188: "hp-webadmin",
+ 1189: "unet",
+ 1190: "commlinx-avl",
+ 1191: "gpfs",
+ 1192: "caids-sensor",
+ 1193: "fiveacross",
+ 1194: "openvpn",
+ 1195: "rsf-1",
+ 1196: "netmagic",
+ 1197: "carrius-rshell",
+ 1198: "cajo-discovery",
+ 1199: "dmidi",
+ 1200: "scol",
+ 1201: "nucleus-sand",
+ 1202: "caiccipc",
+ 1203: "ssslic-mgr",
+ 1204: "ssslog-mgr",
+ 1205: "accord-mgc",
+ 1206: "anthony-data",
+ 1207: "metasage",
+ 1208: "seagull-ais",
+ 1209: "ipcd3",
+ 1210: "eoss",
+ 1211: "groove-dpp",
+ 1212: "lupa",
+ 1213: "mpc-lifenet",
+ 1214: "kazaa",
+ 1215: "scanstat-1",
+ 1216: "etebac5",
+ 1217: "hpss-ndapi",
+ 1218: "aeroflight-ads",
+ 1219: "aeroflight-ret",
+ 1220: "qt-serveradmin",
+ 1221: "sweetware-apps",
+ 1222: "nerv",
+ 1223: "tgp",
+ 1224: "vpnz",
+ 1225: "slinkysearch",
+ 1226: "stgxfws",
+ 1227: "dns2go",
+ 1228: "florence",
+ 1229: "zented",
+ 1230: "periscope",
+ 1231: "menandmice-lpm",
+ 1232: "first-defense",
+ 1233: "univ-appserver",
+ 1234: "search-agent",
+ 1235: "mosaicsyssvc1",
+ 1236: "bvcontrol",
+ 1237: "tsdos390",
+ 1238: "hacl-qs",
+ 1239: "nmsd",
+ 1240: "instantia",
+ 1241: "nessus",
+ 1242: "nmasoverip",
+ 1243: "serialgateway",
+ 1244: "isbconference1",
+ 1245: "isbconference2",
+ 1246: "payrouter",
+ 1247: "visionpyramid",
+ 1248: "hermes",
+ 1249: "mesavistaco",
+ 1250: "swldy-sias",
+ 1251: "servergraph",
+ 1252: "bspne-pcc",
+ 1253: "q55-pcc",
+ 1254: "de-noc",
+ 1255: "de-cache-query",
+ 1256: "de-server",
+ 1257: "shockwave2",
+ 1258: "opennl",
+ 1259: "opennl-voice",
+ 1260: "ibm-ssd",
+ 1261: "mpshrsv",
+ 1262: "qnts-orb",
+ 1263: "dka",
+ 1264: "prat",
+ 1265: "dssiapi",
+ 1266: "dellpwrappks",
+ 1267: "epc",
+ 1268: "propel-msgsys",
+ 1269: "watilapp",
+ 1270: "opsmgr",
+ 1271: "excw",
+ 1272: "cspmlockmgr",
+ 1273: "emc-gateway",
+ 1274: "t1distproc",
+ 1275: "ivcollector",
+ 1277: "miva-mqs",
+ 1278: "dellwebadmin-1",
+ 1279: "dellwebadmin-2",
+ 1280: "pictrography",
+ 1281: "healthd",
+ 1282: "emperion",
+ 1283: "productinfo",
+ 1284: "iee-qfx",
+ 1285: "neoiface",
+ 1286: "netuitive",
+ 1287: "routematch",
+ 1288: "navbuddy",
+ 1289: "jwalkserver",
+ 1290: "winjaserver",
+ 1291: "seagulllms",
+ 1292: "dsdn",
+ 1293: "pkt-krb-ipsec",
+ 1294: "cmmdriver",
+ 1295: "ehtp",
+ 1296: "dproxy",
+ 1297: "sdproxy",
+ 1298: "lpcp",
+ 1299: "hp-sci",
+ 1300: "h323hostcallsc",
+ 1301: "ci3-software-1",
+ 1302: "ci3-software-2",
+ 1303: "sftsrv",
+ 1304: "boomerang",
+ 1305: "pe-mike",
+ 1306: "re-conn-proto",
+ 1307: "pacmand",
+ 1308: "odsi",
+ 1309: "jtag-server",
+ 1310: "husky",
+ 1311: "rxmon",
+ 1312: "sti-envision",
+ 1313: "bmc-patroldb",
+ 1314: "pdps",
+ 1315: "els",
+ 1316: "exbit-escp",
+ 1317: "vrts-ipcserver",
+ 1318: "krb5gatekeeper",
+ 1319: "amx-icsp",
+ 1320: "amx-axbnet",
+ 1321: "pip",
+ 1322: "novation",
+ 1323: "brcd",
+ 1324: "delta-mcp",
+ 1325: "dx-instrument",
+ 1326: "wimsic",
+ 1327: "ultrex",
+ 1328: "ewall",
+ 1329: "netdb-export",
+ 1330: "streetperfect",
+ 1331: "intersan",
+ 1332: "pcia-rxp-b",
+ 1333: "passwrd-policy",
+ 1334: "writesrv",
+ 1335: "digital-notary",
+ 1336: "ischat",
+ 1337: "menandmice-dns",
+ 1338: "wmc-log-svc",
+ 1339: "kjtsiteserver",
+ 1340: "naap",
+ 1341: "qubes",
+ 1342: "esbroker",
+ 1343: "re101",
+ 1344: "icap",
+ 1345: "vpjp",
+ 1346: "alta-ana-lm",
+ 1347: "bbn-mmc",
+ 1348: "bbn-mmx",
+ 1349: "sbook",
+ 1350: "editbench",
+ 1351: "equationbuilder",
+ 1352: "lotusnote",
+ 1353: "relief",
+ 1354: "XSIP-network",
+ 1355: "intuitive-edge",
+ 1356: "cuillamartin",
+ 1357: "pegboard",
+ 1358: "connlcli",
+ 1359: "ftsrv",
+ 1360: "mimer",
+ 1361: "linx",
+ 1362: "timeflies",
+ 1363: "ndm-requester",
+ 1364: "ndm-server",
+ 1365: "adapt-sna",
+ 1366: "netware-csp",
+ 1367: "dcs",
+ 1368: "screencast",
+ 1369: "gv-us",
+ 1370: "us-gv",
+ 1371: "fc-cli",
+ 1372: "fc-ser",
+ 1373: "chromagrafx",
+ 1374: "molly",
+ 1375: "bytex",
+ 1376: "ibm-pps",
+ 1377: "cichlid",
+ 1378: "elan",
+ 1379: "dbreporter",
+ 1380: "telesis-licman",
+ 1381: "apple-licman",
+ 1382: "udt-os",
+ 1383: "gwha",
+ 1384: "os-licman",
+ 1385: "atex-elmd",
+ 1386: "checksum",
+ 1387: "cadsi-lm",
+ 1388: "objective-dbc",
+ 1389: "iclpv-dm",
+ 1390: "iclpv-sc",
+ 1391: "iclpv-sas",
+ 1392: "iclpv-pm",
+ 1393: "iclpv-nls",
+ 1394: "iclpv-nlc",
+ 1395: "iclpv-wsm",
+ 1396: "dvl-activemail",
+ 1397: "audio-activmail",
+ 1398: "video-activmail",
+ 1399: "cadkey-licman",
+ 1400: "cadkey-tablet",
+ 1401: "goldleaf-licman",
+ 1402: "prm-sm-np",
+ 1403: "prm-nm-np",
+ 1404: "igi-lm",
+ 1405: "ibm-res",
+ 1406: "netlabs-lm",
+ 1408: "sophia-lm",
+ 1409: "here-lm",
+ 1410: "hiq",
+ 1411: "af",
+ 1412: "innosys",
+ 1413: "innosys-acl",
+ 1414: "ibm-mqseries",
+ 1415: "dbstar",
+ 1416: "novell-lu6-2",
+ 1417: "timbuktu-srv1",
+ 1418: "timbuktu-srv2",
+ 1419: "timbuktu-srv3",
+ 1420: "timbuktu-srv4",
+ 1421: "gandalf-lm",
+ 1422: "autodesk-lm",
+ 1423: "essbase",
+ 1424: "hybrid",
+ 1425: "zion-lm",
+ 1426: "sais",
+ 1427: "mloadd",
+ 1428: "informatik-lm",
+ 1429: "nms",
+ 1430: "tpdu",
+ 1431: "rgtp",
+ 1432: "blueberry-lm",
+ 1433: "ms-sql-s",
+ 1434: "ms-sql-m",
+ 1435: "ibm-cics",
+ 1436: "saism",
+ 1437: "tabula",
+ 1438: "eicon-server",
+ 1439: "eicon-x25",
+ 1440: "eicon-slp",
+ 1441: "cadis-1",
+ 1442: "cadis-2",
+ 1443: "ies-lm",
+ 1444: "marcam-lm",
+ 1445: "proxima-lm",
+ 1446: "ora-lm",
+ 1447: "apri-lm",
+ 1448: "oc-lm",
+ 1449: "peport",
+ 1450: "dwf",
+ 1451: "infoman",
+ 1452: "gtegsc-lm",
+ 1453: "genie-lm",
+ 1454: "interhdl-elmd",
+ 1455: "esl-lm",
+ 1456: "dca",
+ 1457: "valisys-lm",
+ 1458: "nrcabq-lm",
+ 1459: "proshare1",
+ 1460: "proshare2",
+ 1461: "ibm-wrless-lan",
+ 1462: "world-lm",
+ 1463: "nucleus",
+ 1464: "msl-lmd",
+ 1465: "pipes",
+ 1466: "oceansoft-lm",
+ 1467: "csdmbase",
+ 1468: "csdm",
+ 1469: "aal-lm",
+ 1470: "uaiact",
+ 1471: "csdmbase",
+ 1472: "csdm",
+ 1473: "openmath",
+ 1474: "telefinder",
+ 1475: "taligent-lm",
+ 1476: "clvm-cfg",
+ 1477: "ms-sna-server",
+ 1478: "ms-sna-base",
+ 1479: "dberegister",
+ 1480: "pacerforum",
+ 1481: "airs",
+ 1482: "miteksys-lm",
+ 1483: "afs",
+ 1484: "confluent",
+ 1485: "lansource",
+ 1486: "nms-topo-serv",
+ 1487: "localinfosrvr",
+ 1488: "docstor",
+ 1489: "dmdocbroker",
+ 1490: "insitu-conf",
+ 1492: "stone-design-1",
+ 1493: "netmap-lm",
+ 1494: "ica",
+ 1495: "cvc",
+ 1496: "liberty-lm",
+ 1497: "rfx-lm",
+ 1498: "sybase-sqlany",
+ 1499: "fhc",
+ 1500: "vlsi-lm",
+ 1501: "saiscm",
+ 1502: "shivadiscovery",
+ 1503: "imtc-mcs",
+ 1504: "evb-elm",
+ 1505: "funkproxy",
+ 1506: "utcd",
+ 1507: "symplex",
+ 1508: "diagmond",
+ 1509: "robcad-lm",
+ 1510: "mvx-lm",
+ 1511: "3l-l1",
+ 1512: "wins",
+ 1513: "fujitsu-dtc",
+ 1514: "fujitsu-dtcns",
+ 1515: "ifor-protocol",
+ 1516: "vpad",
+ 1517: "vpac",
+ 1518: "vpvd",
+ 1519: "vpvc",
+ 1520: "atm-zip-office",
+ 1521: "ncube-lm",
+ 1522: "ricardo-lm",
+ 1523: "cichild-lm",
+ 1524: "ingreslock",
+ 1525: "orasrv",
+ 1526: "pdap-np",
+ 1527: "tlisrv",
+ 1528: "ngr-t",
+ 1529: "coauthor",
+ 1530: "rap-service",
+ 1531: "rap-listen",
+ 1532: "miroconnect",
+ 1533: "virtual-places",
+ 1534: "micromuse-lm",
+ 1535: "ampr-info",
+ 1536: "ampr-inter",
+ 1537: "sdsc-lm",
+ 1538: "3ds-lm",
+ 1539: "intellistor-lm",
+ 1540: "rds",
+ 1541: "rds2",
+ 1542: "gridgen-elmd",
+ 1543: "simba-cs",
+ 1544: "aspeclmd",
+ 1545: "vistium-share",
+ 1546: "abbaccuray",
+ 1547: "laplink",
+ 1548: "axon-lm",
+ 1549: "shivasound",
+ 1550: "3m-image-lm",
+ 1551: "hecmtl-db",
+ 1552: "pciarray",
+ 1553: "sna-cs",
+ 1554: "caci-lm",
+ 1555: "livelan",
+ 1556: "veritas-pbx",
+ 1557: "arbortext-lm",
+ 1558: "xingmpeg",
+ 1559: "web2host",
+ 1560: "asci-val",
+ 1561: "facilityview",
+ 1562: "pconnectmgr",
+ 1563: "cadabra-lm",
+ 1564: "pay-per-view",
+ 1565: "winddlb",
+ 1566: "corelvideo",
+ 1567: "jlicelmd",
+ 1568: "tsspmap",
+ 1569: "ets",
+ 1570: "orbixd",
+ 1571: "rdb-dbs-disp",
+ 1572: "chip-lm",
+ 1573: "itscomm-ns",
+ 1574: "mvel-lm",
+ 1575: "oraclenames",
+ 1576: "moldflow-lm",
+ 1577: "hypercube-lm",
+ 1578: "jacobus-lm",
+ 1579: "ioc-sea-lm",
+ 1580: "tn-tl-r2",
+ 1581: "mil-2045-47001",
+ 1582: "msims",
+ 1583: "simbaexpress",
+ 1584: "tn-tl-fd2",
+ 1585: "intv",
+ 1586: "ibm-abtact",
+ 1587: "pra-elmd",
+ 1588: "triquest-lm",
+ 1589: "vqp",
+ 1590: "gemini-lm",
+ 1591: "ncpm-pm",
+ 1592: "commonspace",
+ 1593: "mainsoft-lm",
+ 1594: "sixtrak",
+ 1595: "radio",
+ 1596: "radio-bc",
+ 1597: "orbplus-iiop",
+ 1598: "picknfs",
+ 1599: "simbaservices",
+ 1600: "issd",
+ 1601: "aas",
+ 1602: "inspect",
+ 1603: "picodbc",
+ 1604: "icabrowser",
+ 1605: "slp",
+ 1606: "slm-api",
+ 1607: "stt",
+ 1608: "smart-lm",
+ 1609: "isysg-lm",
+ 1610: "taurus-wh",
+ 1611: "ill",
+ 1612: "netbill-trans",
+ 1613: "netbill-keyrep",
+ 1614: "netbill-cred",
+ 1615: "netbill-auth",
+ 1616: "netbill-prod",
+ 1617: "nimrod-agent",
+ 1618: "skytelnet",
+ 1619: "xs-openstorage",
+ 1620: "faxportwinport",
+ 1621: "softdataphone",
+ 1622: "ontime",
+ 1623: "jaleosnd",
+ 1624: "udp-sr-port",
+ 1625: "svs-omagent",
+ 1626: "shockwave",
+ 1627: "t128-gateway",
+ 1628: "lontalk-norm",
+ 1629: "lontalk-urgnt",
+ 1630: "oraclenet8cman",
+ 1631: "visitview",
+ 1632: "pammratc",
+ 1633: "pammrpc",
+ 1634: "loaprobe",
+ 1635: "edb-server1",
+ 1636: "isdc",
+ 1637: "islc",
+ 1638: "ismc",
+ 1639: "cert-initiator",
+ 1640: "cert-responder",
+ 1641: "invision",
+ 1642: "isis-am",
+ 1643: "isis-ambc",
+ 1644: "saiseh",
+ 1645: "sightline",
+ 1646: "sa-msg-port",
+ 1647: "rsap",
+ 1648: "concurrent-lm",
+ 1649: "kermit",
+ 1650: "nkd",
+ 1651: "shiva-confsrvr",
+ 1652: "xnmp",
+ 1653: "alphatech-lm",
+ 1654: "stargatealerts",
+ 1655: "dec-mbadmin",
+ 1656: "dec-mbadmin-h",
+ 1657: "fujitsu-mmpdc",
+ 1658: "sixnetudr",
+ 1659: "sg-lm",
+ 1660: "skip-mc-gikreq",
+ 1661: "netview-aix-1",
+ 1662: "netview-aix-2",
+ 1663: "netview-aix-3",
+ 1664: "netview-aix-4",
+ 1665: "netview-aix-5",
+ 1666: "netview-aix-6",
+ 1667: "netview-aix-7",
+ 1668: "netview-aix-8",
+ 1669: "netview-aix-9",
+ 1670: "netview-aix-10",
+ 1671: "netview-aix-11",
+ 1672: "netview-aix-12",
+ 1673: "proshare-mc-1",
+ 1674: "proshare-mc-2",
+ 1675: "pdp",
+ 1676: "netcomm2",
+ 1677: "groupwise",
+ 1678: "prolink",
+ 1679: "darcorp-lm",
+ 1680: "microcom-sbp",
+ 1681: "sd-elmd",
+ 1682: "lanyon-lantern",
+ 1683: "ncpm-hip",
+ 1684: "snaresecure",
+ 1685: "n2nremote",
+ 1686: "cvmon",
+ 1687: "nsjtp-ctrl",
+ 1688: "nsjtp-data",
+ 1689: "firefox",
+ 1690: "ng-umds",
+ 1691: "empire-empuma",
+ 1692: "sstsys-lm",
+ 1693: "rrirtr",
+ 1694: "rrimwm",
+ 1695: "rrilwm",
+ 1696: "rrifmm",
+ 1697: "rrisat",
+ 1698: "rsvp-encap-1",
+ 1699: "rsvp-encap-2",
+ 1700: "mps-raft",
+ 1701: "l2f",
+ 1702: "deskshare",
+ 1703: "hb-engine",
+ 1704: "bcs-broker",
+ 1705: "slingshot",
+ 1706: "jetform",
+ 1707: "vdmplay",
+ 1708: "gat-lmd",
+ 1709: "centra",
+ 1710: "impera",
+ 1711: "pptconference",
+ 1712: "registrar",
+ 1713: "conferencetalk",
+ 1714: "sesi-lm",
+ 1715: "houdini-lm",
+ 1716: "xmsg",
+ 1717: "fj-hdnet",
+ 1718: "h323gatedisc",
+ 1719: "h323gatestat",
+ 1720: "h323hostcall",
+ 1721: "caicci",
+ 1722: "hks-lm",
+ 1723: "pptp",
+ 1724: "csbphonemaster",
+ 1725: "iden-ralp",
+ 1726: "iberiagames",
+ 1727: "winddx",
+ 1728: "telindus",
+ 1729: "citynl",
+ 1730: "roketz",
+ 1731: "msiccp",
+ 1732: "proxim",
+ 1733: "siipat",
+ 1734: "cambertx-lm",
+ 1735: "privatechat",
+ 1736: "street-stream",
+ 1737: "ultimad",
+ 1738: "gamegen1",
+ 1739: "webaccess",
+ 1740: "encore",
+ 1741: "cisco-net-mgmt",
+ 1742: "3Com-nsd",
+ 1743: "cinegrfx-lm",
+ 1744: "ncpm-ft",
+ 1745: "remote-winsock",
+ 1746: "ftrapid-1",
+ 1747: "ftrapid-2",
+ 1748: "oracle-em1",
+ 1749: "aspen-services",
+ 1750: "sslp",
+ 1751: "swiftnet",
+ 1752: "lofr-lm",
+ 1754: "oracle-em2",
+ 1755: "ms-streaming",
+ 1756: "capfast-lmd",
+ 1757: "cnhrp",
+ 1758: "tftp-mcast",
+ 1759: "spss-lm",
+ 1760: "www-ldap-gw",
+ 1761: "cft-0",
+ 1762: "cft-1",
+ 1763: "cft-2",
+ 1764: "cft-3",
+ 1765: "cft-4",
+ 1766: "cft-5",
+ 1767: "cft-6",
+ 1768: "cft-7",
+ 1769: "bmc-net-adm",
+ 1770: "bmc-net-svc",
+ 1771: "vaultbase",
+ 1772: "essweb-gw",
+ 1773: "kmscontrol",
+ 1774: "global-dtserv",
+ 1776: "femis",
+ 1777: "powerguardian",
+ 1778: "prodigy-intrnet",
+ 1779: "pharmasoft",
+ 1780: "dpkeyserv",
+ 1781: "answersoft-lm",
+ 1782: "hp-hcip",
+ 1784: "finle-lm",
+ 1785: "windlm",
+ 1786: "funk-logger",
+ 1787: "funk-license",
+ 1788: "psmond",
+ 1789: "hello",
+ 1790: "nmsp",
+ 1791: "ea1",
+ 1792: "ibm-dt-2",
+ 1793: "rsc-robot",
+ 1794: "cera-bcm",
+ 1795: "dpi-proxy",
+ 1796: "vocaltec-admin",
+ 1797: "uma",
+ 1798: "etp",
+ 1799: "netrisk",
+ 1800: "ansys-lm",
+ 1801: "msmq",
+ 1802: "concomp1",
+ 1803: "hp-hcip-gwy",
+ 1804: "enl",
+ 1805: "enl-name",
+ 1806: "musiconline",
+ 1807: "fhsp",
+ 1808: "oracle-vp2",
+ 1809: "oracle-vp1",
+ 1810: "jerand-lm",
+ 1811: "scientia-sdb",
+ 1812: "radius",
+ 1813: "radius-acct",
+ 1814: "tdp-suite",
+ 1815: "mmpft",
+ 1816: "harp",
+ 1817: "rkb-oscs",
+ 1818: "etftp",
+ 1819: "plato-lm",
+ 1820: "mcagent",
+ 1821: "donnyworld",
+ 1822: "es-elmd",
+ 1823: "unisys-lm",
+ 1824: "metrics-pas",
+ 1825: "direcpc-video",
+ 1826: "ardt",
+ 1827: "asi",
+ 1828: "itm-mcell-u",
+ 1829: "optika-emedia",
+ 1830: "net8-cman",
+ 1831: "myrtle",
+ 1832: "tht-treasure",
+ 1833: "udpradio",
+ 1834: "ardusuni",
+ 1835: "ardusmul",
+ 1836: "ste-smsc",
+ 1837: "csoft1",
+ 1838: "talnet",
+ 1839: "netopia-vo1",
+ 1840: "netopia-vo2",
+ 1841: "netopia-vo3",
+ 1842: "netopia-vo4",
+ 1843: "netopia-vo5",
+ 1844: "direcpc-dll",
+ 1845: "altalink",
+ 1846: "tunstall-pnc",
+ 1847: "slp-notify",
+ 1848: "fjdocdist",
+ 1849: "alpha-sms",
+ 1850: "gsi",
+ 1851: "ctcd",
+ 1852: "virtual-time",
+ 1853: "vids-avtp",
+ 1854: "buddy-draw",
+ 1855: "fiorano-rtrsvc",
+ 1856: "fiorano-msgsvc",
+ 1857: "datacaptor",
+ 1858: "privateark",
+ 1859: "gammafetchsvr",
+ 1860: "sunscalar-svc",
+ 1861: "lecroy-vicp",
+ 1862: "mysql-cm-agent",
+ 1863: "msnp",
+ 1864: "paradym-31port",
+ 1865: "entp",
+ 1866: "swrmi",
+ 1867: "udrive",
+ 1868: "viziblebrowser",
+ 1869: "transact",
+ 1870: "sunscalar-dns",
+ 1871: "canocentral0",
+ 1872: "canocentral1",
+ 1873: "fjmpjps",
+ 1874: "fjswapsnp",
+ 1875: "westell-stats",
+ 1876: "ewcappsrv",
+ 1877: "hp-webqosdb",
+ 1878: "drmsmc",
+ 1879: "nettgain-nms",
+ 1880: "vsat-control",
+ 1881: "ibm-mqseries2",
+ 1882: "ecsqdmn",
+ 1883: "mqtt",
+ 1884: "idmaps",
+ 1885: "vrtstrapserver",
+ 1886: "leoip",
+ 1887: "filex-lport",
+ 1888: "ncconfig",
+ 1889: "unify-adapter",
+ 1890: "wilkenlistener",
+ 1891: "childkey-notif",
+ 1892: "childkey-ctrl",
+ 1893: "elad",
+ 1894: "o2server-port",
+ 1896: "b-novative-ls",
+ 1897: "metaagent",
+ 1898: "cymtec-port",
+ 1899: "mc2studios",
+ 1900: "ssdp",
+ 1901: "fjicl-tep-a",
+ 1902: "fjicl-tep-b",
+ 1903: "linkname",
+ 1904: "fjicl-tep-c",
+ 1905: "sugp",
+ 1906: "tpmd",
+ 1907: "intrastar",
+ 1908: "dawn",
+ 1909: "global-wlink",
+ 1910: "ultrabac",
+ 1911: "mtp",
+ 1912: "rhp-iibp",
+ 1913: "armadp",
+ 1914: "elm-momentum",
+ 1915: "facelink",
+ 1916: "persona",
+ 1917: "noagent",
+ 1918: "can-nds",
+ 1919: "can-dch",
+ 1920: "can-ferret",
+ 1921: "noadmin",
+ 1922: "tapestry",
+ 1923: "spice",
+ 1924: "xiip",
+ 1925: "discovery-port",
+ 1926: "egs",
+ 1927: "videte-cipc",
+ 1928: "emsd-port",
+ 1929: "bandwiz-system",
+ 1930: "driveappserver",
+ 1931: "amdsched",
+ 1932: "ctt-broker",
+ 1933: "xmapi",
+ 1934: "xaapi",
+ 1935: "macromedia-fcs",
+ 1936: "jetcmeserver",
+ 1937: "jwserver",
+ 1938: "jwclient",
+ 1939: "jvserver",
+ 1940: "jvclient",
+ 1941: "dic-aida",
+ 1942: "res",
+ 1943: "beeyond-media",
+ 1944: "close-combat",
+ 1945: "dialogic-elmd",
+ 1946: "tekpls",
+ 1947: "sentinelsrm",
+ 1948: "eye2eye",
+ 1949: "ismaeasdaqlive",
+ 1950: "ismaeasdaqtest",
+ 1951: "bcs-lmserver",
+ 1952: "mpnjsc",
+ 1953: "rapidbase",
+ 1954: "abr-api",
+ 1955: "abr-secure",
+ 1956: "vrtl-vmf-ds",
+ 1957: "unix-status",
+ 1958: "dxadmind",
+ 1959: "simp-all",
+ 1960: "nasmanager",
+ 1961: "bts-appserver",
+ 1962: "biap-mp",
+ 1963: "webmachine",
+ 1964: "solid-e-engine",
+ 1965: "tivoli-npm",
+ 1966: "slush",
+ 1967: "sns-quote",
+ 1968: "lipsinc",
+ 1969: "lipsinc1",
+ 1970: "netop-rc",
+ 1971: "netop-school",
+ 1972: "intersys-cache",
+ 1973: "dlsrap",
+ 1974: "drp",
+ 1975: "tcoflashagent",
+ 1976: "tcoregagent",
+ 1977: "tcoaddressbook",
+ 1978: "unisql",
+ 1979: "unisql-java",
+ 1980: "pearldoc-xact",
+ 1981: "p2pq",
+ 1982: "estamp",
+ 1983: "lhtp",
+ 1984: "bb",
+ 1985: "hsrp",
+ 1986: "licensedaemon",
+ 1987: "tr-rsrb-p1",
+ 1988: "tr-rsrb-p2",
+ 1989: "tr-rsrb-p3",
+ 1990: "stun-p1",
+ 1991: "stun-p2",
+ 1992: "stun-p3",
+ 1993: "snmp-tcp-port",
+ 1994: "stun-port",
+ 1995: "perf-port",
+ 1996: "tr-rsrb-port",
+ 1997: "gdp-port",
+ 1998: "x25-svc-port",
+ 1999: "tcp-id-port",
+ 2000: "cisco-sccp",
+ 2001: "wizard",
+ 2002: "globe",
+ 2003: "brutus",
+ 2004: "emce",
+ 2005: "oracle",
+ 2006: "raid-cd",
+ 2007: "raid-am",
+ 2008: "terminaldb",
+ 2009: "whosockami",
+ 2010: "pipe-server",
+ 2011: "servserv",
+ 2012: "raid-ac",
+ 2013: "raid-cd",
+ 2014: "raid-sf",
+ 2015: "raid-cs",
+ 2016: "bootserver",
+ 2017: "bootclient",
+ 2018: "rellpack",
+ 2019: "about",
+ 2020: "xinupageserver",
+ 2021: "xinuexpansion1",
+ 2022: "xinuexpansion2",
+ 2023: "xinuexpansion3",
+ 2024: "xinuexpansion4",
+ 2025: "xribs",
+ 2026: "scrabble",
+ 2027: "shadowserver",
+ 2028: "submitserver",
+ 2029: "hsrpv6",
+ 2030: "device2",
+ 2031: "mobrien-chat",
+ 2032: "blackboard",
+ 2033: "glogger",
+ 2034: "scoremgr",
+ 2035: "imsldoc",
+ 2036: "e-dpnet",
+ 2037: "applus",
+ 2038: "objectmanager",
+ 2039: "prizma",
+ 2040: "lam",
+ 2041: "interbase",
+ 2042: "isis",
+ 2043: "isis-bcast",
+ 2044: "rimsl",
+ 2045: "cdfunc",
+ 2046: "sdfunc",
+ 2047: "dls",
+ 2048: "dls-monitor",
+ 2049: "shilp",
+ 2050: "av-emb-config",
+ 2051: "epnsdp",
+ 2052: "clearvisn",
+ 2053: "lot105-ds-upd",
+ 2054: "weblogin",
+ 2055: "iop",
+ 2056: "omnisky",
+ 2057: "rich-cp",
+ 2058: "newwavesearch",
+ 2059: "bmc-messaging",
+ 2060: "teleniumdaemon",
+ 2061: "netmount",
+ 2062: "icg-swp",
+ 2063: "icg-bridge",
+ 2064: "icg-iprelay",
+ 2065: "dlsrpn",
+ 2066: "aura",
+ 2067: "dlswpn",
+ 2068: "avauthsrvprtcl",
+ 2069: "event-port",
+ 2070: "ah-esp-encap",
+ 2071: "acp-port",
+ 2072: "msync",
+ 2073: "gxs-data-port",
+ 2074: "vrtl-vmf-sa",
+ 2075: "newlixengine",
+ 2076: "newlixconfig",
+ 2077: "tsrmagt",
+ 2078: "tpcsrvr",
+ 2079: "idware-router",
+ 2080: "autodesk-nlm",
+ 2081: "kme-trap-port",
+ 2082: "infowave",
+ 2083: "radsec",
+ 2084: "sunclustergeo",
+ 2085: "ada-cip",
+ 2086: "gnunet",
+ 2087: "eli",
+ 2088: "ip-blf",
+ 2089: "sep",
+ 2090: "lrp",
+ 2091: "prp",
+ 2092: "descent3",
+ 2093: "nbx-cc",
+ 2094: "nbx-au",
+ 2095: "nbx-ser",
+ 2096: "nbx-dir",
+ 2097: "jetformpreview",
+ 2098: "dialog-port",
+ 2099: "h2250-annex-g",
+ 2100: "amiganetfs",
+ 2101: "rtcm-sc104",
+ 2102: "zephyr-srv",
+ 2103: "zephyr-clt",
+ 2104: "zephyr-hm",
+ 2105: "minipay",
+ 2106: "mzap",
+ 2107: "bintec-admin",
+ 2108: "comcam",
+ 2109: "ergolight",
+ 2110: "umsp",
+ 2111: "dsatp",
+ 2112: "idonix-metanet",
+ 2113: "hsl-storm",
+ 2114: "newheights",
+ 2115: "kdm",
+ 2116: "ccowcmr",
+ 2117: "mentaclient",
+ 2118: "mentaserver",
+ 2119: "gsigatekeeper",
+ 2120: "qencp",
+ 2121: "scientia-ssdb",
+ 2122: "caupc-remote",
+ 2123: "gtp-control",
+ 2124: "elatelink",
+ 2125: "lockstep",
+ 2126: "pktcable-cops",
+ 2127: "index-pc-wb",
+ 2128: "net-steward",
+ 2129: "cs-live",
+ 2130: "xds",
+ 2131: "avantageb2b",
+ 2132: "solera-epmap",
+ 2133: "zymed-zpp",
+ 2134: "avenue",
+ 2135: "gris",
+ 2136: "appworxsrv",
+ 2137: "connect",
+ 2138: "unbind-cluster",
+ 2139: "ias-auth",
+ 2140: "ias-reg",
+ 2141: "ias-admind",
+ 2142: "tdmoip",
+ 2143: "lv-jc",
+ 2144: "lv-ffx",
+ 2145: "lv-pici",
+ 2146: "lv-not",
+ 2147: "lv-auth",
+ 2148: "veritas-ucl",
+ 2149: "acptsys",
+ 2150: "dynamic3d",
+ 2151: "docent",
+ 2152: "gtp-user",
+ 2153: "ctlptc",
+ 2154: "stdptc",
+ 2155: "brdptc",
+ 2156: "trp",
+ 2157: "xnds",
+ 2158: "touchnetplus",
+ 2159: "gdbremote",
+ 2160: "apc-2160",
+ 2161: "apc-2161",
+ 2162: "navisphere",
+ 2163: "navisphere-sec",
+ 2164: "ddns-v3",
+ 2165: "x-bone-api",
+ 2166: "iwserver",
+ 2167: "raw-serial",
+ 2168: "easy-soft-mux",
+ 2169: "brain",
+ 2170: "eyetv",
+ 2171: "msfw-storage",
+ 2172: "msfw-s-storage",
+ 2173: "msfw-replica",
+ 2174: "msfw-array",
+ 2175: "airsync",
+ 2176: "rapi",
+ 2177: "qwave",
+ 2178: "bitspeer",
+ 2179: "vmrdp",
+ 2180: "mc-gt-srv",
+ 2181: "eforward",
+ 2182: "cgn-stat",
+ 2183: "cgn-config",
+ 2184: "nvd",
+ 2185: "onbase-dds",
+ 2186: "gtaua",
+ 2187: "ssmd",
+ 2190: "tivoconnect",
+ 2191: "tvbus",
+ 2192: "asdis",
+ 2193: "drwcs",
+ 2197: "mnp-exchange",
+ 2198: "onehome-remote",
+ 2199: "onehome-help",
+ 2200: "ici",
+ 2201: "ats",
+ 2202: "imtc-map",
+ 2203: "b2-runtime",
+ 2204: "b2-license",
+ 2205: "jps",
+ 2206: "hpocbus",
+ 2207: "hpssd",
+ 2208: "hpiod",
+ 2209: "rimf-ps",
+ 2210: "noaaport",
+ 2211: "emwin",
+ 2212: "leecoposserver",
+ 2213: "kali",
+ 2214: "rpi",
+ 2215: "ipcore",
+ 2216: "vtu-comms",
+ 2217: "gotodevice",
+ 2218: "bounzza",
+ 2219: "netiq-ncap",
+ 2220: "netiq",
+ 2221: "ethernet-ip-s",
+ 2222: "EtherNet-IP-1",
+ 2223: "rockwell-csp2",
+ 2224: "efi-mg",
+ 2226: "di-drm",
+ 2227: "di-msg",
+ 2228: "ehome-ms",
+ 2229: "datalens",
+ 2230: "queueadm",
+ 2231: "wimaxasncp",
+ 2232: "ivs-video",
+ 2233: "infocrypt",
+ 2234: "directplay",
+ 2235: "sercomm-wlink",
+ 2236: "nani",
+ 2237: "optech-port1-lm",
+ 2238: "aviva-sna",
+ 2239: "imagequery",
+ 2240: "recipe",
+ 2241: "ivsd",
+ 2242: "foliocorp",
+ 2243: "magicom",
+ 2244: "nmsserver",
+ 2245: "hao",
+ 2246: "pc-mta-addrmap",
+ 2247: "antidotemgrsvr",
+ 2248: "ums",
+ 2249: "rfmp",
+ 2250: "remote-collab",
+ 2251: "dif-port",
+ 2252: "njenet-ssl",
+ 2253: "dtv-chan-req",
+ 2254: "seispoc",
+ 2255: "vrtp",
+ 2256: "pcc-mfp",
+ 2257: "simple-tx-rx",
+ 2258: "rcts",
+ 2260: "apc-2260",
+ 2261: "comotionmaster",
+ 2262: "comotionback",
+ 2263: "ecwcfg",
+ 2264: "apx500api-1",
+ 2265: "apx500api-2",
+ 2266: "mfserver",
+ 2267: "ontobroker",
+ 2268: "amt",
+ 2269: "mikey",
+ 2270: "starschool",
+ 2271: "mmcals",
+ 2272: "mmcal",
+ 2273: "mysql-im",
+ 2274: "pcttunnell",
+ 2275: "ibridge-data",
+ 2276: "ibridge-mgmt",
+ 2277: "bluectrlproxy",
+ 2278: "s3db",
+ 2279: "xmquery",
+ 2280: "lnvpoller",
+ 2281: "lnvconsole",
+ 2282: "lnvalarm",
+ 2283: "lnvstatus",
+ 2284: "lnvmaps",
+ 2285: "lnvmailmon",
+ 2286: "nas-metering",
+ 2287: "dna",
+ 2288: "netml",
+ 2289: "dict-lookup",
+ 2290: "sonus-logging",
+ 2291: "eapsp",
+ 2292: "mib-streaming",
+ 2293: "npdbgmngr",
+ 2294: "konshus-lm",
+ 2295: "advant-lm",
+ 2296: "theta-lm",
+ 2297: "d2k-datamover1",
+ 2298: "d2k-datamover2",
+ 2299: "pc-telecommute",
+ 2300: "cvmmon",
+ 2301: "cpq-wbem",
+ 2302: "binderysupport",
+ 2303: "proxy-gateway",
+ 2304: "attachmate-uts",
+ 2305: "mt-scaleserver",
+ 2306: "tappi-boxnet",
+ 2307: "pehelp",
+ 2308: "sdhelp",
+ 2309: "sdserver",
+ 2310: "sdclient",
+ 2311: "messageservice",
+ 2312: "wanscaler",
+ 2313: "iapp",
+ 2314: "cr-websystems",
+ 2315: "precise-sft",
+ 2316: "sent-lm",
+ 2317: "attachmate-g32",
+ 2318: "cadencecontrol",
+ 2319: "infolibria",
+ 2320: "siebel-ns",
+ 2321: "rdlap",
+ 2322: "ofsd",
+ 2323: "3d-nfsd",
+ 2324: "cosmocall",
+ 2325: "ansysli",
+ 2326: "idcp",
+ 2327: "xingcsm",
+ 2328: "netrix-sftm",
+ 2329: "nvd",
+ 2330: "tscchat",
+ 2331: "agentview",
+ 2332: "rcc-host",
+ 2333: "snapp",
+ 2334: "ace-client",
+ 2335: "ace-proxy",
+ 2336: "appleugcontrol",
+ 2337: "ideesrv",
+ 2338: "norton-lambert",
+ 2339: "3com-webview",
+ 2340: "wrs-registry",
+ 2341: "xiostatus",
+ 2342: "manage-exec",
+ 2343: "nati-logos",
+ 2344: "fcmsys",
+ 2345: "dbm",
+ 2346: "redstorm-join",
+ 2347: "redstorm-find",
+ 2348: "redstorm-info",
+ 2349: "redstorm-diag",
+ 2350: "psbserver",
+ 2351: "psrserver",
+ 2352: "pslserver",
+ 2353: "pspserver",
+ 2354: "psprserver",
+ 2355: "psdbserver",
+ 2356: "gxtelmd",
+ 2357: "unihub-server",
+ 2358: "futrix",
+ 2359: "flukeserver",
+ 2360: "nexstorindltd",
+ 2361: "tl1",
+ 2362: "digiman",
+ 2363: "mediacntrlnfsd",
+ 2364: "oi-2000",
+ 2365: "dbref",
+ 2366: "qip-login",
+ 2367: "service-ctrl",
+ 2368: "opentable",
+ 2370: "l3-hbmon",
+ 2372: "lanmessenger",
+ 2381: "compaq-https",
+ 2382: "ms-olap3",
+ 2383: "ms-olap4",
+ 2384: "sd-capacity",
+ 2385: "sd-data",
+ 2386: "virtualtape",
+ 2387: "vsamredirector",
+ 2388: "mynahautostart",
+ 2389: "ovsessionmgr",
+ 2390: "rsmtp",
+ 2391: "3com-net-mgmt",
+ 2392: "tacticalauth",
+ 2393: "ms-olap1",
+ 2394: "ms-olap2",
+ 2395: "lan900-remote",
+ 2396: "wusage",
+ 2397: "ncl",
+ 2398: "orbiter",
+ 2399: "fmpro-fdal",
+ 2400: "opequus-server",
+ 2401: "cvspserver",
+ 2402: "taskmaster2000",
+ 2403: "taskmaster2000",
+ 2404: "iec-104",
+ 2405: "trc-netpoll",
+ 2406: "jediserver",
+ 2407: "orion",
+ 2409: "sns-protocol",
+ 2410: "vrts-registry",
+ 2411: "netwave-ap-mgmt",
+ 2412: "cdn",
+ 2413: "orion-rmi-reg",
+ 2414: "beeyond",
+ 2415: "codima-rtp",
+ 2416: "rmtserver",
+ 2417: "composit-server",
+ 2418: "cas",
+ 2419: "attachmate-s2s",
+ 2420: "dslremote-mgmt",
+ 2421: "g-talk",
+ 2422: "crmsbits",
+ 2423: "rnrp",
+ 2424: "kofax-svr",
+ 2425: "fjitsuappmgr",
+ 2426: "vcmp",
+ 2427: "mgcp-gateway",
+ 2428: "ott",
+ 2429: "ft-role",
+ 2430: "venus",
+ 2431: "venus-se",
+ 2432: "codasrv",
+ 2433: "codasrv-se",
+ 2434: "pxc-epmap",
+ 2435: "optilogic",
+ 2436: "topx",
+ 2437: "unicontrol",
+ 2438: "msp",
+ 2439: "sybasedbsynch",
+ 2440: "spearway",
+ 2441: "pvsw-inet",
+ 2442: "netangel",
+ 2443: "powerclientcsf",
+ 2444: "btpp2sectrans",
+ 2445: "dtn1",
+ 2446: "bues-service",
+ 2447: "ovwdb",
+ 2448: "hpppssvr",
+ 2449: "ratl",
+ 2450: "netadmin",
+ 2451: "netchat",
+ 2452: "snifferclient",
+ 2453: "madge-ltd",
+ 2454: "indx-dds",
+ 2455: "wago-io-system",
+ 2456: "altav-remmgt",
+ 2457: "rapido-ip",
+ 2458: "griffin",
+ 2459: "community",
+ 2460: "ms-theater",
+ 2461: "qadmifoper",
+ 2462: "qadmifevent",
+ 2463: "lsi-raid-mgmt",
+ 2464: "direcpc-si",
+ 2465: "lbm",
+ 2466: "lbf",
+ 2467: "high-criteria",
+ 2468: "qip-msgd",
+ 2469: "mti-tcs-comm",
+ 2470: "taskman-port",
+ 2471: "seaodbc",
+ 2472: "c3",
+ 2473: "aker-cdp",
+ 2474: "vitalanalysis",
+ 2475: "ace-server",
+ 2476: "ace-svr-prop",
+ 2477: "ssm-cvs",
+ 2478: "ssm-cssps",
+ 2479: "ssm-els",
+ 2480: "powerexchange",
+ 2481: "giop",
+ 2482: "giop-ssl",
+ 2483: "ttc",
+ 2484: "ttc-ssl",
+ 2485: "netobjects1",
+ 2486: "netobjects2",
+ 2487: "pns",
+ 2488: "moy-corp",
+ 2489: "tsilb",
+ 2490: "qip-qdhcp",
+ 2491: "conclave-cpp",
+ 2492: "groove",
+ 2493: "talarian-mqs",
+ 2494: "bmc-ar",
+ 2495: "fast-rem-serv",
+ 2496: "dirgis",
+ 2497: "quaddb",
+ 2498: "odn-castraq",
+ 2499: "unicontrol",
+ 2500: "rtsserv",
+ 2501: "rtsclient",
+ 2502: "kentrox-prot",
+ 2503: "nms-dpnss",
+ 2504: "wlbs",
+ 2505: "ppcontrol",
+ 2506: "jbroker",
+ 2507: "spock",
+ 2508: "jdatastore",
+ 2509: "fjmpss",
+ 2510: "fjappmgrbulk",
+ 2511: "metastorm",
+ 2512: "citrixima",
+ 2513: "citrixadmin",
+ 2514: "facsys-ntp",
+ 2515: "facsys-router",
+ 2516: "maincontrol",
+ 2517: "call-sig-trans",
+ 2518: "willy",
+ 2519: "globmsgsvc",
+ 2520: "pvsw",
+ 2521: "adaptecmgr",
+ 2522: "windb",
+ 2523: "qke-llc-v3",
+ 2524: "optiwave-lm",
+ 2525: "ms-v-worlds",
+ 2526: "ema-sent-lm",
+ 2527: "iqserver",
+ 2528: "ncr-ccl",
+ 2529: "utsftp",
+ 2530: "vrcommerce",
+ 2531: "ito-e-gui",
+ 2532: "ovtopmd",
+ 2533: "snifferserver",
+ 2534: "combox-web-acc",
+ 2535: "madcap",
+ 2536: "btpp2audctr1",
+ 2537: "upgrade",
+ 2538: "vnwk-prapi",
+ 2539: "vsiadmin",
+ 2540: "lonworks",
+ 2541: "lonworks2",
+ 2542: "udrawgraph",
+ 2543: "reftek",
+ 2544: "novell-zen",
+ 2545: "sis-emt",
+ 2546: "vytalvaultbrtp",
+ 2547: "vytalvaultvsmp",
+ 2548: "vytalvaultpipe",
+ 2549: "ipass",
+ 2550: "ads",
+ 2551: "isg-uda-server",
+ 2552: "call-logging",
+ 2553: "efidiningport",
+ 2554: "vcnet-link-v10",
+ 2555: "compaq-wcp",
+ 2556: "nicetec-nmsvc",
+ 2557: "nicetec-mgmt",
+ 2558: "pclemultimedia",
+ 2559: "lstp",
+ 2560: "labrat",
+ 2561: "mosaixcc",
+ 2562: "delibo",
+ 2563: "cti-redwood",
+ 2564: "hp-3000-telnet",
+ 2565: "coord-svr",
+ 2566: "pcs-pcw",
+ 2567: "clp",
+ 2568: "spamtrap",
+ 2569: "sonuscallsig",
+ 2570: "hs-port",
+ 2571: "cecsvc",
+ 2572: "ibp",
+ 2573: "trustestablish",
+ 2574: "blockade-bpsp",
+ 2575: "hl7",
+ 2576: "tclprodebugger",
+ 2577: "scipticslsrvr",
+ 2578: "rvs-isdn-dcp",
+ 2579: "mpfoncl",
+ 2580: "tributary",
+ 2581: "argis-te",
+ 2582: "argis-ds",
+ 2583: "mon",
+ 2584: "cyaserv",
+ 2585: "netx-server",
+ 2586: "netx-agent",
+ 2587: "masc",
+ 2588: "privilege",
+ 2589: "quartus-tcl",
+ 2590: "idotdist",
+ 2591: "maytagshuffle",
+ 2592: "netrek",
+ 2593: "mns-mail",
+ 2594: "dts",
+ 2595: "worldfusion1",
+ 2596: "worldfusion2",
+ 2597: "homesteadglory",
+ 2598: "citriximaclient",
+ 2599: "snapd",
+ 2600: "hpstgmgr",
+ 2601: "discp-client",
+ 2602: "discp-server",
+ 2603: "servicemeter",
+ 2604: "nsc-ccs",
+ 2605: "nsc-posa",
+ 2606: "netmon",
+ 2607: "connection",
+ 2608: "wag-service",
+ 2609: "system-monitor",
+ 2610: "versa-tek",
+ 2611: "lionhead",
+ 2612: "qpasa-agent",
+ 2613: "smntubootstrap",
+ 2614: "neveroffline",
+ 2615: "firepower",
+ 2616: "appswitch-emp",
+ 2617: "cmadmin",
+ 2618: "priority-e-com",
+ 2619: "bruce",
+ 2620: "lpsrecommender",
+ 2621: "miles-apart",
+ 2622: "metricadbc",
+ 2623: "lmdp",
+ 2624: "aria",
+ 2625: "blwnkl-port",
+ 2626: "gbjd816",
+ 2627: "moshebeeri",
+ 2628: "dict",
+ 2629: "sitaraserver",
+ 2630: "sitaramgmt",
+ 2631: "sitaradir",
+ 2632: "irdg-post",
+ 2633: "interintelli",
+ 2634: "pk-electronics",
+ 2635: "backburner",
+ 2636: "solve",
+ 2637: "imdocsvc",
+ 2638: "sybaseanywhere",
+ 2639: "aminet",
+ 2640: "ami-control",
+ 2641: "hdl-srv",
+ 2642: "tragic",
+ 2643: "gte-samp",
+ 2644: "travsoft-ipx-t",
+ 2645: "novell-ipx-cmd",
+ 2646: "and-lm",
+ 2647: "syncserver",
+ 2648: "upsnotifyprot",
+ 2649: "vpsipport",
+ 2650: "eristwoguns",
+ 2651: "ebinsite",
+ 2652: "interpathpanel",
+ 2653: "sonus",
+ 2654: "corel-vncadmin",
+ 2655: "unglue",
+ 2656: "kana",
+ 2657: "sns-dispatcher",
+ 2658: "sns-admin",
+ 2659: "sns-query",
+ 2660: "gcmonitor",
+ 2661: "olhost",
+ 2662: "bintec-capi",
+ 2663: "bintec-tapi",
+ 2664: "patrol-mq-gm",
+ 2665: "patrol-mq-nm",
+ 2666: "extensis",
+ 2667: "alarm-clock-s",
+ 2668: "alarm-clock-c",
+ 2669: "toad",
+ 2670: "tve-announce",
+ 2671: "newlixreg",
+ 2672: "nhserver",
+ 2673: "firstcall42",
+ 2674: "ewnn",
+ 2675: "ttc-etap",
+ 2676: "simslink",
+ 2677: "gadgetgate1way",
+ 2678: "gadgetgate2way",
+ 2679: "syncserverssl",
+ 2680: "pxc-sapxom",
+ 2681: "mpnjsomb",
+ 2683: "ncdloadbalance",
+ 2684: "mpnjsosv",
+ 2685: "mpnjsocl",
+ 2686: "mpnjsomg",
+ 2687: "pq-lic-mgmt",
+ 2688: "md-cg-http",
+ 2689: "fastlynx",
+ 2690: "hp-nnm-data",
+ 2691: "itinternet",
+ 2692: "admins-lms",
+ 2694: "pwrsevent",
+ 2695: "vspread",
+ 2696: "unifyadmin",
+ 2697: "oce-snmp-trap",
+ 2698: "mck-ivpip",
+ 2699: "csoft-plusclnt",
+ 2700: "tqdata",
+ 2701: "sms-rcinfo",
+ 2702: "sms-xfer",
+ 2703: "sms-chat",
+ 2704: "sms-remctrl",
+ 2705: "sds-admin",
+ 2706: "ncdmirroring",
+ 2707: "emcsymapiport",
+ 2708: "banyan-net",
+ 2709: "supermon",
+ 2710: "sso-service",
+ 2711: "sso-control",
+ 2712: "aocp",
+ 2713: "raventbs",
+ 2714: "raventdm",
+ 2715: "hpstgmgr2",
+ 2716: "inova-ip-disco",
+ 2717: "pn-requester",
+ 2718: "pn-requester2",
+ 2719: "scan-change",
+ 2720: "wkars",
+ 2721: "smart-diagnose",
+ 2722: "proactivesrvr",
+ 2723: "watchdog-nt",
+ 2724: "qotps",
+ 2725: "msolap-ptp2",
+ 2726: "tams",
+ 2727: "mgcp-callagent",
+ 2728: "sqdr",
+ 2729: "tcim-control",
+ 2730: "nec-raidplus",
+ 2731: "fyre-messanger",
+ 2732: "g5m",
+ 2733: "signet-ctf",
+ 2734: "ccs-software",
+ 2735: "netiq-mc",
+ 2736: "radwiz-nms-srv",
+ 2737: "srp-feedback",
+ 2738: "ndl-tcp-ois-gw",
+ 2739: "tn-timing",
+ 2740: "alarm",
+ 2741: "tsb",
+ 2742: "tsb2",
+ 2743: "murx",
+ 2744: "honyaku",
+ 2745: "urbisnet",
+ 2746: "cpudpencap",
+ 2747: "fjippol-swrly",
+ 2748: "fjippol-polsvr",
+ 2749: "fjippol-cnsl",
+ 2750: "fjippol-port1",
+ 2751: "fjippol-port2",
+ 2752: "rsisysaccess",
+ 2753: "de-spot",
+ 2754: "apollo-cc",
+ 2755: "expresspay",
+ 2756: "simplement-tie",
+ 2757: "cnrp",
+ 2758: "apollo-status",
+ 2759: "apollo-gms",
+ 2760: "sabams",
+ 2761: "dicom-iscl",
+ 2762: "dicom-tls",
+ 2763: "desktop-dna",
+ 2764: "data-insurance",
+ 2765: "qip-audup",
+ 2766: "compaq-scp",
+ 2767: "uadtc",
+ 2768: "uacs",
+ 2769: "exce",
+ 2770: "veronica",
+ 2771: "vergencecm",
+ 2772: "auris",
+ 2773: "rbakcup1",
+ 2774: "rbakcup2",
+ 2775: "smpp",
+ 2776: "ridgeway1",
+ 2777: "ridgeway2",
+ 2778: "gwen-sonya",
+ 2779: "lbc-sync",
+ 2780: "lbc-control",
+ 2781: "whosells",
+ 2782: "everydayrc",
+ 2783: "aises",
+ 2784: "www-dev",
+ 2785: "aic-np",
+ 2786: "aic-oncrpc",
+ 2787: "piccolo",
+ 2788: "fryeserv",
+ 2789: "media-agent",
+ 2790: "plgproxy",
+ 2791: "mtport-regist",
+ 2792: "f5-globalsite",
+ 2793: "initlsmsad",
+ 2795: "livestats",
+ 2796: "ac-tech",
+ 2797: "esp-encap",
+ 2798: "tmesis-upshot",
+ 2799: "icon-discover",
+ 2800: "acc-raid",
+ 2801: "igcp",
+ 2802: "veritas-udp1",
+ 2803: "btprjctrl",
+ 2804: "dvr-esm",
+ 2805: "wta-wsp-s",
+ 2806: "cspuni",
+ 2807: "cspmulti",
+ 2808: "j-lan-p",
+ 2809: "corbaloc",
+ 2810: "netsteward",
+ 2811: "gsiftp",
+ 2812: "atmtcp",
+ 2813: "llm-pass",
+ 2814: "llm-csv",
+ 2815: "lbc-measure",
+ 2816: "lbc-watchdog",
+ 2817: "nmsigport",
+ 2818: "rmlnk",
+ 2819: "fc-faultnotify",
+ 2820: "univision",
+ 2821: "vrts-at-port",
+ 2822: "ka0wuc",
+ 2823: "cqg-netlan",
+ 2824: "cqg-netlan-1",
+ 2826: "slc-systemlog",
+ 2827: "slc-ctrlrloops",
+ 2828: "itm-lm",
+ 2829: "silkp1",
+ 2830: "silkp2",
+ 2831: "silkp3",
+ 2832: "silkp4",
+ 2833: "glishd",
+ 2834: "evtp",
+ 2835: "evtp-data",
+ 2836: "catalyst",
+ 2837: "repliweb",
+ 2838: "starbot",
+ 2839: "nmsigport",
+ 2840: "l3-exprt",
+ 2841: "l3-ranger",
+ 2842: "l3-hawk",
+ 2843: "pdnet",
+ 2844: "bpcp-poll",
+ 2845: "bpcp-trap",
+ 2846: "aimpp-hello",
+ 2847: "aimpp-port-req",
+ 2848: "amt-blc-port",
+ 2849: "fxp",
+ 2850: "metaconsole",
+ 2851: "webemshttp",
+ 2852: "bears-01",
+ 2853: "ispipes",
+ 2854: "infomover",
+ 2856: "cesdinv",
+ 2857: "simctlp",
+ 2858: "ecnp",
+ 2859: "activememory",
+ 2860: "dialpad-voice1",
+ 2861: "dialpad-voice2",
+ 2862: "ttg-protocol",
+ 2863: "sonardata",
+ 2864: "astromed-main",
+ 2865: "pit-vpn",
+ 2866: "iwlistener",
+ 2867: "esps-portal",
+ 2868: "npep-messaging",
+ 2869: "icslap",
+ 2870: "daishi",
+ 2871: "msi-selectplay",
+ 2872: "radix",
+ 2874: "dxmessagebase1",
+ 2875: "dxmessagebase2",
+ 2876: "sps-tunnel",
+ 2877: "bluelance",
+ 2878: "aap",
+ 2879: "ucentric-ds",
+ 2880: "synapse",
+ 2881: "ndsp",
+ 2882: "ndtp",
+ 2883: "ndnp",
+ 2884: "flashmsg",
+ 2885: "topflow",
+ 2886: "responselogic",
+ 2887: "aironetddp",
+ 2888: "spcsdlobby",
+ 2889: "rsom",
+ 2890: "cspclmulti",
+ 2891: "cinegrfx-elmd",
+ 2892: "snifferdata",
+ 2893: "vseconnector",
+ 2894: "abacus-remote",
+ 2895: "natuslink",
+ 2896: "ecovisiong6-1",
+ 2897: "citrix-rtmp",
+ 2898: "appliance-cfg",
+ 2899: "powergemplus",
+ 2900: "quicksuite",
+ 2901: "allstorcns",
+ 2902: "netaspi",
+ 2903: "suitcase",
+ 2904: "m2ua",
+ 2906: "caller9",
+ 2907: "webmethods-b2b",
+ 2908: "mao",
+ 2909: "funk-dialout",
+ 2910: "tdaccess",
+ 2911: "blockade",
+ 2912: "epicon",
+ 2913: "boosterware",
+ 2914: "gamelobby",
+ 2915: "tksocket",
+ 2916: "elvin-server",
+ 2917: "elvin-client",
+ 2918: "kastenchasepad",
+ 2919: "roboer",
+ 2920: "roboeda",
+ 2921: "cesdcdman",
+ 2922: "cesdcdtrn",
+ 2923: "wta-wsp-wtp-s",
+ 2924: "precise-vip",
+ 2926: "mobile-file-dl",
+ 2927: "unimobilectrl",
+ 2928: "redstone-cpss",
+ 2929: "amx-webadmin",
+ 2930: "amx-weblinx",
+ 2931: "circle-x",
+ 2932: "incp",
+ 2933: "4-tieropmgw",
+ 2934: "4-tieropmcli",
+ 2935: "qtp",
+ 2936: "otpatch",
+ 2937: "pnaconsult-lm",
+ 2938: "sm-pas-1",
+ 2939: "sm-pas-2",
+ 2940: "sm-pas-3",
+ 2941: "sm-pas-4",
+ 2942: "sm-pas-5",
+ 2943: "ttnrepository",
+ 2944: "megaco-h248",
+ 2945: "h248-binary",
+ 2946: "fjsvmpor",
+ 2947: "gpsd",
+ 2948: "wap-push",
+ 2949: "wap-pushsecure",
+ 2950: "esip",
+ 2951: "ottp",
+ 2952: "mpfwsas",
+ 2953: "ovalarmsrv",
+ 2954: "ovalarmsrv-cmd",
+ 2955: "csnotify",
+ 2956: "ovrimosdbman",
+ 2957: "jmact5",
+ 2958: "jmact6",
+ 2959: "rmopagt",
+ 2960: "dfoxserver",
+ 2961: "boldsoft-lm",
+ 2962: "iph-policy-cli",
+ 2963: "iph-policy-adm",
+ 2964: "bullant-srap",
+ 2965: "bullant-rap",
+ 2966: "idp-infotrieve",
+ 2967: "ssc-agent",
+ 2968: "enpp",
+ 2969: "essp",
+ 2970: "index-net",
+ 2971: "netclip",
+ 2972: "pmsm-webrctl",
+ 2973: "svnetworks",
+ 2974: "signal",
+ 2975: "fjmpcm",
+ 2976: "cns-srv-port",
+ 2977: "ttc-etap-ns",
+ 2978: "ttc-etap-ds",
+ 2979: "h263-video",
+ 2980: "wimd",
+ 2981: "mylxamport",
+ 2982: "iwb-whiteboard",
+ 2983: "netplan",
+ 2984: "hpidsadmin",
+ 2985: "hpidsagent",
+ 2986: "stonefalls",
+ 2987: "identify",
+ 2988: "hippad",
+ 2989: "zarkov",
+ 2990: "boscap",
+ 2991: "wkstn-mon",
+ 2992: "avenyo",
+ 2993: "veritas-vis1",
+ 2994: "veritas-vis2",
+ 2995: "idrs",
+ 2996: "vsixml",
+ 2997: "rebol",
+ 2998: "realsecure",
+ 2999: "remoteware-un",
+ 3000: "hbci",
+ 3002: "exlm-agent",
+ 3003: "cgms",
+ 3004: "csoftragent",
+ 3005: "geniuslm",
+ 3006: "ii-admin",
+ 3007: "lotusmtap",
+ 3008: "midnight-tech",
+ 3009: "pxc-ntfy",
+ 3010: "ping-pong",
+ 3011: "trusted-web",
+ 3012: "twsdss",
+ 3013: "gilatskysurfer",
+ 3014: "broker-service",
+ 3015: "nati-dstp",
+ 3016: "notify-srvr",
+ 3017: "event-listener",
+ 3018: "srvc-registry",
+ 3019: "resource-mgr",
+ 3020: "cifs",
+ 3021: "agriserver",
+ 3022: "csregagent",
+ 3023: "magicnotes",
+ 3024: "nds-sso",
+ 3025: "arepa-raft",
+ 3026: "agri-gateway",
+ 3027: "LiebDevMgmt-C",
+ 3028: "LiebDevMgmt-DM",
+ 3029: "LiebDevMgmt-A",
+ 3030: "arepa-cas",
+ 3031: "eppc",
+ 3032: "redwood-chat",
+ 3033: "pdb",
+ 3034: "osmosis-aeea",
+ 3035: "fjsv-gssagt",
+ 3036: "hagel-dump",
+ 3037: "hp-san-mgmt",
+ 3038: "santak-ups",
+ 3039: "cogitate",
+ 3040: "tomato-springs",
+ 3041: "di-traceware",
+ 3042: "journee",
+ 3043: "brp",
+ 3044: "epp",
+ 3045: "responsenet",
+ 3046: "di-ase",
+ 3047: "hlserver",
+ 3048: "pctrader",
+ 3049: "nsws",
+ 3050: "gds-db",
+ 3051: "galaxy-server",
+ 3052: "apc-3052",
+ 3053: "dsom-server",
+ 3054: "amt-cnf-prot",
+ 3055: "policyserver",
+ 3056: "cdl-server",
+ 3057: "goahead-fldup",
+ 3058: "videobeans",
+ 3059: "qsoft",
+ 3060: "interserver",
+ 3061: "cautcpd",
+ 3062: "ncacn-ip-tcp",
+ 3063: "ncadg-ip-udp",
+ 3064: "rprt",
+ 3065: "slinterbase",
+ 3066: "netattachsdmp",
+ 3067: "fjhpjp",
+ 3068: "ls3bcast",
+ 3069: "ls3",
+ 3070: "mgxswitch",
+ 3072: "csd-monitor",
+ 3073: "vcrp",
+ 3074: "xbox",
+ 3075: "orbix-locator",
+ 3076: "orbix-config",
+ 3077: "orbix-loc-ssl",
+ 3078: "orbix-cfg-ssl",
+ 3079: "lv-frontpanel",
+ 3080: "stm-pproc",
+ 3081: "tl1-lv",
+ 3082: "tl1-raw",
+ 3083: "tl1-telnet",
+ 3084: "itm-mccs",
+ 3085: "pcihreq",
+ 3086: "jdl-dbkitchen",
+ 3087: "asoki-sma",
+ 3088: "xdtp",
+ 3089: "ptk-alink",
+ 3090: "stss",
+ 3091: "1ci-smcs",
+ 3093: "rapidmq-center",
+ 3094: "rapidmq-reg",
+ 3095: "panasas",
+ 3096: "ndl-aps",
+ 3098: "umm-port",
+ 3099: "chmd",
+ 3100: "opcon-xps",
+ 3101: "hp-pxpib",
+ 3102: "slslavemon",
+ 3103: "autocuesmi",
+ 3104: "autocuetime",
+ 3105: "cardbox",
+ 3106: "cardbox-http",
+ 3107: "business",
+ 3108: "geolocate",
+ 3109: "personnel",
+ 3110: "sim-control",
+ 3111: "wsynch",
+ 3112: "ksysguard",
+ 3113: "cs-auth-svr",
+ 3114: "ccmad",
+ 3115: "mctet-master",
+ 3116: "mctet-gateway",
+ 3117: "mctet-jserv",
+ 3118: "pkagent",
+ 3119: "d2000kernel",
+ 3120: "d2000webserver",
+ 3122: "vtr-emulator",
+ 3123: "edix",
+ 3124: "beacon-port",
+ 3125: "a13-an",
+ 3127: "ctx-bridge",
+ 3128: "ndl-aas",
+ 3129: "netport-id",
+ 3130: "icpv2",
+ 3131: "netbookmark",
+ 3132: "ms-rule-engine",
+ 3133: "prism-deploy",
+ 3134: "ecp",
+ 3135: "peerbook-port",
+ 3136: "grubd",
+ 3137: "rtnt-1",
+ 3138: "rtnt-2",
+ 3139: "incognitorv",
+ 3140: "ariliamulti",
+ 3141: "vmodem",
+ 3142: "rdc-wh-eos",
+ 3143: "seaview",
+ 3144: "tarantella",
+ 3145: "csi-lfap",
+ 3146: "bears-02",
+ 3147: "rfio",
+ 3148: "nm-game-admin",
+ 3149: "nm-game-server",
+ 3150: "nm-asses-admin",
+ 3151: "nm-assessor",
+ 3152: "feitianrockey",
+ 3153: "s8-client-port",
+ 3154: "ccmrmi",
+ 3155: "jpegmpeg",
+ 3156: "indura",
+ 3157: "e3consultants",
+ 3158: "stvp",
+ 3159: "navegaweb-port",
+ 3160: "tip-app-server",
+ 3161: "doc1lm",
+ 3162: "sflm",
+ 3163: "res-sap",
+ 3164: "imprs",
+ 3165: "newgenpay",
+ 3166: "sossecollector",
+ 3167: "nowcontact",
+ 3168: "poweronnud",
+ 3169: "serverview-as",
+ 3170: "serverview-asn",
+ 3171: "serverview-gf",
+ 3172: "serverview-rm",
+ 3173: "serverview-icc",
+ 3174: "armi-server",
+ 3175: "t1-e1-over-ip",
+ 3176: "ars-master",
+ 3177: "phonex-port",
+ 3178: "radclientport",
+ 3179: "h2gf-w-2m",
+ 3180: "mc-brk-srv",
+ 3181: "bmcpatrolagent",
+ 3182: "bmcpatrolrnvu",
+ 3183: "cops-tls",
+ 3184: "apogeex-port",
+ 3185: "smpppd",
+ 3186: "iiw-port",
+ 3187: "odi-port",
+ 3188: "brcm-comm-port",
+ 3189: "pcle-infex",
+ 3190: "csvr-proxy",
+ 3191: "csvr-sslproxy",
+ 3192: "firemonrcc",
+ 3193: "spandataport",
+ 3194: "magbind",
+ 3195: "ncu-1",
+ 3196: "ncu-2",
+ 3197: "embrace-dp-s",
+ 3198: "embrace-dp-c",
+ 3199: "dmod-workspace",
+ 3200: "tick-port",
+ 3201: "cpq-tasksmart",
+ 3202: "intraintra",
+ 3203: "netwatcher-mon",
+ 3204: "netwatcher-db",
+ 3205: "isns",
+ 3206: "ironmail",
+ 3207: "vx-auth-port",
+ 3208: "pfu-prcallback",
+ 3209: "netwkpathengine",
+ 3210: "flamenco-proxy",
+ 3211: "avsecuremgmt",
+ 3212: "surveyinst",
+ 3213: "neon24x7",
+ 3214: "jmq-daemon-1",
+ 3215: "jmq-daemon-2",
+ 3216: "ferrari-foam",
+ 3217: "unite",
+ 3218: "smartpackets",
+ 3219: "wms-messenger",
+ 3220: "xnm-ssl",
+ 3221: "xnm-clear-text",
+ 3222: "glbp",
+ 3223: "digivote",
+ 3224: "aes-discovery",
+ 3225: "fcip-port",
+ 3226: "isi-irp",
+ 3227: "dwnmshttp",
+ 3228: "dwmsgserver",
+ 3229: "global-cd-port",
+ 3230: "sftdst-port",
+ 3231: "vidigo",
+ 3232: "mdtp",
+ 3233: "whisker",
+ 3234: "alchemy",
+ 3235: "mdap-port",
+ 3236: "apparenet-ts",
+ 3237: "apparenet-tps",
+ 3238: "apparenet-as",
+ 3239: "apparenet-ui",
+ 3240: "triomotion",
+ 3241: "sysorb",
+ 3242: "sdp-id-port",
+ 3243: "timelot",
+ 3244: "onesaf",
+ 3245: "vieo-fe",
+ 3246: "dvt-system",
+ 3247: "dvt-data",
+ 3248: "procos-lm",
+ 3249: "ssp",
+ 3250: "hicp",
+ 3251: "sysscanner",
+ 3252: "dhe",
+ 3253: "pda-data",
+ 3254: "pda-sys",
+ 3255: "semaphore",
+ 3256: "cpqrpm-agent",
+ 3257: "cpqrpm-server",
+ 3258: "ivecon-port",
+ 3259: "epncdp2",
+ 3260: "iscsi-target",
+ 3261: "winshadow",
+ 3262: "necp",
+ 3263: "ecolor-imager",
+ 3264: "ccmail",
+ 3265: "altav-tunnel",
+ 3266: "ns-cfg-server",
+ 3267: "ibm-dial-out",
+ 3268: "msft-gc",
+ 3269: "msft-gc-ssl",
+ 3270: "verismart",
+ 3271: "csoft-prev",
+ 3272: "user-manager",
+ 3273: "sxmp",
+ 3274: "ordinox-server",
+ 3275: "samd",
+ 3276: "maxim-asics",
+ 3277: "awg-proxy",
+ 3278: "lkcmserver",
+ 3279: "admind",
+ 3280: "vs-server",
+ 3281: "sysopt",
+ 3282: "datusorb",
+ 3283: "Apple Remote Desktop (Net Assistant)",
+ 3284: "4talk",
+ 3285: "plato",
+ 3286: "e-net",
+ 3287: "directvdata",
+ 3288: "cops",
+ 3289: "enpc",
+ 3290: "caps-lm",
+ 3291: "sah-lm",
+ 3292: "cart-o-rama",
+ 3293: "fg-fps",
+ 3294: "fg-gip",
+ 3295: "dyniplookup",
+ 3296: "rib-slm",
+ 3297: "cytel-lm",
+ 3298: "deskview",
+ 3299: "pdrncs",
+ 3302: "mcs-fastmail",
+ 3303: "opsession-clnt",
+ 3304: "opsession-srvr",
+ 3305: "odette-ftp",
+ 3306: "mysql",
+ 3307: "opsession-prxy",
+ 3308: "tns-server",
+ 3309: "tns-adv",
+ 3310: "dyna-access",
+ 3311: "mcns-tel-ret",
+ 3312: "appman-server",
+ 3313: "uorb",
+ 3314: "uohost",
+ 3315: "cdid",
+ 3316: "aicc-cmi",
+ 3317: "vsaiport",
+ 3318: "ssrip",
+ 3319: "sdt-lmd",
+ 3320: "officelink2000",
+ 3321: "vnsstr",
+ 3326: "sftu",
+ 3327: "bbars",
+ 3328: "egptlm",
+ 3329: "hp-device-disc",
+ 3330: "mcs-calypsoicf",
+ 3331: "mcs-messaging",
+ 3332: "mcs-mailsvr",
+ 3333: "dec-notes",
+ 3334: "directv-web",
+ 3335: "directv-soft",
+ 3336: "directv-tick",
+ 3337: "directv-catlg",
+ 3338: "anet-b",
+ 3339: "anet-l",
+ 3340: "anet-m",
+ 3341: "anet-h",
+ 3342: "webtie",
+ 3343: "ms-cluster-net",
+ 3344: "bnt-manager",
+ 3345: "influence",
+ 3346: "trnsprntproxy",
+ 3347: "phoenix-rpc",
+ 3348: "pangolin-laser",
+ 3349: "chevinservices",
+ 3350: "findviatv",
+ 3351: "btrieve",
+ 3352: "ssql",
+ 3353: "fatpipe",
+ 3354: "suitjd",
+ 3355: "ordinox-dbase",
+ 3356: "upnotifyps",
+ 3357: "adtech-test",
+ 3358: "mpsysrmsvr",
+ 3359: "wg-netforce",
+ 3360: "kv-server",
+ 3361: "kv-agent",
+ 3362: "dj-ilm",
+ 3363: "nati-vi-server",
+ 3364: "creativeserver",
+ 3365: "contentserver",
+ 3366: "creativepartnr",
+ 3372: "tip2",
+ 3373: "lavenir-lm",
+ 3374: "cluster-disc",
+ 3375: "vsnm-agent",
+ 3376: "cdbroker",
+ 3377: "cogsys-lm",
+ 3378: "wsicopy",
+ 3379: "socorfs",
+ 3380: "sns-channels",
+ 3381: "geneous",
+ 3382: "fujitsu-neat",
+ 3383: "esp-lm",
+ 3384: "hp-clic",
+ 3385: "qnxnetman",
+ 3386: "gprs-sig",
+ 3387: "backroomnet",
+ 3388: "cbserver",
+ 3389: "ms-wbt-server",
+ 3390: "dsc",
+ 3391: "savant",
+ 3392: "efi-lm",
+ 3393: "d2k-tapestry1",
+ 3394: "d2k-tapestry2",
+ 3395: "dyna-lm",
+ 3396: "printer-agent",
+ 3397: "cloanto-lm",
+ 3398: "mercantile",
+ 3399: "csms",
+ 3400: "csms2",
+ 3401: "filecast",
+ 3402: "fxaengine-net",
+ 3405: "nokia-ann-ch1",
+ 3406: "nokia-ann-ch2",
+ 3407: "ldap-admin",
+ 3408: "BESApi",
+ 3409: "networklens",
+ 3410: "networklenss",
+ 3411: "biolink-auth",
+ 3412: "xmlblaster",
+ 3413: "svnet",
+ 3414: "wip-port",
+ 3415: "bcinameservice",
+ 3416: "commandport",
+ 3417: "csvr",
+ 3418: "rnmap",
+ 3419: "softaudit",
+ 3420: "ifcp-port",
+ 3421: "bmap",
+ 3422: "rusb-sys-port",
+ 3423: "xtrm",
+ 3424: "xtrms",
+ 3425: "agps-port",
+ 3426: "arkivio",
+ 3427: "websphere-snmp",
+ 3428: "twcss",
+ 3429: "gcsp",
+ 3430: "ssdispatch",
+ 3431: "ndl-als",
+ 3432: "osdcp",
+ 3433: "opnet-smp",
+ 3434: "opencm",
+ 3435: "pacom",
+ 3436: "gc-config",
+ 3437: "autocueds",
+ 3438: "spiral-admin",
+ 3439: "hri-port",
+ 3440: "ans-console",
+ 3441: "connect-client",
+ 3442: "connect-server",
+ 3443: "ov-nnm-websrv",
+ 3444: "denali-server",
+ 3445: "monp",
+ 3446: "3comfaxrpc",
+ 3447: "directnet",
+ 3448: "dnc-port",
+ 3449: "hotu-chat",
+ 3450: "castorproxy",
+ 3451: "asam",
+ 3452: "sabp-signal",
+ 3453: "pscupd",
+ 3454: "mira",
+ 3455: "prsvp",
+ 3456: "vat",
+ 3457: "vat-control",
+ 3458: "d3winosfi",
+ 3459: "integral",
+ 3460: "edm-manager",
+ 3461: "edm-stager",
+ 3462: "edm-std-notify",
+ 3463: "edm-adm-notify",
+ 3464: "edm-mgr-sync",
+ 3465: "edm-mgr-cntrl",
+ 3466: "workflow",
+ 3467: "rcst",
+ 3468: "ttcmremotectrl",
+ 3469: "pluribus",
+ 3470: "jt400",
+ 3471: "jt400-ssl",
+ 3472: "jaugsremotec-1",
+ 3473: "jaugsremotec-2",
+ 3474: "ttntspauto",
+ 3475: "genisar-port",
+ 3476: "nppmp",
+ 3477: "ecomm",
+ 3478: "stun",
+ 3479: "twrpc",
+ 3480: "plethora",
+ 3481: "cleanerliverc",
+ 3482: "vulture",
+ 3483: "slim-devices",
+ 3484: "gbs-stp",
+ 3485: "celatalk",
+ 3486: "ifsf-hb-port",
+ 3487: "ltcudp",
+ 3488: "fs-rh-srv",
+ 3489: "dtp-dia",
+ 3490: "colubris",
+ 3491: "swr-port",
+ 3492: "tvdumtray-port",
+ 3493: "nut",
+ 3494: "ibm3494",
+ 3495: "seclayer-tcp",
+ 3496: "seclayer-tls",
+ 3497: "ipether232port",
+ 3498: "dashpas-port",
+ 3499: "sccip-media",
+ 3500: "rtmp-port",
+ 3501: "isoft-p2p",
+ 3502: "avinstalldisc",
+ 3503: "lsp-ping",
+ 3504: "ironstorm",
+ 3505: "ccmcomm",
+ 3506: "apc-3506",
+ 3507: "nesh-broker",
+ 3508: "interactionweb",
+ 3509: "vt-ssl",
+ 3510: "xss-port",
+ 3511: "webmail-2",
+ 3512: "aztec",
+ 3513: "arcpd",
+ 3514: "must-p2p",
+ 3515: "must-backplane",
+ 3516: "smartcard-port",
+ 3517: "802-11-iapp",
+ 3518: "artifact-msg",
+ 3519: "galileo",
+ 3520: "galileolog",
+ 3521: "mc3ss",
+ 3522: "nssocketport",
+ 3523: "odeumservlink",
+ 3524: "ecmport",
+ 3525: "eisport",
+ 3526: "starquiz-port",
+ 3527: "beserver-msg-q",
+ 3528: "jboss-iiop",
+ 3529: "jboss-iiop-ssl",
+ 3530: "gf",
+ 3531: "joltid",
+ 3532: "raven-rmp",
+ 3533: "raven-rdp",
+ 3534: "urld-port",
+ 3535: "ms-la",
+ 3536: "snac",
+ 3537: "ni-visa-remote",
+ 3538: "ibm-diradm",
+ 3539: "ibm-diradm-ssl",
+ 3540: "pnrp-port",
+ 3541: "voispeed-port",
+ 3542: "hacl-monitor",
+ 3543: "qftest-lookup",
+ 3544: "teredo",
+ 3545: "camac",
+ 3547: "symantec-sim",
+ 3548: "interworld",
+ 3549: "tellumat-nms",
+ 3550: "ssmpp",
+ 3551: "apcupsd",
+ 3552: "taserver",
+ 3553: "rbr-discovery",
+ 3554: "questnotify",
+ 3555: "razor",
+ 3556: "sky-transport",
+ 3557: "personalos-001",
+ 3558: "mcp-port",
+ 3559: "cctv-port",
+ 3560: "iniserve-port",
+ 3561: "bmc-onekey",
+ 3562: "sdbproxy",
+ 3563: "watcomdebug",
+ 3564: "esimport",
+ 3567: "dof-eps",
+ 3568: "dof-tunnel-sec",
+ 3569: "mbg-ctrl",
+ 3570: "mccwebsvr-port",
+ 3571: "megardsvr-port",
+ 3572: "megaregsvrport",
+ 3573: "tag-ups-1",
+ 3574: "dmaf-caster",
+ 3575: "ccm-port",
+ 3576: "cmc-port",
+ 3577: "config-port",
+ 3578: "data-port",
+ 3579: "ttat3lb",
+ 3580: "nati-svrloc",
+ 3581: "kfxaclicensing",
+ 3582: "press",
+ 3583: "canex-watch",
+ 3584: "u-dbap",
+ 3585: "emprise-lls",
+ 3586: "emprise-lsc",
+ 3587: "p2pgroup",
+ 3588: "sentinel",
+ 3589: "isomair",
+ 3590: "wv-csp-sms",
+ 3591: "gtrack-server",
+ 3592: "gtrack-ne",
+ 3593: "bpmd",
+ 3594: "mediaspace",
+ 3595: "shareapp",
+ 3596: "iw-mmogame",
+ 3597: "a14",
+ 3598: "a15",
+ 3599: "quasar-server",
+ 3600: "trap-daemon",
+ 3601: "visinet-gui",
+ 3602: "infiniswitchcl",
+ 3603: "int-rcv-cntrl",
+ 3604: "bmc-jmx-port",
+ 3605: "comcam-io",
+ 3606: "splitlock",
+ 3607: "precise-i3",
+ 3608: "trendchip-dcp",
+ 3609: "cpdi-pidas-cm",
+ 3610: "echonet",
+ 3611: "six-degrees",
+ 3612: "hp-dataprotect",
+ 3613: "alaris-disc",
+ 3614: "sigma-port",
+ 3615: "start-network",
+ 3616: "cd3o-protocol",
+ 3617: "sharp-server",
+ 3618: "aairnet-1",
+ 3619: "aairnet-2",
+ 3620: "ep-pcp",
+ 3621: "ep-nsp",
+ 3622: "ff-lr-port",
+ 3623: "haipe-discover",
+ 3624: "dist-upgrade",
+ 3625: "volley",
+ 3626: "bvcdaemon-port",
+ 3627: "jamserverport",
+ 3628: "ept-machine",
+ 3629: "escvpnet",
+ 3630: "cs-remote-db",
+ 3631: "cs-services",
+ 3632: "distcc",
+ 3633: "wacp",
+ 3634: "hlibmgr",
+ 3635: "sdo",
+ 3636: "servistaitsm",
+ 3637: "scservp",
+ 3638: "ehp-backup",
+ 3639: "xap-ha",
+ 3640: "netplay-port1",
+ 3641: "netplay-port2",
+ 3642: "juxml-port",
+ 3643: "audiojuggler",
+ 3644: "ssowatch",
+ 3645: "cyc",
+ 3646: "xss-srv-port",
+ 3647: "splitlock-gw",
+ 3648: "fjcp",
+ 3649: "nmmp",
+ 3650: "prismiq-plugin",
+ 3651: "xrpc-registry",
+ 3652: "vxcrnbuport",
+ 3653: "tsp",
+ 3654: "vaprtm",
+ 3655: "abatemgr",
+ 3656: "abatjss",
+ 3657: "immedianet-bcn",
+ 3658: "ps-ams",
+ 3659: "apple-sasl",
+ 3660: "can-nds-ssl",
+ 3661: "can-ferret-ssl",
+ 3662: "pserver",
+ 3663: "dtp",
+ 3664: "ups-engine",
+ 3665: "ent-engine",
+ 3666: "eserver-pap",
+ 3667: "infoexch",
+ 3668: "dell-rm-port",
+ 3669: "casanswmgmt",
+ 3670: "smile",
+ 3671: "efcp",
+ 3672: "lispworks-orb",
+ 3673: "mediavault-gui",
+ 3674: "wininstall-ipc",
+ 3675: "calltrax",
+ 3676: "va-pacbase",
+ 3677: "roverlog",
+ 3678: "ipr-dglt",
+ 3679: "Escale (Newton Dock)",
+ 3680: "npds-tracker",
+ 3681: "bts-x73",
+ 3682: "cas-mapi",
+ 3683: "bmc-ea",
+ 3684: "faxstfx-port",
+ 3685: "dsx-agent",
+ 3686: "tnmpv2",
+ 3687: "simple-push",
+ 3688: "simple-push-s",
+ 3689: "daap",
+ 3690: "svn",
+ 3691: "magaya-network",
+ 3692: "intelsync",
+ 3695: "bmc-data-coll",
+ 3696: "telnetcpcd",
+ 3697: "nw-license",
+ 3698: "sagectlpanel",
+ 3699: "kpn-icw",
+ 3700: "lrs-paging",
+ 3701: "netcelera",
+ 3702: "ws-discovery",
+ 3703: "adobeserver-3",
+ 3704: "adobeserver-4",
+ 3705: "adobeserver-5",
+ 3706: "rt-event",
+ 3707: "rt-event-s",
+ 3708: "sun-as-iiops",
+ 3709: "ca-idms",
+ 3710: "portgate-auth",
+ 3711: "edb-server2",
+ 3712: "sentinel-ent",
+ 3713: "tftps",
+ 3714: "delos-dms",
+ 3715: "anoto-rendezv",
+ 3716: "wv-csp-sms-cir",
+ 3717: "wv-csp-udp-cir",
+ 3718: "opus-services",
+ 3719: "itelserverport",
+ 3720: "ufastro-instr",
+ 3721: "xsync",
+ 3722: "xserveraid",
+ 3723: "sychrond",
+ 3724: "blizwow",
+ 3725: "na-er-tip",
+ 3726: "array-manager",
+ 3727: "e-mdu",
+ 3728: "e-woa",
+ 3729: "fksp-audit",
+ 3730: "client-ctrl",
+ 3731: "smap",
+ 3732: "m-wnn",
+ 3733: "multip-msg",
+ 3734: "synel-data",
+ 3735: "pwdis",
+ 3736: "rs-rmi",
+ 3738: "versatalk",
+ 3739: "launchbird-lm",
+ 3740: "heartbeat",
+ 3741: "wysdma",
+ 3742: "cst-port",
+ 3743: "ipcs-command",
+ 3744: "sasg",
+ 3745: "gw-call-port",
+ 3746: "linktest",
+ 3747: "linktest-s",
+ 3748: "webdata",
+ 3749: "cimtrak",
+ 3750: "cbos-ip-port",
+ 3751: "gprs-cube",
+ 3752: "vipremoteagent",
+ 3753: "nattyserver",
+ 3754: "timestenbroker",
+ 3755: "sas-remote-hlp",
+ 3756: "canon-capt",
+ 3757: "grf-port",
+ 3758: "apw-registry",
+ 3759: "exapt-lmgr",
+ 3760: "adtempusclient",
+ 3761: "gsakmp",
+ 3762: "gbs-smp",
+ 3763: "xo-wave",
+ 3764: "mni-prot-rout",
+ 3765: "rtraceroute",
+ 3767: "listmgr-port",
+ 3768: "rblcheckd",
+ 3769: "haipe-otnk",
+ 3770: "cindycollab",
+ 3771: "paging-port",
+ 3772: "ctp",
+ 3773: "ctdhercules",
+ 3774: "zicom",
+ 3775: "ispmmgr",
+ 3776: "dvcprov-port",
+ 3777: "jibe-eb",
+ 3778: "c-h-it-port",
+ 3779: "cognima",
+ 3780: "nnp",
+ 3781: "abcvoice-port",
+ 3782: "iso-tp0s",
+ 3783: "bim-pem",
+ 3784: "bfd-control",
+ 3785: "bfd-echo",
+ 3786: "upstriggervsw",
+ 3787: "fintrx",
+ 3788: "isrp-port",
+ 3789: "remotedeploy",
+ 3790: "quickbooksrds",
+ 3791: "tvnetworkvideo",
+ 3792: "sitewatch",
+ 3793: "dcsoftware",
+ 3794: "jaus",
+ 3795: "myblast",
+ 3796: "spw-dialer",
+ 3797: "idps",
+ 3798: "minilock",
+ 3799: "radius-dynauth",
+ 3800: "pwgpsi",
+ 3801: "ibm-mgr",
+ 3802: "vhd",
+ 3803: "soniqsync",
+ 3804: "iqnet-port",
+ 3805: "tcpdataserver",
+ 3806: "wsmlb",
+ 3807: "spugna",
+ 3808: "sun-as-iiops-ca",
+ 3809: "apocd",
+ 3810: "wlanauth",
+ 3811: "amp",
+ 3812: "neto-wol-server",
+ 3813: "rap-ip",
+ 3814: "neto-dcs",
+ 3815: "lansurveyorxml",
+ 3816: "sunlps-http",
+ 3817: "tapeware",
+ 3818: "crinis-hb",
+ 3819: "epl-slp",
+ 3820: "scp",
+ 3821: "pmcp",
+ 3822: "acp-discovery",
+ 3823: "acp-conduit",
+ 3824: "acp-policy",
+ 3825: "ffserver",
+ 3826: "warmux",
+ 3827: "netmpi",
+ 3828: "neteh",
+ 3829: "neteh-ext",
+ 3830: "cernsysmgmtagt",
+ 3831: "dvapps",
+ 3832: "xxnetserver",
+ 3833: "aipn-auth",
+ 3834: "spectardata",
+ 3835: "spectardb",
+ 3836: "markem-dcp",
+ 3837: "mkm-discovery",
+ 3838: "sos",
+ 3839: "amx-rms",
+ 3840: "flirtmitmir",
+ 3842: "nhci",
+ 3843: "quest-agent",
+ 3844: "rnm",
+ 3845: "v-one-spp",
+ 3846: "an-pcp",
+ 3847: "msfw-control",
+ 3848: "item",
+ 3849: "spw-dnspreload",
+ 3850: "qtms-bootstrap",
+ 3851: "spectraport",
+ 3852: "sse-app-config",
+ 3853: "sscan",
+ 3854: "stryker-com",
+ 3855: "opentrac",
+ 3856: "informer",
+ 3857: "trap-port",
+ 3858: "trap-port-mom",
+ 3859: "nav-port",
+ 3860: "sasp",
+ 3861: "winshadow-hd",
+ 3862: "giga-pocket",
+ 3863: "asap-udp",
+ 3865: "xpl",
+ 3866: "dzdaemon",
+ 3867: "dzoglserver",
+ 3869: "ovsam-mgmt",
+ 3870: "ovsam-d-agent",
+ 3871: "avocent-adsap",
+ 3872: "oem-agent",
+ 3873: "fagordnc",
+ 3874: "sixxsconfig",
+ 3875: "pnbscada",
+ 3876: "dl-agent",
+ 3877: "xmpcr-interface",
+ 3878: "fotogcad",
+ 3879: "appss-lm",
+ 3880: "igrs",
+ 3881: "idac",
+ 3882: "msdts1",
+ 3883: "vrpn",
+ 3884: "softrack-meter",
+ 3885: "topflow-ssl",
+ 3886: "nei-management",
+ 3887: "ciphire-data",
+ 3888: "ciphire-serv",
+ 3889: "dandv-tester",
+ 3890: "ndsconnect",
+ 3891: "rtc-pm-port",
+ 3892: "pcc-image-port",
+ 3893: "cgi-starapi",
+ 3894: "syam-agent",
+ 3895: "syam-smc",
+ 3896: "sdo-tls",
+ 3897: "sdo-ssh",
+ 3898: "senip",
+ 3899: "itv-control",
+ 3900: "udt-os",
+ 3901: "nimsh",
+ 3902: "nimaux",
+ 3903: "charsetmgr",
+ 3904: "omnilink-port",
+ 3905: "mupdate",
+ 3906: "topovista-data",
+ 3907: "imoguia-port",
+ 3908: "hppronetman",
+ 3909: "surfcontrolcpa",
+ 3910: "prnrequest",
+ 3911: "prnstatus",
+ 3912: "gbmt-stars",
+ 3913: "listcrt-port",
+ 3914: "listcrt-port-2",
+ 3915: "agcat",
+ 3916: "wysdmc",
+ 3917: "aftmux",
+ 3918: "pktcablemmcops",
+ 3919: "hyperip",
+ 3920: "exasoftport1",
+ 3921: "herodotus-net",
+ 3922: "sor-update",
+ 3923: "symb-sb-port",
+ 3924: "mpl-gprs-port",
+ 3925: "zmp",
+ 3926: "winport",
+ 3927: "natdataservice",
+ 3928: "netboot-pxe",
+ 3929: "smauth-port",
+ 3930: "syam-webserver",
+ 3931: "msr-plugin-port",
+ 3932: "dyn-site",
+ 3933: "plbserve-port",
+ 3934: "sunfm-port",
+ 3935: "sdp-portmapper",
+ 3936: "mailprox",
+ 3937: "dvbservdsc",
+ 3938: "dbcontrol-agent",
+ 3939: "aamp",
+ 3940: "xecp-node",
+ 3941: "homeportal-web",
+ 3942: "srdp",
+ 3943: "tig",
+ 3944: "sops",
+ 3945: "emcads",
+ 3946: "backupedge",
+ 3947: "ccp",
+ 3948: "apdap",
+ 3949: "drip",
+ 3950: "namemunge",
+ 3951: "pwgippfax",
+ 3952: "i3-sessionmgr",
+ 3953: "xmlink-connect",
+ 3954: "adrep",
+ 3955: "p2pcommunity",
+ 3956: "gvcp",
+ 3957: "mqe-broker",
+ 3958: "mqe-agent",
+ 3959: "treehopper",
+ 3960: "bess",
+ 3961: "proaxess",
+ 3962: "sbi-agent",
+ 3963: "thrp",
+ 3964: "sasggprs",
+ 3965: "ati-ip-to-ncpe",
+ 3966: "bflckmgr",
+ 3967: "ppsms",
+ 3968: "ianywhere-dbns",
+ 3969: "landmarks",
+ 3970: "lanrevagent",
+ 3971: "lanrevserver",
+ 3972: "iconp",
+ 3973: "progistics",
+ 3974: "citysearch",
+ 3975: "airshot",
+ 3976: "opswagent",
+ 3977: "opswmanager",
+ 3978: "secure-cfg-svr",
+ 3979: "smwan",
+ 3980: "acms",
+ 3981: "starfish",
+ 3982: "eis",
+ 3983: "eisp",
+ 3984: "mapper-nodemgr",
+ 3985: "mapper-mapethd",
+ 3986: "mapper-ws-ethd",
+ 3987: "centerline",
+ 3988: "dcs-config",
+ 3989: "bv-queryengine",
+ 3990: "bv-is",
+ 3991: "bv-smcsrv",
+ 3992: "bv-ds",
+ 3993: "bv-agent",
+ 3995: "iss-mgmt-ssl",
+ 3996: "abcsoftware",
+ 3997: "agentsease-db",
+ 3998: "dnx",
+ 3999: "nvcnet",
+ 4000: "terabase",
+ 4001: "newoak",
+ 4002: "pxc-spvr-ft",
+ 4003: "pxc-splr-ft",
+ 4004: "pxc-roid",
+ 4005: "pxc-pin",
+ 4006: "pxc-spvr",
+ 4007: "pxc-splr",
+ 4008: "netcheque",
+ 4009: "chimera-hwm",
+ 4010: "samsung-unidex",
+ 4011: "altserviceboot",
+ 4012: "pda-gate",
+ 4013: "acl-manager",
+ 4014: "taiclock",
+ 4015: "talarian-mcast1",
+ 4016: "talarian-mcast2",
+ 4017: "talarian-mcast3",
+ 4018: "talarian-mcast4",
+ 4019: "talarian-mcast5",
+ 4020: "trap",
+ 4021: "nexus-portal",
+ 4022: "dnox",
+ 4023: "esnm-zoning",
+ 4024: "tnp1-port",
+ 4025: "partimage",
+ 4026: "as-debug",
+ 4027: "bxp",
+ 4028: "dtserver-port",
+ 4029: "ip-qsig",
+ 4030: "jdmn-port",
+ 4031: "suucp",
+ 4032: "vrts-auth-port",
+ 4033: "sanavigator",
+ 4034: "ubxd",
+ 4035: "wap-push-http",
+ 4036: "wap-push-https",
+ 4037: "ravehd",
+ 4038: "fazzt-ptp",
+ 4039: "fazzt-admin",
+ 4040: "yo-main",
+ 4041: "houston",
+ 4042: "ldxp",
+ 4043: "nirp",
+ 4044: "ltp",
+ 4045: "npp",
+ 4046: "acp-proto",
+ 4047: "ctp-state",
+ 4049: "wafs",
+ 4050: "cisco-wafs",
+ 4051: "cppdp",
+ 4052: "interact",
+ 4053: "ccu-comm-1",
+ 4054: "ccu-comm-2",
+ 4055: "ccu-comm-3",
+ 4056: "lms",
+ 4057: "wfm",
+ 4058: "kingfisher",
+ 4059: "dlms-cosem",
+ 4060: "dsmeter-iatc",
+ 4061: "ice-location",
+ 4062: "ice-slocation",
+ 4063: "ice-router",
+ 4064: "ice-srouter",
+ 4065: "avanti-cdp",
+ 4066: "pmas",
+ 4067: "idp",
+ 4068: "ipfltbcst",
+ 4069: "minger",
+ 4070: "tripe",
+ 4071: "aibkup",
+ 4072: "zieto-sock",
+ 4073: "iRAPP",
+ 4074: "cequint-cityid",
+ 4075: "perimlan",
+ 4076: "seraph",
+ 4077: "ascomalarm",
+ 4079: "santools",
+ 4080: "lorica-in",
+ 4081: "lorica-in-sec",
+ 4082: "lorica-out",
+ 4083: "lorica-out-sec",
+ 4084: "fortisphere-vm",
+ 4086: "ftsync",
+ 4089: "opencore",
+ 4090: "omasgport",
+ 4091: "ewinstaller",
+ 4092: "ewdgs",
+ 4093: "pvxpluscs",
+ 4094: "sysrqd",
+ 4095: "xtgui",
+ 4096: "bre",
+ 4097: "patrolview",
+ 4098: "drmsfsd",
+ 4099: "dpcp",
+ 4100: "igo-incognito",
+ 4101: "brlp-0",
+ 4102: "brlp-1",
+ 4103: "brlp-2",
+ 4104: "brlp-3",
+ 4105: "shofar",
+ 4106: "synchronite",
+ 4107: "j-ac",
+ 4108: "accel",
+ 4109: "izm",
+ 4110: "g2tag",
+ 4111: "xgrid",
+ 4112: "apple-vpns-rp",
+ 4113: "aipn-reg",
+ 4114: "jomamqmonitor",
+ 4115: "cds",
+ 4116: "smartcard-tls",
+ 4117: "hillrserv",
+ 4118: "netscript",
+ 4119: "assuria-slm",
+ 4121: "e-builder",
+ 4122: "fprams",
+ 4123: "z-wave",
+ 4124: "tigv2",
+ 4125: "opsview-envoy",
+ 4126: "ddrepl",
+ 4127: "unikeypro",
+ 4128: "nufw",
+ 4129: "nuauth",
+ 4130: "fronet",
+ 4131: "stars",
+ 4132: "nuts-dem",
+ 4133: "nuts-bootp",
+ 4134: "nifty-hmi",
+ 4135: "cl-db-attach",
+ 4136: "cl-db-request",
+ 4137: "cl-db-remote",
+ 4138: "nettest",
+ 4139: "thrtx",
+ 4140: "cedros-fds",
+ 4141: "oirtgsvc",
+ 4142: "oidocsvc",
+ 4143: "oidsr",
+ 4145: "vvr-control",
+ 4146: "tgcconnect",
+ 4147: "vrxpservman",
+ 4148: "hhb-handheld",
+ 4149: "agslb",
+ 4150: "PowerAlert-nsa",
+ 4151: "menandmice-noh",
+ 4152: "idig-mux",
+ 4153: "mbl-battd",
+ 4154: "atlinks",
+ 4155: "bzr",
+ 4156: "stat-results",
+ 4157: "stat-scanner",
+ 4158: "stat-cc",
+ 4159: "nss",
+ 4160: "jini-discovery",
+ 4161: "omscontact",
+ 4162: "omstopology",
+ 4163: "silverpeakpeer",
+ 4164: "silverpeakcomm",
+ 4165: "altcp",
+ 4166: "joost",
+ 4167: "ddgn",
+ 4168: "pslicser",
+ 4169: "iadt-disc",
+ 4172: "pcoip",
+ 4173: "mma-discovery",
+ 4174: "sm-disc",
+ 4177: "wello",
+ 4178: "storman",
+ 4179: "MaxumSP",
+ 4180: "httpx",
+ 4181: "macbak",
+ 4182: "pcptcpservice",
+ 4183: "cyborgnet",
+ 4184: "universe-suite",
+ 4185: "wcpp",
+ 4188: "vatata",
+ 4191: "dsmipv6",
+ 4192: "azeti-bd",
+ 4197: "hctl",
+ 4199: "eims-admin",
+ 4300: "corelccam",
+ 4301: "d-data",
+ 4302: "d-data-control",
+ 4303: "srcp",
+ 4304: "owserver",
+ 4305: "batman",
+ 4306: "pinghgl",
+ 4307: "trueconf",
+ 4308: "compx-lockview",
+ 4309: "dserver",
+ 4310: "mirrtex",
+ 4320: "fdt-rcatp",
+ 4321: "rwhois",
+ 4322: "trim-event",
+ 4323: "trim-ice",
+ 4325: "geognosisman",
+ 4326: "geognosis",
+ 4327: "jaxer-web",
+ 4328: "jaxer-manager",
+ 4333: "ahsp",
+ 4340: "gaia",
+ 4341: "lisp-data",
+ 4342: "lisp-control",
+ 4343: "unicall",
+ 4344: "vinainstall",
+ 4345: "m4-network-as",
+ 4346: "elanlm",
+ 4347: "lansurveyor",
+ 4348: "itose",
+ 4349: "fsportmap",
+ 4350: "net-device",
+ 4351: "plcy-net-svcs",
+ 4352: "pjlink",
+ 4353: "f5-iquery",
+ 4354: "qsnet-trans",
+ 4355: "qsnet-workst",
+ 4356: "qsnet-assist",
+ 4357: "qsnet-cond",
+ 4358: "qsnet-nucl",
+ 4359: "omabcastltkm",
+ 4361: "nacnl",
+ 4362: "afore-vdp-disc",
+ 4366: "shadowstream",
+ 4368: "wxbrief",
+ 4369: "epmd",
+ 4370: "elpro-tunnel",
+ 4371: "l2c-disc",
+ 4372: "l2c-data",
+ 4373: "remctl",
+ 4375: "tolteces",
+ 4376: "bip",
+ 4377: "cp-spxsvr",
+ 4378: "cp-spxdpy",
+ 4379: "ctdb",
+ 4389: "xandros-cms",
+ 4390: "wiegand",
+ 4394: "apwi-disc",
+ 4395: "omnivisionesx",
+ 4400: "ds-srv",
+ 4401: "ds-srvr",
+ 4402: "ds-clnt",
+ 4403: "ds-user",
+ 4404: "ds-admin",
+ 4405: "ds-mail",
+ 4406: "ds-slp",
+ 4412: "smallchat",
+ 4413: "avi-nms-disc",
+ 4416: "pjj-player-disc",
+ 4418: "axysbridge",
+ 4420: "nvm-express",
+ 4425: "netrockey6",
+ 4426: "beacon-port-2",
+ 4430: "rsqlserver",
+ 4432: "l-acoustics",
+ 4441: "netblox",
+ 4442: "saris",
+ 4443: "pharos",
+ 4444: "krb524",
+ 4445: "upnotifyp",
+ 4446: "n1-fwp",
+ 4447: "n1-rmgmt",
+ 4448: "asc-slmd",
+ 4449: "privatewire",
+ 4450: "camp",
+ 4451: "ctisystemmsg",
+ 4452: "ctiprogramload",
+ 4453: "nssalertmgr",
+ 4454: "nssagentmgr",
+ 4455: "prchat-user",
+ 4456: "prchat-server",
+ 4457: "prRegister",
+ 4458: "mcp",
+ 4484: "hpssmgmt",
+ 4486: "icms",
+ 4488: "awacs-ice",
+ 4500: "ipsec-nat-t",
+ 4534: "armagetronad",
+ 4535: "ehs",
+ 4536: "ehs-ssl",
+ 4537: "wssauthsvc",
+ 4538: "swx-gate",
+ 4545: "worldscores",
+ 4546: "sf-lm",
+ 4547: "lanner-lm",
+ 4548: "synchromesh",
+ 4549: "aegate",
+ 4550: "gds-adppiw-db",
+ 4551: "ieee-mih",
+ 4552: "menandmice-mon",
+ 4554: "msfrs",
+ 4555: "rsip",
+ 4556: "dtn-bundle",
+ 4557: "mtcevrunqss",
+ 4558: "mtcevrunqman",
+ 4559: "hylafax",
+ 4566: "kwtc",
+ 4567: "tram",
+ 4568: "bmc-reporting",
+ 4569: "iax",
+ 4591: "l3t-at-an",
+ 4592: "hrpd-ith-at-an",
+ 4593: "ipt-anri-anri",
+ 4594: "ias-session",
+ 4595: "ias-paging",
+ 4596: "ias-neighbor",
+ 4597: "a21-an-1xbs",
+ 4598: "a16-an-an",
+ 4599: "a17-an-an",
+ 4600: "piranha1",
+ 4601: "piranha2",
+ 4621: "ventoso",
+ 4658: "playsta2-app",
+ 4659: "playsta2-lob",
+ 4660: "smaclmgr",
+ 4661: "kar2ouche",
+ 4662: "oms",
+ 4663: "noteit",
+ 4664: "ems",
+ 4665: "contclientms",
+ 4666: "eportcomm",
+ 4667: "mmacomm",
+ 4668: "mmaeds",
+ 4669: "eportcommdata",
+ 4670: "light",
+ 4671: "acter",
+ 4672: "rfa",
+ 4673: "cxws",
+ 4674: "appiq-mgmt",
+ 4675: "dhct-status",
+ 4676: "dhct-alerts",
+ 4677: "bcs",
+ 4678: "traversal",
+ 4679: "mgesupervision",
+ 4680: "mgemanagement",
+ 4681: "parliant",
+ 4682: "finisar",
+ 4683: "spike",
+ 4684: "rfid-rp1",
+ 4685: "autopac",
+ 4686: "msp-os",
+ 4687: "nst",
+ 4688: "mobile-p2p",
+ 4689: "altovacentral",
+ 4690: "prelude",
+ 4691: "mtn",
+ 4692: "conspiracy",
+ 4700: "netxms-agent",
+ 4701: "netxms-mgmt",
+ 4702: "netxms-sync",
+ 4711: "trinity-dist",
+ 4725: "truckstar",
+ 4726: "a26-fap-fgw",
+ 4727: "fcis-disc",
+ 4728: "capmux",
+ 4729: "gsmtap",
+ 4730: "gearman",
+ 4732: "ohmtrigger",
+ 4737: "ipdr-sp",
+ 4738: "solera-lpn",
+ 4739: "ipfix",
+ 4740: "ipfixs",
+ 4741: "lumimgrd",
+ 4742: "sicct-sdp",
+ 4743: "openhpid",
+ 4744: "ifsp",
+ 4745: "fmp",
+ 4746: "intelliadm-disc",
+ 4747: "buschtrommel",
+ 4749: "profilemac",
+ 4750: "ssad",
+ 4751: "spocp",
+ 4752: "snap",
+ 4753: "simon-disc",
+ 4754: "gre-in-udp",
+ 4755: "gre-udp-dtls",
+ 4784: "bfd-multi-ctl",
+ 4785: "cncp",
+ 4789: "vxlan",
+ 4790: "vxlan-gpe",
+ 4791: "roce",
+ 4800: "iims",
+ 4801: "iwec",
+ 4802: "ilss",
+ 4803: "notateit-disc",
+ 4804: "aja-ntv4-disc",
+ 4827: "htcp",
+ 4837: "varadero-0",
+ 4838: "varadero-1",
+ 4839: "varadero-2",
+ 4840: "opcua-udp",
+ 4841: "quosa",
+ 4842: "gw-asv",
+ 4843: "opcua-tls",
+ 4844: "gw-log",
+ 4845: "wcr-remlib",
+ 4846: "contamac-icm",
+ 4847: "wfc",
+ 4848: "appserv-http",
+ 4849: "appserv-https",
+ 4850: "sun-as-nodeagt",
+ 4851: "derby-repli",
+ 4867: "unify-debug",
+ 4868: "phrelay",
+ 4869: "phrelaydbg",
+ 4870: "cc-tracking",
+ 4871: "wired",
+ 4876: "tritium-can",
+ 4877: "lmcs",
+ 4878: "inst-discovery",
+ 4881: "socp-t",
+ 4882: "socp-c",
+ 4884: "hivestor",
+ 4885: "abbs",
+ 4894: "lyskom",
+ 4899: "radmin-port",
+ 4900: "hfcs",
+ 4914: "bones",
+ 4936: "an-signaling",
+ 4937: "atsc-mh-ssc",
+ 4940: "eq-office-4940",
+ 4941: "eq-office-4941",
+ 4942: "eq-office-4942",
+ 4949: "munin",
+ 4950: "sybasesrvmon",
+ 4951: "pwgwims",
+ 4952: "sagxtsds",
+ 4969: "ccss-qmm",
+ 4970: "ccss-qsm",
+ 4980: "ctxs-vpp",
+ 4986: "mrip",
+ 4987: "smar-se-port1",
+ 4988: "smar-se-port2",
+ 4989: "parallel",
+ 4990: "busycal",
+ 4991: "vrt",
+ 4999: "hfcs-manager",
+ 5000: "commplex-main",
+ 5001: "commplex-link",
+ 5002: "rfe",
+ 5003: "fmpro-internal",
+ 5004: "avt-profile-1",
+ 5005: "avt-profile-2",
+ 5006: "wsm-server",
+ 5007: "wsm-server-ssl",
+ 5008: "synapsis-edge",
+ 5009: "winfs",
+ 5010: "telelpathstart",
+ 5011: "telelpathattack",
+ 5012: "nsp",
+ 5013: "fmpro-v6",
+ 5014: "onpsocket",
+ 5020: "zenginkyo-1",
+ 5021: "zenginkyo-2",
+ 5022: "mice",
+ 5023: "htuilsrv",
+ 5024: "scpi-telnet",
+ 5025: "scpi-raw",
+ 5026: "strexec-d",
+ 5027: "strexec-s",
+ 5029: "infobright",
+ 5030: "surfpass",
+ 5031: "dmp",
+ 5042: "asnaacceler8db",
+ 5043: "swxadmin",
+ 5044: "lxi-evntsvc",
+ 5046: "vpm-udp",
+ 5047: "iscape",
+ 5049: "ivocalize",
+ 5050: "mmcc",
+ 5051: "ita-agent",
+ 5052: "ita-manager",
+ 5053: "rlm-disc",
+ 5055: "unot",
+ 5056: "intecom-ps1",
+ 5057: "intecom-ps2",
+ 5058: "locus-disc",
+ 5059: "sds",
+ 5060: "sip",
+ 5061: "sips",
+ 5062: "na-localise",
+ 5064: "ca-1",
+ 5065: "ca-2",
+ 5066: "stanag-5066",
+ 5067: "authentx",
+ 5069: "i-net-2000-npr",
+ 5070: "vtsas",
+ 5071: "powerschool",
+ 5072: "ayiya",
+ 5073: "tag-pm",
+ 5074: "alesquery",
+ 5078: "pixelpusher",
+ 5079: "cp-spxrpts",
+ 5080: "onscreen",
+ 5081: "sdl-ets",
+ 5082: "qcp",
+ 5083: "qfp",
+ 5084: "llrp",
+ 5085: "encrypted-llrp",
+ 5092: "magpie",
+ 5093: "sentinel-lm",
+ 5094: "hart-ip",
+ 5099: "sentlm-srv2srv",
+ 5100: "socalia",
+ 5101: "talarian-udp",
+ 5102: "oms-nonsecure",
+ 5104: "tinymessage",
+ 5105: "hughes-ap",
+ 5111: "taep-as-svc",
+ 5112: "pm-cmdsvr",
+ 5116: "emb-proj-cmd",
+ 5120: "barracuda-bbs",
+ 5133: "nbt-pc",
+ 5136: "minotaur-sa",
+ 5137: "ctsd",
+ 5145: "rmonitor-secure",
+ 5150: "atmp",
+ 5151: "esri-sde",
+ 5152: "sde-discovery",
+ 5154: "bzflag",
+ 5155: "asctrl-agent",
+ 5164: "vpa-disc",
+ 5165: "ife-icorp",
+ 5166: "winpcs",
+ 5167: "scte104",
+ 5168: "scte30",
+ 5190: "aol",
+ 5191: "aol-1",
+ 5192: "aol-2",
+ 5193: "aol-3",
+ 5200: "targus-getdata",
+ 5201: "targus-getdata1",
+ 5202: "targus-getdata2",
+ 5203: "targus-getdata3",
+ 5223: "hpvirtgrp",
+ 5224: "hpvirtctrl",
+ 5225: "hp-server",
+ 5226: "hp-status",
+ 5227: "perfd",
+ 5234: "eenet",
+ 5235: "galaxy-network",
+ 5236: "padl2sim",
+ 5237: "mnet-discovery",
+ 5245: "downtools-disc",
+ 5246: "capwap-control",
+ 5247: "capwap-data",
+ 5248: "caacws",
+ 5249: "caaclang2",
+ 5250: "soagateway",
+ 5251: "caevms",
+ 5252: "movaz-ssc",
+ 5264: "3com-njack-1",
+ 5265: "3com-njack-2",
+ 5270: "cartographerxmp",
+ 5271: "cuelink-disc",
+ 5272: "pk",
+ 5282: "transmit-port",
+ 5298: "presence",
+ 5299: "nlg-data",
+ 5300: "hacl-hb",
+ 5301: "hacl-gs",
+ 5302: "hacl-cfg",
+ 5303: "hacl-probe",
+ 5304: "hacl-local",
+ 5305: "hacl-test",
+ 5306: "sun-mc-grp",
+ 5307: "sco-aip",
+ 5308: "cfengine",
+ 5309: "jprinter",
+ 5310: "outlaws",
+ 5312: "permabit-cs",
+ 5313: "rrdp",
+ 5314: "opalis-rbt-ipc",
+ 5315: "hacl-poll",
+ 5343: "kfserver",
+ 5344: "xkotodrcp",
+ 5349: "stuns",
+ 5350: "pcp-multicast",
+ 5351: "pcp",
+ 5352: "dns-llq",
+ 5353: "mdns",
+ 5354: "mdnsresponder",
+ 5355: "llmnr",
+ 5356: "ms-smlbiz",
+ 5357: "wsdapi",
+ 5358: "wsdapi-s",
+ 5359: "ms-alerter",
+ 5360: "ms-sideshow",
+ 5361: "ms-s-sideshow",
+ 5362: "serverwsd2",
+ 5363: "net-projection",
+ 5364: "kdnet",
+ 5397: "stresstester",
+ 5398: "elektron-admin",
+ 5399: "securitychase",
+ 5400: "excerpt",
+ 5401: "excerpts",
+ 5402: "mftp",
+ 5403: "hpoms-ci-lstn",
+ 5404: "hpoms-dps-lstn",
+ 5405: "netsupport",
+ 5406: "systemics-sox",
+ 5407: "foresyte-clear",
+ 5408: "foresyte-sec",
+ 5409: "salient-dtasrv",
+ 5410: "salient-usrmgr",
+ 5411: "actnet",
+ 5412: "continuus",
+ 5413: "wwiotalk",
+ 5414: "statusd",
+ 5415: "ns-server",
+ 5416: "sns-gateway",
+ 5417: "sns-agent",
+ 5418: "mcntp",
+ 5419: "dj-ice",
+ 5420: "cylink-c",
+ 5421: "netsupport2",
+ 5422: "salient-mux",
+ 5423: "virtualuser",
+ 5424: "beyond-remote",
+ 5425: "br-channel",
+ 5426: "devbasic",
+ 5427: "sco-peer-tta",
+ 5428: "telaconsole",
+ 5429: "base",
+ 5430: "radec-corp",
+ 5431: "park-agent",
+ 5432: "postgresql",
+ 5433: "pyrrho",
+ 5434: "sgi-arrayd",
+ 5435: "sceanics",
+ 5436: "pmip6-cntl",
+ 5437: "pmip6-data",
+ 5443: "spss",
+ 5450: "tiepie-disc",
+ 5453: "surebox",
+ 5454: "apc-5454",
+ 5455: "apc-5455",
+ 5456: "apc-5456",
+ 5461: "silkmeter",
+ 5462: "ttl-publisher",
+ 5463: "ttlpriceproxy",
+ 5464: "quailnet",
+ 5465: "netops-broker",
+ 5474: "apsolab-rpc",
+ 5500: "fcp-addr-srvr1",
+ 5501: "fcp-addr-srvr2",
+ 5502: "fcp-srvr-inst1",
+ 5503: "fcp-srvr-inst2",
+ 5504: "fcp-cics-gw1",
+ 5505: "checkoutdb",
+ 5506: "amc",
+ 5553: "sgi-eventmond",
+ 5554: "sgi-esphttp",
+ 5555: "personal-agent",
+ 5556: "freeciv",
+ 5567: "dof-dps-mc-sec",
+ 5568: "sdt",
+ 5569: "rdmnet-device",
+ 5573: "sdmmp",
+ 5580: "tmosms0",
+ 5581: "tmosms1",
+ 5582: "fac-restore",
+ 5583: "tmo-icon-sync",
+ 5584: "bis-web",
+ 5585: "bis-sync",
+ 5597: "ininmessaging",
+ 5598: "mctfeed",
+ 5599: "esinstall",
+ 5600: "esmmanager",
+ 5601: "esmagent",
+ 5602: "a1-msc",
+ 5603: "a1-bs",
+ 5604: "a3-sdunode",
+ 5605: "a4-sdunode",
+ 5627: "ninaf",
+ 5628: "htrust",
+ 5629: "symantec-sfdb",
+ 5630: "precise-comm",
+ 5631: "pcanywheredata",
+ 5632: "pcanywherestat",
+ 5633: "beorl",
+ 5634: "xprtld",
+ 5670: "zre-disc",
+ 5671: "amqps",
+ 5672: "amqp",
+ 5673: "jms",
+ 5674: "hyperscsi-port",
+ 5675: "v5ua",
+ 5676: "raadmin",
+ 5677: "questdb2-lnchr",
+ 5678: "rrac",
+ 5679: "dccm",
+ 5680: "auriga-router",
+ 5681: "ncxcp",
+ 5682: "brightcore",
+ 5683: "coap",
+ 5684: "coaps",
+ 5687: "gog-multiplayer",
+ 5688: "ggz",
+ 5689: "qmvideo",
+ 5713: "proshareaudio",
+ 5714: "prosharevideo",
+ 5715: "prosharedata",
+ 5716: "prosharerequest",
+ 5717: "prosharenotify",
+ 5718: "dpm",
+ 5719: "dpm-agent",
+ 5720: "ms-licensing",
+ 5721: "dtpt",
+ 5722: "msdfsr",
+ 5723: "omhs",
+ 5724: "omsdk",
+ 5728: "io-dist-group",
+ 5729: "openmail",
+ 5730: "unieng",
+ 5741: "ida-discover1",
+ 5742: "ida-discover2",
+ 5743: "watchdoc-pod",
+ 5744: "watchdoc",
+ 5745: "fcopy-server",
+ 5746: "fcopys-server",
+ 5747: "tunatic",
+ 5748: "tunalyzer",
+ 5750: "rscd",
+ 5755: "openmailg",
+ 5757: "x500ms",
+ 5766: "openmailns",
+ 5767: "s-openmail",
+ 5768: "openmailpxy",
+ 5769: "spramsca",
+ 5770: "spramsd",
+ 5771: "netagent",
+ 5777: "dali-port",
+ 5781: "3par-evts",
+ 5782: "3par-mgmt",
+ 5783: "3par-mgmt-ssl",
+ 5784: "ibar",
+ 5785: "3par-rcopy",
+ 5786: "cisco-redu",
+ 5787: "waascluster",
+ 5793: "xtreamx",
+ 5794: "spdp",
+ 5813: "icmpd",
+ 5814: "spt-automation",
+ 5859: "wherehoo",
+ 5863: "ppsuitemsg",
+ 5900: "rfb",
+ 5910: "cm",
+ 5911: "cpdlc",
+ 5912: "fis",
+ 5913: "ads-c",
+ 5963: "indy",
+ 5968: "mppolicy-v5",
+ 5969: "mppolicy-mgr",
+ 5984: "couchdb",
+ 5985: "wsman",
+ 5986: "wsmans",
+ 5987: "wbem-rmi",
+ 5988: "wbem-http",
+ 5989: "wbem-https",
+ 5990: "wbem-exp-https",
+ 5991: "nuxsl",
+ 5992: "consul-insight",
+ 5999: "cvsup",
+ 6064: "ndl-ahp-svc",
+ 6065: "winpharaoh",
+ 6066: "ewctsp",
+ 6069: "trip",
+ 6070: "messageasap",
+ 6071: "ssdtp",
+ 6072: "diagnose-proc",
+ 6073: "directplay8",
+ 6074: "max",
+ 6080: "gue",
+ 6081: "geneve",
+ 6082: "p25cai",
+ 6083: "miami-bcast",
+ 6085: "konspire2b",
+ 6086: "pdtp",
+ 6087: "ldss",
+ 6088: "doglms-notify",
+ 6100: "synchronet-db",
+ 6101: "synchronet-rtc",
+ 6102: "synchronet-upd",
+ 6103: "rets",
+ 6104: "dbdb",
+ 6105: "primaserver",
+ 6106: "mpsserver",
+ 6107: "etc-control",
+ 6108: "sercomm-scadmin",
+ 6109: "globecast-id",
+ 6110: "softcm",
+ 6111: "spc",
+ 6112: "dtspcd",
+ 6118: "tipc",
+ 6122: "bex-webadmin",
+ 6123: "backup-express",
+ 6124: "pnbs",
+ 6133: "nbt-wol",
+ 6140: "pulsonixnls",
+ 6141: "meta-corp",
+ 6142: "aspentec-lm",
+ 6143: "watershed-lm",
+ 6144: "statsci1-lm",
+ 6145: "statsci2-lm",
+ 6146: "lonewolf-lm",
+ 6147: "montage-lm",
+ 6148: "ricardo-lm",
+ 6149: "tal-pod",
+ 6160: "ecmp-data",
+ 6161: "patrol-ism",
+ 6162: "patrol-coll",
+ 6163: "pscribe",
+ 6200: "lm-x",
+ 6201: "thermo-calc",
+ 6209: "qmtps",
+ 6222: "radmind",
+ 6241: "jeol-nsddp-1",
+ 6242: "jeol-nsddp-2",
+ 6243: "jeol-nsddp-3",
+ 6244: "jeol-nsddp-4",
+ 6251: "tl1-raw-ssl",
+ 6252: "tl1-ssh",
+ 6253: "crip",
+ 6268: "grid",
+ 6269: "grid-alt",
+ 6300: "bmc-grx",
+ 6301: "bmc-ctd-ldap",
+ 6306: "ufmp",
+ 6315: "scup-disc",
+ 6316: "abb-escp",
+ 6317: "nav-data",
+ 6320: "repsvc",
+ 6321: "emp-server1",
+ 6322: "emp-server2",
+ 6324: "hrd-ns-disc",
+ 6343: "sflow",
+ 6346: "gnutella-svc",
+ 6347: "gnutella-rtr",
+ 6350: "adap",
+ 6355: "pmcs",
+ 6360: "metaedit-mu",
+ 6363: "ndn",
+ 6370: "metaedit-se",
+ 6382: "metatude-mds",
+ 6389: "clariion-evr01",
+ 6390: "metaedit-ws",
+ 6417: "faxcomservice",
+ 6419: "svdrp-disc",
+ 6420: "nim-vdrshell",
+ 6421: "nim-wan",
+ 6443: "sun-sr-https",
+ 6444: "sge-qmaster",
+ 6445: "sge-execd",
+ 6446: "mysql-proxy",
+ 6455: "skip-cert-recv",
+ 6456: "skip-cert-send",
+ 6464: "ieee11073-20701",
+ 6471: "lvision-lm",
+ 6480: "sun-sr-http",
+ 6481: "servicetags",
+ 6482: "ldoms-mgmt",
+ 6483: "SunVTS-RMI",
+ 6484: "sun-sr-jms",
+ 6485: "sun-sr-iiop",
+ 6486: "sun-sr-iiops",
+ 6487: "sun-sr-iiop-aut",
+ 6488: "sun-sr-jmx",
+ 6489: "sun-sr-admin",
+ 6500: "boks",
+ 6501: "boks-servc",
+ 6502: "boks-servm",
+ 6503: "boks-clntd",
+ 6505: "badm-priv",
+ 6506: "badm-pub",
+ 6507: "bdir-priv",
+ 6508: "bdir-pub",
+ 6509: "mgcs-mfp-port",
+ 6510: "mcer-port",
+ 6511: "dccp-udp",
+ 6514: "syslog-tls",
+ 6515: "elipse-rec",
+ 6543: "lds-distrib",
+ 6544: "lds-dump",
+ 6547: "apc-6547",
+ 6548: "apc-6548",
+ 6549: "apc-6549",
+ 6550: "fg-sysupdate",
+ 6551: "sum",
+ 6558: "xdsxdm",
+ 6566: "sane-port",
+ 6568: "rp-reputation",
+ 6579: "affiliate",
+ 6580: "parsec-master",
+ 6581: "parsec-peer",
+ 6582: "parsec-game",
+ 6583: "joaJewelSuite",
+ 6619: "odette-ftps",
+ 6620: "kftp-data",
+ 6621: "kftp",
+ 6622: "mcftp",
+ 6623: "ktelnet",
+ 6626: "wago-service",
+ 6627: "nexgen",
+ 6628: "afesc-mc",
+ 6629: "nexgen-aux",
+ 6633: "cisco-vpath-tun",
+ 6634: "mpls-pm",
+ 6635: "mpls-udp",
+ 6636: "mpls-udp-dtls",
+ 6653: "openflow",
+ 6657: "palcom-disc",
+ 6670: "vocaltec-gold",
+ 6671: "p4p-portal",
+ 6672: "vision-server",
+ 6673: "vision-elmd",
+ 6678: "vfbp-disc",
+ 6679: "osaut",
+ 6689: "tsa",
+ 6696: "babel",
+ 6701: "kti-icad-srvr",
+ 6702: "e-design-net",
+ 6703: "e-design-web",
+ 6714: "ibprotocol",
+ 6715: "fibotrader-com",
+ 6767: "bmc-perf-agent",
+ 6768: "bmc-perf-mgrd",
+ 6769: "adi-gxp-srvprt",
+ 6770: "plysrv-http",
+ 6771: "plysrv-https",
+ 6784: "bfd-lag",
+ 6785: "dgpf-exchg",
+ 6786: "smc-jmx",
+ 6787: "smc-admin",
+ 6788: "smc-http",
+ 6790: "hnmp",
+ 6791: "hnm",
+ 6801: "acnet",
+ 6831: "ambit-lm",
+ 6841: "netmo-default",
+ 6842: "netmo-http",
+ 6850: "iccrushmore",
+ 6868: "acctopus-st",
+ 6888: "muse",
+ 6935: "ethoscan",
+ 6936: "xsmsvc",
+ 6946: "bioserver",
+ 6951: "otlp",
+ 6961: "jmact3",
+ 6962: "jmevt2",
+ 6963: "swismgr1",
+ 6964: "swismgr2",
+ 6965: "swistrap",
+ 6966: "swispol",
+ 6969: "acmsoda",
+ 6997: "MobilitySrv",
+ 6998: "iatp-highpri",
+ 6999: "iatp-normalpri",
+ 7000: "afs3-fileserver",
+ 7001: "afs3-callback",
+ 7002: "afs3-prserver",
+ 7003: "afs3-vlserver",
+ 7004: "afs3-kaserver",
+ 7005: "afs3-volser",
+ 7006: "afs3-errors",
+ 7007: "afs3-bos",
+ 7008: "afs3-update",
+ 7009: "afs3-rmtsys",
+ 7010: "ups-onlinet",
+ 7011: "talon-disc",
+ 7012: "talon-engine",
+ 7013: "microtalon-dis",
+ 7014: "microtalon-com",
+ 7015: "talon-webserver",
+ 7016: "spg",
+ 7017: "grasp",
+ 7019: "doceri-view",
+ 7020: "dpserve",
+ 7021: "dpserveadmin",
+ 7022: "ctdp",
+ 7023: "ct2nmcs",
+ 7024: "vmsvc",
+ 7025: "vmsvc-2",
+ 7030: "op-probe",
+ 7040: "quest-disc",
+ 7070: "arcp",
+ 7071: "iwg1",
+ 7080: "empowerid",
+ 7088: "zixi-transport",
+ 7095: "jdp-disc",
+ 7099: "lazy-ptop",
+ 7100: "font-service",
+ 7101: "elcn",
+ 7107: "aes-x170",
+ 7121: "virprot-lm",
+ 7128: "scenidm",
+ 7129: "scenccs",
+ 7161: "cabsm-comm",
+ 7162: "caistoragemgr",
+ 7163: "cacsambroker",
+ 7164: "fsr",
+ 7165: "doc-server",
+ 7166: "aruba-server",
+ 7169: "ccag-pib",
+ 7170: "nsrp",
+ 7171: "drm-production",
+ 7174: "clutild",
+ 7181: "janus-disc",
+ 7200: "fodms",
+ 7201: "dlip",
+ 7227: "ramp",
+ 7235: "aspcoordination",
+ 7244: "frc-hicp-disc",
+ 7262: "cnap",
+ 7272: "watchme-7272",
+ 7273: "oma-rlp",
+ 7274: "oma-rlp-s",
+ 7275: "oma-ulp",
+ 7276: "oma-ilp",
+ 7277: "oma-ilp-s",
+ 7278: "oma-dcdocbs",
+ 7279: "ctxlic",
+ 7280: "itactionserver1",
+ 7281: "itactionserver2",
+ 7282: "mzca-alert",
+ 7365: "lcm-server",
+ 7391: "mindfilesys",
+ 7392: "mrssrendezvous",
+ 7393: "nfoldman",
+ 7394: "fse",
+ 7395: "winqedit",
+ 7397: "hexarc",
+ 7400: "rtps-discovery",
+ 7401: "rtps-dd-ut",
+ 7402: "rtps-dd-mt",
+ 7410: "ionixnetmon",
+ 7411: "daqstream",
+ 7421: "mtportmon",
+ 7426: "pmdmgr",
+ 7427: "oveadmgr",
+ 7428: "ovladmgr",
+ 7429: "opi-sock",
+ 7430: "xmpv7",
+ 7431: "pmd",
+ 7437: "faximum",
+ 7443: "oracleas-https",
+ 7473: "rise",
+ 7491: "telops-lmd",
+ 7500: "silhouette",
+ 7501: "ovbus",
+ 7510: "ovhpas",
+ 7511: "pafec-lm",
+ 7542: "saratoga",
+ 7543: "atul",
+ 7544: "nta-ds",
+ 7545: "nta-us",
+ 7546: "cfs",
+ 7547: "cwmp",
+ 7548: "tidp",
+ 7549: "nls-tl",
+ 7550: "cloudsignaling",
+ 7560: "sncp",
+ 7566: "vsi-omega",
+ 7570: "aries-kfinder",
+ 7574: "coherence-disc",
+ 7588: "sun-lm",
+ 7606: "mipi-debug",
+ 7624: "indi",
+ 7627: "soap-http",
+ 7628: "zen-pawn",
+ 7629: "xdas",
+ 7633: "pmdfmgt",
+ 7648: "cuseeme",
+ 7674: "imqtunnels",
+ 7675: "imqtunnel",
+ 7676: "imqbrokerd",
+ 7677: "sun-user-https",
+ 7680: "pando-pub",
+ 7689: "collaber",
+ 7697: "klio",
+ 7707: "sync-em7",
+ 7708: "scinet",
+ 7720: "medimageportal",
+ 7724: "nsdeepfreezectl",
+ 7725: "nitrogen",
+ 7726: "freezexservice",
+ 7727: "trident-data",
+ 7728: "osvr",
+ 7734: "smip",
+ 7738: "aiagent",
+ 7741: "scriptview",
+ 7743: "sstp-1",
+ 7744: "raqmon-pdu",
+ 7747: "prgp",
+ 7777: "cbt",
+ 7778: "interwise",
+ 7779: "vstat",
+ 7781: "accu-lmgr",
+ 7784: "s-bfd",
+ 7786: "minivend",
+ 7787: "popup-reminders",
+ 7789: "office-tools",
+ 7794: "q3ade",
+ 7797: "pnet-conn",
+ 7798: "pnet-enc",
+ 7799: "altbsdp",
+ 7800: "asr",
+ 7801: "ssp-client",
+ 7802: "vns-tp",
+ 7810: "rbt-wanopt",
+ 7845: "apc-7845",
+ 7846: "apc-7846",
+ 7872: "mipv6tls",
+ 7880: "pss",
+ 7887: "ubroker",
+ 7900: "mevent",
+ 7901: "tnos-sp",
+ 7902: "tnos-dp",
+ 7903: "tnos-dps",
+ 7913: "qo-secure",
+ 7932: "t2-drm",
+ 7933: "t2-brm",
+ 7962: "generalsync",
+ 7967: "supercell",
+ 7979: "micromuse-ncps",
+ 7980: "quest-vista",
+ 7982: "sossd-disc",
+ 7998: "usicontentpush",
+ 7999: "irdmi2",
+ 8000: "irdmi",
+ 8001: "vcom-tunnel",
+ 8002: "teradataordbms",
+ 8003: "mcreport",
+ 8005: "mxi",
+ 8006: "wpl-disc",
+ 8007: "warppipe",
+ 8008: "http-alt",
+ 8019: "qbdb",
+ 8020: "intu-ec-svcdisc",
+ 8021: "intu-ec-client",
+ 8022: "oa-system",
+ 8025: "ca-audit-da",
+ 8026: "ca-audit-ds",
+ 8032: "pro-ed",
+ 8033: "mindprint",
+ 8034: "vantronix-mgmt",
+ 8040: "ampify",
+ 8041: "enguity-xccetp",
+ 8052: "senomix01",
+ 8053: "senomix02",
+ 8054: "senomix03",
+ 8055: "senomix04",
+ 8056: "senomix05",
+ 8057: "senomix06",
+ 8058: "senomix07",
+ 8059: "senomix08",
+ 8060: "aero",
+ 8074: "gadugadu",
+ 8080: "http-alt",
+ 8081: "sunproxyadmin",
+ 8082: "us-cli",
+ 8083: "us-srv",
+ 8086: "d-s-n",
+ 8087: "simplifymedia",
+ 8088: "radan-http",
+ 8097: "sac",
+ 8100: "xprint-server",
+ 8115: "mtl8000-matrix",
+ 8116: "cp-cluster",
+ 8118: "privoxy",
+ 8121: "apollo-data",
+ 8122: "apollo-admin",
+ 8128: "paycash-online",
+ 8129: "paycash-wbp",
+ 8130: "indigo-vrmi",
+ 8131: "indigo-vbcp",
+ 8132: "dbabble",
+ 8148: "isdd",
+ 8149: "eor-game",
+ 8160: "patrol",
+ 8161: "patrol-snmp",
+ 8182: "vmware-fdm",
+ 8184: "itach",
+ 8192: "spytechphone",
+ 8194: "blp1",
+ 8195: "blp2",
+ 8199: "vvr-data",
+ 8200: "trivnet1",
+ 8201: "trivnet2",
+ 8202: "aesop",
+ 8204: "lm-perfworks",
+ 8205: "lm-instmgr",
+ 8206: "lm-dta",
+ 8207: "lm-sserver",
+ 8208: "lm-webwatcher",
+ 8230: "rexecj",
+ 8231: "hncp-udp-port",
+ 8232: "hncp-dtls-port",
+ 8243: "synapse-nhttps",
+ 8276: "pando-sec",
+ 8280: "synapse-nhttp",
+ 8282: "libelle-disc",
+ 8292: "blp3",
+ 8294: "blp4",
+ 8300: "tmi",
+ 8301: "amberon",
+ 8320: "tnp-discover",
+ 8321: "tnp",
+ 8322: "garmin-marine",
+ 8351: "server-find",
+ 8376: "cruise-enum",
+ 8377: "cruise-swroute",
+ 8378: "cruise-config",
+ 8379: "cruise-diags",
+ 8380: "cruise-update",
+ 8383: "m2mservices",
+ 8384: "marathontp",
+ 8400: "cvd",
+ 8401: "sabarsd",
+ 8402: "abarsd",
+ 8403: "admind",
+ 8416: "espeech",
+ 8417: "espeech-rtp",
+ 8442: "cybro-a-bus",
+ 8443: "pcsync-https",
+ 8444: "pcsync-http",
+ 8445: "copy-disc",
+ 8450: "npmp",
+ 8472: "otv",
+ 8473: "vp2p",
+ 8474: "noteshare",
+ 8500: "fmtp",
+ 8501: "cmtp-av",
+ 8503: "lsp-self-ping",
+ 8554: "rtsp-alt",
+ 8555: "d-fence",
+ 8567: "dof-tunnel",
+ 8600: "asterix",
+ 8609: "canon-cpp-disc",
+ 8610: "canon-mfnp",
+ 8611: "canon-bjnp1",
+ 8612: "canon-bjnp2",
+ 8613: "canon-bjnp3",
+ 8614: "canon-bjnp4",
+ 8675: "msi-cps-rm-disc",
+ 8686: "sun-as-jmxrmi",
+ 8732: "dtp-net",
+ 8733: "ibus",
+ 8763: "mc-appserver",
+ 8764: "openqueue",
+ 8765: "ultraseek-http",
+ 8766: "amcs",
+ 8770: "dpap",
+ 8786: "msgclnt",
+ 8787: "msgsrvr",
+ 8793: "acd-pm",
+ 8800: "sunwebadmin",
+ 8804: "truecm",
+ 8805: "pfcp",
+ 8808: "ssports-bcast",
+ 8873: "dxspider",
+ 8880: "cddbp-alt",
+ 8883: "secure-mqtt",
+ 8888: "ddi-udp-1",
+ 8889: "ddi-udp-2",
+ 8890: "ddi-udp-3",
+ 8891: "ddi-udp-4",
+ 8892: "ddi-udp-5",
+ 8893: "ddi-udp-6",
+ 8894: "ddi-udp-7",
+ 8899: "ospf-lite",
+ 8900: "jmb-cds1",
+ 8901: "jmb-cds2",
+ 8910: "manyone-http",
+ 8911: "manyone-xml",
+ 8912: "wcbackup",
+ 8913: "dragonfly",
+ 8954: "cumulus-admin",
+ 8980: "nod-provider",
+ 8981: "nod-client",
+ 8989: "sunwebadmins",
+ 8990: "http-wmap",
+ 8991: "https-wmap",
+ 8999: "bctp",
+ 9000: "cslistener",
+ 9001: "etlservicemgr",
+ 9002: "dynamid",
+ 9007: "ogs-client",
+ 9009: "pichat",
+ 9020: "tambora",
+ 9021: "panagolin-ident",
+ 9022: "paragent",
+ 9023: "swa-1",
+ 9024: "swa-2",
+ 9025: "swa-3",
+ 9026: "swa-4",
+ 9060: "CardWeb-RT",
+ 9080: "glrpc",
+ 9084: "aurora",
+ 9085: "ibm-rsyscon",
+ 9086: "net2display",
+ 9087: "classic",
+ 9088: "sqlexec",
+ 9089: "sqlexec-ssl",
+ 9090: "websm",
+ 9091: "xmltec-xmlmail",
+ 9092: "XmlIpcRegSvc",
+ 9100: "hp-pdl-datastr",
+ 9101: "bacula-dir",
+ 9102: "bacula-fd",
+ 9103: "bacula-sd",
+ 9104: "peerwire",
+ 9105: "xadmin",
+ 9106: "astergate-disc",
+ 9119: "mxit",
+ 9131: "dddp",
+ 9160: "apani1",
+ 9161: "apani2",
+ 9162: "apani3",
+ 9163: "apani4",
+ 9164: "apani5",
+ 9191: "sun-as-jpda",
+ 9200: "wap-wsp",
+ 9201: "wap-wsp-wtp",
+ 9202: "wap-wsp-s",
+ 9203: "wap-wsp-wtp-s",
+ 9204: "wap-vcard",
+ 9205: "wap-vcal",
+ 9206: "wap-vcard-s",
+ 9207: "wap-vcal-s",
+ 9208: "rjcdb-vcards",
+ 9209: "almobile-system",
+ 9210: "oma-mlp",
+ 9211: "oma-mlp-s",
+ 9212: "serverviewdbms",
+ 9213: "serverstart",
+ 9214: "ipdcesgbs",
+ 9215: "insis",
+ 9216: "acme",
+ 9217: "fsc-port",
+ 9222: "teamcoherence",
+ 9255: "mon",
+ 9277: "traingpsdata",
+ 9278: "pegasus",
+ 9279: "pegasus-ctl",
+ 9280: "pgps",
+ 9281: "swtp-port1",
+ 9282: "swtp-port2",
+ 9283: "callwaveiam",
+ 9284: "visd",
+ 9285: "n2h2server",
+ 9286: "n2receive",
+ 9287: "cumulus",
+ 9292: "armtechdaemon",
+ 9293: "storview",
+ 9294: "armcenterhttp",
+ 9295: "armcenterhttps",
+ 9300: "vrace",
+ 9318: "secure-ts",
+ 9321: "guibase",
+ 9343: "mpidcmgr",
+ 9344: "mphlpdmc",
+ 9346: "ctechlicensing",
+ 9374: "fjdmimgr",
+ 9380: "boxp",
+ 9396: "fjinvmgr",
+ 9397: "mpidcagt",
+ 9400: "sec-t4net-srv",
+ 9401: "sec-t4net-clt",
+ 9402: "sec-pc2fax-srv",
+ 9418: "git",
+ 9443: "tungsten-https",
+ 9444: "wso2esb-console",
+ 9450: "sntlkeyssrvr",
+ 9500: "ismserver",
+ 9522: "sma-spw",
+ 9535: "mngsuite",
+ 9536: "laes-bf",
+ 9555: "trispen-sra",
+ 9592: "ldgateway",
+ 9593: "cba8",
+ 9594: "msgsys",
+ 9595: "pds",
+ 9596: "mercury-disc",
+ 9597: "pd-admin",
+ 9598: "vscp",
+ 9599: "robix",
+ 9600: "micromuse-ncpw",
+ 9612: "streamcomm-ds",
+ 9618: "condor",
+ 9628: "odbcpathway",
+ 9629: "uniport",
+ 9632: "mc-comm",
+ 9667: "xmms2",
+ 9668: "tec5-sdctp",
+ 9694: "client-wakeup",
+ 9695: "ccnx",
+ 9700: "board-roar",
+ 9747: "l5nas-parchan",
+ 9750: "board-voip",
+ 9753: "rasadv",
+ 9762: "tungsten-http",
+ 9800: "davsrc",
+ 9801: "sstp-2",
+ 9802: "davsrcs",
+ 9875: "sapv1",
+ 9878: "kca-service",
+ 9888: "cyborg-systems",
+ 9889: "gt-proxy",
+ 9898: "monkeycom",
+ 9899: "sctp-tunneling",
+ 9900: "iua",
+ 9901: "enrp",
+ 9903: "multicast-ping",
+ 9909: "domaintime",
+ 9911: "sype-transport",
+ 9950: "apc-9950",
+ 9951: "apc-9951",
+ 9952: "apc-9952",
+ 9953: "acis",
+ 9955: "alljoyn-mcm",
+ 9956: "alljoyn",
+ 9966: "odnsp",
+ 9987: "dsm-scm-target",
+ 9990: "osm-appsrvr",
+ 9991: "osm-oev",
+ 9992: "palace-1",
+ 9993: "palace-2",
+ 9994: "palace-3",
+ 9995: "palace-4",
+ 9996: "palace-5",
+ 9997: "palace-6",
+ 9998: "distinct32",
+ 9999: "distinct",
+ 10000: "ndmp",
+ 10001: "scp-config",
+ 10002: "documentum",
+ 10003: "documentum-s",
+ 10007: "mvs-capacity",
+ 10008: "octopus",
+ 10009: "swdtp-sv",
+ 10050: "zabbix-agent",
+ 10051: "zabbix-trapper",
+ 10080: "amanda",
+ 10081: "famdc",
+ 10100: "itap-ddtp",
+ 10101: "ezmeeting-2",
+ 10102: "ezproxy-2",
+ 10103: "ezrelay",
+ 10104: "swdtp",
+ 10107: "bctp-server",
+ 10110: "nmea-0183",
+ 10111: "nmea-onenet",
+ 10113: "netiq-endpoint",
+ 10114: "netiq-qcheck",
+ 10115: "netiq-endpt",
+ 10116: "netiq-voipa",
+ 10117: "iqrm",
+ 10128: "bmc-perf-sd",
+ 10160: "qb-db-server",
+ 10161: "snmpdtls",
+ 10162: "snmpdtls-trap",
+ 10200: "trisoap",
+ 10201: "rscs",
+ 10252: "apollo-relay",
+ 10253: "eapol-relay",
+ 10260: "axis-wimp-port",
+ 10288: "blocks",
+ 10439: "bngsync",
+ 10500: "hip-nat-t",
+ 10540: "MOS-lower",
+ 10541: "MOS-upper",
+ 10542: "MOS-aux",
+ 10543: "MOS-soap",
+ 10544: "MOS-soap-opt",
+ 10800: "gap",
+ 10805: "lpdg",
+ 10810: "nmc-disc",
+ 10860: "helix",
+ 10880: "bveapi",
+ 10990: "rmiaux",
+ 11000: "irisa",
+ 11001: "metasys",
+ 10023: "cefd-vmp",
+ 11095: "weave",
+ 11106: "sgi-lk",
+ 11108: "myq-termlink",
+ 11111: "vce",
+ 11112: "dicom",
+ 11161: "suncacao-snmp",
+ 11162: "suncacao-jmxmp",
+ 11163: "suncacao-rmi",
+ 11164: "suncacao-csa",
+ 11165: "suncacao-websvc",
+ 11171: "snss",
+ 11201: "smsqp",
+ 11208: "wifree",
+ 11211: "memcache",
+ 11319: "imip",
+ 11320: "imip-channels",
+ 11321: "arena-server",
+ 11367: "atm-uhas",
+ 11371: "hkp",
+ 11430: "lsdp",
+ 11600: "tempest-port",
+ 11720: "h323callsigalt",
+ 11723: "emc-xsw-dcache",
+ 11751: "intrepid-ssl",
+ 11796: "lanschool-mpt",
+ 11876: "xoraya",
+ 11877: "x2e-disc",
+ 11967: "sysinfo-sp",
+ 12000: "entextxid",
+ 12001: "entextnetwk",
+ 12002: "entexthigh",
+ 12003: "entextmed",
+ 12004: "entextlow",
+ 12005: "dbisamserver1",
+ 12006: "dbisamserver2",
+ 12007: "accuracer",
+ 12008: "accuracer-dbms",
+ 12009: "ghvpn",
+ 12012: "vipera",
+ 12013: "vipera-ssl",
+ 12109: "rets-ssl",
+ 12121: "nupaper-ss",
+ 12168: "cawas",
+ 12172: "hivep",
+ 12300: "linogridengine",
+ 12321: "warehouse-sss",
+ 12322: "warehouse",
+ 12345: "italk",
+ 12753: "tsaf",
+ 13160: "i-zipqd",
+ 13216: "bcslogc",
+ 13217: "rs-pias",
+ 13218: "emc-vcas-udp",
+ 13223: "powwow-client",
+ 13224: "powwow-server",
+ 13400: "doip-disc",
+ 13720: "bprd",
+ 13721: "bpdbm",
+ 13722: "bpjava-msvc",
+ 13724: "vnetd",
+ 13782: "bpcd",
+ 13783: "vopied",
+ 13785: "nbdb",
+ 13786: "nomdb",
+ 13818: "dsmcc-config",
+ 13819: "dsmcc-session",
+ 13820: "dsmcc-passthru",
+ 13821: "dsmcc-download",
+ 13822: "dsmcc-ccp",
+ 13894: "ucontrol",
+ 13929: "dta-systems",
+ 14000: "scotty-ft",
+ 14001: "sua",
+ 14002: "scotty-disc",
+ 14033: "sage-best-com1",
+ 14034: "sage-best-com2",
+ 14141: "vcs-app",
+ 14142: "icpp",
+ 14145: "gcm-app",
+ 14149: "vrts-tdd",
+ 14154: "vad",
+ 14250: "cps",
+ 14414: "ca-web-update",
+ 14936: "hde-lcesrvr-1",
+ 14937: "hde-lcesrvr-2",
+ 15000: "hydap",
+ 15118: "v2g-secc",
+ 15345: "xpilot",
+ 15363: "3link",
+ 15555: "cisco-snat",
+ 15660: "bex-xr",
+ 15740: "ptp",
+ 15998: "2ping",
+ 16003: "alfin",
+ 16161: "sun-sea-port",
+ 16309: "etb4j",
+ 16310: "pduncs",
+ 16311: "pdefmns",
+ 16360: "netserialext1",
+ 16361: "netserialext2",
+ 16367: "netserialext3",
+ 16368: "netserialext4",
+ 16384: "connected",
+ 16666: "vtp",
+ 16900: "newbay-snc-mc",
+ 16950: "sgcip",
+ 16991: "intel-rci-mp",
+ 16992: "amt-soap-http",
+ 16993: "amt-soap-https",
+ 16994: "amt-redir-tcp",
+ 16995: "amt-redir-tls",
+ 17007: "isode-dua",
+ 17185: "soundsvirtual",
+ 17219: "chipper",
+ 17220: "avtp",
+ 17221: "avdecc",
+ 17222: "cpsp",
+ 17224: "trdp-pd",
+ 17225: "trdp-md",
+ 17234: "integrius-stp",
+ 17235: "ssh-mgmt",
+ 17500: "db-lsp-disc",
+ 17729: "ea",
+ 17754: "zep",
+ 17755: "zigbee-ip",
+ 17756: "zigbee-ips",
+ 18000: "biimenu",
+ 18181: "opsec-cvp",
+ 18182: "opsec-ufp",
+ 18183: "opsec-sam",
+ 18184: "opsec-lea",
+ 18185: "opsec-omi",
+ 18186: "ohsc",
+ 18187: "opsec-ela",
+ 18241: "checkpoint-rtm",
+ 18262: "gv-pf",
+ 18463: "ac-cluster",
+ 18634: "rds-ib",
+ 18635: "rds-ip",
+ 18668: "vdmmesh-disc",
+ 18769: "ique",
+ 18881: "infotos",
+ 18888: "apc-necmp",
+ 19000: "igrid",
+ 19007: "scintilla",
+ 19191: "opsec-uaa",
+ 19194: "ua-secureagent",
+ 19220: "cora-disc",
+ 19283: "keysrvr",
+ 19315: "keyshadow",
+ 19398: "mtrgtrans",
+ 19410: "hp-sco",
+ 19411: "hp-sca",
+ 19412: "hp-sessmon",
+ 19539: "fxuptp",
+ 19540: "sxuptp",
+ 19541: "jcp",
+ 19788: "mle",
+ 19999: "dnp-sec",
+ 20000: "dnp",
+ 20001: "microsan",
+ 20002: "commtact-http",
+ 20003: "commtact-https",
+ 20005: "openwebnet",
+ 20012: "ss-idi-disc",
+ 20014: "opendeploy",
+ 20034: "nburn-id",
+ 20046: "tmophl7mts",
+ 20048: "mountd",
+ 20049: "nfsrdma",
+ 20167: "tolfab",
+ 20202: "ipdtp-port",
+ 20222: "ipulse-ics",
+ 20480: "emwavemsg",
+ 20670: "track",
+ 20999: "athand-mmp",
+ 21000: "irtrans",
+ 21554: "dfserver",
+ 21590: "vofr-gateway",
+ 21800: "tvpm",
+ 21845: "webphone",
+ 21846: "netspeak-is",
+ 21847: "netspeak-cs",
+ 21848: "netspeak-acd",
+ 21849: "netspeak-cps",
+ 22000: "snapenetio",
+ 22001: "optocontrol",
+ 22002: "optohost002",
+ 22003: "optohost003",
+ 22004: "optohost004",
+ 22005: "optohost004",
+ 22273: "wnn6",
+ 22305: "cis",
+ 22335: "shrewd-stream",
+ 22343: "cis-secure",
+ 22347: "wibukey",
+ 22350: "codemeter",
+ 22555: "vocaltec-phone",
+ 22763: "talikaserver",
+ 22800: "aws-brf",
+ 22951: "brf-gw",
+ 23000: "inovaport1",
+ 23001: "inovaport2",
+ 23002: "inovaport3",
+ 23003: "inovaport4",
+ 23004: "inovaport5",
+ 23005: "inovaport6",
+ 23272: "s102",
+ 23294: "5afe-disc",
+ 23333: "elxmgmt",
+ 23400: "novar-dbase",
+ 23401: "novar-alarm",
+ 23402: "novar-global",
+ 24000: "med-ltp",
+ 24001: "med-fsp-rx",
+ 24002: "med-fsp-tx",
+ 24003: "med-supp",
+ 24004: "med-ovw",
+ 24005: "med-ci",
+ 24006: "med-net-svc",
+ 24242: "filesphere",
+ 24249: "vista-4gl",
+ 24321: "ild",
+ 24322: "hid",
+ 24386: "intel-rci",
+ 24465: "tonidods",
+ 24554: "binkp",
+ 24577: "bilobit-update",
+ 24676: "canditv",
+ 24677: "flashfiler",
+ 24678: "proactivate",
+ 24680: "tcc-http",
+ 24850: "assoc-disc",
+ 24922: "find",
+ 25000: "icl-twobase1",
+ 25001: "icl-twobase2",
+ 25002: "icl-twobase3",
+ 25003: "icl-twobase4",
+ 25004: "icl-twobase5",
+ 25005: "icl-twobase6",
+ 25006: "icl-twobase7",
+ 25007: "icl-twobase8",
+ 25008: "icl-twobase9",
+ 25009: "icl-twobase10",
+ 25793: "vocaltec-hos",
+ 25900: "tasp-net",
+ 25901: "niobserver",
+ 25902: "nilinkanalyst",
+ 25903: "niprobe",
+ 25954: "bf-game",
+ 25955: "bf-master",
+ 26000: "quake",
+ 26133: "scscp",
+ 26208: "wnn6-ds",
+ 26260: "ezproxy",
+ 26261: "ezmeeting",
+ 26262: "k3software-svr",
+ 26263: "k3software-cli",
+ 26486: "exoline-udp",
+ 26487: "exoconfig",
+ 26489: "exonet",
+ 27345: "imagepump",
+ 27442: "jesmsjc",
+ 27504: "kopek-httphead",
+ 27782: "ars-vista",
+ 27999: "tw-auth-key",
+ 28000: "nxlmd",
+ 28119: "a27-ran-ran",
+ 28200: "voxelstorm",
+ 28240: "siemensgsm",
+ 29167: "otmp",
+ 30001: "pago-services1",
+ 30002: "pago-services2",
+ 30003: "amicon-fpsu-ra",
+ 30004: "amicon-fpsu-s",
+ 30260: "kingdomsonline",
+ 30832: "samsung-disc",
+ 30999: "ovobs",
+ 31016: "ka-kdp",
+ 31029: "yawn",
+ 31416: "xqosd",
+ 31457: "tetrinet",
+ 31620: "lm-mon",
+ 31765: "gamesmith-port",
+ 31948: "iceedcp-tx",
+ 31949: "iceedcp-rx",
+ 32034: "iracinghelper",
+ 32249: "t1distproc60",
+ 32483: "apm-link",
+ 32635: "sec-ntb-clnt",
+ 32636: "DMExpress",
+ 32767: "filenet-powsrm",
+ 32768: "filenet-tms",
+ 32769: "filenet-rpc",
+ 32770: "filenet-nch",
+ 32771: "filenet-rmi",
+ 32772: "filenet-pa",
+ 32773: "filenet-cm",
+ 32774: "filenet-re",
+ 32775: "filenet-pch",
+ 32776: "filenet-peior",
+ 32777: "filenet-obrok",
+ 32801: "mlsn",
+ 32896: "idmgratm",
+ 33123: "aurora-balaena",
+ 33331: "diamondport",
+ 33334: "speedtrace-disc",
+ 33434: "traceroute",
+ 33656: "snip-slave",
+ 34249: "turbonote-2",
+ 34378: "p-net-local",
+ 34379: "p-net-remote",
+ 34567: "edi_service",
+ 34962: "profinet-rt",
+ 34963: "profinet-rtm",
+ 34964: "profinet-cm",
+ 34980: "ethercat",
+ 35001: "rt-viewer",
+ 35004: "rt-classmanager",
+ 35100: "axio-disc",
+ 35355: "altova-lm-disc",
+ 36001: "allpeers",
+ 36411: "wlcp",
+ 36865: "kastenxpipe",
+ 37475: "neckar",
+ 37654: "unisys-eportal",
+ 38002: "crescoctrl-disc",
+ 38201: "galaxy7-data",
+ 38202: "fairview",
+ 38203: "agpolicy",
+ 39681: "turbonote-1",
+ 40000: "safetynetp",
+ 40023: "k-patentssensor",
+ 40841: "cscp",
+ 40842: "csccredir",
+ 40843: "csccfirewall",
+ 40853: "ortec-disc",
+ 41111: "fs-qos",
+ 41230: "z-wave-s",
+ 41794: "crestron-cip",
+ 41795: "crestron-ctp",
+ 42508: "candp",
+ 42509: "candrp",
+ 42510: "caerpc",
+ 43000: "recvr-rc-disc",
+ 43188: "reachout",
+ 43189: "ndm-agent-port",
+ 43190: "ip-provision",
+ 43210: "shaperai-disc",
+ 43439: "eq3-config",
+ 43440: "ew-disc-cmd",
+ 43441: "ciscocsdb",
+ 44321: "pmcd",
+ 44322: "pmcdproxy",
+ 44544: "domiq",
+ 44553: "rbr-debug",
+ 44600: "asihpi",
+ 44818: "EtherNet-IP-2",
+ 44900: "m3da-disc",
+ 45000: "asmp-mon",
+ 45054: "invision-ag",
+ 45514: "cloudcheck-ping",
+ 45678: "eba",
+ 45825: "qdb2service",
+ 45966: "ssr-servermgr",
+ 46999: "mediabox",
+ 47000: "mbus",
+ 47100: "jvl-mactalk",
+ 47557: "dbbrowse",
+ 47624: "directplaysrvr",
+ 47806: "ap",
+ 47808: "bacnet",
+ 47809: "presonus-ucnet",
+ 48000: "nimcontroller",
+ 48001: "nimspooler",
+ 48002: "nimhub",
+ 48003: "nimgtw",
+ 48128: "isnetserv",
+ 48129: "blp5",
+ 48556: "com-bardac-dw",
+ 48619: "iqobject",
+ 48653: "robotraconteur",
+ 49001: "nusdp-disc",
+}
+var sctpPortNames = map[SCTPPort]string{
+ 9: "discard",
+ 20: "ftp-data",
+ 21: "ftp",
+ 22: "ssh",
+ 80: "http",
+ 179: "bgp",
+ 443: "https",
+ 1021: "exp1",
+ 1022: "exp2",
+ 1167: "cisco-ipsla",
+ 1720: "h323hostcall",
+ 2049: "nfs",
+ 2225: "rcip-itu",
+ 2904: "m2ua",
+ 2905: "m3ua",
+ 2944: "megaco-h248",
+ 2945: "h248-binary",
+ 3097: "itu-bicc-stc",
+ 3565: "m2pa",
+ 3863: "asap-sctp",
+ 3864: "asap-sctp-tls",
+ 3868: "diameter",
+ 4333: "ahsp",
+ 4502: "a25-fap-fgw",
+ 4711: "trinity-dist",
+ 4739: "ipfix",
+ 4740: "ipfixs",
+ 5060: "sip",
+ 5061: "sips",
+ 5090: "car",
+ 5091: "cxtp",
+ 5215: "noteza",
+ 5445: "smbdirect",
+ 5672: "amqp",
+ 5675: "v5ua",
+ 5868: "diameters",
+ 5910: "cm",
+ 5911: "cpdlc",
+ 5912: "fis",
+ 5913: "ads-c",
+ 6704: "frc-hp",
+ 6705: "frc-mp",
+ 6706: "frc-lp",
+ 6970: "conductor-mpx",
+ 7626: "simco",
+ 7701: "nfapi",
+ 7728: "osvr",
+ 8471: "pim-port",
+ 9082: "lcs-ap",
+ 9084: "aurora",
+ 9900: "iua",
+ 9901: "enrp-sctp",
+ 9902: "enrp-sctp-tls",
+ 11997: "wmereceiving",
+ 11998: "wmedistribution",
+ 11999: "wmereporting",
+ 14001: "sua",
+ 20049: "nfsrdma",
+ 25471: "rna",
+ 29118: "sgsap",
+ 29168: "sbcap",
+ 29169: "iuhsctpassoc",
+ 30100: "rwp",
+ 36412: "s1-control",
+ 36422: "x2-control",
+ 36423: "slmap",
+ 36424: "nq-ap",
+ 36443: "m2ap",
+ 36444: "m3ap",
+ 36462: "xw-control",
+ 38412: "ng-control",
+ 38422: "xn-control",
+ 38472: "f1-control",
+}
diff --git a/vendor/github.com/google/gopacket/layers/icmp4.go b/vendor/github.com/google/gopacket/layers/icmp4.go
new file mode 100644
index 0000000..bd3f03f
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/icmp4.go
@@ -0,0 +1,267 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "errors"
+ "fmt"
+ "reflect"
+
+ "github.com/google/gopacket"
+)
+
+const (
+ ICMPv4TypeEchoReply = 0
+ ICMPv4TypeDestinationUnreachable = 3
+ ICMPv4TypeSourceQuench = 4
+ ICMPv4TypeRedirect = 5
+ ICMPv4TypeEchoRequest = 8
+ ICMPv4TypeRouterAdvertisement = 9
+ ICMPv4TypeRouterSolicitation = 10
+ ICMPv4TypeTimeExceeded = 11
+ ICMPv4TypeParameterProblem = 12
+ ICMPv4TypeTimestampRequest = 13
+ ICMPv4TypeTimestampReply = 14
+ ICMPv4TypeInfoRequest = 15
+ ICMPv4TypeInfoReply = 16
+ ICMPv4TypeAddressMaskRequest = 17
+ ICMPv4TypeAddressMaskReply = 18
+)
+
+const (
+ // DestinationUnreachable
+ ICMPv4CodeNet = 0
+ ICMPv4CodeHost = 1
+ ICMPv4CodeProtocol = 2
+ ICMPv4CodePort = 3
+ ICMPv4CodeFragmentationNeeded = 4
+ ICMPv4CodeSourceRoutingFailed = 5
+ ICMPv4CodeNetUnknown = 6
+ ICMPv4CodeHostUnknown = 7
+ ICMPv4CodeSourceIsolated = 8
+ ICMPv4CodeNetAdminProhibited = 9
+ ICMPv4CodeHostAdminProhibited = 10
+ ICMPv4CodeNetTOS = 11
+ ICMPv4CodeHostTOS = 12
+ ICMPv4CodeCommAdminProhibited = 13
+ ICMPv4CodeHostPrecedence = 14
+ ICMPv4CodePrecedenceCutoff = 15
+
+ // TimeExceeded
+ ICMPv4CodeTTLExceeded = 0
+ ICMPv4CodeFragmentReassemblyTimeExceeded = 1
+
+ // ParameterProblem
+ ICMPv4CodePointerIndicatesError = 0
+ ICMPv4CodeMissingOption = 1
+ ICMPv4CodeBadLength = 2
+
+ // Redirect
+ // ICMPv4CodeNet = same as for DestinationUnreachable
+ // ICMPv4CodeHost = same as for DestinationUnreachable
+ ICMPv4CodeTOSNet = 2
+ ICMPv4CodeTOSHost = 3
+)
+
+type icmpv4TypeCodeInfoStruct struct {
+ typeStr string
+ codeStr *map[uint8]string
+}
+
+var (
+ icmpv4TypeCodeInfo = map[uint8]icmpv4TypeCodeInfoStruct{
+ ICMPv4TypeDestinationUnreachable: icmpv4TypeCodeInfoStruct{
+ "DestinationUnreachable", &map[uint8]string{
+ ICMPv4CodeNet: "Net",
+ ICMPv4CodeHost: "Host",
+ ICMPv4CodeProtocol: "Protocol",
+ ICMPv4CodePort: "Port",
+ ICMPv4CodeFragmentationNeeded: "FragmentationNeeded",
+ ICMPv4CodeSourceRoutingFailed: "SourceRoutingFailed",
+ ICMPv4CodeNetUnknown: "NetUnknown",
+ ICMPv4CodeHostUnknown: "HostUnknown",
+ ICMPv4CodeSourceIsolated: "SourceIsolated",
+ ICMPv4CodeNetAdminProhibited: "NetAdminProhibited",
+ ICMPv4CodeHostAdminProhibited: "HostAdminProhibited",
+ ICMPv4CodeNetTOS: "NetTOS",
+ ICMPv4CodeHostTOS: "HostTOS",
+ ICMPv4CodeCommAdminProhibited: "CommAdminProhibited",
+ ICMPv4CodeHostPrecedence: "HostPrecedence",
+ ICMPv4CodePrecedenceCutoff: "PrecedenceCutoff",
+ },
+ },
+ ICMPv4TypeTimeExceeded: icmpv4TypeCodeInfoStruct{
+ "TimeExceeded", &map[uint8]string{
+ ICMPv4CodeTTLExceeded: "TTLExceeded",
+ ICMPv4CodeFragmentReassemblyTimeExceeded: "FragmentReassemblyTimeExceeded",
+ },
+ },
+ ICMPv4TypeParameterProblem: icmpv4TypeCodeInfoStruct{
+ "ParameterProblem", &map[uint8]string{
+ ICMPv4CodePointerIndicatesError: "PointerIndicatesError",
+ ICMPv4CodeMissingOption: "MissingOption",
+ ICMPv4CodeBadLength: "BadLength",
+ },
+ },
+ ICMPv4TypeSourceQuench: icmpv4TypeCodeInfoStruct{
+ "SourceQuench", nil,
+ },
+ ICMPv4TypeRedirect: icmpv4TypeCodeInfoStruct{
+ "Redirect", &map[uint8]string{
+ ICMPv4CodeNet: "Net",
+ ICMPv4CodeHost: "Host",
+ ICMPv4CodeTOSNet: "TOS+Net",
+ ICMPv4CodeTOSHost: "TOS+Host",
+ },
+ },
+ ICMPv4TypeEchoRequest: icmpv4TypeCodeInfoStruct{
+ "EchoRequest", nil,
+ },
+ ICMPv4TypeEchoReply: icmpv4TypeCodeInfoStruct{
+ "EchoReply", nil,
+ },
+ ICMPv4TypeTimestampRequest: icmpv4TypeCodeInfoStruct{
+ "TimestampRequest", nil,
+ },
+ ICMPv4TypeTimestampReply: icmpv4TypeCodeInfoStruct{
+ "TimestampReply", nil,
+ },
+ ICMPv4TypeInfoRequest: icmpv4TypeCodeInfoStruct{
+ "InfoRequest", nil,
+ },
+ ICMPv4TypeInfoReply: icmpv4TypeCodeInfoStruct{
+ "InfoReply", nil,
+ },
+ ICMPv4TypeRouterSolicitation: icmpv4TypeCodeInfoStruct{
+ "RouterSolicitation", nil,
+ },
+ ICMPv4TypeRouterAdvertisement: icmpv4TypeCodeInfoStruct{
+ "RouterAdvertisement", nil,
+ },
+ ICMPv4TypeAddressMaskRequest: icmpv4TypeCodeInfoStruct{
+ "AddressMaskRequest", nil,
+ },
+ ICMPv4TypeAddressMaskReply: icmpv4TypeCodeInfoStruct{
+ "AddressMaskReply", nil,
+ },
+ }
+)
+
+type ICMPv4TypeCode uint16
+
+// Type returns the ICMPv4 type field.
+func (a ICMPv4TypeCode) Type() uint8 {
+ return uint8(a >> 8)
+}
+
+// Code returns the ICMPv4 code field.
+func (a ICMPv4TypeCode) Code() uint8 {
+ return uint8(a)
+}
+
+func (a ICMPv4TypeCode) String() string {
+ t, c := a.Type(), a.Code()
+ strInfo, ok := icmpv4TypeCodeInfo[t]
+ if !ok {
+ // Unknown ICMPv4 type field
+ return fmt.Sprintf("%d(%d)", t, c)
+ }
+ typeStr := strInfo.typeStr
+ if strInfo.codeStr == nil && c == 0 {
+ // The ICMPv4 type does not make use of the code field
+ return fmt.Sprintf("%s", strInfo.typeStr)
+ }
+ if strInfo.codeStr == nil && c != 0 {
+ // The ICMPv4 type does not make use of the code field, but it is present anyway
+ return fmt.Sprintf("%s(Code: %d)", typeStr, c)
+ }
+ codeStr, ok := (*strInfo.codeStr)[c]
+ if !ok {
+ // We don't know this ICMPv4 code; print the numerical value
+ return fmt.Sprintf("%s(Code: %d)", typeStr, c)
+ }
+ return fmt.Sprintf("%s(%s)", typeStr, codeStr)
+}
+
+func (a ICMPv4TypeCode) GoString() string {
+ t := reflect.TypeOf(a)
+ return fmt.Sprintf("%s(%d, %d)", t.String(), a.Type(), a.Code())
+}
+
+// SerializeTo writes the ICMPv4TypeCode value to the 'bytes' buffer.
+func (a ICMPv4TypeCode) SerializeTo(bytes []byte) {
+ binary.BigEndian.PutUint16(bytes, uint16(a))
+}
+
+// CreateICMPv4TypeCode is a convenience function to create an ICMPv4TypeCode
+// gopacket type from the ICMPv4 type and code values.
+func CreateICMPv4TypeCode(typ uint8, code uint8) ICMPv4TypeCode {
+ return ICMPv4TypeCode(binary.BigEndian.Uint16([]byte{typ, code}))
+}
+
+// ICMPv4 is the layer for IPv4 ICMP packet data.
+type ICMPv4 struct {
+ BaseLayer
+ TypeCode ICMPv4TypeCode
+ Checksum uint16
+ Id uint16
+ Seq uint16
+}
+
+// LayerType returns LayerTypeICMPv4.
+func (i *ICMPv4) LayerType() gopacket.LayerType { return LayerTypeICMPv4 }
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (i *ICMPv4) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 8 {
+ df.SetTruncated()
+ return errors.New("ICMP layer less then 8 bytes for ICMPv4 packet")
+ }
+ i.TypeCode = CreateICMPv4TypeCode(data[0], data[1])
+ i.Checksum = binary.BigEndian.Uint16(data[2:4])
+ i.Id = binary.BigEndian.Uint16(data[4:6])
+ i.Seq = binary.BigEndian.Uint16(data[6:8])
+ i.BaseLayer = BaseLayer{data[:8], data[8:]}
+ return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (i *ICMPv4) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ bytes, err := b.PrependBytes(8)
+ if err != nil {
+ return err
+ }
+ i.TypeCode.SerializeTo(bytes)
+ binary.BigEndian.PutUint16(bytes[4:], i.Id)
+ binary.BigEndian.PutUint16(bytes[6:], i.Seq)
+ if opts.ComputeChecksums {
+ bytes[2] = 0
+ bytes[3] = 0
+ i.Checksum = tcpipChecksum(b.Bytes(), 0)
+ }
+ binary.BigEndian.PutUint16(bytes[2:], i.Checksum)
+ return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (i *ICMPv4) CanDecode() gopacket.LayerClass {
+ return LayerTypeICMPv4
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (i *ICMPv4) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypePayload
+}
+
+func decodeICMPv4(data []byte, p gopacket.PacketBuilder) error {
+ i := &ICMPv4{}
+ return decodingLayerDecoder(i, data, p)
+}
diff --git a/vendor/github.com/google/gopacket/layers/icmp6.go b/vendor/github.com/google/gopacket/layers/icmp6.go
new file mode 100644
index 0000000..03a3213
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/icmp6.go
@@ -0,0 +1,231 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "errors"
+ "fmt"
+ "reflect"
+
+ "github.com/google/gopacket"
+)
+
+const (
+ // The following are from RFC 4443
+ ICMPv6TypeDestinationUnreachable = 1
+ ICMPv6TypePacketTooBig = 2
+ ICMPv6TypeTimeExceeded = 3
+ ICMPv6TypeParameterProblem = 4
+ ICMPv6TypeEchoRequest = 128
+ ICMPv6TypeEchoReply = 129
+ // The following are from RFC 4861
+ ICMPv6TypeRouterSolicitation = 133
+ ICMPv6TypeRouterAdvertisement = 134
+ ICMPv6TypeNeighborSolicitation = 135
+ ICMPv6TypeNeighborAdvertisement = 136
+ ICMPv6TypeRedirect = 137
+)
+
+const (
+ // DestinationUnreachable
+ ICMPv6CodeNoRouteToDst = 0
+ ICMPv6CodeAdminProhibited = 1
+ ICMPv6CodeBeyondScopeOfSrc = 2
+ ICMPv6CodeAddressUnreachable = 3
+ ICMPv6CodePortUnreachable = 4
+ ICMPv6CodeSrcAddressFailedPolicy = 5
+ ICMPv6CodeRejectRouteToDst = 6
+
+ // TimeExceeded
+ ICMPv6CodeHopLimitExceeded = 0
+ ICMPv6CodeFragmentReassemblyTimeExceeded = 1
+
+ // ParameterProblem
+ ICMPv6CodeErroneousHeaderField = 0
+ ICMPv6CodeUnrecognizedNextHeader = 1
+ ICMPv6CodeUnrecognizedIPv6Option = 2
+)
+
+type icmpv6TypeCodeInfoStruct struct {
+ typeStr string
+ codeStr *map[uint8]string
+}
+
+var (
+ icmpv6TypeCodeInfo = map[uint8]icmpv6TypeCodeInfoStruct{
+ ICMPv6TypeDestinationUnreachable: icmpv6TypeCodeInfoStruct{
+ "DestinationUnreachable", &map[uint8]string{
+ ICMPv6CodeNoRouteToDst: "NoRouteToDst",
+ ICMPv6CodeAdminProhibited: "AdminProhibited",
+ ICMPv6CodeBeyondScopeOfSrc: "BeyondScopeOfSrc",
+ ICMPv6CodeAddressUnreachable: "AddressUnreachable",
+ ICMPv6CodePortUnreachable: "PortUnreachable",
+ ICMPv6CodeSrcAddressFailedPolicy: "SrcAddressFailedPolicy",
+ ICMPv6CodeRejectRouteToDst: "RejectRouteToDst",
+ },
+ },
+ ICMPv6TypePacketTooBig: icmpv6TypeCodeInfoStruct{
+ "PacketTooBig", nil,
+ },
+ ICMPv6TypeTimeExceeded: icmpv6TypeCodeInfoStruct{
+ "TimeExceeded", &map[uint8]string{
+ ICMPv6CodeHopLimitExceeded: "HopLimitExceeded",
+ ICMPv6CodeFragmentReassemblyTimeExceeded: "FragmentReassemblyTimeExceeded",
+ },
+ },
+ ICMPv6TypeParameterProblem: icmpv6TypeCodeInfoStruct{
+ "ParameterProblem", &map[uint8]string{
+ ICMPv6CodeErroneousHeaderField: "ErroneousHeaderField",
+ ICMPv6CodeUnrecognizedNextHeader: "UnrecognizedNextHeader",
+ ICMPv6CodeUnrecognizedIPv6Option: "UnrecognizedIPv6Option",
+ },
+ },
+ ICMPv6TypeEchoRequest: icmpv6TypeCodeInfoStruct{
+ "EchoRequest", nil,
+ },
+ ICMPv6TypeEchoReply: icmpv6TypeCodeInfoStruct{
+ "EchoReply", nil,
+ },
+ ICMPv6TypeRouterSolicitation: icmpv6TypeCodeInfoStruct{
+ "RouterSolicitation", nil,
+ },
+ ICMPv6TypeRouterAdvertisement: icmpv6TypeCodeInfoStruct{
+ "RouterAdvertisement", nil,
+ },
+ ICMPv6TypeNeighborSolicitation: icmpv6TypeCodeInfoStruct{
+ "NeighborSolicitation", nil,
+ },
+ ICMPv6TypeNeighborAdvertisement: icmpv6TypeCodeInfoStruct{
+ "NeighborAdvertisement", nil,
+ },
+ ICMPv6TypeRedirect: icmpv6TypeCodeInfoStruct{
+ "Redirect", nil,
+ },
+ }
+)
+
+type ICMPv6TypeCode uint16
+
+// Type returns the ICMPv6 type field.
+func (a ICMPv6TypeCode) Type() uint8 {
+ return uint8(a >> 8)
+}
+
+// Code returns the ICMPv6 code field.
+func (a ICMPv6TypeCode) Code() uint8 {
+ return uint8(a)
+}
+
+func (a ICMPv6TypeCode) String() string {
+ t, c := a.Type(), a.Code()
+ strInfo, ok := icmpv6TypeCodeInfo[t]
+ if !ok {
+ // Unknown ICMPv6 type field
+ return fmt.Sprintf("%d(%d)", t, c)
+ }
+ typeStr := strInfo.typeStr
+ if strInfo.codeStr == nil && c == 0 {
+ // The ICMPv6 type does not make use of the code field
+ return fmt.Sprintf("%s", strInfo.typeStr)
+ }
+ if strInfo.codeStr == nil && c != 0 {
+ // The ICMPv6 type does not make use of the code field, but it is present anyway
+ return fmt.Sprintf("%s(Code: %d)", typeStr, c)
+ }
+ codeStr, ok := (*strInfo.codeStr)[c]
+ if !ok {
+ // We don't know this ICMPv6 code; print the numerical value
+ return fmt.Sprintf("%s(Code: %d)", typeStr, c)
+ }
+ return fmt.Sprintf("%s(%s)", typeStr, codeStr)
+}
+
+func (a ICMPv6TypeCode) GoString() string {
+ t := reflect.TypeOf(a)
+ return fmt.Sprintf("%s(%d, %d)", t.String(), a.Type(), a.Code())
+}
+
+// SerializeTo writes the ICMPv6TypeCode value to the 'bytes' buffer.
+func (a ICMPv6TypeCode) SerializeTo(bytes []byte) {
+ binary.BigEndian.PutUint16(bytes, uint16(a))
+}
+
+// CreateICMPv6TypeCode is a convenience function to create an ICMPv6TypeCode
+// gopacket type from the ICMPv6 type and code values.
+func CreateICMPv6TypeCode(typ uint8, code uint8) ICMPv6TypeCode {
+ return ICMPv6TypeCode(binary.BigEndian.Uint16([]byte{typ, code}))
+}
+
+// ICMPv6 is the layer for IPv6 ICMP packet data
+type ICMPv6 struct {
+ BaseLayer
+ TypeCode ICMPv6TypeCode
+ Checksum uint16
+ TypeBytes []byte
+ tcpipchecksum
+}
+
+// LayerType returns LayerTypeICMPv6.
+func (i *ICMPv6) LayerType() gopacket.LayerType { return LayerTypeICMPv6 }
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (i *ICMPv6) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 8 {
+ df.SetTruncated()
+ return errors.New("ICMP layer less then 8 bytes for ICMPv6 packet")
+ }
+ i.TypeCode = CreateICMPv6TypeCode(data[0], data[1])
+ i.Checksum = binary.BigEndian.Uint16(data[2:4])
+ i.TypeBytes = data[4:8]
+ i.BaseLayer = BaseLayer{data[:8], data[8:]}
+ return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (i *ICMPv6) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ if i.TypeBytes == nil {
+ i.TypeBytes = lotsOfZeros[:4]
+ } else if len(i.TypeBytes) != 4 {
+ return fmt.Errorf("invalid type bytes for ICMPv6 packet: %v", i.TypeBytes)
+ }
+ bytes, err := b.PrependBytes(8)
+ if err != nil {
+ return err
+ }
+ i.TypeCode.SerializeTo(bytes)
+ copy(bytes[4:8], i.TypeBytes)
+ if opts.ComputeChecksums {
+ bytes[2] = 0
+ bytes[3] = 0
+ csum, err := i.computeChecksum(b.Bytes(), IPProtocolICMPv6)
+ if err != nil {
+ return err
+ }
+ i.Checksum = csum
+ }
+ binary.BigEndian.PutUint16(bytes[2:], i.Checksum)
+ return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (i *ICMPv6) CanDecode() gopacket.LayerClass {
+ return LayerTypeICMPv6
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (i *ICMPv6) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypePayload
+}
+
+func decodeICMPv6(data []byte, p gopacket.PacketBuilder) error {
+ i := &ICMPv6{}
+ return decodingLayerDecoder(i, data, p)
+}
diff --git a/vendor/github.com/google/gopacket/layers/icmp6_test.go b/vendor/github.com/google/gopacket/layers/icmp6_test.go
new file mode 100644
index 0000000..4a6d248
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/icmp6_test.go
@@ -0,0 +1,84 @@
+// Copyright 2012, Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "github.com/google/gopacket"
+ "net"
+ "reflect"
+ "testing"
+)
+
+// testPacketICMPv6 is the packet:
+// 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
+// 0x0000: 001f cab3 7640 24be 0527 0b17 86dd 6000 ....v@$..'....`.
+// 0x0010: 0000 0018 3aff 2620 0000 1005 0000 26be ....:.&.......&.
+// 0x0020: 05ff fe27 0b17 fe80 0000 0000 0000 021f ...'............
+// 0x0030: caff feb3 7640 8800 1ed6 4000 0000 2620 ....v@....@...&.
+// 0x0040: 0000 1005 0000 26be 05ff fe27 0b17 ......&....'..
+var testPacketICMPv6 = []byte{
+ 0x00, 0x1f, 0xca, 0xb3, 0x76, 0x40, 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x86, 0xdd, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x3a, 0xff, 0x26, 0x20, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x26, 0xbe,
+ 0x05, 0xff, 0xfe, 0x27, 0x0b, 0x17, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1f,
+ 0xca, 0xff, 0xfe, 0xb3, 0x76, 0x40, 0x88, 0x00, 0x1e, 0xd6, 0x40, 0x00, 0x00, 0x00, 0x26, 0x20,
+ 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x26, 0xbe, 0x05, 0xff, 0xfe, 0x27, 0x0b, 0x17,
+}
+
+func TestPacketICMPv6(t *testing.T) {
+ p := gopacket.NewPacket(testPacketICMPv6, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeICMPv6, gopacket.LayerTypePayload}, t)
+ if got, ok := p.Layer(LayerTypeIPv6).(*IPv6); ok {
+ want := &IPv6{
+ BaseLayer: BaseLayer{
+ Contents: []byte{0x60, 0x0, 0x0, 0x0, 0x0, 0x18,
+ 0x3a, 0xff, 0x26, 0x20, 0x0, 0x0, 0x10, 0x5, 0x0, 0x0, 0x26, 0xbe, 0x5,
+ 0xff, 0xfe, 0x27, 0xb, 0x17, 0xfe, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x2, 0x1f, 0xca, 0xff, 0xfe, 0xb3, 0x76, 0x40},
+ Payload: []byte{0x88, 0x0, 0x1e, 0xd6, 0x40, 0x0, 0x0, 0x0, 0x26, 0x20,
+ 0x0, 0x0, 0x10, 0x5, 0x0, 0x0, 0x26, 0xbe, 0x5, 0xff, 0xfe, 0x27, 0xb,
+ 0x17},
+ },
+ Version: 6,
+ TrafficClass: 0,
+ FlowLabel: 0,
+ Length: 24,
+ NextHeader: IPProtocolICMPv6,
+ HopLimit: 255,
+ SrcIP: net.IP{0x26, 0x20, 0x0, 0x0, 0x10, 0x5, 0x0, 0x0, 0x26, 0xbe, 0x5, 0xff, 0xfe, 0x27, 0xb, 0x17},
+ DstIP: net.IP{0xfe, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x1f, 0xca, 0xff, 0xfe, 0xb3, 0x76, 0x40},
+ }
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("IPv6 packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want)
+ }
+ } else {
+ t.Error("No IPv6 layer type found in packet")
+ }
+ if got, ok := p.Layer(LayerTypeICMPv6).(*ICMPv6); ok {
+ want := &ICMPv6{
+ BaseLayer: BaseLayer{
+ Contents: []byte{0x88, 0x0, 0x1e, 0xd6, 0x40, 0x0, 0x0, 0x0},
+ Payload: []byte{0x26, 0x20, 0x0, 0x0, 0x10,
+ 0x5, 0x0, 0x0, 0x26, 0xbe, 0x5, 0xff, 0xfe, 0x27, 0xb, 0x17},
+ },
+ TypeCode: 0x8800,
+ Checksum: 0x1ed6,
+ TypeBytes: []byte{0x40, 0x0, 0x0, 0x0},
+ }
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("ICMPv6 packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want)
+ }
+ if got.TypeCode.String() != "NeighborAdvertisement" {
+ t.Errorf("ICMPv6 type code, got %q want 'NeighborAdvertisement'", got.TypeCode.String())
+ }
+ } else {
+ t.Error("No ICMPv6 layer type found in packet")
+ }
+}
diff --git a/vendor/github.com/google/gopacket/layers/igmp.go b/vendor/github.com/google/gopacket/layers/igmp.go
new file mode 100644
index 0000000..d008415
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/igmp.go
@@ -0,0 +1,355 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "errors"
+ "net"
+ "time"
+
+ "github.com/google/gopacket"
+)
+
+type IGMPType uint8
+
+const (
+ IGMPMembershipQuery IGMPType = 0x11 // General or group specific query
+ IGMPMembershipReportV1 IGMPType = 0x12 // Version 1 Membership Report
+ IGMPMembershipReportV2 IGMPType = 0x16 // Version 2 Membership Report
+ IGMPLeaveGroup IGMPType = 0x17 // Leave Group
+ IGMPMembershipReportV3 IGMPType = 0x22 // Version 3 Membership Report
+)
+
+// String conversions for IGMP message types
+func (i IGMPType) String() string {
+ switch i {
+ case IGMPMembershipQuery:
+ return "IGMP Membership Query"
+ case IGMPMembershipReportV1:
+ return "IGMPv1 Membership Report"
+ case IGMPMembershipReportV2:
+ return "IGMPv2 Membership Report"
+ case IGMPMembershipReportV3:
+ return "IGMPv3 Membership Report"
+ case IGMPLeaveGroup:
+ return "Leave Group"
+ default:
+ return ""
+ }
+}
+
+type IGMPv3GroupRecordType uint8
+
+const (
+ IGMPIsIn IGMPv3GroupRecordType = 0x01 // Type MODE_IS_INCLUDE, source addresses x
+ IGMPIsEx IGMPv3GroupRecordType = 0x02 // Type MODE_IS_EXCLUDE, source addresses x
+ IGMPToIn IGMPv3GroupRecordType = 0x03 // Type CHANGE_TO_INCLUDE_MODE, source addresses x
+ IGMPToEx IGMPv3GroupRecordType = 0x04 // Type CHANGE_TO_EXCLUDE_MODE, source addresses x
+ IGMPAllow IGMPv3GroupRecordType = 0x05 // Type ALLOW_NEW_SOURCES, source addresses x
+ IGMPBlock IGMPv3GroupRecordType = 0x06 // Type BLOCK_OLD_SOURCES, source addresses x
+)
+
+func (i IGMPv3GroupRecordType) String() string {
+ switch i {
+ case IGMPIsIn:
+ return "MODE_IS_INCLUDE"
+ case IGMPIsEx:
+ return "MODE_IS_EXCLUDE"
+ case IGMPToIn:
+ return "CHANGE_TO_INCLUDE_MODE"
+ case IGMPToEx:
+ return "CHANGE_TO_EXCLUDE_MODE"
+ case IGMPAllow:
+ return "ALLOW_NEW_SOURCES"
+ case IGMPBlock:
+ return "BLOCK_OLD_SOURCES"
+ default:
+ return ""
+ }
+}
+
+// IGMP represents an IGMPv3 message.
+type IGMP struct {
+ BaseLayer
+ Type IGMPType
+ MaxResponseTime time.Duration
+ Checksum uint16
+ GroupAddress net.IP
+ SupressRouterProcessing bool
+ RobustnessValue uint8
+ IntervalTime time.Duration
+ SourceAddresses []net.IP
+ NumberOfGroupRecords uint16
+ NumberOfSources uint16
+ GroupRecords []IGMPv3GroupRecord
+ Version uint8 // IGMP protocol version
+}
+
+// IGMPv1or2 stores header details for an IGMPv1 or IGMPv2 packet.
+//
+// 0 1 2 3
+// 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
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Type | Max Resp Time | Checksum |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Group Address |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+type IGMPv1or2 struct {
+ BaseLayer
+ Type IGMPType // IGMP message type
+ MaxResponseTime time.Duration // meaningful only in Membership Query messages
+ Checksum uint16 // 16-bit checksum of entire ip payload
+ GroupAddress net.IP // either 0 or an IP multicast address
+ Version uint8
+}
+
+// decodeResponse dissects IGMPv1 or IGMPv2 packet.
+func (i *IGMPv1or2) decodeResponse(data []byte) error {
+ if len(data) < 8 {
+ return errors.New("IGMP packet too small")
+ }
+
+ i.MaxResponseTime = igmpTimeDecode(data[1])
+ i.Checksum = binary.BigEndian.Uint16(data[2:4])
+ i.GroupAddress = net.IP(data[4:8])
+
+ return nil
+}
+
+// 0 1 2 3
+// 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
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Type = 0x22 | Reserved | Checksum |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Reserved | Number of Group Records (M) |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | |
+// . Group Record [1] .
+// | |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | |
+// . Group Record [2] .
+// | |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | |
+// . Group Record [M] .
+// | |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Record Type | Aux Data Len | Number of Sources (N) |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Multicast Address |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Source Address [1] |
+// +- -+
+// | Source Address [2] |
+// +- -+
+// | Source Address [N] |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | |
+// . Auxiliary Data .
+// | |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+// IGMPv3GroupRecord stores individual group records for a V3 Membership Report message.
+type IGMPv3GroupRecord struct {
+ Type IGMPv3GroupRecordType
+ AuxDataLen uint8 // this should always be 0 as per IGMPv3 spec.
+ NumberOfSources uint16
+ MulticastAddress net.IP
+ SourceAddresses []net.IP
+ AuxData uint32 // NOT USED
+}
+
+func (i *IGMP) decodeIGMPv3MembershipReport(data []byte) error {
+ if len(data) < 8 {
+ return errors.New("IGMPv3 Membership Report too small #1")
+ }
+
+ i.Checksum = binary.BigEndian.Uint16(data[2:4])
+ i.NumberOfGroupRecords = binary.BigEndian.Uint16(data[6:8])
+
+ recordOffset := 8
+ for j := 0; j < int(i.NumberOfGroupRecords); j++ {
+ if len(data) < recordOffset+8 {
+ return errors.New("IGMPv3 Membership Report too small #2")
+ }
+
+ var gr IGMPv3GroupRecord
+ gr.Type = IGMPv3GroupRecordType(data[recordOffset])
+ gr.AuxDataLen = data[recordOffset+1]
+ gr.NumberOfSources = binary.BigEndian.Uint16(data[recordOffset+2 : recordOffset+4])
+ gr.MulticastAddress = net.IP(data[recordOffset+4 : recordOffset+8])
+
+ if len(data) < recordOffset+8+int(gr.NumberOfSources)*4 {
+ return errors.New("IGMPv3 Membership Report too small #3")
+ }
+
+ // append source address records.
+ for i := 0; i < int(gr.NumberOfSources); i++ {
+ sourceAddr := net.IP(data[recordOffset+8+i*4 : recordOffset+12+i*4])
+ gr.SourceAddresses = append(gr.SourceAddresses, sourceAddr)
+ }
+
+ i.GroupRecords = append(i.GroupRecords, gr)
+ recordOffset += 8 + 4*int(gr.NumberOfSources)
+ }
+ return nil
+}
+
+// 0 1 2 3
+// 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
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Type = 0x11 | Max Resp Code | Checksum |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Group Address |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Resv |S| QRV | QQIC | Number of Sources (N) |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Source Address [1] |
+// +- -+
+// | Source Address [2] |
+// +- . -+
+// | Source Address [N] |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//
+// decodeIGMPv3MembershipQuery parses the IGMPv3 message of type 0x11
+func (i *IGMP) decodeIGMPv3MembershipQuery(data []byte) error {
+ if len(data) < 12 {
+ return errors.New("IGMPv3 Membership Query too small #1")
+ }
+
+ i.MaxResponseTime = igmpTimeDecode(data[1])
+ i.Checksum = binary.BigEndian.Uint16(data[2:4])
+ i.SupressRouterProcessing = data[8]&0x8 != 0
+ i.GroupAddress = net.IP(data[4:8])
+ i.RobustnessValue = data[8] & 0x7
+ i.IntervalTime = igmpTimeDecode(data[9])
+ i.NumberOfSources = binary.BigEndian.Uint16(data[10:12])
+
+ if len(data) < 12+int(i.NumberOfSources)*4 {
+ return errors.New("IGMPv3 Membership Query too small #2")
+ }
+
+ for j := 0; j < int(i.NumberOfSources); j++ {
+ i.SourceAddresses = append(i.SourceAddresses, net.IP(data[12+j*4:16+j*4]))
+ }
+
+ return nil
+}
+
+// igmpTimeDecode decodes the duration created by the given byte, using the
+// algorithm in http://www.rfc-base.org/txt/rfc-3376.txt section 4.1.1.
+func igmpTimeDecode(t uint8) time.Duration {
+ if t&0x80 == 0 {
+ return time.Millisecond * 100 * time.Duration(t)
+ }
+ mant := (t & 0x70) >> 4
+ exp := t & 0x0F
+ return time.Millisecond * 100 * time.Duration((mant|0x10)<<(exp+3))
+}
+
+// LayerType returns LayerTypeIGMP for the V1,2,3 message protocol formats.
+func (i *IGMP) LayerType() gopacket.LayerType { return LayerTypeIGMP }
+func (i *IGMPv1or2) LayerType() gopacket.LayerType { return LayerTypeIGMP }
+
+func (i *IGMPv1or2) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 8 {
+ return errors.New("IGMP Packet too small")
+ }
+
+ i.Type = IGMPType(data[0])
+ i.MaxResponseTime = igmpTimeDecode(data[1])
+ i.Checksum = binary.BigEndian.Uint16(data[2:4])
+ i.GroupAddress = net.IP(data[4:8])
+
+ return nil
+}
+
+func (i *IGMPv1or2) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypeZero
+}
+
+func (i *IGMPv1or2) CanDecode() gopacket.LayerClass {
+ return LayerTypeIGMP
+}
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (i *IGMP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 1 {
+ return errors.New("IGMP packet is too small")
+ }
+
+ // common IGMP header values between versions 1..3 of IGMP specification..
+ i.Type = IGMPType(data[0])
+
+ switch i.Type {
+ case IGMPMembershipQuery:
+ i.decodeIGMPv3MembershipQuery(data)
+ case IGMPMembershipReportV3:
+ i.decodeIGMPv3MembershipReport(data)
+ default:
+ return errors.New("unsupported IGMP type")
+ }
+
+ return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (i *IGMP) CanDecode() gopacket.LayerClass {
+ return LayerTypeIGMP
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (i *IGMP) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypeZero
+}
+
+// decodeIGMP will parse IGMP v1,2 or 3 protocols. Checks against the
+// IGMP type are performed against byte[0], logic then iniitalizes and
+// passes the appropriate struct (IGMP or IGMPv1or2) to
+// decodingLayerDecoder.
+func decodeIGMP(data []byte, p gopacket.PacketBuilder) error {
+ if len(data) < 1 {
+ return errors.New("IGMP packet is too small")
+ }
+
+ // byte 0 contains IGMP message type.
+ switch IGMPType(data[0]) {
+ case IGMPMembershipQuery:
+ // IGMPv3 Membership Query payload is >= 12
+ if len(data) >= 12 {
+ i := &IGMP{Version: 3}
+ return decodingLayerDecoder(i, data, p)
+ } else if len(data) == 8 {
+ i := &IGMPv1or2{}
+ if data[1] == 0x00 {
+ i.Version = 1 // IGMPv1 has a query length of 8 and MaxResp = 0
+ } else {
+ i.Version = 2 // IGMPv2 has a query length of 8 and MaxResp != 0
+ }
+
+ return decodingLayerDecoder(i, data, p)
+ }
+ case IGMPMembershipReportV3:
+ i := &IGMP{Version: 3}
+ return decodingLayerDecoder(i, data, p)
+ case IGMPMembershipReportV1:
+ i := &IGMPv1or2{Version: 1}
+ return decodingLayerDecoder(i, data, p)
+ case IGMPLeaveGroup, IGMPMembershipReportV2:
+ // leave group and Query Report v2 used in IGMPv2 only.
+ i := &IGMPv1or2{Version: 2}
+ return decodingLayerDecoder(i, data, p)
+ default:
+ }
+
+ return errors.New("Unable to determine IGMP type.")
+}
diff --git a/vendor/github.com/google/gopacket/layers/igmp_test.go b/vendor/github.com/google/gopacket/layers/igmp_test.go
new file mode 100644
index 0000000..923356d
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/igmp_test.go
@@ -0,0 +1,171 @@
+// Copyright 2016, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "testing"
+
+ "github.com/google/gopacket"
+)
+
+// igmpv1MembershipReportPacket is the packet:
+// 02:45:36.033916 IP 10.60.0.132 > 224.0.1.60: igmp v1 report 224.0.1.60
+// 0x0000: 0100 5e00 013c 0030 c1bf 5755 0800 4500 ..^..<.0..WU..E.
+// 0x0010: 001c 6a7f 0000 0102 6365 0a3c 0084 e000 ..j.....ce.<....
+// 0x0020: 013c 1200 0cc3 e000 013c 0000 0000 0000 .<.......<......
+// 0x0030: ffff ffff ffff 0452 0000 0000 .......R....
+var igmpv1MembershipReportPacket = []byte{
+ 0x01, 0x00, 0x5e, 0x00, 0x01, 0x3c, 0x00, 0x30, 0xc1, 0xbf, 0x57, 0x55, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0x1c, 0x6a, 0x7f, 0x00, 0x00, 0x01, 0x02, 0x63, 0x65, 0x0a, 0x3c, 0x00, 0x84, 0xe0, 0x00,
+ 0x01, 0x3c, 0x12, 0x00, 0x0c, 0xc3, 0xe0, 0x00, 0x01, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x52, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestIGMPv1MembershipReportPacket(t *testing.T) {
+ p := gopacket.NewPacket(igmpv1MembershipReportPacket, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIGMP}, t)
+
+ igmp := p.Layer(LayerTypeIGMP).(*IGMPv1or2)
+ if igmp.Type != IGMPMembershipReportV1 {
+ t.Fatal("Invalid IGMP type")
+ }
+}
+
+func BenchmarkDecodeigmpv1MembershipReportPacket(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(igmpv1MembershipReportPacket, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+// igmpv2MembershipQueryPacket is the packet:
+// 02:45:28.071636 IP 10.60.0.189 > 224.0.0.1: igmp query v2
+// 0x0000: 0100 5e00 0001 0001 636f c800 0800 45c0 ..^.....co....E.
+// 0x0010: 001c 0153 0000 0102 ccd3 0a3c 00bd e000 ...S.......<....
+// 0x0020: 0001 1164 ee9b 0000 0000 0000 0000 0000 ...d............
+// 0x0030: 0000 0000 0000 0000 0000 0000 ............
+var igmpv2MembershipQueryPacket = []byte{
+ 0x01, 0x00, 0x5e, 0x00, 0x00, 0x01, 0x00, 0x01, 0x63, 0x6f, 0xc8, 0x00, 0x08, 0x00, 0x45, 0xc0,
+ 0x00, 0x1c, 0x01, 0x53, 0x00, 0x00, 0x01, 0x02, 0xcc, 0xd3, 0x0a, 0x3c, 0x00, 0xbd, 0xe0, 0x00,
+ 0x00, 0x01, 0x11, 0x64, 0xee, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestIGMPv2MembershipQuery(t *testing.T) {
+ p := gopacket.NewPacket(igmpv2MembershipQueryPacket, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIGMP}, t)
+
+ igmp := p.Layer(LayerTypeIGMP).(*IGMPv1or2)
+ if igmp.Type != IGMPMembershipQuery {
+ t.Fatal("Invalid IGMP type")
+ }
+}
+func BenchmarkDecodeigmpv2MembershipQueryPacket(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(igmpv2MembershipQueryPacket, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+// igmpv2MembershipReportPacket is the packet:
+// 02:47:32.417288 IP 10.60.5.103 > 239.255.255.253: igmp v2 report 239.255.255.253
+// 0x0000: 0100 5e7f fffd 0015 58dc d9f6 0800 4600 ..^.....X.....F.
+// 0x0010: 0020 79f0 0000 0102 ab47 0a3c 0567 efff ..y......G.<.g..
+// 0x0020: fffd 9404 0000 1600 fa01 efff fffd 0000 ................
+// 0x0030: 0000 0000 0000 0000 0000 0000 ............
+var igmpv2MembershipReportPacket = []byte{
+ 0x01, 0x00, 0x5e, 0x7f, 0xff, 0xfd, 0x00, 0x15, 0x58, 0xdc, 0xd9, 0xf6, 0x08, 0x00, 0x46, 0x00,
+ 0x00, 0x20, 0x79, 0xf0, 0x00, 0x00, 0x01, 0x02, 0xab, 0x47, 0x0a, 0x3c, 0x05, 0x67, 0xef, 0xff,
+ 0xff, 0xfd, 0x94, 0x04, 0x00, 0x00, 0x16, 0x00, 0xfa, 0x01, 0xef, 0xff, 0xff, 0xfd, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestIGMPv2MembershipReport(t *testing.T) {
+ p := gopacket.NewPacket(igmpv2MembershipReportPacket, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIGMP}, t)
+
+ igmp := p.Layer(LayerTypeIGMP).(*IGMPv1or2)
+ if igmp.Type != IGMPMembershipReportV2 {
+ t.Fatal("Invalid IGMP type")
+ }
+}
+func BenchmarkDecodeigmpv2MembershipReportPacket(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(igmpv2MembershipReportPacket, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+// igmp3v3MembershipQueryPacket is the packet:
+// 10:07:30.488511 IP 192.168.1.254 > 224.0.0.1: igmp query v3 [max resp time 2.4s]
+// 0x0000: 0100 5e00 0001 0026 446c 1eda 0800 46c0 ..^....&Dl....F.
+// 0x0010: 0024 17f1 4000 0102 297b c0a8 01fe e000 .$..@...){......
+// 0x0020: 0001 9404 0000 1118 ecd3 0000 0000 0214 ................
+// 0x0030: 0000 0000 0000 0000 0000 0000 ............
+var igmp3v3MembershipQueryPacket = []byte{
+ 0x01, 0x00, 0x5e, 0x00, 0x00, 0x01, 0x00, 0x26, 0x44, 0x6c, 0x1e, 0xda, 0x08, 0x00, 0x46, 0xc0,
+ 0x00, 0x24, 0x17, 0xf1, 0x40, 0x00, 0x01, 0x02, 0x29, 0x7b, 0xc0, 0xa8, 0x01, 0xfe, 0xe0, 0x00,
+ 0x00, 0x01, 0x94, 0x04, 0x00, 0x00, 0x11, 0x18, 0xec, 0xd3, 0x00, 0x00, 0x00, 0x00, 0x02, 0x14,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestIGMPv3MembershipQuery(t *testing.T) {
+ p := gopacket.NewPacket(igmp3v3MembershipQueryPacket, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIGMP}, t)
+
+ igmp := p.Layer(LayerTypeIGMP).(*IGMP)
+ if igmp.Type != IGMPMembershipQuery {
+ t.Fatal("Invalid IGMP type")
+ }
+}
+
+func BenchmarkDecodeigmp3v3MembershipQueryPacket(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(igmp3v3MembershipQueryPacket, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+// igmpv3MembershipReport2Records is the packet:
+// 10:07:29.756202 IP 192.168.1.66 > 224.0.0.22: igmp v3 report, 2 group record(s)
+// 0x0000: 0100 5e00 0016 0025 2e51 c381 0800 4658 ..^....%.Q....FX
+// 0x0010: 0030 013c 0000 0102 8133 c0a8 0142 e000 .0.<.....3...B..
+// 0x0020: 0016 9404 0000 2200 f33c 0000 0002 0200 ......"..<......
+// 0x0030: 0000 efc3 0702 0200 0000 efff fffa ..............
+var igmpv3MembershipReport2Records = []byte{
+ 0x01, 0x00, 0x5e, 0x00, 0x00, 0x16, 0x00, 0x25, 0x2e, 0x51, 0xc3, 0x81, 0x08, 0x00, 0x46, 0x58,
+ 0x00, 0x30, 0x01, 0x3c, 0x00, 0x00, 0x01, 0x02, 0x81, 0x33, 0xc0, 0xa8, 0x01, 0x42, 0xe0, 0x00,
+ 0x00, 0x16, 0x94, 0x04, 0x00, 0x00, 0x22, 0x00, 0xf3, 0x3c, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00,
+ 0x00, 0x00, 0xef, 0xc3, 0x07, 0x02, 0x02, 0x00, 0x00, 0x00, 0xef, 0xff, 0xff, 0xfa,
+}
+
+func TestIGMPv3MembershipReport2Records(t *testing.T) {
+ p := gopacket.NewPacket(igmpv3MembershipReport2Records, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIGMP}, t)
+
+ igmp := p.Layer(LayerTypeIGMP).(*IGMP)
+ if igmp.Type != IGMPMembershipReportV3 {
+ t.Fatal("Invalid IGMP type")
+ }
+}
+
+func BenchmarkDecodeigmpv3MembershipReport2Records(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(igmpv3MembershipReport2Records, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
diff --git a/vendor/github.com/google/gopacket/layers/ip4.go b/vendor/github.com/google/gopacket/layers/ip4.go
new file mode 100644
index 0000000..3f31b27
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/ip4.go
@@ -0,0 +1,311 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "errors"
+ "fmt"
+ "net"
+ "strings"
+
+ "github.com/google/gopacket"
+)
+
+type IPv4Flag uint8
+
+const (
+ IPv4EvilBit IPv4Flag = 1 << 2 // http://tools.ietf.org/html/rfc3514 ;)
+ IPv4DontFragment IPv4Flag = 1 << 1
+ IPv4MoreFragments IPv4Flag = 1 << 0
+)
+
+func (f IPv4Flag) String() string {
+ var s []string
+ if f&IPv4EvilBit != 0 {
+ s = append(s, "Evil")
+ }
+ if f&IPv4DontFragment != 0 {
+ s = append(s, "DF")
+ }
+ if f&IPv4MoreFragments != 0 {
+ s = append(s, "MF")
+ }
+ return strings.Join(s, "|")
+}
+
+// IPv4 is the header of an IP packet.
+type IPv4 struct {
+ BaseLayer
+ Version uint8
+ IHL uint8
+ TOS uint8
+ Length uint16
+ Id uint16
+ Flags IPv4Flag
+ FragOffset uint16
+ TTL uint8
+ Protocol IPProtocol
+ Checksum uint16
+ SrcIP net.IP
+ DstIP net.IP
+ Options []IPv4Option
+ Padding []byte
+}
+
+// LayerType returns LayerTypeIPv4
+func (i *IPv4) LayerType() gopacket.LayerType { return LayerTypeIPv4 }
+func (i *IPv4) NetworkFlow() gopacket.Flow {
+ return gopacket.NewFlow(EndpointIPv4, i.SrcIP, i.DstIP)
+}
+
+type IPv4Option struct {
+ OptionType uint8
+ OptionLength uint8
+ OptionData []byte
+}
+
+func (i IPv4Option) String() string {
+ return fmt.Sprintf("IPv4Option(%v:%v)", i.OptionType, i.OptionData)
+}
+
+// for the current ipv4 options, return the number of bytes (including
+// padding that the options used)
+func (ip *IPv4) getIPv4OptionSize() uint8 {
+ optionSize := uint8(0)
+ for _, opt := range ip.Options {
+ switch opt.OptionType {
+ case 0:
+ // this is the end of option lists
+ optionSize++
+ case 1:
+ // this is the padding
+ optionSize++
+ default:
+ optionSize += opt.OptionLength
+
+ }
+ }
+ // make sure the options are aligned to 32 bit boundary
+ if (optionSize % 4) != 0 {
+ optionSize += 4 - (optionSize % 4)
+ }
+ return optionSize
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+func (ip *IPv4) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ optionLength := ip.getIPv4OptionSize()
+ bytes, err := b.PrependBytes(20 + int(optionLength))
+ if err != nil {
+ return err
+ }
+ if opts.FixLengths {
+ ip.IHL = 5 + (optionLength / 4)
+ ip.Length = uint16(len(b.Bytes()))
+ }
+ bytes[0] = (ip.Version << 4) | ip.IHL
+ bytes[1] = ip.TOS
+ binary.BigEndian.PutUint16(bytes[2:], ip.Length)
+ binary.BigEndian.PutUint16(bytes[4:], ip.Id)
+ binary.BigEndian.PutUint16(bytes[6:], ip.flagsfrags())
+ bytes[8] = ip.TTL
+ bytes[9] = byte(ip.Protocol)
+ if err := ip.AddressTo4(); err != nil {
+ return err
+ }
+ copy(bytes[12:16], ip.SrcIP)
+ copy(bytes[16:20], ip.DstIP)
+
+ curLocation := 20
+ // Now, we will encode the options
+ for _, opt := range ip.Options {
+ switch opt.OptionType {
+ case 0:
+ // this is the end of option lists
+ bytes[curLocation] = 0
+ curLocation++
+ case 1:
+ // this is the padding
+ bytes[curLocation] = 1
+ curLocation++
+ default:
+ bytes[curLocation] = opt.OptionType
+ bytes[curLocation+1] = opt.OptionLength
+
+ // sanity checking to protect us from buffer overrun
+ if len(opt.OptionData) > int(opt.OptionLength-2) {
+ return errors.New("option length is smaller than length of option data")
+ }
+ copy(bytes[curLocation+2:curLocation+int(opt.OptionLength)], opt.OptionData)
+ curLocation += int(opt.OptionLength)
+ }
+ }
+
+ if opts.ComputeChecksums {
+ ip.Checksum = checksum(bytes)
+ }
+ binary.BigEndian.PutUint16(bytes[10:], ip.Checksum)
+ return nil
+}
+
+func checksum(bytes []byte) uint16 {
+ // Clear checksum bytes
+ bytes[10] = 0
+ bytes[11] = 0
+
+ // Compute checksum
+ var csum uint32
+ for i := 0; i < len(bytes); i += 2 {
+ csum += uint32(bytes[i]) << 8
+ csum += uint32(bytes[i+1])
+ }
+ for {
+ // Break when sum is less or equals to 0xFFFF
+ if csum <= 65535 {
+ break
+ }
+ // Add carry to the sum
+ csum = (csum >> 16) + uint32(uint16(csum))
+ }
+ // Flip all the bits
+ return ^uint16(csum)
+}
+
+func (ip *IPv4) flagsfrags() (ff uint16) {
+ ff |= uint16(ip.Flags) << 13
+ ff |= ip.FragOffset
+ return
+}
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (ip *IPv4) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ flagsfrags := binary.BigEndian.Uint16(data[6:8])
+
+ ip.Version = uint8(data[0]) >> 4
+ ip.IHL = uint8(data[0]) & 0x0F
+ ip.TOS = data[1]
+ ip.Length = binary.BigEndian.Uint16(data[2:4])
+ ip.Id = binary.BigEndian.Uint16(data[4:6])
+ ip.Flags = IPv4Flag(flagsfrags >> 13)
+ ip.FragOffset = flagsfrags & 0x1FFF
+ ip.TTL = data[8]
+ ip.Protocol = IPProtocol(data[9])
+ ip.Checksum = binary.BigEndian.Uint16(data[10:12])
+ ip.SrcIP = data[12:16]
+ ip.DstIP = data[16:20]
+ ip.Options = ip.Options[:0]
+ // Set up an initial guess for contents/payload... we'll reset these soon.
+ ip.BaseLayer = BaseLayer{Contents: data}
+
+ // This code is added for the following enviroment:
+ // * Windows 10 with TSO option activated. ( tested on Hyper-V, RealTek ethernet driver )
+ if ip.Length == 0 {
+ // If using TSO(TCP Segmentation Offload), length is zero.
+ // The actual packet length is the length of data.
+ ip.Length = uint16(len(data))
+ }
+
+ if ip.Length < 20 {
+ return fmt.Errorf("Invalid (too small) IP length (%d < 20)", ip.Length)
+ } else if ip.IHL < 5 {
+ return fmt.Errorf("Invalid (too small) IP header length (%d < 5)", ip.IHL)
+ } else if int(ip.IHL*4) > int(ip.Length) {
+ return fmt.Errorf("Invalid IP header length > IP length (%d > %d)", ip.IHL, ip.Length)
+ }
+ if cmp := len(data) - int(ip.Length); cmp > 0 {
+ data = data[:ip.Length]
+ } else if cmp < 0 {
+ df.SetTruncated()
+ if int(ip.IHL)*4 > len(data) {
+ return errors.New("Not all IP header bytes available")
+ }
+ }
+ ip.Contents = data[:ip.IHL*4]
+ ip.Payload = data[ip.IHL*4:]
+ // From here on, data contains the header options.
+ data = data[20 : ip.IHL*4]
+ // Pull out IP options
+ for len(data) > 0 {
+ if ip.Options == nil {
+ // Pre-allocate to avoid growing the slice too much.
+ ip.Options = make([]IPv4Option, 0, 4)
+ }
+ opt := IPv4Option{OptionType: data[0]}
+ switch opt.OptionType {
+ case 0: // End of options
+ opt.OptionLength = 1
+ ip.Options = append(ip.Options, opt)
+ ip.Padding = data[1:]
+ break
+ case 1: // 1 byte padding
+ opt.OptionLength = 1
+ default:
+ opt.OptionLength = data[1]
+ opt.OptionData = data[2:opt.OptionLength]
+ }
+ if len(data) >= int(opt.OptionLength) {
+ data = data[opt.OptionLength:]
+ } else {
+ return fmt.Errorf("IP option length exceeds remaining IP header size, option type %v length %v", opt.OptionType, opt.OptionLength)
+ }
+ ip.Options = append(ip.Options, opt)
+ }
+ return nil
+}
+
+func (i *IPv4) CanDecode() gopacket.LayerClass {
+ return LayerTypeIPv4
+}
+
+func (i *IPv4) NextLayerType() gopacket.LayerType {
+ if i.Flags&IPv4MoreFragments != 0 || i.FragOffset != 0 {
+ return gopacket.LayerTypeFragment
+ }
+ return i.Protocol.LayerType()
+}
+
+func decodeIPv4(data []byte, p gopacket.PacketBuilder) error {
+ ip := &IPv4{}
+ err := ip.DecodeFromBytes(data, p)
+ p.AddLayer(ip)
+ p.SetNetworkLayer(ip)
+ if err != nil {
+ return err
+ }
+ return p.NextDecoder(ip.NextLayerType())
+}
+
+func checkIPv4Address(addr net.IP) (net.IP, error) {
+ if c := addr.To4(); c != nil {
+ return c, nil
+ }
+ if len(addr) == net.IPv6len {
+ return nil, errors.New("address is IPv6")
+ }
+ return nil, fmt.Errorf("wrong length of %d bytes instead of %d", len(addr), net.IPv4len)
+}
+
+func (ip *IPv4) AddressTo4() error {
+ var src, dst net.IP
+
+ if addr, err := checkIPv4Address(ip.SrcIP); err != nil {
+ return fmt.Errorf("Invalid source IPv4 address (%s)", err)
+ } else {
+ src = addr
+ }
+ if addr, err := checkIPv4Address(ip.DstIP); err != nil {
+ return fmt.Errorf("Invalid destination IPv4 address (%s)", err)
+ } else {
+ dst = addr
+ }
+ ip.SrcIP = src
+ ip.DstIP = dst
+ return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/ip4_test.go b/vendor/github.com/google/gopacket/layers/ip4_test.go
new file mode 100644
index 0000000..ec6b351
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/ip4_test.go
@@ -0,0 +1,131 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// This file tests some of the functionality provided in the ip4.go
+
+package layers
+
+import (
+ "encoding/binary"
+ "encoding/hex"
+ "net"
+ "testing"
+
+ "github.com/google/gopacket"
+)
+
+// Test the function getIPv4OptionSize when the ipv4 has no options
+func TestGetIPOptLengthNoOpt(t *testing.T) {
+ ip := IPv4{}
+ length := ip.getIPv4OptionSize()
+ if length != 0 {
+ t.Fatalf("Empty option list should have 0 length. Actual %d", length)
+ }
+}
+
+// Test the function getIPv4OptionSize when the ipv4 has end of list option
+func TestGetIPOptLengthEndOfList(t *testing.T) {
+ ip := IPv4{}
+ ip.Options = append(ip.Options, IPv4Option{OptionType: 0, OptionLength: 1})
+ length := ip.getIPv4OptionSize()
+ if length != 4 {
+ t.Fatalf("After padding, the list should have 4 length. Actual %d", length)
+ }
+}
+
+// Test the function getIPv4OptionSize when the ipv4 has padding and end of list option
+func TestGetIPOptLengthPaddingEndOfList(t *testing.T) {
+ ip := IPv4{}
+ ip.Options = append(ip.Options, IPv4Option{OptionType: 1, OptionLength: 1})
+ ip.Options = append(ip.Options, IPv4Option{OptionType: 0, OptionLength: 1})
+ length := ip.getIPv4OptionSize()
+ if length != 4 {
+ t.Fatalf("After padding, the list should have 4 length. Actual %d", length)
+ }
+}
+
+// Test the function getIPv4OptionSize when the ipv4 has some non-trivial option and end of list option
+func TestGetIPOptLengthOptionEndOfList(t *testing.T) {
+ ip := IPv4{}
+ someByte := make([]byte, 8)
+ ip.Options = append(ip.Options, IPv4Option{OptionType: 2, OptionLength: 10, OptionData: someByte})
+ ip.Options = append(ip.Options, IPv4Option{OptionType: 0, OptionLength: 1})
+ length := ip.getIPv4OptionSize()
+ if length != 12 {
+ t.Fatalf("The list should have 12 length. Actual %d", length)
+ }
+}
+
+// Tests that the Options slice is properly reset before parsing new data
+func TestIPOptResetDuringDecoding(t *testing.T) {
+ ip := &IPv4{
+ Options: []IPv4Option{{OptionType: 42, OptionLength: 4, OptionData: make([]byte, 2)}},
+ }
+
+ ipWithoutOptions := &IPv4{
+ SrcIP: net.IPv4(192, 168, 1, 1),
+ DstIP: net.IPv4(192, 168, 1, 1),
+ Protocol: IPProtocolTCP,
+ }
+
+ ipBytes, err := serialize(ipWithoutOptions)
+
+ if err != nil {
+ t.Fatalf("Failed to serialize ip layer: %v", err)
+ }
+
+ err = ip.DecodeFromBytes(ipBytes, gopacket.NilDecodeFeedback)
+
+ if err != nil {
+ t.Fatalf("Failed to deserialize ip layer: %v", err)
+ }
+
+ if len(ip.Options) > 0 {
+ t.Fatalf("Options slice has stale data from previous packet")
+ }
+
+}
+
+func serialize(ip *IPv4) ([]byte, error) {
+ buffer := gopacket.NewSerializeBuffer()
+ err := ip.SerializeTo(buffer, gopacket.SerializeOptions{
+ FixLengths: true,
+ ComputeChecksums: true,
+ })
+ return buffer.Bytes(), err
+}
+
+// Test the function checksum
+func TestChecksum(t *testing.T) {
+ testData := []struct {
+ name string
+ header string
+ want string
+ }{{
+ name: "sum has two carries",
+ header: "4540005800000000ff11ffff0aeb1d070aed8877",
+ want: "fffe",
+ }, {
+ name: "wikipedia case",
+ header: "45000073000040004011b861c0a80001c0a800c7",
+ want: "b861",
+ }}
+
+ for _, test := range testData {
+ bytes, err := hex.DecodeString(test.header)
+ if err != nil {
+ t.Fatalf("Failed to Decode header: %v", err)
+ }
+ wantBytes, err := hex.DecodeString(test.want)
+ if err != nil {
+ t.Fatalf("Failed to decode want checksum: %v", err)
+ }
+
+ if got, want := checksum(bytes), binary.BigEndian.Uint16(wantBytes); got != want {
+ t.Errorf("In test %q, got incorrect checksum: got(%x), want(%x)", test.name, got, want)
+ }
+ }
+}
diff --git a/vendor/github.com/google/gopacket/layers/ip6.go b/vendor/github.com/google/gopacket/layers/ip6.go
new file mode 100644
index 0000000..b5befe9
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/ip6.go
@@ -0,0 +1,650 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "errors"
+ "fmt"
+ "net"
+
+ "github.com/google/gopacket"
+)
+
+const (
+ IPv6HopByHopOptionJumbogram = 0xC2 // RFC 2675
+)
+
+const (
+ ipv6MaxPayloadLength = 65535
+)
+
+// IPv6 is the layer for the IPv6 header.
+type IPv6 struct {
+ // http://www.networksorcery.com/enp/protocol/ipv6.htm
+ BaseLayer
+ Version uint8
+ TrafficClass uint8
+ FlowLabel uint32
+ Length uint16
+ NextHeader IPProtocol
+ HopLimit uint8
+ SrcIP net.IP
+ DstIP net.IP
+ HopByHop *IPv6HopByHop
+ // hbh will be pointed to by HopByHop if that layer exists.
+ hbh IPv6HopByHop
+}
+
+// LayerType returns LayerTypeIPv6
+func (i *IPv6) LayerType() gopacket.LayerType { return LayerTypeIPv6 }
+
+func (i *IPv6) NetworkFlow() gopacket.Flow {
+ return gopacket.NewFlow(EndpointIPv6, i.SrcIP, i.DstIP)
+}
+
+// Search for Jumbo Payload TLV in IPv6HopByHop and return (length, true) if found
+func getIPv6HopByHopJumboLength(hopopts *IPv6HopByHop) (uint32, bool, error) {
+ var tlv *IPv6HopByHopOption
+
+ for _, t := range hopopts.Options {
+ if t.OptionType == IPv6HopByHopOptionJumbogram {
+ tlv = t
+ break
+ }
+ }
+ if tlv == nil {
+ // Not found
+ return 0, false, nil
+ }
+ if len(tlv.OptionData) != 4 {
+ return 0, false, errors.New("Jumbo length TLV data must have length 4")
+ }
+ l := binary.BigEndian.Uint32(tlv.OptionData)
+ if l <= ipv6MaxPayloadLength {
+ return 0, false, fmt.Errorf("Jumbo length cannot be less than %d", ipv6MaxPayloadLength+1)
+ }
+ // Found
+ return l, true, nil
+}
+
+// Adds zero-valued Jumbo TLV to IPv6 header if it does not exist
+// (if necessary add hop-by-hop header)
+func addIPv6JumboOption(ip6 *IPv6) {
+ var tlv *IPv6HopByHopOption
+
+ if ip6.HopByHop == nil {
+ // Add IPv6 HopByHop
+ ip6.HopByHop = &IPv6HopByHop{}
+ ip6.HopByHop.NextHeader = ip6.NextHeader
+ ip6.HopByHop.HeaderLength = 0
+ ip6.NextHeader = IPProtocolIPv6HopByHop
+ }
+ for _, t := range ip6.HopByHop.Options {
+ if t.OptionType == IPv6HopByHopOptionJumbogram {
+ tlv = t
+ break
+ }
+ }
+ if tlv == nil {
+ // Add Jumbo TLV
+ tlv = &IPv6HopByHopOption{}
+ ip6.HopByHop.Options = append(ip6.HopByHop.Options, tlv)
+ }
+ tlv.SetJumboLength(0)
+}
+
+// Set jumbo length in serialized IPv6 payload (starting with HopByHop header)
+func setIPv6PayloadJumboLength(hbh []byte) error {
+ pLen := len(hbh)
+ if pLen < 8 {
+ //HopByHop is minimum 8 bytes
+ return fmt.Errorf("Invalid IPv6 payload (length %d)", pLen)
+ }
+ hbhLen := int((hbh[1] + 1) * 8)
+ if hbhLen > pLen {
+ return fmt.Errorf("Invalid hop-by-hop length (length: %d, payload: %d", hbhLen, pLen)
+ }
+ offset := 2 //start with options
+ for offset < hbhLen {
+ opt := hbh[offset]
+ if opt == 0 {
+ //Pad1
+ offset += 1
+ continue
+ }
+ optLen := int(hbh[offset+1])
+ if opt == IPv6HopByHopOptionJumbogram {
+ if optLen == 4 {
+ binary.BigEndian.PutUint32(hbh[offset+2:], uint32(pLen))
+ return nil
+ }
+ return fmt.Errorf("Jumbo TLV too short (%d bytes)", optLen)
+ }
+ offset += 2 + optLen
+ }
+ return errors.New("Jumbo TLV not found")
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (ip6 *IPv6) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ var jumbo bool
+ var err error
+
+ payload := b.Bytes()
+ pLen := len(payload)
+ if pLen > ipv6MaxPayloadLength {
+ jumbo = true
+ if opts.FixLengths {
+ // We need to set the length later because the hop-by-hop header may
+ // not exist or else need padding, so pLen may yet change
+ addIPv6JumboOption(ip6)
+ } else if ip6.HopByHop == nil {
+ return fmt.Errorf("Cannot fit payload length of %d into IPv6 packet", pLen)
+ } else {
+ _, ok, err := getIPv6HopByHopJumboLength(ip6.HopByHop)
+ if err != nil {
+ return err
+ }
+ if !ok {
+ return errors.New("Missing jumbo length hop-by-hop option")
+ }
+ }
+ }
+ if ip6.HopByHop != nil {
+ if ip6.NextHeader != IPProtocolIPv6HopByHop {
+ // Just fix it instead of throwing an error
+ ip6.NextHeader = IPProtocolIPv6HopByHop
+ }
+ err = ip6.HopByHop.SerializeTo(b, opts)
+ if err != nil {
+ return err
+ }
+ payload = b.Bytes()
+ pLen = len(payload)
+ if opts.FixLengths && jumbo {
+ err := setIPv6PayloadJumboLength(payload)
+ if err != nil {
+ return err
+ }
+ }
+ }
+ if !jumbo && pLen > ipv6MaxPayloadLength {
+ return errors.New("Cannot fit payload into IPv6 header")
+ }
+ bytes, err := b.PrependBytes(40)
+ if err != nil {
+ return err
+ }
+ bytes[0] = (ip6.Version << 4) | (ip6.TrafficClass >> 4)
+ bytes[1] = (ip6.TrafficClass << 4) | uint8(ip6.FlowLabel>>16)
+ binary.BigEndian.PutUint16(bytes[2:], uint16(ip6.FlowLabel))
+ if opts.FixLengths {
+ if jumbo {
+ ip6.Length = 0
+ } else {
+ ip6.Length = uint16(pLen)
+ }
+ }
+ binary.BigEndian.PutUint16(bytes[4:], ip6.Length)
+ bytes[6] = byte(ip6.NextHeader)
+ bytes[7] = byte(ip6.HopLimit)
+ if err := ip6.AddressTo16(); err != nil {
+ return err
+ }
+ copy(bytes[8:], ip6.SrcIP)
+ copy(bytes[24:], ip6.DstIP)
+ return nil
+}
+
+func (ip6 *IPv6) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ ip6.Version = uint8(data[0]) >> 4
+ ip6.TrafficClass = uint8((binary.BigEndian.Uint16(data[0:2]) >> 4) & 0x00FF)
+ ip6.FlowLabel = binary.BigEndian.Uint32(data[0:4]) & 0x000FFFFF
+ ip6.Length = binary.BigEndian.Uint16(data[4:6])
+ ip6.NextHeader = IPProtocol(data[6])
+ ip6.HopLimit = data[7]
+ ip6.SrcIP = data[8:24]
+ ip6.DstIP = data[24:40]
+ ip6.HopByHop = nil
+ ip6.BaseLayer = BaseLayer{data[:40], data[40:]}
+
+ // We treat a HopByHop IPv6 option as part of the IPv6 packet, since its
+ // options are crucial for understanding what's actually happening per packet.
+ if ip6.NextHeader == IPProtocolIPv6HopByHop {
+ err := ip6.hbh.DecodeFromBytes(ip6.Payload, df)
+ if err != nil {
+ return err
+ }
+ ip6.HopByHop = &ip6.hbh
+ pEnd, jumbo, err := getIPv6HopByHopJumboLength(ip6.HopByHop)
+ if err != nil {
+ return err
+ }
+ if jumbo && ip6.Length == 0 {
+ pEnd := int(pEnd)
+ if pEnd > len(ip6.Payload) {
+ df.SetTruncated()
+ pEnd = len(ip6.Payload)
+ }
+ ip6.Payload = ip6.Payload[:pEnd]
+ return nil
+ } else if jumbo && ip6.Length != 0 {
+ return errors.New("IPv6 has jumbo length and IPv6 length is not 0")
+ } else if !jumbo && ip6.Length == 0 {
+ return errors.New("IPv6 length 0, but HopByHop header does not have jumbogram option")
+ }
+ }
+
+ if ip6.Length == 0 {
+ return fmt.Errorf("IPv6 length 0, but next header is %v, not HopByHop", ip6.NextHeader)
+ } else {
+ pEnd := int(ip6.Length)
+ if pEnd > len(ip6.Payload) {
+ df.SetTruncated()
+ pEnd = len(ip6.Payload)
+ }
+ ip6.Payload = ip6.Payload[:pEnd]
+ }
+ return nil
+}
+
+func (i *IPv6) CanDecode() gopacket.LayerClass {
+ return LayerTypeIPv6
+}
+
+func (i *IPv6) NextLayerType() gopacket.LayerType {
+ if i.HopByHop != nil {
+ return i.HopByHop.NextHeader.LayerType()
+ }
+ return i.NextHeader.LayerType()
+}
+
+func decodeIPv6(data []byte, p gopacket.PacketBuilder) error {
+ ip6 := &IPv6{}
+ err := ip6.DecodeFromBytes(data, p)
+ p.AddLayer(ip6)
+ p.SetNetworkLayer(ip6)
+ if ip6.HopByHop != nil {
+ p.AddLayer(ip6.HopByHop)
+ }
+ if err != nil {
+ return err
+ }
+ return p.NextDecoder(ip6.NextLayerType())
+}
+
+type ipv6HeaderTLVOption struct {
+ OptionType, OptionLength uint8
+ ActualLength int
+ OptionData []byte
+ OptionAlignment [2]uint8 // Xn+Y = [2]uint8{X, Y}
+}
+
+func (h *ipv6HeaderTLVOption) serializeTo(data []byte, fixLengths bool, dryrun bool) int {
+ if fixLengths {
+ h.OptionLength = uint8(len(h.OptionData))
+ }
+ length := int(h.OptionLength) + 2
+ if !dryrun {
+ data[0] = h.OptionType
+ data[1] = h.OptionLength
+ copy(data[2:], h.OptionData)
+ }
+ return length
+}
+
+func decodeIPv6HeaderTLVOption(data []byte) (h *ipv6HeaderTLVOption) {
+ h = &ipv6HeaderTLVOption{}
+ if data[0] == 0 {
+ h.ActualLength = 1
+ return
+ }
+ h.OptionType = data[0]
+ h.OptionLength = data[1]
+ h.ActualLength = int(h.OptionLength) + 2
+ h.OptionData = data[2:h.ActualLength]
+ return
+}
+
+func serializeTLVOptionPadding(data []byte, padLength int) {
+ if padLength <= 0 {
+ return
+ }
+ if padLength == 1 {
+ data[0] = 0x0
+ return
+ }
+ tlvLength := uint8(padLength) - 2
+ data[0] = 0x1
+ data[1] = tlvLength
+ if tlvLength != 0 {
+ for k := range data[2:] {
+ data[k+2] = 0x0
+ }
+ }
+ return
+}
+
+// If buf is 'nil' do a serialize dry run
+func serializeIPv6HeaderTLVOptions(buf []byte, options []*ipv6HeaderTLVOption, fixLengths bool) int {
+ var l int
+
+ dryrun := buf == nil
+ length := 2
+ for _, opt := range options {
+ if fixLengths {
+ x := int(opt.OptionAlignment[0])
+ y := int(opt.OptionAlignment[1])
+ if x != 0 {
+ n := length / x
+ offset := x*n + y
+ if offset < length {
+ offset += x
+ }
+ if length != offset {
+ pad := offset - length
+ if !dryrun {
+ serializeTLVOptionPadding(buf[length-2:], pad)
+ }
+ length += pad
+ }
+ }
+ }
+ if dryrun {
+ l = opt.serializeTo(nil, fixLengths, true)
+ } else {
+ l = opt.serializeTo(buf[length-2:], fixLengths, false)
+ }
+ length += l
+ }
+ if fixLengths {
+ pad := length % 8
+ if pad != 0 {
+ if !dryrun {
+ serializeTLVOptionPadding(buf[length-2:], pad)
+ }
+ length += pad
+ }
+ }
+ return length - 2
+}
+
+type ipv6ExtensionBase struct {
+ BaseLayer
+ NextHeader IPProtocol
+ HeaderLength uint8
+ ActualLength int
+}
+
+func decodeIPv6ExtensionBase(data []byte) (i ipv6ExtensionBase) {
+ i.NextHeader = IPProtocol(data[0])
+ i.HeaderLength = data[1]
+ i.ActualLength = int(i.HeaderLength)*8 + 8
+ i.Contents = data[:i.ActualLength]
+ i.Payload = data[i.ActualLength:]
+ return
+}
+
+// IPv6ExtensionSkipper is a DecodingLayer which decodes and ignores v6
+// extensions. You can use it with a DecodingLayerParser to handle IPv6 stacks
+// which may or may not have extensions.
+type IPv6ExtensionSkipper struct {
+ NextHeader IPProtocol
+ BaseLayer
+}
+
+func (i *IPv6ExtensionSkipper) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ extension := decodeIPv6ExtensionBase(data)
+ i.BaseLayer = BaseLayer{data[:extension.ActualLength], data[extension.ActualLength:]}
+ i.NextHeader = extension.NextHeader
+ return nil
+}
+
+func (i *IPv6ExtensionSkipper) CanDecode() gopacket.LayerClass {
+ return LayerClassIPv6Extension
+}
+
+func (i *IPv6ExtensionSkipper) NextLayerType() gopacket.LayerType {
+ return i.NextHeader.LayerType()
+}
+
+// IPv6HopByHopOption is a TLV option present in an IPv6 hop-by-hop extension.
+type IPv6HopByHopOption ipv6HeaderTLVOption
+
+// IPv6HopByHop is the IPv6 hop-by-hop extension.
+type IPv6HopByHop struct {
+ ipv6ExtensionBase
+ Options []*IPv6HopByHopOption
+}
+
+// LayerType returns LayerTypeIPv6HopByHop.
+func (i *IPv6HopByHop) LayerType() gopacket.LayerType { return LayerTypeIPv6HopByHop }
+
+func (i *IPv6HopByHop) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ var bytes []byte
+ var err error
+
+ o := make([]*ipv6HeaderTLVOption, 0, len(i.Options))
+ for _, v := range i.Options {
+ o = append(o, (*ipv6HeaderTLVOption)(v))
+ }
+
+ l := serializeIPv6HeaderTLVOptions(nil, o, opts.FixLengths)
+ bytes, err = b.PrependBytes(l)
+ if err != nil {
+ return err
+ }
+ serializeIPv6HeaderTLVOptions(bytes, o, opts.FixLengths)
+
+ length := len(bytes) + 2
+ if length%8 != 0 {
+ return errors.New("IPv6HopByHop actual length must be multiple of 8")
+ }
+ bytes, err = b.PrependBytes(2)
+ if err != nil {
+ return err
+ }
+ bytes[0] = uint8(i.NextHeader)
+ if opts.FixLengths {
+ i.HeaderLength = uint8((length / 8) - 1)
+ }
+ bytes[1] = uint8(i.HeaderLength)
+ return nil
+}
+
+func (i *IPv6HopByHop) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ i.ipv6ExtensionBase = decodeIPv6ExtensionBase(data)
+ offset := 2
+ for offset < i.ActualLength {
+ opt := decodeIPv6HeaderTLVOption(data[offset:])
+ i.Options = append(i.Options, (*IPv6HopByHopOption)(opt))
+ offset += opt.ActualLength
+ }
+ return nil
+}
+
+func decodeIPv6HopByHop(data []byte, p gopacket.PacketBuilder) error {
+ i := &IPv6HopByHop{}
+ err := i.DecodeFromBytes(data, p)
+ p.AddLayer(i)
+ if err != nil {
+ return err
+ }
+ return p.NextDecoder(i.NextHeader)
+}
+
+func (o *IPv6HopByHopOption) SetJumboLength(len uint32) {
+ o.OptionType = IPv6HopByHopOptionJumbogram
+ o.OptionLength = 4
+ o.ActualLength = 6
+ if o.OptionData == nil {
+ o.OptionData = make([]byte, 4)
+ }
+ binary.BigEndian.PutUint32(o.OptionData, len)
+ o.OptionAlignment = [2]uint8{4, 2}
+}
+
+// IPv6Routing is the IPv6 routing extension.
+type IPv6Routing struct {
+ ipv6ExtensionBase
+ RoutingType uint8
+ SegmentsLeft uint8
+ // This segment is supposed to be zero according to RFC2460, the second set of
+ // 4 bytes in the extension.
+ Reserved []byte
+ // SourceRoutingIPs is the set of IPv6 addresses requested for source routing,
+ // set only if RoutingType == 0.
+ SourceRoutingIPs []net.IP
+}
+
+// LayerType returns LayerTypeIPv6Routing.
+func (i *IPv6Routing) LayerType() gopacket.LayerType { return LayerTypeIPv6Routing }
+
+func decodeIPv6Routing(data []byte, p gopacket.PacketBuilder) error {
+ i := &IPv6Routing{
+ ipv6ExtensionBase: decodeIPv6ExtensionBase(data),
+ RoutingType: data[2],
+ SegmentsLeft: data[3],
+ Reserved: data[4:8],
+ }
+ switch i.RoutingType {
+ case 0: // Source routing
+ if (i.ActualLength-8)%16 != 0 {
+ return fmt.Errorf("Invalid IPv6 source routing, length of type 0 packet %d", i.ActualLength)
+ }
+ for d := i.Contents[8:]; len(d) >= 16; d = d[16:] {
+ i.SourceRoutingIPs = append(i.SourceRoutingIPs, net.IP(d[:16]))
+ }
+ default:
+ return fmt.Errorf("Unknown IPv6 routing header type %d", i.RoutingType)
+ }
+ p.AddLayer(i)
+ return p.NextDecoder(i.NextHeader)
+}
+
+// IPv6Fragment is the IPv6 fragment header, used for packet
+// fragmentation/defragmentation.
+type IPv6Fragment struct {
+ BaseLayer
+ NextHeader IPProtocol
+ // Reserved1 is bits [8-16), from least to most significant, 0-indexed
+ Reserved1 uint8
+ FragmentOffset uint16
+ // Reserved2 is bits [29-31), from least to most significant, 0-indexed
+ Reserved2 uint8
+ MoreFragments bool
+ Identification uint32
+}
+
+// LayerType returns LayerTypeIPv6Fragment.
+func (i *IPv6Fragment) LayerType() gopacket.LayerType { return LayerTypeIPv6Fragment }
+
+func decodeIPv6Fragment(data []byte, p gopacket.PacketBuilder) error {
+ i := &IPv6Fragment{
+ BaseLayer: BaseLayer{data[:8], data[8:]},
+ NextHeader: IPProtocol(data[0]),
+ Reserved1: data[1],
+ FragmentOffset: binary.BigEndian.Uint16(data[2:4]) >> 3,
+ Reserved2: data[3] & 0x6 >> 1,
+ MoreFragments: data[3]&0x1 != 0,
+ Identification: binary.BigEndian.Uint32(data[4:8]),
+ }
+ p.AddLayer(i)
+ return p.NextDecoder(gopacket.DecodeFragment)
+}
+
+// IPv6DestinationOption is a TLV option present in an IPv6 destination options extension.
+type IPv6DestinationOption ipv6HeaderTLVOption
+
+// IPv6Destination is the IPv6 destination options header.
+type IPv6Destination struct {
+ ipv6ExtensionBase
+ Options []*IPv6DestinationOption
+}
+
+// LayerType returns LayerTypeIPv6Destination.
+func (i *IPv6Destination) LayerType() gopacket.LayerType { return LayerTypeIPv6Destination }
+
+func (i *IPv6Destination) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ i.ipv6ExtensionBase = decodeIPv6ExtensionBase(data)
+ offset := 2
+ for offset < i.ActualLength {
+ opt := decodeIPv6HeaderTLVOption(data[offset:])
+ i.Options = append(i.Options, (*IPv6DestinationOption)(opt))
+ offset += opt.ActualLength
+ }
+ return nil
+}
+
+func decodeIPv6Destination(data []byte, p gopacket.PacketBuilder) error {
+ i := &IPv6Destination{}
+ err := i.DecodeFromBytes(data, p)
+ p.AddLayer(i)
+ if err != nil {
+ return err
+ }
+ return p.NextDecoder(i.NextHeader)
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (i *IPv6Destination) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ var bytes []byte
+ var err error
+
+ o := make([]*ipv6HeaderTLVOption, 0, len(i.Options))
+ for _, v := range i.Options {
+ o = append(o, (*ipv6HeaderTLVOption)(v))
+ }
+
+ l := serializeIPv6HeaderTLVOptions(nil, o, opts.FixLengths)
+ bytes, err = b.PrependBytes(l)
+ if err != nil {
+ return err
+ }
+ serializeIPv6HeaderTLVOptions(bytes, o, opts.FixLengths)
+
+ length := len(bytes) + 2
+ if length%8 != 0 {
+ return errors.New("IPv6Destination actual length must be multiple of 8")
+ }
+ bytes, err = b.PrependBytes(2)
+ if err != nil {
+ return err
+ }
+ bytes[0] = uint8(i.NextHeader)
+ if opts.FixLengths {
+ i.HeaderLength = uint8((length / 8) - 1)
+ }
+ bytes[1] = uint8(i.HeaderLength)
+ return nil
+}
+
+func checkIPv6Address(addr net.IP) error {
+ if len(addr) == net.IPv6len {
+ return nil
+ }
+ if len(addr) == net.IPv4len {
+ return errors.New("address is IPv4")
+ }
+ return fmt.Errorf("wrong length of %d bytes instead of %d", len(addr), net.IPv6len)
+}
+
+func (ip *IPv6) AddressTo16() error {
+ if err := checkIPv6Address(ip.SrcIP); err != nil {
+ return fmt.Errorf("Invalid source IPv6 address (%s)", err)
+ }
+ if err := checkIPv6Address(ip.DstIP); err != nil {
+ return fmt.Errorf("Invalid destination IPv6 address (%s)", err)
+ }
+ return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/ip6_test.go b/vendor/github.com/google/gopacket/layers/ip6_test.go
new file mode 100644
index 0000000..ab22f17
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/ip6_test.go
@@ -0,0 +1,430 @@
+// Copyright 2014, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "bytes"
+ "github.com/google/gopacket"
+ "net"
+ "reflect"
+ "testing"
+)
+
+func TestSerializeIPv6HeaderTLVOptions(t *testing.T) {
+ //RFC 2460 Appendix B
+ /*
+ Example 3
+
+ A Hop-by-Hop or Destination Options header containing both options X
+ and Y from Examples 1 and 2 would have one of the two following
+ formats, depending on which option appeared first:
+
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Next Header | Hdr Ext Len=3 | Option Type=X |Opt Data Len=12|
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | 4-octet field |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | |
+ + 8-octet field +
+ | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | PadN Option=1 |Opt Data Len=1 | 0 | Option Type=Y |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ |Opt Data Len=7 | 1-octet field | 2-octet field |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | 4-octet field |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | PadN Option=1 |Opt Data Len=2 | 0 | 0 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+ opt1 := &ipv6HeaderTLVOption{}
+ opt1.OptionType = 0x1e
+ opt1.OptionData = []byte{0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb}
+ opt1.OptionAlignment = [2]uint8{8, 2}
+
+ opt2 := &ipv6HeaderTLVOption{}
+ opt2.OptionType = 0x3e
+ opt2.OptionData = []byte{0x11, 0x22, 0x22, 0x44, 0x44, 0x44, 0x44}
+ opt2.OptionAlignment = [2]uint8{4, 3}
+
+ l := serializeIPv6HeaderTLVOptions(nil, []*ipv6HeaderTLVOption{opt1, opt2}, true)
+ b := make([]byte, l)
+ serializeIPv6HeaderTLVOptions(b, []*ipv6HeaderTLVOption{opt1, opt2}, true)
+ got := b
+ want := []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}
+
+ if !bytes.Equal(got, want) {
+ t.Errorf("IPv6HeaderTLVOption serialize (X,Y) failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+ }
+
+ /*
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Next Header | Hdr Ext Len=3 | Pad1 Option=0 | Option Type=Y |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ |Opt Data Len=7 | 1-octet field | 2-octet field |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | 4-octet field |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | PadN Option=1 |Opt Data Len=4 | 0 | 0 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | 0 | 0 | Option Type=X |Opt Data Len=12|
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | 4-octet field |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | |
+ + 8-octet field +
+ | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+ l = serializeIPv6HeaderTLVOptions(nil, []*ipv6HeaderTLVOption{opt2, opt1}, true)
+ b = make([]byte, l)
+ serializeIPv6HeaderTLVOptions(b, []*ipv6HeaderTLVOption{opt2, opt1}, true)
+ got = b
+ want = []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}
+
+ if !bytes.Equal(got, want) {
+ t.Errorf("IPv6HeaderTLVOption serialize (Y,X) failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+ }
+}
+
+var testPacketIPv6HopByHop0 = []byte{
+ 0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestPacketIPv6HopByHop0Serialize(t *testing.T) {
+ var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 2)
+ var err error
+
+ ip6 := &IPv6{}
+ ip6.Version = 6
+ ip6.NextHeader = IPProtocolIPv6HopByHop
+ ip6.HopLimit = 64
+ ip6.SrcIP = net.ParseIP("2001:db8::1")
+ ip6.DstIP = net.ParseIP("2001:db8::2")
+ serialize = append(serialize, ip6)
+
+ tlv := &IPv6HopByHopOption{}
+ tlv.OptionType = 0x01 //PadN
+ tlv.OptionData = []byte{0x00, 0x00, 0x00, 0x00}
+ hop := &IPv6HopByHop{}
+ hop.Options = append(hop.Options, tlv)
+ hop.NextHeader = IPProtocolNoNextHeader
+ ip6.HopByHop = hop
+
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{FixLengths: true}
+ err = gopacket.SerializeLayers(buf, opts, serialize...)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ got := buf.Bytes()
+ want := testPacketIPv6HopByHop0
+ if !bytes.Equal(got, want) {
+ t.Errorf("IPv6HopByHop serialize failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+ }
+}
+
+func TestPacketIPv6HopByHop0Decode(t *testing.T) {
+ ip6 := &IPv6{
+ BaseLayer: BaseLayer{
+ Contents: []byte{
+ 0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ },
+ Payload: []byte{0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00},
+ },
+ Version: 6,
+ TrafficClass: 0,
+ FlowLabel: 0,
+ Length: 8,
+ NextHeader: IPProtocolIPv6HopByHop,
+ HopLimit: 64,
+ SrcIP: net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
+ DstIP: net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02},
+ }
+
+ hop := &ip6.hbh
+ hop.ipv6ExtensionBase = ipv6ExtensionBase{
+ BaseLayer: BaseLayer{
+ Contents: []byte{0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00},
+ Payload: []byte{},
+ },
+ NextHeader: IPProtocolNoNextHeader,
+ HeaderLength: uint8(0),
+ ActualLength: 8,
+ }
+ opt := &IPv6HopByHopOption{
+ OptionType: uint8(0x01),
+ OptionLength: uint8(0x04),
+ ActualLength: 6,
+ OptionData: []byte{0x00, 0x00, 0x00, 0x00},
+ }
+ hop.Options = append(hop.Options, opt)
+ ip6.HopByHop = hop
+
+ p := gopacket.NewPacket(testPacketIPv6HopByHop0, LinkTypeRaw, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeIPv6, LayerTypeIPv6HopByHop}, t)
+ if got, ok := p.Layer(LayerTypeIPv6).(*IPv6); ok {
+ want := ip6
+ want.HopByHop = got.HopByHop // avoid comparing pointers
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("IPv6 packet processing failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+ }
+ } else {
+ t.Error("No IPv6 layer type found in packet")
+ }
+ if got, ok := p.Layer(LayerTypeIPv6HopByHop).(*IPv6HopByHop); ok {
+ want := hop
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("IPv6HopByHop packet processing failed:\ngot\n%#v\n\nwant:\n%#v\n\n", got, want)
+ }
+ } else {
+ t.Error("No IPv6HopByHop layer type found in packet")
+ }
+}
+
+// testPacketIPv6Destination0 is the packet:
+// 12:40:14.429409595 IP6 2001:db8::1 > 2001:db8::2: DSTOPT no next header
+// 0x0000: 6000 0000 0008 3c40 2001 0db8 0000 0000 `.....<@........
+// 0x0010: 0000 0000 0000 0001 2001 0db8 0000 0000 ................
+// 0x0020: 0000 0000 0000 0002 3b00 0104 0000 0000 ........;.......
+var testPacketIPv6Destination0 = []byte{
+ 0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x3c, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestPacketIPv6Destination0Serialize(t *testing.T) {
+ var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 2)
+ var err error
+
+ ip6 := &IPv6{}
+ ip6.Version = 6
+ ip6.NextHeader = IPProtocolIPv6Destination
+ ip6.HopLimit = 64
+ ip6.SrcIP = net.ParseIP("2001:db8::1")
+ ip6.DstIP = net.ParseIP("2001:db8::2")
+ serialize = append(serialize, ip6)
+
+ tlv := &IPv6DestinationOption{}
+ tlv.OptionType = 0x01 //PadN
+ tlv.OptionData = []byte{0x00, 0x00, 0x00, 0x00}
+ dst := &IPv6Destination{}
+ dst.Options = append(dst.Options, tlv)
+ dst.NextHeader = IPProtocolNoNextHeader
+ serialize = append(serialize, dst)
+
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{FixLengths: true}
+ err = gopacket.SerializeLayers(buf, opts, serialize...)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ got := buf.Bytes()
+ want := testPacketIPv6Destination0
+ if !bytes.Equal(got, want) {
+ t.Errorf("IPv6Destination serialize failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+ }
+}
+
+func TestPacketIPv6Destination0Decode(t *testing.T) {
+ ip6 := &IPv6{
+ BaseLayer: BaseLayer{
+ Contents: []byte{
+ 0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x3c, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ },
+ Payload: []byte{0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00},
+ },
+ Version: 6,
+ TrafficClass: 0,
+ FlowLabel: 0,
+ Length: 8,
+ NextHeader: IPProtocolIPv6Destination,
+ HopLimit: 64,
+ SrcIP: net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
+ DstIP: net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02},
+ }
+
+ dst := &IPv6Destination{}
+ dst.BaseLayer = BaseLayer{
+ Contents: []byte{0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00},
+ Payload: []byte{},
+ }
+ dst.NextHeader = IPProtocolNoNextHeader
+ dst.HeaderLength = uint8(0)
+ dst.ActualLength = 8
+ opt := &IPv6DestinationOption{
+ OptionType: uint8(0x01),
+ OptionLength: uint8(0x04),
+ ActualLength: 6,
+ OptionData: []byte{0x00, 0x00, 0x00, 0x00},
+ }
+ dst.Options = append(dst.Options, opt)
+
+ p := gopacket.NewPacket(testPacketIPv6Destination0, LinkTypeRaw, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeIPv6, LayerTypeIPv6Destination}, t)
+ if got, ok := p.Layer(LayerTypeIPv6).(*IPv6); ok {
+ want := ip6
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("IPv6 packet processing failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+ }
+ } else {
+ t.Error("No IPv6 layer type found in packet")
+ }
+ if got, ok := p.Layer(LayerTypeIPv6Destination).(*IPv6Destination); ok {
+ want := dst
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("IPv6Destination packet processing failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+ }
+ } else {
+ t.Error("No IPv6Destination layer type found in packet")
+ }
+}
+
+var testPacketIPv6JumbogramHeader = []byte{
+ 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x3b, 0x00, 0xc2, 0x04, 0x00, 0x01, 0x00, 0x08,
+}
+
+func TestIPv6JumbogramSerialize(t *testing.T) {
+ var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 2)
+ var err error
+
+ ip6 := &IPv6{}
+ ip6.Version = 6
+ ip6.NextHeader = IPProtocolNoNextHeader
+ ip6.HopLimit = 64
+ ip6.SrcIP = net.ParseIP("2001:db8::1")
+ ip6.DstIP = net.ParseIP("2001:db8::2")
+ serialize = append(serialize, ip6)
+
+ payload := make([]byte, ipv6MaxPayloadLength+1)
+ for i := range payload {
+ payload[i] = 0xfe
+ }
+ serialize = append(serialize, gopacket.Payload(payload))
+
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{FixLengths: true}
+ err = gopacket.SerializeLayers(buf, opts, serialize...)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ got := buf.Bytes()
+ w := new(bytes.Buffer)
+ w.Write(testPacketIPv6JumbogramHeader)
+ w.Write(payload)
+ want := w.Bytes()
+
+ if !bytes.Equal(got, want) {
+ t.Errorf("IPv6 Jumbogram serialize failed:\ngot:\n%v\n\nwant:\n%v\n\n",
+ gopacket.LongBytesGoString(got), gopacket.LongBytesGoString(want))
+ }
+}
+
+func TestIPv6JumbogramDecode(t *testing.T) {
+ payload := make([]byte, ipv6MaxPayloadLength+1)
+ for i := range payload {
+ payload[i] = 0xfe
+ }
+
+ ip6 := &IPv6{
+ BaseLayer: BaseLayer{
+ Contents: []byte{
+ 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ },
+ },
+ Version: 6,
+ TrafficClass: 0,
+ FlowLabel: 0,
+ Length: 0,
+ NextHeader: IPProtocolIPv6HopByHop,
+ HopLimit: 64,
+ SrcIP: net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
+ DstIP: net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02},
+ }
+ buf := new(bytes.Buffer)
+ buf.Write([]byte{0x3b, 0x00, 0xc2, 0x04, 0x00, 0x01, 0x00, 0x08})
+ buf.Write(payload)
+ ip6.Payload = buf.Bytes()
+
+ hop := &ip6.hbh
+ hop.Contents = []byte{0x3b, 0x00, 0xc2, 0x04, 0x00, 0x01, 0x00, 0x08}
+ hop.Payload = payload
+ hop.NextHeader = IPProtocolNoNextHeader
+ hop.HeaderLength = uint8(0)
+ hop.ActualLength = 8
+ opt := &IPv6HopByHopOption{}
+ opt.OptionType = uint8(0xc2)
+ opt.OptionLength = uint8(0x04)
+ opt.ActualLength = 6
+ opt.OptionData = []byte{0x00, 0x01, 0x00, 0x08}
+ hop.Options = append(hop.Options, opt)
+ ip6.HopByHop = hop
+
+ pkt := new(bytes.Buffer)
+ pkt.Write(testPacketIPv6JumbogramHeader)
+ pkt.Write(payload)
+
+ p := gopacket.NewPacket(pkt.Bytes(), LinkTypeRaw, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeIPv6, LayerTypeIPv6HopByHop, gopacket.LayerTypePayload}, t)
+
+ if got, ok := p.Layer(LayerTypeIPv6).(*IPv6); ok {
+ want := ip6
+ want.HopByHop = got.HopByHop // Hack, avoid comparing pointers
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("IPv6 packet processing failed:\ngot:\n%v\n\nwant:\n%v\n\n",
+ gopacket.LayerGoString(got), gopacket.LayerGoString(want))
+ }
+ } else {
+ t.Error("No IPv6 layer type found in packet")
+ }
+
+ if got, ok := p.Layer(LayerTypeIPv6HopByHop).(*IPv6HopByHop); ok {
+ want := hop
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("IPv6HopByHop packet processing failed:\ngot:\n%v\n\nwant:\n%v\n\n",
+ gopacket.LayerGoString(got), gopacket.LayerGoString(want))
+ }
+ } else {
+ t.Error("No IPv6HopByHop layer type found in packet")
+ }
+
+ if got, ok := p.Layer(gopacket.LayerTypePayload).(*gopacket.Payload); ok {
+ want := (*gopacket.Payload)(&payload)
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("Payload packet processing failed:\ngot:\n%v\n\nwant:\n%v\n\n",
+ gopacket.LayerGoString(got), gopacket.LayerGoString(want))
+ }
+ } else {
+ t.Error("No Payload layer type found in packet")
+ }
+}
diff --git a/vendor/github.com/google/gopacket/layers/ipsec.go b/vendor/github.com/google/gopacket/layers/ipsec.go
new file mode 100644
index 0000000..19163fa
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/ipsec.go
@@ -0,0 +1,68 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "github.com/google/gopacket"
+)
+
+// IPSecAH is the authentication header for IPv4/6 defined in
+// http://tools.ietf.org/html/rfc2402
+type IPSecAH struct {
+ // While the auth header can be used for both IPv4 and v6, its format is that of
+ // an IPv6 extension (NextHeader, PayloadLength, etc...), so we use ipv6ExtensionBase
+ // to build it.
+ ipv6ExtensionBase
+ Reserved uint16
+ SPI, Seq uint32
+ AuthenticationData []byte
+}
+
+// LayerType returns LayerTypeIPSecAH.
+func (i *IPSecAH) LayerType() gopacket.LayerType { return LayerTypeIPSecAH }
+
+func decodeIPSecAH(data []byte, p gopacket.PacketBuilder) error {
+ i := &IPSecAH{
+ ipv6ExtensionBase: ipv6ExtensionBase{
+ NextHeader: IPProtocol(data[0]),
+ HeaderLength: data[1],
+ },
+ Reserved: binary.BigEndian.Uint16(data[2:4]),
+ SPI: binary.BigEndian.Uint32(data[4:8]),
+ Seq: binary.BigEndian.Uint32(data[8:12]),
+ }
+ i.ActualLength = (int(i.HeaderLength) + 2) * 4
+ i.AuthenticationData = data[12:i.ActualLength]
+ i.Contents = data[:i.ActualLength]
+ i.Payload = data[i.ActualLength:]
+ p.AddLayer(i)
+ return p.NextDecoder(i.NextHeader)
+}
+
+// IPSecESP is the encapsulating security payload defined in
+// http://tools.ietf.org/html/rfc2406
+type IPSecESP struct {
+ BaseLayer
+ SPI, Seq uint32
+ // Encrypted contains the encrypted set of bytes sent in an ESP
+ Encrypted []byte
+}
+
+// LayerType returns LayerTypeIPSecESP.
+func (i *IPSecESP) LayerType() gopacket.LayerType { return LayerTypeIPSecESP }
+
+func decodeIPSecESP(data []byte, p gopacket.PacketBuilder) error {
+ i := &IPSecESP{
+ BaseLayer: BaseLayer{data, nil},
+ SPI: binary.BigEndian.Uint32(data[:4]),
+ Seq: binary.BigEndian.Uint32(data[4:8]),
+ Encrypted: data[8:],
+ }
+ p.AddLayer(i)
+ return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/ipsec_test.go b/vendor/github.com/google/gopacket/layers/ipsec_test.go
new file mode 100644
index 0000000..466646d
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/ipsec_test.go
@@ -0,0 +1,154 @@
+// Copyright 2012, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "github.com/google/gopacket"
+ "reflect"
+ "testing"
+)
+
+// testPacketIPSecAHTransport is the packet:
+// 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
+// 0x0000: 7ec0 ffc6 48f1 1a0e 3c4e 3b3a 0800 4500 ~...H...<N;:..E.
+// 0x0010: 006c 650a 4000 4033 5201 c0a8 0101 c0a8 .le.@.@3R.......
+// 0x0020: 0102 0104 0000 0000 0101 0000 0001 2533 ..............%3
+// 0x0030: 01b1 a20b b6f1 bdbf 9d9e 0800 fbe5 0618 ................
+// 0x0040: 0001 c6e1 a354 0000 0000 c8f7 0400 0000 .....T..........
+// 0x0050: 0000 1011 1213 1415 1617 1819 1a1b 1c1d ................
+// 0x0060: 1e1f 2021 2223 2425 2627 2829 2a2b 2c2d ...!"#$%&'()*+,-
+// 0x0070: 2e2f 3031 3233 3435 3637 ./01234567
+var testPacketIPSecAHTransport = []byte{
+ 0x7e, 0xc0, 0xff, 0xc6, 0x48, 0xf1, 0x1a, 0x0e, 0x3c, 0x4e, 0x3b, 0x3a, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0x6c, 0x65, 0x0a, 0x40, 0x00, 0x40, 0x33, 0x52, 0x01, 0xc0, 0xa8, 0x01, 0x01, 0xc0, 0xa8,
+ 0x01, 0x02, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x25, 0x33,
+ 0x01, 0xb1, 0xa2, 0x0b, 0xb6, 0xf1, 0xbd, 0xbf, 0x9d, 0x9e, 0x08, 0x00, 0xfb, 0xe5, 0x06, 0x18,
+ 0x00, 0x01, 0xc6, 0xe1, 0xa3, 0x54, 0x00, 0x00, 0x00, 0x00, 0xc8, 0xf7, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,
+ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d,
+ 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+}
+
+func TestPacketIPSecAHTransport(t *testing.T) {
+ p := gopacket.NewPacket(testPacketIPSecAHTransport, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIPSecAH, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)
+ if got, ok := p.Layer(LayerTypeIPSecAH).(*IPSecAH); ok {
+ want := &IPSecAH{
+ Reserved: 0x0,
+ SPI: 0x101,
+ Seq: 1,
+ AuthenticationData: []byte{0x25, 0x33, 0x01, 0xb1, 0xa2, 0x0b, 0xb6, 0xf1, 0xbd, 0xbf, 0x9d, 0x9e},
+ }
+ want.BaseLayer = BaseLayer{testPacketIPSecAHTransport[34:58], testPacketIPSecAHTransport[58:]}
+ want.NextHeader = IPProtocolICMPv4
+ want.HeaderLength = 0x4
+ want.ActualLength = 0x18
+ if !reflect.DeepEqual(want, got) {
+ t.Errorf("IPSecAH layer mismatch, \nwant %#v\ngot %#v\n", want, got)
+ }
+ }
+}
+
+func BenchmarkDecodePacketIPSecAHTransport(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketIPSecAHTransport, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+// testPacketIPSecAHTunnel is the packet:
+// 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)
+// 0x0000: 7220 4d91 63c9 566c ed2d 73cd 0800 4500 r.M.c.Vl.-s...E.
+// 0x0010: 0080 0000 4000 4033 b6f7 c0a8 0101 c0a8 ....@.@3........
+// 0x0020: 0102 0404 0000 0000 0101 0000 0001 cca4 ................
+// 0x0030: 01da 9eb4 fb75 10fe 5a59 4500 0054 a96f .....u..ZYE..T.o
+// 0x0040: 4000 4001 3617 ac10 0101 ac10 0201 0800 @.@.6...........
+// 0x0050: d75f 7a5a 0001 0741 3355 0000 0000 a9db ._zZ...A3U......
+// 0x0060: 0300 0000 0000 1011 1213 1415 1617 1819 ................
+// 0x0070: 1a1b 1c1d 1e1f 2021 2223 2425 2627 2829 .......!"#$%&'()
+// 0x0080: 2a2b 2c2d 2e2f 3031 3233 3435 3637 *+,-./01234567
+var testPacketIPSecAHTunnel = []byte{
+ 0x72, 0x20, 0x4d, 0x91, 0x63, 0xc9, 0x56, 0x6c, 0xed, 0x2d, 0x73, 0xcd, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x40, 0x33, 0xb6, 0xf7, 0xc0, 0xa8, 0x01, 0x01, 0xc0, 0xa8,
+ 0x01, 0x02, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0xcc, 0xa4,
+ 0x01, 0xda, 0x9e, 0xb4, 0xfb, 0x75, 0x10, 0xfe, 0x5a, 0x59, 0x45, 0x00, 0x00, 0x54, 0xa9, 0x6f,
+ 0x40, 0x00, 0x40, 0x01, 0x36, 0x17, 0xac, 0x10, 0x01, 0x01, 0xac, 0x10, 0x02, 0x01, 0x08, 0x00,
+ 0xd7, 0x5f, 0x7a, 0x5a, 0x00, 0x01, 0x07, 0x41, 0x33, 0x55, 0x00, 0x00, 0x00, 0x00, 0xa9, 0xdb,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
+ 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29,
+ 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+}
+
+func TestPacketIPSecAHTunnel(t *testing.T) {
+ p := gopacket.NewPacket(testPacketIPSecAHTunnel, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIPSecAH, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)
+ if got, ok := p.Layer(LayerTypeIPSecAH).(*IPSecAH); ok {
+ want := &IPSecAH{
+ Reserved: 0x0,
+ SPI: 0x101,
+ Seq: 1,
+ AuthenticationData: []byte{0xcc, 0xa4, 0x01, 0xda, 0x9e, 0xb4, 0xfb, 0x75, 0x10, 0xfe, 0x5a, 0x59},
+ }
+ want.BaseLayer = BaseLayer{testPacketIPSecAHTunnel[34:58], testPacketIPSecAHTunnel[58:]}
+ want.NextHeader = IPProtocolIPv4
+ want.HeaderLength = 0x4
+ want.ActualLength = 0x18
+ if !reflect.DeepEqual(want, got) {
+ t.Errorf("IPSecAH layer mismatch, \nwant %#v\ngot %#v\n", want, got)
+ }
+ }
+}
+
+func BenchmarkDecodePacketIPSecAHTunnel(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketIPSecAHTunnel, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+// testPacketIPSecESP is the packet:
+// 04:30:37.629376 IP 190.0.0.1 > 190.0.0.2: ESP(spi=0x0000006e,seq=0x13), length 116
+// 0x0000: 0000 0000 0012 0011 434a d70a 0800 4500 ........CJ....E.
+// 0x0010: 0088 0000 4000 4032 be40 be00 0001 be00 ....@.@2.@......
+// 0x0020: 0002 0000 006e 0000 0013 82f4 1077 0418 .....n.......w..
+// 0x0030: e8ce dc45 1bac 22bb daaf 2ad2 c2e8 315b ...E.."...*...1[
+// 0x0040: ce9a 39da 2aae cf43 3716 70ab 7e7c 4676 ..9.*..C7.p.~|Fv
+// 0x0050: c3fc d109 c990 274d f81c 6534 9a40 a0ef ......'M..e4.@..
+// 0x0060: 46b1 7da5 05af dda8 d0ba 6e23 d1ee 1f10 F.}.......n#....
+// 0x0070: 730c 7371 03b1 445c 2f70 852f 8475 12fb s.sq..D\/p./.u..
+// 0x0080: b057 a19b a617 bae7 09ca 8836 942f 3334 .W.........6./34
+// 0x0090: 312b 96d2 a4e3 1+....
+var testPacketIPSecESP = []byte{
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x11, 0x43, 0x4a, 0xd7, 0x0a, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0x88, 0x00, 0x00, 0x40, 0x00, 0x40, 0x32, 0xbe, 0x40, 0xbe, 0x00, 0x00, 0x01, 0xbe, 0x00,
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x13, 0x82, 0xf4, 0x10, 0x77, 0x04, 0x18,
+ 0xe8, 0xce, 0xdc, 0x45, 0x1b, 0xac, 0x22, 0xbb, 0xda, 0xaf, 0x2a, 0xd2, 0xc2, 0xe8, 0x31, 0x5b,
+ 0xce, 0x9a, 0x39, 0xda, 0x2a, 0xae, 0xcf, 0x43, 0x37, 0x16, 0x70, 0xab, 0x7e, 0x7c, 0x46, 0x76,
+ 0xc3, 0xfc, 0xd1, 0x09, 0xc9, 0x90, 0x27, 0x4d, 0xf8, 0x1c, 0x65, 0x34, 0x9a, 0x40, 0xa0, 0xef,
+ 0x46, 0xb1, 0x7d, 0xa5, 0x05, 0xaf, 0xdd, 0xa8, 0xd0, 0xba, 0x6e, 0x23, 0xd1, 0xee, 0x1f, 0x10,
+ 0x73, 0x0c, 0x73, 0x71, 0x03, 0xb1, 0x44, 0x5c, 0x2f, 0x70, 0x85, 0x2f, 0x84, 0x75, 0x12, 0xfb,
+ 0xb0, 0x57, 0xa1, 0x9b, 0xa6, 0x17, 0xba, 0xe7, 0x09, 0xca, 0x88, 0x36, 0x94, 0x2f, 0x33, 0x34,
+ 0x31, 0x2b, 0x96, 0xd2, 0xa4, 0xe3,
+}
+
+func TestPacketIPSecESP(t *testing.T) {
+ p := gopacket.NewPacket(testPacketIPSecESP, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIPSecESP}, t)
+}
+
+func BenchmarkDecodePacketIPSecESP(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketIPSecESP, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
diff --git a/vendor/github.com/google/gopacket/layers/layertypes.go b/vendor/github.com/google/gopacket/layers/layertypes.go
new file mode 100644
index 0000000..faffb91
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/layertypes.go
@@ -0,0 +1,177 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "github.com/google/gopacket"
+)
+
+var (
+ LayerTypeARP = gopacket.RegisterLayerType(10, gopacket.LayerTypeMetadata{Name: "ARP", Decoder: gopacket.DecodeFunc(decodeARP)})
+ LayerTypeCiscoDiscovery = gopacket.RegisterLayerType(11, gopacket.LayerTypeMetadata{Name: "CiscoDiscovery", Decoder: gopacket.DecodeFunc(decodeCiscoDiscovery)})
+ LayerTypeEthernetCTP = gopacket.RegisterLayerType(12, gopacket.LayerTypeMetadata{Name: "EthernetCTP", Decoder: gopacket.DecodeFunc(decodeEthernetCTP)})
+ LayerTypeEthernetCTPForwardData = gopacket.RegisterLayerType(13, gopacket.LayerTypeMetadata{Name: "EthernetCTPForwardData", Decoder: nil})
+ LayerTypeEthernetCTPReply = gopacket.RegisterLayerType(14, gopacket.LayerTypeMetadata{Name: "EthernetCTPReply", Decoder: nil})
+ LayerTypeDot1Q = gopacket.RegisterLayerType(15, gopacket.LayerTypeMetadata{Name: "Dot1Q", Decoder: gopacket.DecodeFunc(decodeDot1Q)})
+ LayerTypeEtherIP = gopacket.RegisterLayerType(16, gopacket.LayerTypeMetadata{Name: "EtherIP", Decoder: gopacket.DecodeFunc(decodeEtherIP)})
+ LayerTypeEthernet = gopacket.RegisterLayerType(17, gopacket.LayerTypeMetadata{Name: "Ethernet", Decoder: gopacket.DecodeFunc(decodeEthernet)})
+ LayerTypeGRE = gopacket.RegisterLayerType(18, gopacket.LayerTypeMetadata{Name: "GRE", Decoder: gopacket.DecodeFunc(decodeGRE)})
+ LayerTypeICMPv4 = gopacket.RegisterLayerType(19, gopacket.LayerTypeMetadata{Name: "ICMPv4", Decoder: gopacket.DecodeFunc(decodeICMPv4)})
+ LayerTypeIPv4 = gopacket.RegisterLayerType(20, gopacket.LayerTypeMetadata{Name: "IPv4", Decoder: gopacket.DecodeFunc(decodeIPv4)})
+ LayerTypeIPv6 = gopacket.RegisterLayerType(21, gopacket.LayerTypeMetadata{Name: "IPv6", Decoder: gopacket.DecodeFunc(decodeIPv6)})
+ LayerTypeLLC = gopacket.RegisterLayerType(22, gopacket.LayerTypeMetadata{Name: "LLC", Decoder: gopacket.DecodeFunc(decodeLLC)})
+ LayerTypeSNAP = gopacket.RegisterLayerType(23, gopacket.LayerTypeMetadata{Name: "SNAP", Decoder: gopacket.DecodeFunc(decodeSNAP)})
+ LayerTypeMPLS = gopacket.RegisterLayerType(24, gopacket.LayerTypeMetadata{Name: "MPLS", Decoder: gopacket.DecodeFunc(decodeMPLS)})
+ LayerTypePPP = gopacket.RegisterLayerType(25, gopacket.LayerTypeMetadata{Name: "PPP", Decoder: gopacket.DecodeFunc(decodePPP)})
+ LayerTypePPPoE = gopacket.RegisterLayerType(26, gopacket.LayerTypeMetadata{Name: "PPPoE", Decoder: gopacket.DecodeFunc(decodePPPoE)})
+ LayerTypeRUDP = gopacket.RegisterLayerType(27, gopacket.LayerTypeMetadata{Name: "RUDP", Decoder: gopacket.DecodeFunc(decodeRUDP)})
+ LayerTypeSCTP = gopacket.RegisterLayerType(28, gopacket.LayerTypeMetadata{Name: "SCTP", Decoder: gopacket.DecodeFunc(decodeSCTP)})
+ LayerTypeSCTPUnknownChunkType = gopacket.RegisterLayerType(29, gopacket.LayerTypeMetadata{Name: "SCTPUnknownChunkType", Decoder: nil})
+ LayerTypeSCTPData = gopacket.RegisterLayerType(30, gopacket.LayerTypeMetadata{Name: "SCTPData", Decoder: nil})
+ LayerTypeSCTPInit = gopacket.RegisterLayerType(31, gopacket.LayerTypeMetadata{Name: "SCTPInit", Decoder: nil})
+ LayerTypeSCTPSack = gopacket.RegisterLayerType(32, gopacket.LayerTypeMetadata{Name: "SCTPSack", Decoder: nil})
+ LayerTypeSCTPHeartbeat = gopacket.RegisterLayerType(33, gopacket.LayerTypeMetadata{Name: "SCTPHeartbeat", Decoder: nil})
+ LayerTypeSCTPError = gopacket.RegisterLayerType(34, gopacket.LayerTypeMetadata{Name: "SCTPError", Decoder: nil})
+ LayerTypeSCTPShutdown = gopacket.RegisterLayerType(35, gopacket.LayerTypeMetadata{Name: "SCTPShutdown", Decoder: nil})
+ LayerTypeSCTPShutdownAck = gopacket.RegisterLayerType(36, gopacket.LayerTypeMetadata{Name: "SCTPShutdownAck", Decoder: nil})
+ LayerTypeSCTPCookieEcho = gopacket.RegisterLayerType(37, gopacket.LayerTypeMetadata{Name: "SCTPCookieEcho", Decoder: nil})
+ LayerTypeSCTPEmptyLayer = gopacket.RegisterLayerType(38, gopacket.LayerTypeMetadata{Name: "SCTPEmptyLayer", Decoder: nil})
+ LayerTypeSCTPInitAck = gopacket.RegisterLayerType(39, gopacket.LayerTypeMetadata{Name: "SCTPInitAck", Decoder: nil})
+ LayerTypeSCTPHeartbeatAck = gopacket.RegisterLayerType(40, gopacket.LayerTypeMetadata{Name: "SCTPHeartbeatAck", Decoder: nil})
+ LayerTypeSCTPAbort = gopacket.RegisterLayerType(41, gopacket.LayerTypeMetadata{Name: "SCTPAbort", Decoder: nil})
+ LayerTypeSCTPShutdownComplete = gopacket.RegisterLayerType(42, gopacket.LayerTypeMetadata{Name: "SCTPShutdownComplete", Decoder: nil})
+ LayerTypeSCTPCookieAck = gopacket.RegisterLayerType(43, gopacket.LayerTypeMetadata{Name: "SCTPCookieAck", Decoder: nil})
+ LayerTypeTCP = gopacket.RegisterLayerType(44, gopacket.LayerTypeMetadata{Name: "TCP", Decoder: gopacket.DecodeFunc(decodeTCP)})
+ LayerTypeUDP = gopacket.RegisterLayerType(45, gopacket.LayerTypeMetadata{Name: "UDP", Decoder: gopacket.DecodeFunc(decodeUDP)})
+ LayerTypeIPv6HopByHop = gopacket.RegisterLayerType(46, gopacket.LayerTypeMetadata{Name: "IPv6HopByHop", Decoder: gopacket.DecodeFunc(decodeIPv6HopByHop)})
+ LayerTypeIPv6Routing = gopacket.RegisterLayerType(47, gopacket.LayerTypeMetadata{Name: "IPv6Routing", Decoder: gopacket.DecodeFunc(decodeIPv6Routing)})
+ LayerTypeIPv6Fragment = gopacket.RegisterLayerType(48, gopacket.LayerTypeMetadata{Name: "IPv6Fragment", Decoder: gopacket.DecodeFunc(decodeIPv6Fragment)})
+ LayerTypeIPv6Destination = gopacket.RegisterLayerType(49, gopacket.LayerTypeMetadata{Name: "IPv6Destination", Decoder: gopacket.DecodeFunc(decodeIPv6Destination)})
+ LayerTypeIPSecAH = gopacket.RegisterLayerType(50, gopacket.LayerTypeMetadata{Name: "IPSecAH", Decoder: gopacket.DecodeFunc(decodeIPSecAH)})
+ LayerTypeIPSecESP = gopacket.RegisterLayerType(51, gopacket.LayerTypeMetadata{Name: "IPSecESP", Decoder: gopacket.DecodeFunc(decodeIPSecESP)})
+ LayerTypeUDPLite = gopacket.RegisterLayerType(52, gopacket.LayerTypeMetadata{Name: "UDPLite", Decoder: gopacket.DecodeFunc(decodeUDPLite)})
+ LayerTypeFDDI = gopacket.RegisterLayerType(53, gopacket.LayerTypeMetadata{Name: "FDDI", Decoder: gopacket.DecodeFunc(decodeFDDI)})
+ LayerTypeLoopback = gopacket.RegisterLayerType(54, gopacket.LayerTypeMetadata{Name: "Loopback", Decoder: gopacket.DecodeFunc(decodeLoopback)})
+ LayerTypeEAP = gopacket.RegisterLayerType(55, gopacket.LayerTypeMetadata{Name: "EAP", Decoder: gopacket.DecodeFunc(decodeEAP)})
+ LayerTypeEAPOL = gopacket.RegisterLayerType(56, gopacket.LayerTypeMetadata{Name: "EAPOL", Decoder: gopacket.DecodeFunc(decodeEAPOL)})
+ LayerTypeICMPv6 = gopacket.RegisterLayerType(57, gopacket.LayerTypeMetadata{Name: "ICMPv6", Decoder: gopacket.DecodeFunc(decodeICMPv6)})
+ LayerTypeLinkLayerDiscovery = gopacket.RegisterLayerType(58, gopacket.LayerTypeMetadata{Name: "LinkLayerDiscovery", Decoder: gopacket.DecodeFunc(decodeLinkLayerDiscovery)})
+ LayerTypeCiscoDiscoveryInfo = gopacket.RegisterLayerType(59, gopacket.LayerTypeMetadata{Name: "CiscoDiscoveryInfo", Decoder: gopacket.DecodeFunc(decodeCiscoDiscoveryInfo)})
+ LayerTypeLinkLayerDiscoveryInfo = gopacket.RegisterLayerType(60, gopacket.LayerTypeMetadata{Name: "LinkLayerDiscoveryInfo", Decoder: nil})
+ LayerTypeNortelDiscovery = gopacket.RegisterLayerType(61, gopacket.LayerTypeMetadata{Name: "NortelDiscovery", Decoder: gopacket.DecodeFunc(decodeNortelDiscovery)})
+ LayerTypeIGMP = gopacket.RegisterLayerType(62, gopacket.LayerTypeMetadata{Name: "IGMP", Decoder: gopacket.DecodeFunc(decodeIGMP)})
+ LayerTypePFLog = gopacket.RegisterLayerType(63, gopacket.LayerTypeMetadata{Name: "PFLog", Decoder: gopacket.DecodeFunc(decodePFLog)})
+ LayerTypeRadioTap = gopacket.RegisterLayerType(64, gopacket.LayerTypeMetadata{Name: "RadioTap", Decoder: gopacket.DecodeFunc(decodeRadioTap)})
+ LayerTypeDot11 = gopacket.RegisterLayerType(65, gopacket.LayerTypeMetadata{Name: "Dot11", Decoder: gopacket.DecodeFunc(decodeDot11)})
+ LayerTypeDot11Ctrl = gopacket.RegisterLayerType(66, gopacket.LayerTypeMetadata{Name: "Dot11Ctrl", Decoder: gopacket.DecodeFunc(decodeDot11Ctrl)})
+ LayerTypeDot11Data = gopacket.RegisterLayerType(67, gopacket.LayerTypeMetadata{Name: "Dot11Data", Decoder: gopacket.DecodeFunc(decodeDot11Data)})
+ LayerTypeDot11DataCFAck = gopacket.RegisterLayerType(68, gopacket.LayerTypeMetadata{Name: "Dot11DataCFAck", Decoder: gopacket.DecodeFunc(decodeDot11DataCFAck)})
+ LayerTypeDot11DataCFPoll = gopacket.RegisterLayerType(69, gopacket.LayerTypeMetadata{Name: "Dot11DataCFPoll", Decoder: gopacket.DecodeFunc(decodeDot11DataCFPoll)})
+ LayerTypeDot11DataCFAckPoll = gopacket.RegisterLayerType(70, gopacket.LayerTypeMetadata{Name: "Dot11DataCFAckPoll", Decoder: gopacket.DecodeFunc(decodeDot11DataCFAckPoll)})
+ LayerTypeDot11DataNull = gopacket.RegisterLayerType(71, gopacket.LayerTypeMetadata{Name: "Dot11DataNull", Decoder: gopacket.DecodeFunc(decodeDot11DataNull)})
+ LayerTypeDot11DataCFAckNoData = gopacket.RegisterLayerType(72, gopacket.LayerTypeMetadata{Name: "Dot11DataCFAck", Decoder: gopacket.DecodeFunc(decodeDot11DataCFAck)})
+ LayerTypeDot11DataCFPollNoData = gopacket.RegisterLayerType(73, gopacket.LayerTypeMetadata{Name: "Dot11DataCFPoll", Decoder: gopacket.DecodeFunc(decodeDot11DataCFPoll)})
+ LayerTypeDot11DataCFAckPollNoData = gopacket.RegisterLayerType(74, gopacket.LayerTypeMetadata{Name: "Dot11DataCFAckPoll", Decoder: gopacket.DecodeFunc(decodeDot11DataCFAckPoll)})
+ LayerTypeDot11DataQOSData = gopacket.RegisterLayerType(75, gopacket.LayerTypeMetadata{Name: "Dot11DataQOSData", Decoder: gopacket.DecodeFunc(decodeDot11DataQOSData)})
+ LayerTypeDot11DataQOSDataCFAck = gopacket.RegisterLayerType(76, gopacket.LayerTypeMetadata{Name: "Dot11DataQOSDataCFAck", Decoder: gopacket.DecodeFunc(decodeDot11DataQOSDataCFAck)})
+ LayerTypeDot11DataQOSDataCFPoll = gopacket.RegisterLayerType(77, gopacket.LayerTypeMetadata{Name: "Dot11DataQOSDataCFPoll", Decoder: gopacket.DecodeFunc(decodeDot11DataQOSDataCFPoll)})
+ LayerTypeDot11DataQOSDataCFAckPoll = gopacket.RegisterLayerType(78, gopacket.LayerTypeMetadata{Name: "Dot11DataQOSDataCFAckPoll", Decoder: gopacket.DecodeFunc(decodeDot11DataQOSDataCFAckPoll)})
+ LayerTypeDot11DataQOSNull = gopacket.RegisterLayerType(79, gopacket.LayerTypeMetadata{Name: "Dot11DataQOSNull", Decoder: gopacket.DecodeFunc(decodeDot11DataQOSNull)})
+ LayerTypeDot11DataQOSCFPollNoData = gopacket.RegisterLayerType(80, gopacket.LayerTypeMetadata{Name: "Dot11DataQOSCFPoll", Decoder: gopacket.DecodeFunc(decodeDot11DataQOSCFPollNoData)})
+ LayerTypeDot11DataQOSCFAckPollNoData = gopacket.RegisterLayerType(81, gopacket.LayerTypeMetadata{Name: "Dot11DataQOSCFAckPoll", Decoder: gopacket.DecodeFunc(decodeDot11DataQOSCFAckPollNoData)})
+ LayerTypeDot11InformationElement = gopacket.RegisterLayerType(82, gopacket.LayerTypeMetadata{Name: "Dot11InformationElement", Decoder: gopacket.DecodeFunc(decodeDot11InformationElement)})
+ LayerTypeDot11CtrlCTS = gopacket.RegisterLayerType(83, gopacket.LayerTypeMetadata{Name: "Dot11CtrlCTS", Decoder: gopacket.DecodeFunc(decodeDot11CtrlCTS)})
+ LayerTypeDot11CtrlRTS = gopacket.RegisterLayerType(84, gopacket.LayerTypeMetadata{Name: "Dot11CtrlRTS", Decoder: gopacket.DecodeFunc(decodeDot11CtrlRTS)})
+ LayerTypeDot11CtrlBlockAckReq = gopacket.RegisterLayerType(85, gopacket.LayerTypeMetadata{Name: "Dot11CtrlBlockAckReq", Decoder: gopacket.DecodeFunc(decodeDot11CtrlBlockAckReq)})
+ LayerTypeDot11CtrlBlockAck = gopacket.RegisterLayerType(86, gopacket.LayerTypeMetadata{Name: "Dot11CtrlBlockAck", Decoder: gopacket.DecodeFunc(decodeDot11CtrlBlockAck)})
+ LayerTypeDot11CtrlPowersavePoll = gopacket.RegisterLayerType(87, gopacket.LayerTypeMetadata{Name: "Dot11CtrlPowersavePoll", Decoder: gopacket.DecodeFunc(decodeDot11CtrlPowersavePoll)})
+ LayerTypeDot11CtrlAck = gopacket.RegisterLayerType(88, gopacket.LayerTypeMetadata{Name: "Dot11CtrlAck", Decoder: gopacket.DecodeFunc(decodeDot11CtrlAck)})
+ LayerTypeDot11CtrlCFEnd = gopacket.RegisterLayerType(89, gopacket.LayerTypeMetadata{Name: "Dot11CtrlCFEnd", Decoder: gopacket.DecodeFunc(decodeDot11CtrlCFEnd)})
+ LayerTypeDot11CtrlCFEndAck = gopacket.RegisterLayerType(90, gopacket.LayerTypeMetadata{Name: "Dot11CtrlCFEndAck", Decoder: gopacket.DecodeFunc(decodeDot11CtrlCFEndAck)})
+ LayerTypeDot11MgmtAssociationReq = gopacket.RegisterLayerType(91, gopacket.LayerTypeMetadata{Name: "Dot11MgmtAssociationReq", Decoder: gopacket.DecodeFunc(decodeDot11MgmtAssociationReq)})
+ LayerTypeDot11MgmtAssociationResp = gopacket.RegisterLayerType(92, gopacket.LayerTypeMetadata{Name: "Dot11MgmtAssociationResp", Decoder: gopacket.DecodeFunc(decodeDot11MgmtAssociationResp)})
+ LayerTypeDot11MgmtReassociationReq = gopacket.RegisterLayerType(93, gopacket.LayerTypeMetadata{Name: "Dot11MgmtReassociationReq", Decoder: gopacket.DecodeFunc(decodeDot11MgmtReassociationReq)})
+ LayerTypeDot11MgmtReassociationResp = gopacket.RegisterLayerType(94, gopacket.LayerTypeMetadata{Name: "Dot11MgmtReassociationResp", Decoder: gopacket.DecodeFunc(decodeDot11MgmtReassociationResp)})
+ LayerTypeDot11MgmtProbeReq = gopacket.RegisterLayerType(95, gopacket.LayerTypeMetadata{Name: "Dot11MgmtProbeReq", Decoder: gopacket.DecodeFunc(decodeDot11MgmtProbeReq)})
+ LayerTypeDot11MgmtProbeResp = gopacket.RegisterLayerType(96, gopacket.LayerTypeMetadata{Name: "Dot11MgmtProbeResp", Decoder: gopacket.DecodeFunc(decodeDot11MgmtProbeResp)})
+ LayerTypeDot11MgmtMeasurementPilot = gopacket.RegisterLayerType(97, gopacket.LayerTypeMetadata{Name: "Dot11MgmtMeasurementPilot", Decoder: gopacket.DecodeFunc(decodeDot11MgmtMeasurementPilot)})
+ LayerTypeDot11MgmtBeacon = gopacket.RegisterLayerType(98, gopacket.LayerTypeMetadata{Name: "Dot11MgmtBeacon", Decoder: gopacket.DecodeFunc(decodeDot11MgmtBeacon)})
+ LayerTypeDot11MgmtATIM = gopacket.RegisterLayerType(99, gopacket.LayerTypeMetadata{Name: "Dot11MgmtATIM", Decoder: gopacket.DecodeFunc(decodeDot11MgmtATIM)})
+ LayerTypeDot11MgmtDisassociation = gopacket.RegisterLayerType(100, gopacket.LayerTypeMetadata{Name: "Dot11MgmtDisassociation", Decoder: gopacket.DecodeFunc(decodeDot11MgmtDisassociation)})
+ LayerTypeDot11MgmtAuthentication = gopacket.RegisterLayerType(101, gopacket.LayerTypeMetadata{Name: "Dot11MgmtAuthentication", Decoder: gopacket.DecodeFunc(decodeDot11MgmtAuthentication)})
+ LayerTypeDot11MgmtDeauthentication = gopacket.RegisterLayerType(102, gopacket.LayerTypeMetadata{Name: "Dot11MgmtDeauthentication", Decoder: gopacket.DecodeFunc(decodeDot11MgmtDeauthentication)})
+ LayerTypeDot11MgmtAction = gopacket.RegisterLayerType(103, gopacket.LayerTypeMetadata{Name: "Dot11MgmtAction", Decoder: gopacket.DecodeFunc(decodeDot11MgmtAction)})
+ LayerTypeDot11MgmtActionNoAck = gopacket.RegisterLayerType(104, gopacket.LayerTypeMetadata{Name: "Dot11MgmtActionNoAck", Decoder: gopacket.DecodeFunc(decodeDot11MgmtActionNoAck)})
+ LayerTypeDot11MgmtArubaWLAN = gopacket.RegisterLayerType(105, gopacket.LayerTypeMetadata{Name: "Dot11MgmtArubaWLAN", Decoder: gopacket.DecodeFunc(decodeDot11MgmtArubaWLAN)})
+ LayerTypeDot11WEP = gopacket.RegisterLayerType(106, gopacket.LayerTypeMetadata{Name: "Dot11WEP", Decoder: gopacket.DecodeFunc(decodeDot11WEP)})
+ LayerTypeDNS = gopacket.RegisterLayerType(107, gopacket.LayerTypeMetadata{Name: "DNS", Decoder: gopacket.DecodeFunc(decodeDNS)})
+ LayerTypeUSB = gopacket.RegisterLayerType(108, gopacket.LayerTypeMetadata{Name: "USB", Decoder: gopacket.DecodeFunc(decodeUSB)})
+ LayerTypeUSBRequestBlockSetup = gopacket.RegisterLayerType(109, gopacket.LayerTypeMetadata{Name: "USBRequestBlockSetup", Decoder: gopacket.DecodeFunc(decodeUSBRequestBlockSetup)})
+ LayerTypeUSBControl = gopacket.RegisterLayerType(110, gopacket.LayerTypeMetadata{Name: "USBControl", Decoder: gopacket.DecodeFunc(decodeUSBControl)})
+ LayerTypeUSBInterrupt = gopacket.RegisterLayerType(111, gopacket.LayerTypeMetadata{Name: "USBInterrupt", Decoder: gopacket.DecodeFunc(decodeUSBInterrupt)})
+ LayerTypeUSBBulk = gopacket.RegisterLayerType(112, gopacket.LayerTypeMetadata{Name: "USBBulk", Decoder: gopacket.DecodeFunc(decodeUSBBulk)})
+ LayerTypeLinuxSLL = gopacket.RegisterLayerType(113, gopacket.LayerTypeMetadata{Name: "Linux SLL", Decoder: gopacket.DecodeFunc(decodeLinuxSLL)})
+ LayerTypeSFlow = gopacket.RegisterLayerType(114, gopacket.LayerTypeMetadata{Name: "SFlow", Decoder: gopacket.DecodeFunc(decodeSFlow)})
+ LayerTypePrismHeader = gopacket.RegisterLayerType(115, gopacket.LayerTypeMetadata{Name: "Prism monitor mode header", Decoder: gopacket.DecodeFunc(decodePrismHeader)})
+ LayerTypeVXLAN = gopacket.RegisterLayerType(116, gopacket.LayerTypeMetadata{Name: "VXLAN", Decoder: gopacket.DecodeFunc(decodeVXLAN)})
+ LayerTypeNTP = gopacket.RegisterLayerType(117, gopacket.LayerTypeMetadata{Name: "NTP", Decoder: gopacket.DecodeFunc(decodeNTP)})
+ LayerTypeDHCPv4 = gopacket.RegisterLayerType(118, gopacket.LayerTypeMetadata{Name: "DHCPv4", Decoder: gopacket.DecodeFunc(decodeDHCPv4)})
+ LayerTypeVRRP = gopacket.RegisterLayerType(119, gopacket.LayerTypeMetadata{Name: "VRRP", Decoder: gopacket.DecodeFunc(decodeVRRP)})
+ LayerTypeGeneve = gopacket.RegisterLayerType(120, gopacket.LayerTypeMetadata{Name: "Geneve", Decoder: gopacket.DecodeFunc(decodeGeneve)})
+ LayerTypeSTP = gopacket.RegisterLayerType(121, gopacket.LayerTypeMetadata{Name: "STP", Decoder: gopacket.DecodeFunc(decodeSTP)})
+ LayerTypeBFD = gopacket.RegisterLayerType(122, gopacket.LayerTypeMetadata{Name: "BFD", Decoder: gopacket.DecodeFunc(decodeBFD)})
+ LayerTypeOSPF = gopacket.RegisterLayerType(123, gopacket.LayerTypeMetadata{Name: "OSPF", Decoder: gopacket.DecodeFunc(decodeOSPF)})
+)
+
+var (
+ // LayerClassIPNetwork contains TCP/IP network layer types.
+ LayerClassIPNetwork = gopacket.NewLayerClass([]gopacket.LayerType{
+ LayerTypeIPv4,
+ LayerTypeIPv6,
+ })
+ // LayerClassIPTransport contains TCP/IP transport layer types.
+ LayerClassIPTransport = gopacket.NewLayerClass([]gopacket.LayerType{
+ LayerTypeTCP,
+ LayerTypeUDP,
+ LayerTypeSCTP,
+ })
+ // LayerClassIPControl contains TCP/IP control protocols.
+ LayerClassIPControl = gopacket.NewLayerClass([]gopacket.LayerType{
+ LayerTypeICMPv4,
+ LayerTypeICMPv6,
+ })
+ // LayerClassSCTPChunk contains SCTP chunk types (not the top-level SCTP
+ // layer).
+ LayerClassSCTPChunk = gopacket.NewLayerClass([]gopacket.LayerType{
+ LayerTypeSCTPUnknownChunkType,
+ LayerTypeSCTPData,
+ LayerTypeSCTPInit,
+ LayerTypeSCTPSack,
+ LayerTypeSCTPHeartbeat,
+ LayerTypeSCTPError,
+ LayerTypeSCTPShutdown,
+ LayerTypeSCTPShutdownAck,
+ LayerTypeSCTPCookieEcho,
+ LayerTypeSCTPEmptyLayer,
+ LayerTypeSCTPInitAck,
+ LayerTypeSCTPHeartbeatAck,
+ LayerTypeSCTPAbort,
+ LayerTypeSCTPShutdownComplete,
+ LayerTypeSCTPCookieAck,
+ })
+ // LayerClassIPv6Extension contains IPv6 extension headers.
+ LayerClassIPv6Extension = gopacket.NewLayerClass([]gopacket.LayerType{
+ LayerTypeIPv6HopByHop,
+ LayerTypeIPv6Routing,
+ LayerTypeIPv6Fragment,
+ LayerTypeIPv6Destination,
+ })
+ LayerClassIPSec = gopacket.NewLayerClass([]gopacket.LayerType{
+ LayerTypeIPSecAH,
+ LayerTypeIPSecESP,
+ })
+)
diff --git a/vendor/github.com/google/gopacket/layers/linux_sll.go b/vendor/github.com/google/gopacket/layers/linux_sll.go
new file mode 100644
index 0000000..b186053
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/linux_sll.go
@@ -0,0 +1,96 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "errors"
+ "fmt"
+ "net"
+
+ "github.com/google/gopacket"
+)
+
+type LinuxSLLPacketType uint16
+
+const (
+ LinuxSLLPacketTypeHost LinuxSLLPacketType = 0 // To us
+ LinuxSLLPacketTypeBroadcast LinuxSLLPacketType = 1 // To all
+ LinuxSLLPacketTypeMulticast LinuxSLLPacketType = 2 // To group
+ LinuxSLLPacketTypeOtherhost LinuxSLLPacketType = 3 // To someone else
+ LinuxSLLPacketTypeOutgoing LinuxSLLPacketType = 4 // Outgoing of any type
+ // These ones are invisible by user level
+ LinuxSLLPacketTypeLoopback LinuxSLLPacketType = 5 // MC/BRD frame looped back
+ LinuxSLLPacketTypeFastroute LinuxSLLPacketType = 6 // Fastrouted frame
+)
+
+func (l LinuxSLLPacketType) String() string {
+ switch l {
+ case LinuxSLLPacketTypeHost:
+ return "host"
+ case LinuxSLLPacketTypeBroadcast:
+ return "broadcast"
+ case LinuxSLLPacketTypeMulticast:
+ return "multicast"
+ case LinuxSLLPacketTypeOtherhost:
+ return "otherhost"
+ case LinuxSLLPacketTypeOutgoing:
+ return "outgoing"
+ case LinuxSLLPacketTypeLoopback:
+ return "loopback"
+ case LinuxSLLPacketTypeFastroute:
+ return "fastroute"
+ }
+ return fmt.Sprintf("Unknown(%d)", int(l))
+}
+
+type LinuxSLL struct {
+ BaseLayer
+ PacketType LinuxSLLPacketType
+ AddrLen uint16
+ Addr net.HardwareAddr
+ EthernetType EthernetType
+}
+
+// LayerType returns LayerTypeLinuxSLL.
+func (sll *LinuxSLL) LayerType() gopacket.LayerType { return LayerTypeLinuxSLL }
+
+func (sll *LinuxSLL) CanDecode() gopacket.LayerClass {
+ return LayerTypeLinuxSLL
+}
+
+func (sll *LinuxSLL) LinkFlow() gopacket.Flow {
+ return gopacket.NewFlow(EndpointMAC, sll.Addr, nil)
+}
+
+func (sll *LinuxSLL) NextLayerType() gopacket.LayerType {
+ return sll.EthernetType.LayerType()
+}
+
+func (sll *LinuxSLL) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 16 {
+ return errors.New("Linux SLL packet too small")
+ }
+ sll.PacketType = LinuxSLLPacketType(binary.BigEndian.Uint16(data[0:2]))
+ sll.AddrLen = binary.BigEndian.Uint16(data[4:6])
+
+ sll.Addr = net.HardwareAddr(data[6 : sll.AddrLen+6])
+ sll.EthernetType = EthernetType(binary.BigEndian.Uint16(data[14:16]))
+ sll.BaseLayer = BaseLayer{data[:16], data[16:]}
+
+ return nil
+}
+
+func decodeLinuxSLL(data []byte, p gopacket.PacketBuilder) error {
+ sll := &LinuxSLL{}
+ if err := sll.DecodeFromBytes(data, p); err != nil {
+ return err
+ }
+ p.AddLayer(sll)
+ p.SetLinkLayer(sll)
+ return p.NextDecoder(sll.EthernetType)
+}
diff --git a/vendor/github.com/google/gopacket/layers/llc.go b/vendor/github.com/google/gopacket/layers/llc.go
new file mode 100644
index 0000000..59453fe
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/llc.go
@@ -0,0 +1,146 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "errors"
+
+ "github.com/google/gopacket"
+)
+
+// LLC is the layer used for 802.2 Logical Link Control headers.
+// See http://standards.ieee.org/getieee802/download/802.2-1998.pdf
+type LLC struct {
+ BaseLayer
+ DSAP uint8
+ IG bool // true means group, false means individual
+ SSAP uint8
+ CR bool // true means response, false means command
+ Control uint16
+}
+
+// LayerType returns gopacket.LayerTypeLLC.
+func (l *LLC) LayerType() gopacket.LayerType { return LayerTypeLLC }
+
+// SNAP is used inside LLC. See
+// http://standards.ieee.org/getieee802/download/802-2001.pdf.
+// From http://en.wikipedia.org/wiki/Subnetwork_Access_Protocol:
+// "[T]he Subnetwork Access Protocol (SNAP) is a mechanism for multiplexing,
+// on networks using IEEE 802.2 LLC, more protocols than can be distinguished
+// by the 8-bit 802.2 Service Access Point (SAP) fields."
+type SNAP struct {
+ BaseLayer
+ OrganizationalCode []byte
+ Type EthernetType
+}
+
+// LayerType returns gopacket.LayerTypeSNAP.
+func (s *SNAP) LayerType() gopacket.LayerType { return LayerTypeSNAP }
+
+func decodeLLC(data []byte, p gopacket.PacketBuilder) error {
+ l := &LLC{
+ DSAP: data[0] & 0xFE,
+ IG: data[0]&0x1 != 0,
+ SSAP: data[1] & 0xFE,
+ CR: data[1]&0x1 != 0,
+ Control: uint16(data[2]),
+ }
+ if l.Control&0x1 == 0 || l.Control&0x3 == 0x1 {
+ l.Control = l.Control<<8 | uint16(data[3])
+ l.Contents = data[:4]
+ l.Payload = data[4:]
+ } else {
+ l.Contents = data[:3]
+ l.Payload = data[3:]
+ }
+ p.AddLayer(l)
+ switch {
+ case l.DSAP == 0xAA && l.SSAP == 0xAA:
+ return p.NextDecoder(LayerTypeSNAP)
+ case l.DSAP == 0x42 && l.SSAP == 0x42:
+ return p.NextDecoder(LayerTypeSTP)
+ }
+ return p.NextDecoder(gopacket.DecodeUnknown)
+}
+
+func decodeSNAP(data []byte, p gopacket.PacketBuilder) error {
+ s := &SNAP{
+ OrganizationalCode: data[:3],
+ Type: EthernetType(binary.BigEndian.Uint16(data[3:5])),
+ BaseLayer: BaseLayer{data[:5], data[5:]},
+ }
+ p.AddLayer(s)
+ // BUG(gconnell): When decoding SNAP, we treat the SNAP type as an Ethernet
+ // type. This may not actually be an ethernet type in all cases,
+ // depending on the organizational code. Right now, we don't check.
+ return p.NextDecoder(s.Type)
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (l *LLC) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ var ig_flag, cr_flag byte
+ var length int
+
+ if l.Control&0xFF00 != 0 {
+ length = 4
+ } else {
+ length = 3
+ }
+
+ if l.DSAP&0x1 != 0 {
+ return errors.New("DSAP value invalid, should not include IG flag bit")
+ }
+
+ if l.SSAP&0x1 != 0 {
+ return errors.New("SSAP value invalid, should not include CR flag bit")
+ }
+
+ if buf, err := b.PrependBytes(length); err != nil {
+ return err
+ } else {
+ ig_flag = 0
+ if l.IG {
+ ig_flag = 0x1
+ }
+
+ cr_flag = 0
+ if l.CR {
+ cr_flag = 0x1
+ }
+
+ buf[0] = l.DSAP + ig_flag
+ buf[1] = l.SSAP + cr_flag
+
+ if length == 4 {
+ buf[2] = uint8(l.Control >> 8)
+ buf[3] = uint8(l.Control)
+ } else {
+ buf[2] = uint8(l.Control)
+ }
+ }
+
+ return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (s *SNAP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ if buf, err := b.PrependBytes(5); err != nil {
+ return err
+ } else {
+ buf[0] = s.OrganizationalCode[0]
+ buf[1] = s.OrganizationalCode[1]
+ buf[2] = s.OrganizationalCode[2]
+ binary.BigEndian.PutUint16(buf[3:5], uint16(s.Type))
+ }
+
+ return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/lldp.go b/vendor/github.com/google/gopacket/layers/lldp.go
new file mode 100644
index 0000000..92ec7da
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/lldp.go
@@ -0,0 +1,1530 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "errors"
+ "fmt"
+
+ "github.com/google/gopacket"
+)
+
+// LLDPTLVType is the type of each TLV value in a LinkLayerDiscovery packet.
+type LLDPTLVType byte
+
+const (
+ LLDPTLVEnd LLDPTLVType = 0
+ LLDPTLVChassisID LLDPTLVType = 1
+ LLDPTLVPortID LLDPTLVType = 2
+ LLDPTLVTTL LLDPTLVType = 3
+ LLDPTLVPortDescription LLDPTLVType = 4
+ LLDPTLVSysName LLDPTLVType = 5
+ LLDPTLVSysDescription LLDPTLVType = 6
+ LLDPTLVSysCapabilities LLDPTLVType = 7
+ LLDPTLVMgmtAddress LLDPTLVType = 8
+ LLDPTLVOrgSpecific LLDPTLVType = 127
+)
+
+// LinkLayerDiscoveryValue is a TLV value inside a LinkLayerDiscovery packet layer.
+type LinkLayerDiscoveryValue struct {
+ Type LLDPTLVType
+ Length uint16
+ Value []byte
+}
+
+// LLDPChassisIDSubType specifies the value type for a single LLDPChassisID.ID
+type LLDPChassisIDSubType byte
+
+// LLDP Chassis Types
+const (
+ LLDPChassisIDSubTypeReserved LLDPChassisIDSubType = 0
+ LLDPChassisIDSubTypeChassisComp LLDPChassisIDSubType = 1
+ LLDPChassisIDSubtypeIfaceAlias LLDPChassisIDSubType = 2
+ LLDPChassisIDSubTypePortComp LLDPChassisIDSubType = 3
+ LLDPChassisIDSubTypeMACAddr LLDPChassisIDSubType = 4
+ LLDPChassisIDSubTypeNetworkAddr LLDPChassisIDSubType = 5
+ LLDPChassisIDSubtypeIfaceName LLDPChassisIDSubType = 6
+ LLDPChassisIDSubTypeLocal LLDPChassisIDSubType = 7
+)
+
+type LLDPChassisID struct {
+ Subtype LLDPChassisIDSubType
+ ID []byte
+}
+
+// LLDPPortIDSubType specifies the value type for a single LLDPPortID.ID
+type LLDPPortIDSubType byte
+
+// LLDP PortID types
+const (
+ LLDPPortIDSubtypeReserved LLDPPortIDSubType = 0
+ LLDPPortIDSubtypeIfaceAlias LLDPPortIDSubType = 1
+ LLDPPortIDSubtypePortComp LLDPPortIDSubType = 2
+ LLDPPortIDSubtypeMACAddr LLDPPortIDSubType = 3
+ LLDPPortIDSubtypeNetworkAddr LLDPPortIDSubType = 4
+ LLDPPortIDSubtypeIfaceName LLDPPortIDSubType = 5
+ LLDPPortIDSubtypeAgentCircuitID LLDPPortIDSubType = 6
+ LLDPPortIDSubtypeLocal LLDPPortIDSubType = 7
+)
+
+type LLDPPortID struct {
+ Subtype LLDPPortIDSubType
+ ID []byte
+}
+
+// LinkLayerDiscovery is a packet layer containing the LinkLayer Discovery Protocol.
+// See http:http://standards.ieee.org/getieee802/download/802.1AB-2009.pdf
+// ChassisID, PortID and TTL are mandatory TLV's. Other values can be decoded
+// with DecodeValues()
+type LinkLayerDiscovery struct {
+ BaseLayer
+ ChassisID LLDPChassisID
+ PortID LLDPPortID
+ TTL uint16
+ Values []LinkLayerDiscoveryValue
+}
+
+type IEEEOUI uint32
+
+// http://standards.ieee.org/develop/regauth/oui/oui.txt
+const (
+ IEEEOUI8021 IEEEOUI = 0x0080c2
+ IEEEOUI8023 IEEEOUI = 0x00120f
+ IEEEOUI80211 IEEEOUI = 0x000fac
+ IEEEOUI8021Qbg IEEEOUI = 0x0013BF
+ IEEEOUICisco2 IEEEOUI = 0x000142
+ IEEEOUIMedia IEEEOUI = 0x0012bb // TR-41
+ IEEEOUIProfinet IEEEOUI = 0x000ecf
+ IEEEOUIDCBX IEEEOUI = 0x001b21
+)
+
+// LLDPOrgSpecificTLV is an Organisation-specific TLV
+type LLDPOrgSpecificTLV struct {
+ OUI IEEEOUI
+ SubType uint8
+ Info []byte
+}
+
+// LLDPCapabilities Types
+const (
+ LLDPCapsOther uint16 = 1 << 0
+ LLDPCapsRepeater uint16 = 1 << 1
+ LLDPCapsBridge uint16 = 1 << 2
+ LLDPCapsWLANAP uint16 = 1 << 3
+ LLDPCapsRouter uint16 = 1 << 4
+ LLDPCapsPhone uint16 = 1 << 5
+ LLDPCapsDocSis uint16 = 1 << 6
+ LLDPCapsStationOnly uint16 = 1 << 7
+ LLDPCapsCVLAN uint16 = 1 << 8
+ LLDPCapsSVLAN uint16 = 1 << 9
+ LLDPCapsTmpr uint16 = 1 << 10
+)
+
+// LLDPCapabilities represents the capabilities of a device
+type LLDPCapabilities struct {
+ Other bool
+ Repeater bool
+ Bridge bool
+ WLANAP bool
+ Router bool
+ Phone bool
+ DocSis bool
+ StationOnly bool
+ CVLAN bool
+ SVLAN bool
+ TMPR bool
+}
+
+type LLDPSysCapabilities struct {
+ SystemCap LLDPCapabilities
+ EnabledCap LLDPCapabilities
+}
+
+type IANAAddressFamily byte
+
+// LLDP Management Address Subtypes
+// http://www.iana.org/assignments/address-family-numbers/address-family-numbers.xml
+const (
+ IANAAddressFamilyReserved IANAAddressFamily = 0
+ IANAAddressFamilyIPV4 IANAAddressFamily = 1
+ IANAAddressFamilyIPV6 IANAAddressFamily = 2
+ IANAAddressFamilyNSAP IANAAddressFamily = 3
+ IANAAddressFamilyHDLC IANAAddressFamily = 4
+ IANAAddressFamilyBBN1822 IANAAddressFamily = 5
+ IANAAddressFamily802 IANAAddressFamily = 6
+ IANAAddressFamilyE163 IANAAddressFamily = 7
+ IANAAddressFamilyE164 IANAAddressFamily = 8
+ IANAAddressFamilyF69 IANAAddressFamily = 9
+ IANAAddressFamilyX121 IANAAddressFamily = 10
+ IANAAddressFamilyIPX IANAAddressFamily = 11
+ IANAAddressFamilyAtalk IANAAddressFamily = 12
+ IANAAddressFamilyDecnet IANAAddressFamily = 13
+ IANAAddressFamilyBanyan IANAAddressFamily = 14
+ IANAAddressFamilyE164NSAP IANAAddressFamily = 15
+ IANAAddressFamilyDNS IANAAddressFamily = 16
+ IANAAddressFamilyDistname IANAAddressFamily = 17
+ IANAAddressFamilyASNumber IANAAddressFamily = 18
+ IANAAddressFamilyXTPIPV4 IANAAddressFamily = 19
+ IANAAddressFamilyXTPIPV6 IANAAddressFamily = 20
+ IANAAddressFamilyXTP IANAAddressFamily = 21
+ IANAAddressFamilyFcWWPN IANAAddressFamily = 22
+ IANAAddressFamilyFcWWNN IANAAddressFamily = 23
+ IANAAddressFamilyGWID IANAAddressFamily = 24
+ IANAAddressFamilyL2VPN IANAAddressFamily = 25
+)
+
+type LLDPInterfaceSubtype byte
+
+// LLDP Interface Subtypes
+const (
+ LLDPInterfaceSubtypeUnknown LLDPInterfaceSubtype = 1
+ LLDPInterfaceSubtypeifIndex LLDPInterfaceSubtype = 2
+ LLDPInterfaceSubtypeSysPort LLDPInterfaceSubtype = 3
+)
+
+type LLDPMgmtAddress struct {
+ Subtype IANAAddressFamily
+ Address []byte
+ InterfaceSubtype LLDPInterfaceSubtype
+ InterfaceNumber uint32
+ OID string
+}
+
+// LinkLayerDiscoveryInfo represents the decoded details for a set of LinkLayerDiscoveryValues
+// Organisation-specific TLV's can be decoded using the various Decode() methods
+type LinkLayerDiscoveryInfo struct {
+ BaseLayer
+ PortDescription string
+ SysName string
+ SysDescription string
+ SysCapabilities LLDPSysCapabilities
+ MgmtAddress LLDPMgmtAddress
+ OrgTLVs []LLDPOrgSpecificTLV // Private TLVs
+ Unknown []LinkLayerDiscoveryValue // undecoded TLVs
+}
+
+/// IEEE 802.1 TLV Subtypes
+const (
+ LLDP8021SubtypePortVLANID uint8 = 1
+ LLDP8021SubtypeProtocolVLANID uint8 = 2
+ LLDP8021SubtypeVLANName uint8 = 3
+ LLDP8021SubtypeProtocolIdentity uint8 = 4
+ LLDP8021SubtypeVDIUsageDigest uint8 = 5
+ LLDP8021SubtypeManagementVID uint8 = 6
+ LLDP8021SubtypeLinkAggregation uint8 = 7
+)
+
+// VLAN Port Protocol ID options
+const (
+ LLDPProtocolVLANIDCapability byte = 1 << 1
+ LLDPProtocolVLANIDStatus byte = 1 << 2
+)
+
+type PortProtocolVLANID struct {
+ Supported bool
+ Enabled bool
+ ID uint16
+}
+
+type VLANName struct {
+ ID uint16
+ Name string
+}
+
+type ProtocolIdentity []byte
+
+// LACP options
+const (
+ LLDPAggregationCapability byte = 1 << 0
+ LLDPAggregationStatus byte = 1 << 1
+)
+
+// IEEE 802 Link Aggregation parameters
+type LLDPLinkAggregation struct {
+ Supported bool
+ Enabled bool
+ PortID uint32
+}
+
+// LLDPInfo8021 represents the information carried in 802.1 Org-specific TLVs
+type LLDPInfo8021 struct {
+ PVID uint16
+ PPVIDs []PortProtocolVLANID
+ VLANNames []VLANName
+ ProtocolIdentities []ProtocolIdentity
+ VIDUsageDigest uint32
+ ManagementVID uint16
+ LinkAggregation LLDPLinkAggregation
+}
+
+// IEEE 802.3 TLV Subtypes
+const (
+ LLDP8023SubtypeMACPHY uint8 = 1
+ LLDP8023SubtypeMDIPower uint8 = 2
+ LLDP8023SubtypeLinkAggregation uint8 = 3
+ LLDP8023SubtypeMTU uint8 = 4
+)
+
+// MACPHY options
+const (
+ LLDPMACPHYCapability byte = 1 << 0
+ LLDPMACPHYStatus byte = 1 << 1
+)
+
+// From IANA-MAU-MIB (introduced by RFC 4836) - dot3MauType
+const (
+ LLDPMAUTypeUnknown uint16 = 0
+ LLDPMAUTypeAUI uint16 = 1
+ LLDPMAUType10Base5 uint16 = 2
+ LLDPMAUTypeFOIRL uint16 = 3
+ LLDPMAUType10Base2 uint16 = 4
+ LLDPMAUType10BaseT uint16 = 5
+ LLDPMAUType10BaseFP uint16 = 6
+ LLDPMAUType10BaseFB uint16 = 7
+ LLDPMAUType10BaseFL uint16 = 8
+ LLDPMAUType10BROAD36 uint16 = 9
+ LLDPMAUType10BaseT_HD uint16 = 10
+ LLDPMAUType10BaseT_FD uint16 = 11
+ LLDPMAUType10BaseFL_HD uint16 = 12
+ LLDPMAUType10BaseFL_FD uint16 = 13
+ LLDPMAUType100BaseT4 uint16 = 14
+ LLDPMAUType100BaseTX_HD uint16 = 15
+ LLDPMAUType100BaseTX_FD uint16 = 16
+ LLDPMAUType100BaseFX_HD uint16 = 17
+ LLDPMAUType100BaseFX_FD uint16 = 18
+ LLDPMAUType100BaseT2_HD uint16 = 19
+ LLDPMAUType100BaseT2_FD uint16 = 20
+ LLDPMAUType1000BaseX_HD uint16 = 21
+ LLDPMAUType1000BaseX_FD uint16 = 22
+ LLDPMAUType1000BaseLX_HD uint16 = 23
+ LLDPMAUType1000BaseLX_FD uint16 = 24
+ LLDPMAUType1000BaseSX_HD uint16 = 25
+ LLDPMAUType1000BaseSX_FD uint16 = 26
+ LLDPMAUType1000BaseCX_HD uint16 = 27
+ LLDPMAUType1000BaseCX_FD uint16 = 28
+ LLDPMAUType1000BaseT_HD uint16 = 29
+ LLDPMAUType1000BaseT_FD uint16 = 30
+ LLDPMAUType10GBaseX uint16 = 31
+ LLDPMAUType10GBaseLX4 uint16 = 32
+ LLDPMAUType10GBaseR uint16 = 33
+ LLDPMAUType10GBaseER uint16 = 34
+ LLDPMAUType10GBaseLR uint16 = 35
+ LLDPMAUType10GBaseSR uint16 = 36
+ LLDPMAUType10GBaseW uint16 = 37
+ LLDPMAUType10GBaseEW uint16 = 38
+ LLDPMAUType10GBaseLW uint16 = 39
+ LLDPMAUType10GBaseSW uint16 = 40
+ LLDPMAUType10GBaseCX4 uint16 = 41
+ LLDPMAUType2BaseTL uint16 = 42
+ LLDPMAUType10PASS_TS uint16 = 43
+ LLDPMAUType100BaseBX10D uint16 = 44
+ LLDPMAUType100BaseBX10U uint16 = 45
+ LLDPMAUType100BaseLX10 uint16 = 46
+ LLDPMAUType1000BaseBX10D uint16 = 47
+ LLDPMAUType1000BaseBX10U uint16 = 48
+ LLDPMAUType1000BaseLX10 uint16 = 49
+ LLDPMAUType1000BasePX10D uint16 = 50
+ LLDPMAUType1000BasePX10U uint16 = 51
+ LLDPMAUType1000BasePX20D uint16 = 52
+ LLDPMAUType1000BasePX20U uint16 = 53
+ LLDPMAUType10GBaseT uint16 = 54
+ LLDPMAUType10GBaseLRM uint16 = 55
+ LLDPMAUType1000BaseKX uint16 = 56
+ LLDPMAUType10GBaseKX4 uint16 = 57
+ LLDPMAUType10GBaseKR uint16 = 58
+ LLDPMAUType10_1GBasePRX_D1 uint16 = 59
+ LLDPMAUType10_1GBasePRX_D2 uint16 = 60
+ LLDPMAUType10_1GBasePRX_D3 uint16 = 61
+ LLDPMAUType10_1GBasePRX_U1 uint16 = 62
+ LLDPMAUType10_1GBasePRX_U2 uint16 = 63
+ LLDPMAUType10_1GBasePRX_U3 uint16 = 64
+ LLDPMAUType10GBasePR_D1 uint16 = 65
+ LLDPMAUType10GBasePR_D2 uint16 = 66
+ LLDPMAUType10GBasePR_D3 uint16 = 67
+ LLDPMAUType10GBasePR_U1 uint16 = 68
+ LLDPMAUType10GBasePR_U3 uint16 = 69
+)
+
+// From RFC 3636 - ifMauAutoNegCapAdvertisedBits
+const (
+ LLDPMAUPMDOther uint16 = 1 << 15
+ LLDPMAUPMD10BaseT uint16 = 1 << 14
+ LLDPMAUPMD10BaseT_FD uint16 = 1 << 13
+ LLDPMAUPMD100BaseT4 uint16 = 1 << 12
+ LLDPMAUPMD100BaseTX uint16 = 1 << 11
+ LLDPMAUPMD100BaseTX_FD uint16 = 1 << 10
+ LLDPMAUPMD100BaseT2 uint16 = 1 << 9
+ LLDPMAUPMD100BaseT2_FD uint16 = 1 << 8
+ LLDPMAUPMDFDXPAUSE uint16 = 1 << 7
+ LLDPMAUPMDFDXAPAUSE uint16 = 1 << 6
+ LLDPMAUPMDFDXSPAUSE uint16 = 1 << 5
+ LLDPMAUPMDFDXBPAUSE uint16 = 1 << 4
+ LLDPMAUPMD1000BaseX uint16 = 1 << 3
+ LLDPMAUPMD1000BaseX_FD uint16 = 1 << 2
+ LLDPMAUPMD1000BaseT uint16 = 1 << 1
+ LLDPMAUPMD1000BaseT_FD uint16 = 1 << 0
+)
+
+// Inverted ifMauAutoNegCapAdvertisedBits if required
+// (Some manufacturers misinterpreted the spec -
+// see https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=1455)
+const (
+ LLDPMAUPMDOtherInv uint16 = 1 << 0
+ LLDPMAUPMD10BaseTInv uint16 = 1 << 1
+ LLDPMAUPMD10BaseT_FDInv uint16 = 1 << 2
+ LLDPMAUPMD100BaseT4Inv uint16 = 1 << 3
+ LLDPMAUPMD100BaseTXInv uint16 = 1 << 4
+ LLDPMAUPMD100BaseTX_FDInv uint16 = 1 << 5
+ LLDPMAUPMD100BaseT2Inv uint16 = 1 << 6
+ LLDPMAUPMD100BaseT2_FDInv uint16 = 1 << 7
+ LLDPMAUPMDFDXPAUSEInv uint16 = 1 << 8
+ LLDPMAUPMDFDXAPAUSEInv uint16 = 1 << 9
+ LLDPMAUPMDFDXSPAUSEInv uint16 = 1 << 10
+ LLDPMAUPMDFDXBPAUSEInv uint16 = 1 << 11
+ LLDPMAUPMD1000BaseXInv uint16 = 1 << 12
+ LLDPMAUPMD1000BaseX_FDInv uint16 = 1 << 13
+ LLDPMAUPMD1000BaseTInv uint16 = 1 << 14
+ LLDPMAUPMD1000BaseT_FDInv uint16 = 1 << 15
+)
+
+type LLDPMACPHYConfigStatus struct {
+ AutoNegSupported bool
+ AutoNegEnabled bool
+ AutoNegCapability uint16
+ MAUType uint16
+}
+
+// MDI Power options
+const (
+ LLDPMDIPowerPortClass byte = 1 << 0
+ LLDPMDIPowerCapability byte = 1 << 1
+ LLDPMDIPowerStatus byte = 1 << 2
+ LLDPMDIPowerPairsAbility byte = 1 << 3
+)
+
+type LLDPPowerType byte
+
+type LLDPPowerSource byte
+
+type LLDPPowerPriority byte
+
+const (
+ LLDPPowerPriorityUnknown LLDPPowerPriority = 0
+ LLDPPowerPriorityMedium LLDPPowerPriority = 1
+ LLDPPowerPriorityHigh LLDPPowerPriority = 2
+ LLDPPowerPriorityLow LLDPPowerPriority = 3
+)
+
+type LLDPPowerViaMDI8023 struct {
+ PortClassPSE bool // false = PD
+ PSESupported bool
+ PSEEnabled bool
+ PSEPairsAbility bool
+ PSEPowerPair uint8
+ PSEClass uint8
+ Type LLDPPowerType
+ Source LLDPPowerSource
+ Priority LLDPPowerPriority
+ Requested uint16 // 1-510 Watts
+ Allocated uint16 // 1-510 Watts
+}
+
+// LLDPInfo8023 represents the information carried in 802.3 Org-specific TLVs
+type LLDPInfo8023 struct {
+ MACPHYConfigStatus LLDPMACPHYConfigStatus
+ PowerViaMDI LLDPPowerViaMDI8023
+ LinkAggregation LLDPLinkAggregation
+ MTU uint16
+}
+
+// IEEE 802.1Qbg TLV Subtypes
+const (
+ LLDP8021QbgEVB uint8 = 0
+ LLDP8021QbgCDCP uint8 = 1
+ LLDP8021QbgVDP uint8 = 2
+ LLDP8021QbgEVB22 uint8 = 13
+)
+
+// LLDPEVBCapabilities Types
+const (
+ LLDPEVBCapsSTD uint16 = 1 << 7
+ LLDPEVBCapsRR uint16 = 1 << 6
+ LLDPEVBCapsRTE uint16 = 1 << 2
+ LLDPEVBCapsECP uint16 = 1 << 1
+ LLDPEVBCapsVDP uint16 = 1 << 0
+)
+
+// LLDPEVBCapabilities represents the EVB capabilities of a device
+type LLDPEVBCapabilities struct {
+ StandardBridging bool
+ ReflectiveRelay bool
+ RetransmissionTimerExponent bool
+ EdgeControlProtocol bool
+ VSIDiscoveryProtocol bool
+}
+
+type LLDPEVBSettings struct {
+ Supported LLDPEVBCapabilities
+ Enabled LLDPEVBCapabilities
+ SupportedVSIs uint16
+ ConfiguredVSIs uint16
+ RTEExponent uint8
+}
+
+// LLDPInfo8021Qbg represents the information carried in 802.1Qbg Org-specific TLVs
+type LLDPInfo8021Qbg struct {
+ EVBSettings LLDPEVBSettings
+}
+
+type LLDPMediaSubtype uint8
+
+// Media TLV Subtypes
+const (
+ LLDPMediaTypeCapabilities LLDPMediaSubtype = 1
+ LLDPMediaTypeNetwork LLDPMediaSubtype = 2
+ LLDPMediaTypeLocation LLDPMediaSubtype = 3
+ LLDPMediaTypePower LLDPMediaSubtype = 4
+ LLDPMediaTypeHardware LLDPMediaSubtype = 5
+ LLDPMediaTypeFirmware LLDPMediaSubtype = 6
+ LLDPMediaTypeSoftware LLDPMediaSubtype = 7
+ LLDPMediaTypeSerial LLDPMediaSubtype = 8
+ LLDPMediaTypeManufacturer LLDPMediaSubtype = 9
+ LLDPMediaTypeModel LLDPMediaSubtype = 10
+ LLDPMediaTypeAssetID LLDPMediaSubtype = 11
+)
+
+type LLDPMediaClass uint8
+
+// Media Class Values
+const (
+ LLDPMediaClassUndefined LLDPMediaClass = 0
+ LLDPMediaClassEndpointI LLDPMediaClass = 1
+ LLDPMediaClassEndpointII LLDPMediaClass = 2
+ LLDPMediaClassEndpointIII LLDPMediaClass = 3
+ LLDPMediaClassNetwork LLDPMediaClass = 4
+)
+
+// LLDPMediaCapabilities Types
+const (
+ LLDPMediaCapsLLDP uint16 = 1 << 0
+ LLDPMediaCapsNetwork uint16 = 1 << 1
+ LLDPMediaCapsLocation uint16 = 1 << 2
+ LLDPMediaCapsPowerPSE uint16 = 1 << 3
+ LLDPMediaCapsPowerPD uint16 = 1 << 4
+ LLDPMediaCapsInventory uint16 = 1 << 5
+)
+
+// LLDPMediaCapabilities represents the LLDP Media capabilities of a device
+type LLDPMediaCapabilities struct {
+ Capabilities bool
+ NetworkPolicy bool
+ Location bool
+ PowerPSE bool
+ PowerPD bool
+ Inventory bool
+ Class LLDPMediaClass
+}
+
+type LLDPApplicationType uint8
+
+const (
+ LLDPAppTypeReserved LLDPApplicationType = 0
+ LLDPAppTypeVoice LLDPApplicationType = 1
+ LLDPappTypeVoiceSignaling LLDPApplicationType = 2
+ LLDPappTypeGuestVoice LLDPApplicationType = 3
+ LLDPappTypeGuestVoiceSignaling LLDPApplicationType = 4
+ LLDPappTypeSoftphoneVoice LLDPApplicationType = 5
+ LLDPappTypeVideoConferencing LLDPApplicationType = 6
+ LLDPappTypeStreamingVideo LLDPApplicationType = 7
+ LLDPappTypeVideoSignaling LLDPApplicationType = 8
+)
+
+type LLDPNetworkPolicy struct {
+ ApplicationType LLDPApplicationType
+ Defined bool
+ Tagged bool
+ VLANId uint16
+ L2Priority uint16
+ DSCPValue uint8
+}
+
+type LLDPLocationFormat uint8
+
+const (
+ LLDPLocationFormatInvalid LLDPLocationFormat = 0
+ LLDPLocationFormatCoordinate LLDPLocationFormat = 1
+ LLDPLocationFormatAddress LLDPLocationFormat = 2
+ LLDPLocationFormatECS LLDPLocationFormat = 3
+)
+
+type LLDPLocationAddressWhat uint8
+
+const (
+ LLDPLocationAddressWhatDHCP LLDPLocationAddressWhat = 0
+ LLDPLocationAddressWhatNetwork LLDPLocationAddressWhat = 1
+ LLDPLocationAddressWhatClient LLDPLocationAddressWhat = 2
+)
+
+type LLDPLocationAddressType uint8
+
+const (
+ LLDPLocationAddressTypeLanguage LLDPLocationAddressType = 0
+ LLDPLocationAddressTypeNational LLDPLocationAddressType = 1
+ LLDPLocationAddressTypeCounty LLDPLocationAddressType = 2
+ LLDPLocationAddressTypeCity LLDPLocationAddressType = 3
+ LLDPLocationAddressTypeCityDivision LLDPLocationAddressType = 4
+ LLDPLocationAddressTypeNeighborhood LLDPLocationAddressType = 5
+ LLDPLocationAddressTypeStreet LLDPLocationAddressType = 6
+ LLDPLocationAddressTypeLeadingStreet LLDPLocationAddressType = 16
+ LLDPLocationAddressTypeTrailingStreet LLDPLocationAddressType = 17
+ LLDPLocationAddressTypeStreetSuffix LLDPLocationAddressType = 18
+ LLDPLocationAddressTypeHouseNum LLDPLocationAddressType = 19
+ LLDPLocationAddressTypeHouseSuffix LLDPLocationAddressType = 20
+ LLDPLocationAddressTypeLandmark LLDPLocationAddressType = 21
+ LLDPLocationAddressTypeAdditional LLDPLocationAddressType = 22
+ LLDPLocationAddressTypeName LLDPLocationAddressType = 23
+ LLDPLocationAddressTypePostal LLDPLocationAddressType = 24
+ LLDPLocationAddressTypeBuilding LLDPLocationAddressType = 25
+ LLDPLocationAddressTypeUnit LLDPLocationAddressType = 26
+ LLDPLocationAddressTypeFloor LLDPLocationAddressType = 27
+ LLDPLocationAddressTypeRoom LLDPLocationAddressType = 28
+ LLDPLocationAddressTypePlace LLDPLocationAddressType = 29
+ LLDPLocationAddressTypeScript LLDPLocationAddressType = 128
+)
+
+type LLDPLocationCoordinate struct {
+ LatitudeResolution uint8
+ Latitude uint64
+ LongitudeResolution uint8
+ Longitude uint64
+ AltitudeType uint8
+ AltitudeResolution uint16
+ Altitude uint32
+ Datum uint8
+}
+
+type LLDPLocationAddressLine struct {
+ Type LLDPLocationAddressType
+ Value string
+}
+
+type LLDPLocationAddress struct {
+ What LLDPLocationAddressWhat
+ CountryCode string
+ AddressLines []LLDPLocationAddressLine
+}
+
+type LLDPLocationECS struct {
+ ELIN string
+}
+
+// LLDP represents a physical location.
+// Only one of the embedded types will contain values, depending on Format.
+type LLDPLocation struct {
+ Format LLDPLocationFormat
+ Coordinate LLDPLocationCoordinate
+ Address LLDPLocationAddress
+ ECS LLDPLocationECS
+}
+
+type LLDPPowerViaMDI struct {
+ Type LLDPPowerType
+ Source LLDPPowerSource
+ Priority LLDPPowerPriority
+ Value uint16
+}
+
+// LLDPInfoMedia represents the information carried in TR-41 Org-specific TLVs
+type LLDPInfoMedia struct {
+ MediaCapabilities LLDPMediaCapabilities
+ NetworkPolicy LLDPNetworkPolicy
+ Location LLDPLocation
+ PowerViaMDI LLDPPowerViaMDI
+ HardwareRevision string
+ FirmwareRevision string
+ SoftwareRevision string
+ SerialNumber string
+ Manufacturer string
+ Model string
+ AssetID string
+}
+
+type LLDPCisco2Subtype uint8
+
+// Cisco2 TLV Subtypes
+const (
+ LLDPCisco2PowerViaMDI LLDPCisco2Subtype = 1
+)
+
+const (
+ LLDPCiscoPSESupport uint8 = 1 << 0
+ LLDPCiscoArchShared uint8 = 1 << 1
+ LLDPCiscoPDSparePair uint8 = 1 << 2
+ LLDPCiscoPSESparePair uint8 = 1 << 3
+)
+
+// LLDPInfoCisco2 represents the information carried in Cisco Org-specific TLVs
+type LLDPInfoCisco2 struct {
+ PSEFourWirePoESupported bool
+ PDSparePairArchitectureShared bool
+ PDRequestSparePairPoEOn bool
+ PSESparePairPoEOn bool
+}
+
+// Profinet Subtypes
+type LLDPProfinetSubtype uint8
+
+const (
+ LLDPProfinetPNIODelay LLDPProfinetSubtype = 1
+ LLDPProfinetPNIOPortStatus LLDPProfinetSubtype = 2
+ LLDPProfinetPNIOMRPPortStatus LLDPProfinetSubtype = 4
+ LLDPProfinetPNIOChassisMAC LLDPProfinetSubtype = 5
+ LLDPProfinetPNIOPTCPStatus LLDPProfinetSubtype = 6
+)
+
+type LLDPPNIODelay struct {
+ RXLocal uint32
+ RXRemote uint32
+ TXLocal uint32
+ TXRemote uint32
+ CableLocal uint32
+}
+
+type LLDPPNIOPortStatus struct {
+ Class2 uint16
+ Class3 uint16
+}
+
+type LLDPPNIOMRPPortStatus struct {
+ UUID []byte
+ Status uint16
+}
+
+type LLDPPNIOPTCPStatus struct {
+ MasterAddress []byte
+ SubdomainUUID []byte
+ IRDataUUID []byte
+ PeriodValid bool
+ PeriodLength uint32
+ RedPeriodValid bool
+ RedPeriodBegin uint32
+ OrangePeriodValid bool
+ OrangePeriodBegin uint32
+ GreenPeriodValid bool
+ GreenPeriodBegin uint32
+}
+
+// LLDPInfoProfinet represents the information carried in Profinet Org-specific TLVs
+type LLDPInfoProfinet struct {
+ PNIODelay LLDPPNIODelay
+ PNIOPortStatus LLDPPNIOPortStatus
+ PNIOMRPPortStatus LLDPPNIOMRPPortStatus
+ ChassisMAC []byte
+ PNIOPTCPStatus LLDPPNIOPTCPStatus
+}
+
+// LayerType returns gopacket.LayerTypeLinkLayerDiscovery.
+func (c *LinkLayerDiscovery) LayerType() gopacket.LayerType {
+ return LayerTypeLinkLayerDiscovery
+}
+
+func decodeLinkLayerDiscovery(data []byte, p gopacket.PacketBuilder) error {
+ var vals []LinkLayerDiscoveryValue
+ vData := data[0:]
+ for len(vData) > 0 {
+ nbit := vData[0] & 0x01
+ t := LLDPTLVType(vData[0] >> 1)
+ val := LinkLayerDiscoveryValue{Type: t, Length: uint16(nbit)<<8 + uint16(vData[1])}
+ if val.Length > 0 {
+ val.Value = vData[2 : val.Length+2]
+ }
+ vals = append(vals, val)
+ if t == LLDPTLVEnd {
+ break
+ }
+ if len(vData) < int(2+val.Length) {
+ return errors.New("Malformed LinkLayerDiscovery Header")
+ }
+ vData = vData[2+val.Length:]
+ }
+ if len(vals) < 4 {
+ return errors.New("Missing mandatory LinkLayerDiscovery TLV")
+ }
+ c := &LinkLayerDiscovery{}
+ gotEnd := false
+ for _, v := range vals {
+ switch v.Type {
+ case LLDPTLVEnd:
+ gotEnd = true
+ case LLDPTLVChassisID:
+ if len(v.Value) < 2 {
+ return errors.New("Malformed LinkLayerDiscovery ChassisID TLV")
+ }
+ c.ChassisID.Subtype = LLDPChassisIDSubType(v.Value[0])
+ c.ChassisID.ID = v.Value[1:]
+ case LLDPTLVPortID:
+ if len(v.Value) < 2 {
+ return errors.New("Malformed LinkLayerDiscovery PortID TLV")
+ }
+ c.PortID.Subtype = LLDPPortIDSubType(v.Value[0])
+ c.PortID.ID = v.Value[1:]
+ case LLDPTLVTTL:
+ if len(v.Value) < 2 {
+ return errors.New("Malformed LinkLayerDiscovery TTL TLV")
+ }
+ c.TTL = binary.BigEndian.Uint16(v.Value[0:2])
+ default:
+ c.Values = append(c.Values, v)
+ }
+ }
+ if c.ChassisID.Subtype == 0 || c.PortID.Subtype == 0 || !gotEnd {
+ return errors.New("Missing mandatory LinkLayerDiscovery TLV")
+ }
+ c.Contents = data
+ p.AddLayer(c)
+
+ info := &LinkLayerDiscoveryInfo{}
+ p.AddLayer(info)
+ for _, v := range c.Values {
+ switch v.Type {
+ case LLDPTLVPortDescription:
+ info.PortDescription = string(v.Value)
+ case LLDPTLVSysName:
+ info.SysName = string(v.Value)
+ case LLDPTLVSysDescription:
+ info.SysDescription = string(v.Value)
+ case LLDPTLVSysCapabilities:
+ if err := checkLLDPTLVLen(v, 4); err != nil {
+ return err
+ }
+ info.SysCapabilities.SystemCap = getCapabilities(binary.BigEndian.Uint16(v.Value[0:2]))
+ info.SysCapabilities.EnabledCap = getCapabilities(binary.BigEndian.Uint16(v.Value[2:4]))
+ case LLDPTLVMgmtAddress:
+ if err := checkLLDPTLVLen(v, 9); err != nil {
+ return err
+ }
+ mlen := v.Value[0]
+ if err := checkLLDPTLVLen(v, int(mlen+7)); err != nil {
+ return err
+ }
+ info.MgmtAddress.Subtype = IANAAddressFamily(v.Value[1])
+ info.MgmtAddress.Address = v.Value[2 : mlen+1]
+ info.MgmtAddress.InterfaceSubtype = LLDPInterfaceSubtype(v.Value[mlen+1])
+ info.MgmtAddress.InterfaceNumber = binary.BigEndian.Uint32(v.Value[mlen+2 : mlen+6])
+ olen := v.Value[mlen+6]
+ if err := checkLLDPTLVLen(v, int(mlen+6+olen)); err != nil {
+ return err
+ }
+ info.MgmtAddress.OID = string(v.Value[mlen+9 : mlen+9+olen])
+ case LLDPTLVOrgSpecific:
+ if err := checkLLDPTLVLen(v, 4); err != nil {
+ return err
+ }
+ info.OrgTLVs = append(info.OrgTLVs, LLDPOrgSpecificTLV{IEEEOUI(binary.BigEndian.Uint32(append([]byte{byte(0)}, v.Value[0:3]...))), uint8(v.Value[3]), v.Value[4:]})
+ }
+ }
+ return nil
+}
+
+func (l *LinkLayerDiscoveryInfo) Decode8021() (info LLDPInfo8021, err error) {
+ for _, o := range l.OrgTLVs {
+ if o.OUI != IEEEOUI8021 {
+ continue
+ }
+ switch o.SubType {
+ case LLDP8021SubtypePortVLANID:
+ if err = checkLLDPOrgSpecificLen(o, 2); err != nil {
+ return
+ }
+ info.PVID = binary.BigEndian.Uint16(o.Info[0:2])
+ case LLDP8021SubtypeProtocolVLANID:
+ if err = checkLLDPOrgSpecificLen(o, 3); err != nil {
+ return
+ }
+ sup := (o.Info[0]&LLDPProtocolVLANIDCapability > 0)
+ en := (o.Info[0]&LLDPProtocolVLANIDStatus > 0)
+ id := binary.BigEndian.Uint16(o.Info[1:3])
+ info.PPVIDs = append(info.PPVIDs, PortProtocolVLANID{sup, en, id})
+ case LLDP8021SubtypeVLANName:
+ if err = checkLLDPOrgSpecificLen(o, 2); err != nil {
+ return
+ }
+ id := binary.BigEndian.Uint16(o.Info[0:2])
+ info.VLANNames = append(info.VLANNames, VLANName{id, string(o.Info[3:])})
+ case LLDP8021SubtypeProtocolIdentity:
+ if err = checkLLDPOrgSpecificLen(o, 1); err != nil {
+ return
+ }
+ l := int(o.Info[0])
+ if l > 0 {
+ info.ProtocolIdentities = append(info.ProtocolIdentities, o.Info[1:1+l])
+ }
+ case LLDP8021SubtypeVDIUsageDigest:
+ if err = checkLLDPOrgSpecificLen(o, 4); err != nil {
+ return
+ }
+ info.VIDUsageDigest = binary.BigEndian.Uint32(o.Info[0:4])
+ case LLDP8021SubtypeManagementVID:
+ if err = checkLLDPOrgSpecificLen(o, 2); err != nil {
+ return
+ }
+ info.ManagementVID = binary.BigEndian.Uint16(o.Info[0:2])
+ case LLDP8021SubtypeLinkAggregation:
+ if err = checkLLDPOrgSpecificLen(o, 5); err != nil {
+ return
+ }
+ sup := (o.Info[0]&LLDPAggregationCapability > 0)
+ en := (o.Info[0]&LLDPAggregationStatus > 0)
+ info.LinkAggregation = LLDPLinkAggregation{sup, en, binary.BigEndian.Uint32(o.Info[1:5])}
+ }
+ }
+ return
+}
+
+func (l *LinkLayerDiscoveryInfo) Decode8023() (info LLDPInfo8023, err error) {
+ for _, o := range l.OrgTLVs {
+ if o.OUI != IEEEOUI8023 {
+ continue
+ }
+ switch o.SubType {
+ case LLDP8023SubtypeMACPHY:
+ if err = checkLLDPOrgSpecificLen(o, 5); err != nil {
+ return
+ }
+ sup := (o.Info[0]&LLDPMACPHYCapability > 0)
+ en := (o.Info[0]&LLDPMACPHYStatus > 0)
+ ca := binary.BigEndian.Uint16(o.Info[1:3])
+ mau := binary.BigEndian.Uint16(o.Info[3:5])
+ info.MACPHYConfigStatus = LLDPMACPHYConfigStatus{sup, en, ca, mau}
+ case LLDP8023SubtypeMDIPower:
+ if err = checkLLDPOrgSpecificLen(o, 3); err != nil {
+ return
+ }
+ info.PowerViaMDI.PortClassPSE = (o.Info[0]&LLDPMDIPowerPortClass > 0)
+ info.PowerViaMDI.PSESupported = (o.Info[0]&LLDPMDIPowerCapability > 0)
+ info.PowerViaMDI.PSEEnabled = (o.Info[0]&LLDPMDIPowerStatus > 0)
+ info.PowerViaMDI.PSEPairsAbility = (o.Info[0]&LLDPMDIPowerPairsAbility > 0)
+ info.PowerViaMDI.PSEPowerPair = uint8(o.Info[1])
+ info.PowerViaMDI.PSEClass = uint8(o.Info[2])
+ if len(o.Info) >= 7 {
+ info.PowerViaMDI.Type = LLDPPowerType((o.Info[3] & 0xc0) >> 6)
+ info.PowerViaMDI.Source = LLDPPowerSource((o.Info[3] & 0x30) >> 4)
+ if info.PowerViaMDI.Type == 1 || info.PowerViaMDI.Type == 3 {
+ info.PowerViaMDI.Source += 128 // For Stringify purposes
+ }
+ info.PowerViaMDI.Priority = LLDPPowerPriority(o.Info[3] & 0x0f)
+ info.PowerViaMDI.Requested = binary.BigEndian.Uint16(o.Info[4:6])
+ info.PowerViaMDI.Allocated = binary.BigEndian.Uint16(o.Info[6:8])
+ }
+ case LLDP8023SubtypeLinkAggregation:
+ if err = checkLLDPOrgSpecificLen(o, 5); err != nil {
+ return
+ }
+ sup := (o.Info[0]&LLDPAggregationCapability > 0)
+ en := (o.Info[0]&LLDPAggregationStatus > 0)
+ info.LinkAggregation = LLDPLinkAggregation{sup, en, binary.BigEndian.Uint32(o.Info[1:5])}
+ case LLDP8023SubtypeMTU:
+ if err = checkLLDPOrgSpecificLen(o, 2); err != nil {
+ return
+ }
+ info.MTU = binary.BigEndian.Uint16(o.Info[0:2])
+ }
+ }
+ return
+}
+
+func (l *LinkLayerDiscoveryInfo) Decode8021Qbg() (info LLDPInfo8021Qbg, err error) {
+ for _, o := range l.OrgTLVs {
+ if o.OUI != IEEEOUI8021Qbg {
+ continue
+ }
+ switch o.SubType {
+ case LLDP8021QbgEVB:
+ if err = checkLLDPOrgSpecificLen(o, 9); err != nil {
+ return
+ }
+ info.EVBSettings.Supported = getEVBCapabilities(binary.BigEndian.Uint16(o.Info[0:2]))
+ info.EVBSettings.Enabled = getEVBCapabilities(binary.BigEndian.Uint16(o.Info[2:4]))
+ info.EVBSettings.SupportedVSIs = binary.BigEndian.Uint16(o.Info[4:6])
+ info.EVBSettings.ConfiguredVSIs = binary.BigEndian.Uint16(o.Info[6:8])
+ info.EVBSettings.RTEExponent = uint8(o.Info[8])
+ }
+ }
+ return
+}
+
+func (l *LinkLayerDiscoveryInfo) DecodeMedia() (info LLDPInfoMedia, err error) {
+ for _, o := range l.OrgTLVs {
+ if o.OUI != IEEEOUIMedia {
+ continue
+ }
+ switch LLDPMediaSubtype(o.SubType) {
+ case LLDPMediaTypeCapabilities:
+ if err = checkLLDPOrgSpecificLen(o, 3); err != nil {
+ return
+ }
+ b := binary.BigEndian.Uint16(o.Info[0:2])
+ info.MediaCapabilities.Capabilities = (b & LLDPMediaCapsLLDP) > 0
+ info.MediaCapabilities.NetworkPolicy = (b & LLDPMediaCapsNetwork) > 0
+ info.MediaCapabilities.Location = (b & LLDPMediaCapsLocation) > 0
+ info.MediaCapabilities.PowerPSE = (b & LLDPMediaCapsPowerPSE) > 0
+ info.MediaCapabilities.PowerPD = (b & LLDPMediaCapsPowerPD) > 0
+ info.MediaCapabilities.Inventory = (b & LLDPMediaCapsInventory) > 0
+ info.MediaCapabilities.Class = LLDPMediaClass(o.Info[2])
+ case LLDPMediaTypeNetwork:
+ if err = checkLLDPOrgSpecificLen(o, 4); err != nil {
+ return
+ }
+ info.NetworkPolicy.ApplicationType = LLDPApplicationType(o.Info[0])
+ b := binary.BigEndian.Uint16(o.Info[1:3])
+ info.NetworkPolicy.Defined = (b & 0x8000) == 0
+ info.NetworkPolicy.Tagged = (b & 0x4000) > 0
+ info.NetworkPolicy.VLANId = (b & 0x1ffe) >> 1
+ b = binary.BigEndian.Uint16(o.Info[2:4])
+ info.NetworkPolicy.L2Priority = (b & 0x01c0) >> 6
+ info.NetworkPolicy.DSCPValue = uint8(o.Info[3] & 0x3f)
+ case LLDPMediaTypeLocation:
+ if err = checkLLDPOrgSpecificLen(o, 1); err != nil {
+ return
+ }
+ info.Location.Format = LLDPLocationFormat(o.Info[0])
+ o.Info = o.Info[1:]
+ switch info.Location.Format {
+ case LLDPLocationFormatCoordinate:
+ if err = checkLLDPOrgSpecificLen(o, 16); err != nil {
+ return
+ }
+ info.Location.Coordinate.LatitudeResolution = uint8(o.Info[0]&0xfc) >> 2
+ b := binary.BigEndian.Uint64(o.Info[0:8])
+ info.Location.Coordinate.Latitude = (b & 0x03ffffffff000000) >> 24
+ info.Location.Coordinate.LongitudeResolution = uint8(o.Info[5]&0xfc) >> 2
+ b = binary.BigEndian.Uint64(o.Info[5:13])
+ info.Location.Coordinate.Longitude = (b & 0x03ffffffff000000) >> 24
+ info.Location.Coordinate.AltitudeType = uint8((o.Info[10] & 0x30) >> 4)
+ b1 := binary.BigEndian.Uint16(o.Info[10:12])
+ info.Location.Coordinate.AltitudeResolution = (b1 & 0xfc0) >> 6
+ b2 := binary.BigEndian.Uint32(o.Info[11:15])
+ info.Location.Coordinate.Altitude = b2 & 0x3fffffff
+ info.Location.Coordinate.Datum = uint8(o.Info[15])
+ case LLDPLocationFormatAddress:
+ if err = checkLLDPOrgSpecificLen(o, 3); err != nil {
+ return
+ }
+ //ll := uint8(o.Info[0])
+ info.Location.Address.What = LLDPLocationAddressWhat(o.Info[1])
+ info.Location.Address.CountryCode = string(o.Info[2:4])
+ data := o.Info[4:]
+ for len(data) > 1 {
+ aType := LLDPLocationAddressType(data[0])
+ aLen := int(data[1])
+ if len(data) >= aLen+2 {
+ info.Location.Address.AddressLines = append(info.Location.Address.AddressLines, LLDPLocationAddressLine{aType, string(data[2 : aLen+2])})
+ data = data[aLen+2:]
+ } else {
+ break
+ }
+ }
+ case LLDPLocationFormatECS:
+ info.Location.ECS.ELIN = string(o.Info)
+ }
+ case LLDPMediaTypePower:
+ if err = checkLLDPOrgSpecificLen(o, 3); err != nil {
+ return
+ }
+ info.PowerViaMDI.Type = LLDPPowerType((o.Info[0] & 0xc0) >> 6)
+ info.PowerViaMDI.Source = LLDPPowerSource((o.Info[0] & 0x30) >> 4)
+ if info.PowerViaMDI.Type == 1 || info.PowerViaMDI.Type == 3 {
+ info.PowerViaMDI.Source += 128 // For Stringify purposes
+ }
+ info.PowerViaMDI.Priority = LLDPPowerPriority(o.Info[0] & 0x0f)
+ info.PowerViaMDI.Value = binary.BigEndian.Uint16(o.Info[1:3]) * 100 // 0 to 102.3 w, 0.1W increments
+ case LLDPMediaTypeHardware:
+ info.HardwareRevision = string(o.Info)
+ case LLDPMediaTypeFirmware:
+ info.FirmwareRevision = string(o.Info)
+ case LLDPMediaTypeSoftware:
+ info.SoftwareRevision = string(o.Info)
+ case LLDPMediaTypeSerial:
+ info.SerialNumber = string(o.Info)
+ case LLDPMediaTypeManufacturer:
+ info.Manufacturer = string(o.Info)
+ case LLDPMediaTypeModel:
+ info.Model = string(o.Info)
+ case LLDPMediaTypeAssetID:
+ info.AssetID = string(o.Info)
+ }
+ }
+ return
+}
+
+func (l *LinkLayerDiscoveryInfo) DecodeCisco2() (info LLDPInfoCisco2, err error) {
+ for _, o := range l.OrgTLVs {
+ if o.OUI != IEEEOUICisco2 {
+ continue
+ }
+ switch LLDPCisco2Subtype(o.SubType) {
+ case LLDPCisco2PowerViaMDI:
+ if err = checkLLDPOrgSpecificLen(o, 1); err != nil {
+ return
+ }
+ info.PSEFourWirePoESupported = (o.Info[0] & LLDPCiscoPSESupport) > 0
+ info.PDSparePairArchitectureShared = (o.Info[0] & LLDPCiscoArchShared) > 0
+ info.PDRequestSparePairPoEOn = (o.Info[0] & LLDPCiscoPDSparePair) > 0
+ info.PSESparePairPoEOn = (o.Info[0] & LLDPCiscoPSESparePair) > 0
+ }
+ }
+ return
+}
+
+func (l *LinkLayerDiscoveryInfo) DecodeProfinet() (info LLDPInfoProfinet, err error) {
+ for _, o := range l.OrgTLVs {
+ if o.OUI != IEEEOUIProfinet {
+ continue
+ }
+ switch LLDPProfinetSubtype(o.SubType) {
+ case LLDPProfinetPNIODelay:
+ if err = checkLLDPOrgSpecificLen(o, 20); err != nil {
+ return
+ }
+ info.PNIODelay.RXLocal = binary.BigEndian.Uint32(o.Info[0:4])
+ info.PNIODelay.RXRemote = binary.BigEndian.Uint32(o.Info[4:8])
+ info.PNIODelay.TXLocal = binary.BigEndian.Uint32(o.Info[8:12])
+ info.PNIODelay.TXRemote = binary.BigEndian.Uint32(o.Info[12:16])
+ info.PNIODelay.CableLocal = binary.BigEndian.Uint32(o.Info[16:20])
+ case LLDPProfinetPNIOPortStatus:
+ if err = checkLLDPOrgSpecificLen(o, 4); err != nil {
+ return
+ }
+ info.PNIOPortStatus.Class2 = binary.BigEndian.Uint16(o.Info[0:2])
+ info.PNIOPortStatus.Class3 = binary.BigEndian.Uint16(o.Info[2:4])
+ case LLDPProfinetPNIOMRPPortStatus:
+ if err = checkLLDPOrgSpecificLen(o, 18); err != nil {
+ return
+ }
+ info.PNIOMRPPortStatus.UUID = o.Info[0:16]
+ info.PNIOMRPPortStatus.Status = binary.BigEndian.Uint16(o.Info[16:18])
+ case LLDPProfinetPNIOChassisMAC:
+ if err = checkLLDPOrgSpecificLen(o, 6); err != nil {
+ return
+ }
+ info.ChassisMAC = o.Info[0:6]
+ case LLDPProfinetPNIOPTCPStatus:
+ if err = checkLLDPOrgSpecificLen(o, 54); err != nil {
+ return
+ }
+ info.PNIOPTCPStatus.MasterAddress = o.Info[0:6]
+ info.PNIOPTCPStatus.SubdomainUUID = o.Info[6:22]
+ info.PNIOPTCPStatus.IRDataUUID = o.Info[22:38]
+ b := binary.BigEndian.Uint32(o.Info[38:42])
+ info.PNIOPTCPStatus.PeriodValid = (b & 0x80000000) > 0
+ info.PNIOPTCPStatus.PeriodLength = b & 0x7fffffff
+ b = binary.BigEndian.Uint32(o.Info[42:46])
+ info.PNIOPTCPStatus.RedPeriodValid = (b & 0x80000000) > 0
+ info.PNIOPTCPStatus.RedPeriodBegin = b & 0x7fffffff
+ b = binary.BigEndian.Uint32(o.Info[46:50])
+ info.PNIOPTCPStatus.OrangePeriodValid = (b & 0x80000000) > 0
+ info.PNIOPTCPStatus.OrangePeriodBegin = b & 0x7fffffff
+ b = binary.BigEndian.Uint32(o.Info[50:54])
+ info.PNIOPTCPStatus.GreenPeriodValid = (b & 0x80000000) > 0
+ info.PNIOPTCPStatus.GreenPeriodBegin = b & 0x7fffffff
+ }
+ }
+ return
+}
+
+// LayerType returns gopacket.LayerTypeLinkLayerDiscoveryInfo.
+func (c *LinkLayerDiscoveryInfo) LayerType() gopacket.LayerType {
+ return LayerTypeLinkLayerDiscoveryInfo
+}
+
+func getCapabilities(v uint16) (c LLDPCapabilities) {
+ c.Other = (v&LLDPCapsOther > 0)
+ c.Repeater = (v&LLDPCapsRepeater > 0)
+ c.Bridge = (v&LLDPCapsBridge > 0)
+ c.WLANAP = (v&LLDPCapsWLANAP > 0)
+ c.Router = (v&LLDPCapsRouter > 0)
+ c.Phone = (v&LLDPCapsPhone > 0)
+ c.DocSis = (v&LLDPCapsDocSis > 0)
+ c.StationOnly = (v&LLDPCapsStationOnly > 0)
+ c.CVLAN = (v&LLDPCapsCVLAN > 0)
+ c.SVLAN = (v&LLDPCapsSVLAN > 0)
+ c.TMPR = (v&LLDPCapsTmpr > 0)
+ return
+}
+
+func getEVBCapabilities(v uint16) (c LLDPEVBCapabilities) {
+ c.StandardBridging = (v & LLDPEVBCapsSTD) > 0
+ c.StandardBridging = (v & LLDPEVBCapsSTD) > 0
+ c.ReflectiveRelay = (v & LLDPEVBCapsRR) > 0
+ c.RetransmissionTimerExponent = (v & LLDPEVBCapsRTE) > 0
+ c.EdgeControlProtocol = (v & LLDPEVBCapsECP) > 0
+ c.VSIDiscoveryProtocol = (v & LLDPEVBCapsVDP) > 0
+ return
+}
+
+func (t LLDPTLVType) String() (s string) {
+ switch t {
+ case LLDPTLVEnd:
+ s = "TLV End"
+ case LLDPTLVChassisID:
+ s = "Chassis ID"
+ case LLDPTLVPortID:
+ s = "Port ID"
+ case LLDPTLVTTL:
+ s = "TTL"
+ case LLDPTLVPortDescription:
+ s = "Port Description"
+ case LLDPTLVSysName:
+ s = "System Name"
+ case LLDPTLVSysDescription:
+ s = "System Description"
+ case LLDPTLVSysCapabilities:
+ s = "System Capabilities"
+ case LLDPTLVMgmtAddress:
+ s = "Management Address"
+ case LLDPTLVOrgSpecific:
+ s = "Organisation Specific"
+ default:
+ s = "Unknown"
+ }
+ return
+}
+
+func (t LLDPChassisIDSubType) String() (s string) {
+ switch t {
+ case LLDPChassisIDSubTypeReserved:
+ s = "Reserved"
+ case LLDPChassisIDSubTypeChassisComp:
+ s = "Chassis Component"
+ case LLDPChassisIDSubtypeIfaceAlias:
+ s = "Interface Alias"
+ case LLDPChassisIDSubTypePortComp:
+ s = "Port Component"
+ case LLDPChassisIDSubTypeMACAddr:
+ s = "MAC Address"
+ case LLDPChassisIDSubTypeNetworkAddr:
+ s = "Network Address"
+ case LLDPChassisIDSubtypeIfaceName:
+ s = "Interface Name"
+ case LLDPChassisIDSubTypeLocal:
+ s = "Local"
+ default:
+ s = "Unknown"
+ }
+ return
+}
+
+func (t LLDPPortIDSubType) String() (s string) {
+ switch t {
+ case LLDPPortIDSubtypeReserved:
+ s = "Reserved"
+ case LLDPPortIDSubtypeIfaceAlias:
+ s = "Interface Alias"
+ case LLDPPortIDSubtypePortComp:
+ s = "Port Component"
+ case LLDPPortIDSubtypeMACAddr:
+ s = "MAC Address"
+ case LLDPPortIDSubtypeNetworkAddr:
+ s = "Network Address"
+ case LLDPPortIDSubtypeIfaceName:
+ s = "Interface Name"
+ case LLDPPortIDSubtypeAgentCircuitID:
+ s = "Agent Circuit ID"
+ case LLDPPortIDSubtypeLocal:
+ s = "Local"
+ default:
+ s = "Unknown"
+ }
+ return
+}
+
+func (t IANAAddressFamily) String() (s string) {
+ switch t {
+ case IANAAddressFamilyReserved:
+ s = "Reserved"
+ case IANAAddressFamilyIPV4:
+ s = "IPv4"
+ case IANAAddressFamilyIPV6:
+ s = "IPv6"
+ case IANAAddressFamilyNSAP:
+ s = "NSAP"
+ case IANAAddressFamilyHDLC:
+ s = "HDLC"
+ case IANAAddressFamilyBBN1822:
+ s = "BBN 1822"
+ case IANAAddressFamily802:
+ s = "802 media plus Ethernet 'canonical format'"
+ case IANAAddressFamilyE163:
+ s = "E.163"
+ case IANAAddressFamilyE164:
+ s = "E.164 (SMDS, Frame Relay, ATM)"
+ case IANAAddressFamilyF69:
+ s = "F.69 (Telex)"
+ case IANAAddressFamilyX121:
+ s = "X.121, X.25, Frame Relay"
+ case IANAAddressFamilyIPX:
+ s = "IPX"
+ case IANAAddressFamilyAtalk:
+ s = "Appletalk"
+ case IANAAddressFamilyDecnet:
+ s = "Decnet IV"
+ case IANAAddressFamilyBanyan:
+ s = "Banyan Vines"
+ case IANAAddressFamilyE164NSAP:
+ s = "E.164 with NSAP format subaddress"
+ case IANAAddressFamilyDNS:
+ s = "DNS"
+ case IANAAddressFamilyDistname:
+ s = "Distinguished Name"
+ case IANAAddressFamilyASNumber:
+ s = "AS Number"
+ case IANAAddressFamilyXTPIPV4:
+ s = "XTP over IP version 4"
+ case IANAAddressFamilyXTPIPV6:
+ s = "XTP over IP version 6"
+ case IANAAddressFamilyXTP:
+ s = "XTP native mode XTP"
+ case IANAAddressFamilyFcWWPN:
+ s = "Fibre Channel World-Wide Port Name"
+ case IANAAddressFamilyFcWWNN:
+ s = "Fibre Channel World-Wide Node Name"
+ case IANAAddressFamilyGWID:
+ s = "GWID"
+ case IANAAddressFamilyL2VPN:
+ s = "AFI for Layer 2 VPN"
+ default:
+ s = "Unknown"
+ }
+ return
+}
+
+func (t LLDPInterfaceSubtype) String() (s string) {
+ switch t {
+ case LLDPInterfaceSubtypeUnknown:
+ s = "Unknown"
+ case LLDPInterfaceSubtypeifIndex:
+ s = "IfIndex"
+ case LLDPInterfaceSubtypeSysPort:
+ s = "System Port Number"
+ default:
+ s = "Unknown"
+ }
+ return
+}
+
+func (t LLDPPowerType) String() (s string) {
+ switch t {
+ case 0:
+ s = "Type 2 PSE Device"
+ case 1:
+ s = "Type 2 PD Device"
+ case 2:
+ s = "Type 1 PSE Device"
+ case 3:
+ s = "Type 1 PD Device"
+ default:
+ s = "Unknown"
+ }
+ return
+}
+
+func (t LLDPPowerSource) String() (s string) {
+ switch t {
+ // PD Device
+ case 0:
+ s = "Unknown"
+ case 1:
+ s = "PSE"
+ case 2:
+ s = "Local"
+ case 3:
+ s = "PSE and Local"
+ // PSE Device (Actual value + 128)
+ case 128:
+ s = "Unknown"
+ case 129:
+ s = "Primary Power Source"
+ case 130:
+ s = "Backup Power Source"
+ default:
+ s = "Unknown"
+ }
+ return
+}
+
+func (t LLDPPowerPriority) String() (s string) {
+ switch t {
+ case 0:
+ s = "Unknown"
+ case 1:
+ s = "Critical"
+ case 2:
+ s = "High"
+ case 3:
+ s = "Low"
+ default:
+ s = "Unknown"
+ }
+ return
+}
+
+func (t LLDPMediaSubtype) String() (s string) {
+ switch t {
+ case LLDPMediaTypeCapabilities:
+ s = "Media Capabilities "
+ case LLDPMediaTypeNetwork:
+ s = "Network Policy"
+ case LLDPMediaTypeLocation:
+ s = "Location Identification"
+ case LLDPMediaTypePower:
+ s = "Extended Power-via-MDI"
+ case LLDPMediaTypeHardware:
+ s = "Hardware Revision"
+ case LLDPMediaTypeFirmware:
+ s = "Firmware Revision"
+ case LLDPMediaTypeSoftware:
+ s = "Software Revision"
+ case LLDPMediaTypeSerial:
+ s = "Serial Number"
+ case LLDPMediaTypeManufacturer:
+ s = "Manufacturer"
+ case LLDPMediaTypeModel:
+ s = "Model"
+ case LLDPMediaTypeAssetID:
+ s = "Asset ID"
+ default:
+ s = "Unknown"
+ }
+ return
+}
+
+func (t LLDPMediaClass) String() (s string) {
+ switch t {
+ case LLDPMediaClassUndefined:
+ s = "Undefined"
+ case LLDPMediaClassEndpointI:
+ s = "Endpoint Class I"
+ case LLDPMediaClassEndpointII:
+ s = "Endpoint Class II"
+ case LLDPMediaClassEndpointIII:
+ s = "Endpoint Class III"
+ case LLDPMediaClassNetwork:
+ s = "Network connectivity "
+ default:
+ s = "Unknown"
+ }
+ return
+}
+
+func (t LLDPApplicationType) String() (s string) {
+ switch t {
+ case LLDPAppTypeReserved:
+ s = "Reserved"
+ case LLDPAppTypeVoice:
+ s = "Voice"
+ case LLDPappTypeVoiceSignaling:
+ s = "Voice Signaling"
+ case LLDPappTypeGuestVoice:
+ s = "Guest Voice"
+ case LLDPappTypeGuestVoiceSignaling:
+ s = "Guest Voice Signaling"
+ case LLDPappTypeSoftphoneVoice:
+ s = "Softphone Voice"
+ case LLDPappTypeVideoConferencing:
+ s = "Video Conferencing"
+ case LLDPappTypeStreamingVideo:
+ s = "Streaming Video"
+ case LLDPappTypeVideoSignaling:
+ s = "Video Signaling"
+ default:
+ s = "Unknown"
+ }
+ return
+}
+
+func (t LLDPLocationFormat) String() (s string) {
+ switch t {
+ case LLDPLocationFormatInvalid:
+ s = "Invalid"
+ case LLDPLocationFormatCoordinate:
+ s = "Coordinate-based LCI"
+ case LLDPLocationFormatAddress:
+ s = "Address-based LCO"
+ case LLDPLocationFormatECS:
+ s = "ECS ELIN"
+ default:
+ s = "Unknown"
+ }
+ return
+}
+
+func (t LLDPLocationAddressType) String() (s string) {
+ switch t {
+ case LLDPLocationAddressTypeLanguage:
+ s = "Language"
+ case LLDPLocationAddressTypeNational:
+ s = "National subdivisions (province, state, etc)"
+ case LLDPLocationAddressTypeCounty:
+ s = "County, parish, district"
+ case LLDPLocationAddressTypeCity:
+ s = "City, township"
+ case LLDPLocationAddressTypeCityDivision:
+ s = "City division, borough, ward"
+ case LLDPLocationAddressTypeNeighborhood:
+ s = "Neighborhood, block"
+ case LLDPLocationAddressTypeStreet:
+ s = "Street"
+ case LLDPLocationAddressTypeLeadingStreet:
+ s = "Leading street direction"
+ case LLDPLocationAddressTypeTrailingStreet:
+ s = "Trailing street suffix"
+ case LLDPLocationAddressTypeStreetSuffix:
+ s = "Street suffix"
+ case LLDPLocationAddressTypeHouseNum:
+ s = "House number"
+ case LLDPLocationAddressTypeHouseSuffix:
+ s = "House number suffix"
+ case LLDPLocationAddressTypeLandmark:
+ s = "Landmark or vanity address"
+ case LLDPLocationAddressTypeAdditional:
+ s = "Additional location information"
+ case LLDPLocationAddressTypeName:
+ s = "Name"
+ case LLDPLocationAddressTypePostal:
+ s = "Postal/ZIP code"
+ case LLDPLocationAddressTypeBuilding:
+ s = "Building"
+ case LLDPLocationAddressTypeUnit:
+ s = "Unit"
+ case LLDPLocationAddressTypeFloor:
+ s = "Floor"
+ case LLDPLocationAddressTypeRoom:
+ s = "Room number"
+ case LLDPLocationAddressTypePlace:
+ s = "Place type"
+ case LLDPLocationAddressTypeScript:
+ s = "Script"
+ default:
+ s = "Unknown"
+ }
+ return
+}
+
+func checkLLDPTLVLen(v LinkLayerDiscoveryValue, l int) (err error) {
+ if len(v.Value) < l {
+ err = fmt.Errorf("Invalid TLV %v length %d (wanted mimimum %v", v.Type, len(v.Value), l)
+ }
+ return
+}
+
+func checkLLDPOrgSpecificLen(o LLDPOrgSpecificTLV, l int) (err error) {
+ if len(o.Info) < l {
+ err = fmt.Errorf("Invalid Org Specific TLV %v length %d (wanted minimum %v)", o.SubType, len(o.Info), l)
+ }
+ return
+}
diff --git a/vendor/github.com/google/gopacket/layers/loopback.go b/vendor/github.com/google/gopacket/layers/loopback.go
new file mode 100644
index 0000000..839f760
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/loopback.go
@@ -0,0 +1,80 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "errors"
+ "fmt"
+
+ "github.com/google/gopacket"
+)
+
+// Loopback contains the header for loopback encapsulation. This header is
+// used by both BSD and OpenBSD style loopback decoding (pcap's DLT_NULL
+// and DLT_LOOP, respectively).
+type Loopback struct {
+ BaseLayer
+ Family ProtocolFamily
+}
+
+// LayerType returns LayerTypeLoopback.
+func (l *Loopback) LayerType() gopacket.LayerType { return LayerTypeLoopback }
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (l *Loopback) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 4 {
+ return errors.New("Loopback packet too small")
+ }
+
+ // The protocol could be either big-endian or little-endian, we're
+ // not sure. But we're PRETTY sure that the value is less than
+ // 256, so we can check the first two bytes.
+ var prot uint32
+ if data[0] == 0 && data[1] == 0 {
+ prot = binary.BigEndian.Uint32(data[:4])
+ } else {
+ prot = binary.LittleEndian.Uint32(data[:4])
+ }
+ if prot > 0xFF {
+ return fmt.Errorf("Invalid loopback protocol %q", data[:4])
+ }
+
+ l.Family = ProtocolFamily(prot)
+ l.BaseLayer = BaseLayer{data[:4], data[4:]}
+ return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (l *Loopback) CanDecode() gopacket.LayerClass {
+ return LayerTypeLoopback
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (l *Loopback) NextLayerType() gopacket.LayerType {
+ return l.Family.LayerType()
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+func (l *Loopback) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ bytes, err := b.PrependBytes(4)
+ if err != nil {
+ return err
+ }
+ binary.LittleEndian.PutUint32(bytes, uint32(l.Family))
+ return nil
+}
+
+func decodeLoopback(data []byte, p gopacket.PacketBuilder) error {
+ l := Loopback{}
+ if err := l.DecodeFromBytes(data, gopacket.NilDecodeFeedback); err != nil {
+ return err
+ }
+ p.AddLayer(&l)
+ return p.NextDecoder(l.Family)
+}
diff --git a/vendor/github.com/google/gopacket/layers/mpls.go b/vendor/github.com/google/gopacket/layers/mpls.go
new file mode 100644
index 0000000..83079a0
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/mpls.go
@@ -0,0 +1,87 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "errors"
+ "github.com/google/gopacket"
+)
+
+// MPLS is the MPLS packet header.
+type MPLS struct {
+ BaseLayer
+ Label uint32
+ TrafficClass uint8
+ StackBottom bool
+ TTL uint8
+}
+
+// LayerType returns gopacket.LayerTypeMPLS.
+func (m *MPLS) LayerType() gopacket.LayerType { return LayerTypeMPLS }
+
+// ProtocolGuessingDecoder attempts to guess the protocol of the bytes it's
+// given, then decode the packet accordingly. Its algorithm for guessing is:
+// If the packet starts with byte 0x45-0x4F: IPv4
+// If the packet starts with byte 0x60-0x6F: IPv6
+// Otherwise: Error
+// See draft-hsmit-isis-aal5mux-00.txt for more detail on this approach.
+type ProtocolGuessingDecoder struct{}
+
+func (ProtocolGuessingDecoder) Decode(data []byte, p gopacket.PacketBuilder) error {
+ switch data[0] {
+ // 0x40 | header_len, where header_len is at least 5.
+ case 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f:
+ return decodeIPv4(data, p)
+ // IPv6 can start with any byte whose first 4 bits are 0x6.
+ case 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f:
+ return decodeIPv6(data, p)
+ }
+ return errors.New("Unable to guess protocol of packet data")
+}
+
+// MPLSPayloadDecoder is the decoder used to data encapsulated by each MPLS
+// layer. MPLS contains no type information, so we have to explicitly decide
+// which decoder to use. This is initially set to ProtocolGuessingDecoder, our
+// simple attempt at guessing protocols based on the first few bytes of data
+// available to us. However, if you know that in your environment MPLS always
+// encapsulates a specific protocol, you may reset this.
+var MPLSPayloadDecoder gopacket.Decoder = ProtocolGuessingDecoder{}
+
+func decodeMPLS(data []byte, p gopacket.PacketBuilder) error {
+ decoded := binary.BigEndian.Uint32(data[:4])
+ mpls := &MPLS{
+ Label: decoded >> 12,
+ TrafficClass: uint8(decoded>>9) & 0x7,
+ StackBottom: decoded&0x100 != 0,
+ TTL: uint8(decoded),
+ BaseLayer: BaseLayer{data[:4], data[4:]},
+ }
+ p.AddLayer(mpls)
+ if mpls.StackBottom {
+ return p.NextDecoder(MPLSPayloadDecoder)
+ }
+ return p.NextDecoder(gopacket.DecodeFunc(decodeMPLS))
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (m *MPLS) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ bytes, err := b.PrependBytes(4)
+ if err != nil {
+ return err
+ }
+ encoded := m.Label << 12
+ encoded |= uint32(m.TrafficClass) << 9
+ encoded |= uint32(m.TTL)
+ if m.StackBottom {
+ encoded |= 0x100
+ }
+ binary.BigEndian.PutUint32(bytes, encoded)
+ return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/mpls_test.go b/vendor/github.com/google/gopacket/layers/mpls_test.go
new file mode 100644
index 0000000..e0a2b95
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/mpls_test.go
@@ -0,0 +1,96 @@
+// Copyright 2016 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "reflect"
+ "testing"
+
+ "github.com/google/gopacket"
+)
+
+// testPacketMPLS
+// 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)
+// MultiProtocol Label Switching Header, Label: 17, Exp: 0, S: 0, TTL: 254
+// MultiProtocol Label Switching Header, Label: 19, Exp: 0, S: 1, TTL: 254
+// Internet Protocol Version 4, Src: 12.0.0.1, Dst: 2.2.2.2
+// Internet Control Message Protocol
+// 0000 cc 13 14 64 00 01 cc 15 14 64 00 00 88 47 00 01 ...d.....d...G..
+// 0010 10 fe 00 01 31 fe 45 00 00 64 00 39 00 00 fe 01 ....1.E..d.9....
+// 0020 ac 5b 0c 00 00 01 02 02 02 02 08 00 3a 6b 00 0b .[..........:k..
+// 0030 00 02 00 00 00 00 00 3e 43 94 ab cd ab cd ab cd .......>C.......
+// 0040 ab cd ab cd ab cd ab cd ab cd ab cd ab cd ab cd ................
+// 0050 ab cd ab cd ab cd ab cd ab cd ab cd ab cd ab cd ................
+// 0060 ab cd ab cd ab cd ab cd ab cd ab cd ab cd ab cd ................
+// 0070 ab cd ab cd ab cd ab cd ab cd ..........
+
+var testPacketMPLS = []byte{
+ 0xcc, 0x13, 0x14, 0x64, 0x00, 0x01, 0xcc, 0x15, 0x14, 0x64, 0x00, 0x00, 0x88, 0x47, 0x00, 0x01,
+ 0x10, 0xfe, 0x00, 0x01, 0x31, 0xfe, 0x45, 0x00, 0x00, 0x64, 0x00, 0x39, 0x00, 0x00, 0xfe, 0x01,
+ 0xac, 0x5b, 0x0c, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x08, 0x00, 0x3a, 0x6b, 0x00, 0x0b,
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x43, 0x94, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+}
+
+func TestPacketMPLS(t *testing.T) {
+ p := gopacket.NewPacket(testPacketMPLS, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeMPLS, LayerTypeMPLS, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)
+ if got, ok := p.Layers()[1].(*MPLS); ok {
+ want := &MPLS{
+ BaseLayer: BaseLayer{
+ Contents: []byte{0x00, 0x01, 0x10, 0xfe},
+ Payload: []byte{0x00, 0x01, 0x31, 0xfe, 0x45, 0x00, 0x00, 0x64, 0x00, 0x39, 0x00, 0x00, 0xfe, 0x01,
+ 0xac, 0x5b, 0x0c, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x08, 0x00, 0x3a, 0x6b, 0x00, 0x0b,
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x43, 0x94, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd},
+ },
+ Label: 17,
+ TrafficClass: 0,
+ StackBottom: false,
+ TTL: 254,
+ }
+ if !reflect.DeepEqual(want, got) {
+ t.Errorf("MPLS layer 1 mismatch, \nwant %#v\ngot %#v\n", want, got)
+ }
+ }
+ if got, ok := p.Layers()[2].(*MPLS); ok {
+ want := &MPLS{
+ BaseLayer: BaseLayer{
+ Contents: []byte{0x00, 0x01, 0x31, 0xfe},
+ Payload: []byte{0x45, 0x00, 0x00, 0x64, 0x00, 0x39, 0x00, 0x00, 0xfe, 0x01,
+ 0xac, 0x5b, 0x0c, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x08, 0x00, 0x3a, 0x6b, 0x00, 0x0b,
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x43, 0x94, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+ 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd},
+ },
+ Label: 19,
+ TrafficClass: 0,
+ StackBottom: true,
+ TTL: 254,
+ }
+ if !reflect.DeepEqual(want, got) {
+ t.Errorf("MPLS layer 2 mismatch, \nwant %#v\ngot %#v\n", want, got)
+ }
+ }
+}
+
+func BenchmarkDecodePacketMPLS(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketMPLS, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
diff --git a/vendor/github.com/google/gopacket/layers/ndp.go b/vendor/github.com/google/gopacket/layers/ndp.go
new file mode 100644
index 0000000..f7ca1b2
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/ndp.go
@@ -0,0 +1,611 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// Enum types courtesy of...
+// http://anonsvn.wireshark.org/wireshark/trunk/epan/dissectors/packet-ndp.c
+
+package layers
+
+import (
+ "fmt"
+ "github.com/google/gopacket"
+ "net"
+)
+
+type NDPChassisType uint8
+
+// Nortel Chassis Types
+const (
+ NDPChassisother NDPChassisType = 1
+ NDPChassis3000 NDPChassisType = 2
+ NDPChassis3030 NDPChassisType = 3
+ NDPChassis2310 NDPChassisType = 4
+ NDPChassis2810 NDPChassisType = 5
+ NDPChassis2912 NDPChassisType = 6
+ NDPChassis2914 NDPChassisType = 7
+ NDPChassis271x NDPChassisType = 8
+ NDPChassis2813 NDPChassisType = 9
+ NDPChassis2814 NDPChassisType = 10
+ NDPChassis2915 NDPChassisType = 11
+ NDPChassis5000 NDPChassisType = 12
+ NDPChassis2813SA NDPChassisType = 13
+ NDPChassis2814SA NDPChassisType = 14
+ NDPChassis810M NDPChassisType = 15
+ NDPChassisEthercell NDPChassisType = 16
+ NDPChassis5005 NDPChassisType = 17
+ NDPChassisAlcatelEWC NDPChassisType = 18
+ NDPChassis2715SA NDPChassisType = 20
+ NDPChassis2486 NDPChassisType = 21
+ NDPChassis28000series NDPChassisType = 22
+ NDPChassis23000series NDPChassisType = 23
+ NDPChassis5DN00xseries NDPChassisType = 24
+ NDPChassisBayStackEthernet NDPChassisType = 25
+ NDPChassis23100series NDPChassisType = 26
+ NDPChassis100BaseTHub NDPChassisType = 27
+ NDPChassis3000FastEthernet NDPChassisType = 28
+ NDPChassisOrionSwitch NDPChassisType = 29
+ NDPChassisDDS NDPChassisType = 31
+ NDPChassisCentillion6slot NDPChassisType = 32
+ NDPChassisCentillion12slot NDPChassisType = 33
+ NDPChassisCentillion1slot NDPChassisType = 34
+ NDPChassisBayStack301 NDPChassisType = 35
+ NDPChassisBayStackTokenRingHub NDPChassisType = 36
+ NDPChassisFVCMultimediaSwitch NDPChassisType = 37
+ NDPChassisSwitchNode NDPChassisType = 38
+ NDPChassisBayStack302Switch NDPChassisType = 39
+ NDPChassisBayStack350Switch NDPChassisType = 40
+ NDPChassisBayStack150EthernetHub NDPChassisType = 41
+ NDPChassisCentillion50NSwitch NDPChassisType = 42
+ NDPChassisCentillion50TSwitch NDPChassisType = 43
+ NDPChassisBayStack303304Switches NDPChassisType = 44
+ NDPChassisBayStack200EthernetHub NDPChassisType = 45
+ NDPChassisBayStack25010100EthernetHub NDPChassisType = 46
+ NDPChassisBayStack450101001000Switches NDPChassisType = 48
+ NDPChassisBayStack41010100Switches NDPChassisType = 49
+ NDPChassisPassport1200L3Switch NDPChassisType = 50
+ NDPChassisPassport1250L3Switch NDPChassisType = 51
+ NDPChassisPassport1100L3Switch NDPChassisType = 52
+ NDPChassisPassport1150L3Switch NDPChassisType = 53
+ NDPChassisPassport1050L3Switch NDPChassisType = 54
+ NDPChassisPassport1051L3Switch NDPChassisType = 55
+ NDPChassisPassport8610L3Switch NDPChassisType = 56
+ NDPChassisPassport8606L3Switch NDPChassisType = 57
+ NDPChassisPassport8010 NDPChassisType = 58
+ NDPChassisPassport8006 NDPChassisType = 59
+ NDPChassisBayStack670wirelessaccesspoint NDPChassisType = 60
+ NDPChassisPassport740 NDPChassisType = 61
+ NDPChassisPassport750 NDPChassisType = 62
+ NDPChassisPassport790 NDPChassisType = 63
+ NDPChassisBusinessPolicySwitch200010100Switches NDPChassisType = 64
+ NDPChassisPassport8110L2Switch NDPChassisType = 65
+ NDPChassisPassport8106L2Switch NDPChassisType = 66
+ NDPChassisBayStack3580GigSwitch NDPChassisType = 67
+ NDPChassisBayStack10PowerSupplyUnit NDPChassisType = 68
+ NDPChassisBayStack42010100Switch NDPChassisType = 69
+ NDPChassisOPTeraMetro1200EthernetServiceModule NDPChassisType = 70
+ NDPChassisOPTera8010co NDPChassisType = 71
+ NDPChassisOPTera8610coL3Switch NDPChassisType = 72
+ NDPChassisOPTera8110coL2Switch NDPChassisType = 73
+ NDPChassisOPTera8003 NDPChassisType = 74
+ NDPChassisOPTera8603L3Switch NDPChassisType = 75
+ NDPChassisOPTera8103L2Switch NDPChassisType = 76
+ NDPChassisBayStack380101001000Switch NDPChassisType = 77
+ NDPChassisEthernetSwitch47048T NDPChassisType = 78
+ NDPChassisOPTeraMetro1450EthernetServiceModule NDPChassisType = 79
+ NDPChassisOPTeraMetro1400EthernetServiceModule NDPChassisType = 80
+ NDPChassisAlteonSwitchFamily NDPChassisType = 81
+ NDPChassisEthernetSwitch46024TPWR NDPChassisType = 82
+ NDPChassisOPTeraMetro8010OPML2Switch NDPChassisType = 83
+ NDPChassisOPTeraMetro8010coOPML2Switch NDPChassisType = 84
+ NDPChassisOPTeraMetro8006OPML2Switch NDPChassisType = 85
+ NDPChassisOPTeraMetro8003OPML2Switch NDPChassisType = 86
+ NDPChassisAlteon180e NDPChassisType = 87
+ NDPChassisAlteonAD3 NDPChassisType = 88
+ NDPChassisAlteon184 NDPChassisType = 89
+ NDPChassisAlteonAD4 NDPChassisType = 90
+ NDPChassisPassport1424L3Switch NDPChassisType = 91
+ NDPChassisPassport1648L3Switch NDPChassisType = 92
+ NDPChassisPassport1612L3Switch NDPChassisType = 93
+ NDPChassisPassport1624L3Switch NDPChassisType = 94
+ NDPChassisBayStack38024FFiber1000Switch NDPChassisType = 95
+ NDPChassisEthernetRoutingSwitch551024T NDPChassisType = 96
+ NDPChassisEthernetRoutingSwitch551048T NDPChassisType = 97
+ NDPChassisEthernetSwitch47024T NDPChassisType = 98
+ NDPChassisNortelNetworksWirelessLANAccessPoint2220 NDPChassisType = 99
+ NDPChassisPassportRBS2402L3Switch NDPChassisType = 100
+ NDPChassisAlteonApplicationSwitch2424 NDPChassisType = 101
+ NDPChassisAlteonApplicationSwitch2224 NDPChassisType = 102
+ NDPChassisAlteonApplicationSwitch2208 NDPChassisType = 103
+ NDPChassisAlteonApplicationSwitch2216 NDPChassisType = 104
+ NDPChassisAlteonApplicationSwitch3408 NDPChassisType = 105
+ NDPChassisAlteonApplicationSwitch3416 NDPChassisType = 106
+ NDPChassisNortelNetworksWirelessLANSecuritySwitch2250 NDPChassisType = 107
+ NDPChassisEthernetSwitch42548T NDPChassisType = 108
+ NDPChassisEthernetSwitch42524T NDPChassisType = 109
+ NDPChassisNortelNetworksWirelessLANAccessPoint2221 NDPChassisType = 110
+ NDPChassisNortelMetroEthernetServiceUnit24TSPFswitch NDPChassisType = 111
+ NDPChassisNortelMetroEthernetServiceUnit24TLXDCswitch NDPChassisType = 112
+ NDPChassisPassport830010slotchassis NDPChassisType = 113
+ NDPChassisPassport83006slotchassis NDPChassisType = 114
+ NDPChassisEthernetRoutingSwitch552024TPWR NDPChassisType = 115
+ NDPChassisEthernetRoutingSwitch552048TPWR NDPChassisType = 116
+ NDPChassisNortelNetworksVPNGateway3050 NDPChassisType = 117
+ NDPChassisAlteonSSL31010100 NDPChassisType = 118
+ NDPChassisAlteonSSL31010100Fiber NDPChassisType = 119
+ NDPChassisAlteonSSL31010100FIPS NDPChassisType = 120
+ NDPChassisAlteonSSL410101001000 NDPChassisType = 121
+ NDPChassisAlteonSSL410101001000Fiber NDPChassisType = 122
+ NDPChassisAlteonApplicationSwitch2424SSL NDPChassisType = 123
+ NDPChassisEthernetSwitch32524T NDPChassisType = 124
+ NDPChassisEthernetSwitch32524G NDPChassisType = 125
+ NDPChassisNortelNetworksWirelessLANAccessPoint2225 NDPChassisType = 126
+ NDPChassisNortelNetworksWirelessLANSecuritySwitch2270 NDPChassisType = 127
+ NDPChassis24portEthernetSwitch47024TPWR NDPChassisType = 128
+ NDPChassis48portEthernetSwitch47048TPWR NDPChassisType = 129
+ NDPChassisEthernetRoutingSwitch553024TFD NDPChassisType = 130
+ NDPChassisEthernetSwitch351024T NDPChassisType = 131
+ NDPChassisNortelMetroEthernetServiceUnit12GACL3Switch NDPChassisType = 132
+ NDPChassisNortelMetroEthernetServiceUnit12GDCL3Switch NDPChassisType = 133
+ NDPChassisNortelSecureAccessSwitch NDPChassisType = 134
+ NDPChassisNortelNetworksVPNGateway3070 NDPChassisType = 135
+ NDPChassisOPTeraMetro3500 NDPChassisType = 136
+ NDPChassisSMBBES101024T NDPChassisType = 137
+ NDPChassisSMBBES101048T NDPChassisType = 138
+ NDPChassisSMBBES102024TPWR NDPChassisType = 139
+ NDPChassisSMBBES102048TPWR NDPChassisType = 140
+ NDPChassisSMBBES201024T NDPChassisType = 141
+ NDPChassisSMBBES201048T NDPChassisType = 142
+ NDPChassisSMBBES202024TPWR NDPChassisType = 143
+ NDPChassisSMBBES202048TPWR NDPChassisType = 144
+ NDPChassisSMBBES11024T NDPChassisType = 145
+ NDPChassisSMBBES11048T NDPChassisType = 146
+ NDPChassisSMBBES12024TPWR NDPChassisType = 147
+ NDPChassisSMBBES12048TPWR NDPChassisType = 148
+ NDPChassisSMBBES21024T NDPChassisType = 149
+ NDPChassisSMBBES21048T NDPChassisType = 150
+ NDPChassisSMBBES22024TPWR NDPChassisType = 151
+ NDPChassisSMBBES22048TPWR NDPChassisType = 152
+ NDPChassisOME6500 NDPChassisType = 153
+ NDPChassisEthernetRoutingSwitch4548GT NDPChassisType = 154
+ NDPChassisEthernetRoutingSwitch4548GTPWR NDPChassisType = 155
+ NDPChassisEthernetRoutingSwitch4550T NDPChassisType = 156
+ NDPChassisEthernetRoutingSwitch4550TPWR NDPChassisType = 157
+ NDPChassisEthernetRoutingSwitch4526FX NDPChassisType = 158
+ NDPChassisEthernetRoutingSwitch250026T NDPChassisType = 159
+ NDPChassisEthernetRoutingSwitch250026TPWR NDPChassisType = 160
+ NDPChassisEthernetRoutingSwitch250050T NDPChassisType = 161
+ NDPChassisEthernetRoutingSwitch250050TPWR NDPChassisType = 162
+)
+
+type NDPBackplaneType uint8
+
+// Nortel Backplane Types
+const (
+ NDPBackplaneOther NDPBackplaneType = 1
+ NDPBackplaneEthernet NDPBackplaneType = 2
+ NDPBackplaneEthernetTokenring NDPBackplaneType = 3
+ NDPBackplaneEthernetFDDI NDPBackplaneType = 4
+ NDPBackplaneEthernetTokenringFDDI NDPBackplaneType = 5
+ NDPBackplaneEthernetTokenringRedundantPower NDPBackplaneType = 6
+ NDPBackplaneEthernetTokenringFDDIRedundantPower NDPBackplaneType = 7
+ NDPBackplaneTokenRing NDPBackplaneType = 8
+ NDPBackplaneEthernetTokenringFastEthernet NDPBackplaneType = 9
+ NDPBackplaneEthernetFastEthernet NDPBackplaneType = 10
+ NDPBackplaneEthernetTokenringFastEthernetRedundantPower NDPBackplaneType = 11
+ NDPBackplaneEthernetFastEthernetGigabitEthernet NDPBackplaneType = 12
+)
+
+type NDPState uint8
+
+// Device State
+const (
+ NDPStateTopology NDPState = 1
+ NDPStateHeartbeat NDPState = 2
+ NDPStateNew NDPState = 3
+)
+
+// NortelDiscovery is a packet layer containing the Nortel Discovery Protocol.
+type NortelDiscovery struct {
+ BaseLayer
+ IPAddress net.IP
+ SegmentID []byte
+ Chassis NDPChassisType
+ Backplane NDPBackplaneType
+ State NDPState
+ NumLinks uint8
+}
+
+// LayerType returns gopacket.LayerTypeNortelDiscovery.
+func (c *NortelDiscovery) LayerType() gopacket.LayerType {
+ return LayerTypeNortelDiscovery
+}
+
+func decodeNortelDiscovery(data []byte, p gopacket.PacketBuilder) error {
+ c := &NortelDiscovery{}
+ if len(data) < 11 {
+ return fmt.Errorf("Invalid NortelDiscovery packet length %d", len(data))
+ }
+ c.IPAddress = data[0:4]
+ c.SegmentID = data[4:7]
+ c.Chassis = NDPChassisType(data[7])
+ c.Backplane = NDPBackplaneType(data[8])
+ c.State = NDPState(data[9])
+ c.NumLinks = uint8(data[10])
+ p.AddLayer(c)
+ return nil
+}
+
+func (t NDPChassisType) String() (s string) {
+ switch t {
+ case NDPChassisother:
+ s = "other"
+ case NDPChassis3000:
+ s = "3000"
+ case NDPChassis3030:
+ s = "3030"
+ case NDPChassis2310:
+ s = "2310"
+ case NDPChassis2810:
+ s = "2810"
+ case NDPChassis2912:
+ s = "2912"
+ case NDPChassis2914:
+ s = "2914"
+ case NDPChassis271x:
+ s = "271x"
+ case NDPChassis2813:
+ s = "2813"
+ case NDPChassis2814:
+ s = "2814"
+ case NDPChassis2915:
+ s = "2915"
+ case NDPChassis5000:
+ s = "5000"
+ case NDPChassis2813SA:
+ s = "2813SA"
+ case NDPChassis2814SA:
+ s = "2814SA"
+ case NDPChassis810M:
+ s = "810M"
+ case NDPChassisEthercell:
+ s = "Ethercell"
+ case NDPChassis5005:
+ s = "5005"
+ case NDPChassisAlcatelEWC:
+ s = "Alcatel Ethernet workgroup conc."
+ case NDPChassis2715SA:
+ s = "2715SA"
+ case NDPChassis2486:
+ s = "2486"
+ case NDPChassis28000series:
+ s = "28000 series"
+ case NDPChassis23000series:
+ s = "23000 series"
+ case NDPChassis5DN00xseries:
+ s = "5DN00x series"
+ case NDPChassisBayStackEthernet:
+ s = "BayStack Ethernet"
+ case NDPChassis23100series:
+ s = "23100 series"
+ case NDPChassis100BaseTHub:
+ s = "100Base-T Hub"
+ case NDPChassis3000FastEthernet:
+ s = "3000 Fast Ethernet"
+ case NDPChassisOrionSwitch:
+ s = "Orion switch"
+ case NDPChassisDDS:
+ s = "DDS"
+ case NDPChassisCentillion6slot:
+ s = "Centillion (6 slot)"
+ case NDPChassisCentillion12slot:
+ s = "Centillion (12 slot)"
+ case NDPChassisCentillion1slot:
+ s = "Centillion (1 slot)"
+ case NDPChassisBayStack301:
+ s = "BayStack 301"
+ case NDPChassisBayStackTokenRingHub:
+ s = "BayStack TokenRing Hub"
+ case NDPChassisFVCMultimediaSwitch:
+ s = "FVC Multimedia Switch"
+ case NDPChassisSwitchNode:
+ s = "Switch Node"
+ case NDPChassisBayStack302Switch:
+ s = "BayStack 302 Switch"
+ case NDPChassisBayStack350Switch:
+ s = "BayStack 350 Switch"
+ case NDPChassisBayStack150EthernetHub:
+ s = "BayStack 150 Ethernet Hub"
+ case NDPChassisCentillion50NSwitch:
+ s = "Centillion 50N switch"
+ case NDPChassisCentillion50TSwitch:
+ s = "Centillion 50T switch"
+ case NDPChassisBayStack303304Switches:
+ s = "BayStack 303 and 304 Switches"
+ case NDPChassisBayStack200EthernetHub:
+ s = "BayStack 200 Ethernet Hub"
+ case NDPChassisBayStack25010100EthernetHub:
+ s = "BayStack 250 10/100 Ethernet Hub"
+ case NDPChassisBayStack450101001000Switches:
+ s = "BayStack 450 10/100/1000 Switches"
+ case NDPChassisBayStack41010100Switches:
+ s = "BayStack 410 10/100 Switches"
+ case NDPChassisPassport1200L3Switch:
+ s = "Passport 1200 L3 Switch"
+ case NDPChassisPassport1250L3Switch:
+ s = "Passport 1250 L3 Switch"
+ case NDPChassisPassport1100L3Switch:
+ s = "Passport 1100 L3 Switch"
+ case NDPChassisPassport1150L3Switch:
+ s = "Passport 1150 L3 Switch"
+ case NDPChassisPassport1050L3Switch:
+ s = "Passport 1050 L3 Switch"
+ case NDPChassisPassport1051L3Switch:
+ s = "Passport 1051 L3 Switch"
+ case NDPChassisPassport8610L3Switch:
+ s = "Passport 8610 L3 Switch"
+ case NDPChassisPassport8606L3Switch:
+ s = "Passport 8606 L3 Switch"
+ case NDPChassisPassport8010:
+ s = "Passport 8010"
+ case NDPChassisPassport8006:
+ s = "Passport 8006"
+ case NDPChassisBayStack670wirelessaccesspoint:
+ s = "BayStack 670 wireless access point"
+ case NDPChassisPassport740:
+ s = "Passport 740"
+ case NDPChassisPassport750:
+ s = "Passport 750"
+ case NDPChassisPassport790:
+ s = "Passport 790"
+ case NDPChassisBusinessPolicySwitch200010100Switches:
+ s = "Business Policy Switch 2000 10/100 Switches"
+ case NDPChassisPassport8110L2Switch:
+ s = "Passport 8110 L2 Switch"
+ case NDPChassisPassport8106L2Switch:
+ s = "Passport 8106 L2 Switch"
+ case NDPChassisBayStack3580GigSwitch:
+ s = "BayStack 3580 Gig Switch"
+ case NDPChassisBayStack10PowerSupplyUnit:
+ s = "BayStack 10 Power Supply Unit"
+ case NDPChassisBayStack42010100Switch:
+ s = "BayStack 420 10/100 Switch"
+ case NDPChassisOPTeraMetro1200EthernetServiceModule:
+ s = "OPTera Metro 1200 Ethernet Service Module"
+ case NDPChassisOPTera8010co:
+ s = "OPTera 8010co"
+ case NDPChassisOPTera8610coL3Switch:
+ s = "OPTera 8610co L3 switch"
+ case NDPChassisOPTera8110coL2Switch:
+ s = "OPTera 8110co L2 switch"
+ case NDPChassisOPTera8003:
+ s = "OPTera 8003"
+ case NDPChassisOPTera8603L3Switch:
+ s = "OPTera 8603 L3 switch"
+ case NDPChassisOPTera8103L2Switch:
+ s = "OPTera 8103 L2 switch"
+ case NDPChassisBayStack380101001000Switch:
+ s = "BayStack 380 10/100/1000 Switch"
+ case NDPChassisEthernetSwitch47048T:
+ s = "Ethernet Switch 470-48T"
+ case NDPChassisOPTeraMetro1450EthernetServiceModule:
+ s = "OPTera Metro 1450 Ethernet Service Module"
+ case NDPChassisOPTeraMetro1400EthernetServiceModule:
+ s = "OPTera Metro 1400 Ethernet Service Module"
+ case NDPChassisAlteonSwitchFamily:
+ s = "Alteon Switch Family"
+ case NDPChassisEthernetSwitch46024TPWR:
+ s = "Ethernet Switch 460-24T-PWR"
+ case NDPChassisOPTeraMetro8010OPML2Switch:
+ s = "OPTera Metro 8010 OPM L2 Switch"
+ case NDPChassisOPTeraMetro8010coOPML2Switch:
+ s = "OPTera Metro 8010co OPM L2 Switch"
+ case NDPChassisOPTeraMetro8006OPML2Switch:
+ s = "OPTera Metro 8006 OPM L2 Switch"
+ case NDPChassisOPTeraMetro8003OPML2Switch:
+ s = "OPTera Metro 8003 OPM L2 Switch"
+ case NDPChassisAlteon180e:
+ s = "Alteon 180e"
+ case NDPChassisAlteonAD3:
+ s = "Alteon AD3"
+ case NDPChassisAlteon184:
+ s = "Alteon 184"
+ case NDPChassisAlteonAD4:
+ s = "Alteon AD4"
+ case NDPChassisPassport1424L3Switch:
+ s = "Passport 1424 L3 switch"
+ case NDPChassisPassport1648L3Switch:
+ s = "Passport 1648 L3 switch"
+ case NDPChassisPassport1612L3Switch:
+ s = "Passport 1612 L3 switch"
+ case NDPChassisPassport1624L3Switch:
+ s = "Passport 1624 L3 switch"
+ case NDPChassisBayStack38024FFiber1000Switch:
+ s = "BayStack 380-24F Fiber 1000 Switch"
+ case NDPChassisEthernetRoutingSwitch551024T:
+ s = "Ethernet Routing Switch 5510-24T"
+ case NDPChassisEthernetRoutingSwitch551048T:
+ s = "Ethernet Routing Switch 5510-48T"
+ case NDPChassisEthernetSwitch47024T:
+ s = "Ethernet Switch 470-24T"
+ case NDPChassisNortelNetworksWirelessLANAccessPoint2220:
+ s = "Nortel Networks Wireless LAN Access Point 2220"
+ case NDPChassisPassportRBS2402L3Switch:
+ s = "Passport RBS 2402 L3 switch"
+ case NDPChassisAlteonApplicationSwitch2424:
+ s = "Alteon Application Switch 2424"
+ case NDPChassisAlteonApplicationSwitch2224:
+ s = "Alteon Application Switch 2224"
+ case NDPChassisAlteonApplicationSwitch2208:
+ s = "Alteon Application Switch 2208"
+ case NDPChassisAlteonApplicationSwitch2216:
+ s = "Alteon Application Switch 2216"
+ case NDPChassisAlteonApplicationSwitch3408:
+ s = "Alteon Application Switch 3408"
+ case NDPChassisAlteonApplicationSwitch3416:
+ s = "Alteon Application Switch 3416"
+ case NDPChassisNortelNetworksWirelessLANSecuritySwitch2250:
+ s = "Nortel Networks Wireless LAN SecuritySwitch 2250"
+ case NDPChassisEthernetSwitch42548T:
+ s = "Ethernet Switch 425-48T"
+ case NDPChassisEthernetSwitch42524T:
+ s = "Ethernet Switch 425-24T"
+ case NDPChassisNortelNetworksWirelessLANAccessPoint2221:
+ s = "Nortel Networks Wireless LAN Access Point 2221"
+ case NDPChassisNortelMetroEthernetServiceUnit24TSPFswitch:
+ s = "Nortel Metro Ethernet Service Unit 24-T SPF switch"
+ case NDPChassisNortelMetroEthernetServiceUnit24TLXDCswitch:
+ s = " Nortel Metro Ethernet Service Unit 24-T LX DC switch"
+ case NDPChassisPassport830010slotchassis:
+ s = "Passport 8300 10-slot chassis"
+ case NDPChassisPassport83006slotchassis:
+ s = "Passport 8300 6-slot chassis"
+ case NDPChassisEthernetRoutingSwitch552024TPWR:
+ s = "Ethernet Routing Switch 5520-24T-PWR"
+ case NDPChassisEthernetRoutingSwitch552048TPWR:
+ s = "Ethernet Routing Switch 5520-48T-PWR"
+ case NDPChassisNortelNetworksVPNGateway3050:
+ s = "Nortel Networks VPN Gateway 3050"
+ case NDPChassisAlteonSSL31010100:
+ s = "Alteon SSL 310 10/100"
+ case NDPChassisAlteonSSL31010100Fiber:
+ s = "Alteon SSL 310 10/100 Fiber"
+ case NDPChassisAlteonSSL31010100FIPS:
+ s = "Alteon SSL 310 10/100 FIPS"
+ case NDPChassisAlteonSSL410101001000:
+ s = "Alteon SSL 410 10/100/1000"
+ case NDPChassisAlteonSSL410101001000Fiber:
+ s = "Alteon SSL 410 10/100/1000 Fiber"
+ case NDPChassisAlteonApplicationSwitch2424SSL:
+ s = "Alteon Application Switch 2424-SSL"
+ case NDPChassisEthernetSwitch32524T:
+ s = "Ethernet Switch 325-24T"
+ case NDPChassisEthernetSwitch32524G:
+ s = "Ethernet Switch 325-24G"
+ case NDPChassisNortelNetworksWirelessLANAccessPoint2225:
+ s = "Nortel Networks Wireless LAN Access Point 2225"
+ case NDPChassisNortelNetworksWirelessLANSecuritySwitch2270:
+ s = "Nortel Networks Wireless LAN SecuritySwitch 2270"
+ case NDPChassis24portEthernetSwitch47024TPWR:
+ s = "24-port Ethernet Switch 470-24T-PWR"
+ case NDPChassis48portEthernetSwitch47048TPWR:
+ s = "48-port Ethernet Switch 470-48T-PWR"
+ case NDPChassisEthernetRoutingSwitch553024TFD:
+ s = "Ethernet Routing Switch 5530-24TFD"
+ case NDPChassisEthernetSwitch351024T:
+ s = "Ethernet Switch 3510-24T"
+ case NDPChassisNortelMetroEthernetServiceUnit12GACL3Switch:
+ s = "Nortel Metro Ethernet Service Unit 12G AC L3 switch"
+ case NDPChassisNortelMetroEthernetServiceUnit12GDCL3Switch:
+ s = "Nortel Metro Ethernet Service Unit 12G DC L3 switch"
+ case NDPChassisNortelSecureAccessSwitch:
+ s = "Nortel Secure Access Switch"
+ case NDPChassisNortelNetworksVPNGateway3070:
+ s = "Nortel Networks VPN Gateway 3070"
+ case NDPChassisOPTeraMetro3500:
+ s = "OPTera Metro 3500"
+ case NDPChassisSMBBES101024T:
+ s = "SMB BES 1010 24T"
+ case NDPChassisSMBBES101048T:
+ s = "SMB BES 1010 48T"
+ case NDPChassisSMBBES102024TPWR:
+ s = "SMB BES 1020 24T PWR"
+ case NDPChassisSMBBES102048TPWR:
+ s = "SMB BES 1020 48T PWR"
+ case NDPChassisSMBBES201024T:
+ s = "SMB BES 2010 24T"
+ case NDPChassisSMBBES201048T:
+ s = "SMB BES 2010 48T"
+ case NDPChassisSMBBES202024TPWR:
+ s = "SMB BES 2020 24T PWR"
+ case NDPChassisSMBBES202048TPWR:
+ s = "SMB BES 2020 48T PWR"
+ case NDPChassisSMBBES11024T:
+ s = "SMB BES 110 24T"
+ case NDPChassisSMBBES11048T:
+ s = "SMB BES 110 48T"
+ case NDPChassisSMBBES12024TPWR:
+ s = "SMB BES 120 24T PWR"
+ case NDPChassisSMBBES12048TPWR:
+ s = "SMB BES 120 48T PWR"
+ case NDPChassisSMBBES21024T:
+ s = "SMB BES 210 24T"
+ case NDPChassisSMBBES21048T:
+ s = "SMB BES 210 48T"
+ case NDPChassisSMBBES22024TPWR:
+ s = "SMB BES 220 24T PWR"
+ case NDPChassisSMBBES22048TPWR:
+ s = "SMB BES 220 48T PWR"
+ case NDPChassisOME6500:
+ s = "OME 6500"
+ case NDPChassisEthernetRoutingSwitch4548GT:
+ s = "Ethernet Routing Switch 4548GT"
+ case NDPChassisEthernetRoutingSwitch4548GTPWR:
+ s = "Ethernet Routing Switch 4548GT-PWR"
+ case NDPChassisEthernetRoutingSwitch4550T:
+ s = "Ethernet Routing Switch 4550T"
+ case NDPChassisEthernetRoutingSwitch4550TPWR:
+ s = "Ethernet Routing Switch 4550T-PWR"
+ case NDPChassisEthernetRoutingSwitch4526FX:
+ s = "Ethernet Routing Switch 4526FX"
+ case NDPChassisEthernetRoutingSwitch250026T:
+ s = "Ethernet Routing Switch 2500-26T"
+ case NDPChassisEthernetRoutingSwitch250026TPWR:
+ s = "Ethernet Routing Switch 2500-26T-PWR"
+ case NDPChassisEthernetRoutingSwitch250050T:
+ s = "Ethernet Routing Switch 2500-50T"
+ case NDPChassisEthernetRoutingSwitch250050TPWR:
+ s = "Ethernet Routing Switch 2500-50T-PWR"
+ default:
+ s = "Unknown"
+ }
+ return
+}
+
+func (t NDPBackplaneType) String() (s string) {
+ switch t {
+ case NDPBackplaneOther:
+ s = "Other"
+ case NDPBackplaneEthernet:
+ s = "Ethernet"
+ case NDPBackplaneEthernetTokenring:
+ s = "Ethernet and Tokenring"
+ case NDPBackplaneEthernetFDDI:
+ s = "Ethernet and FDDI"
+ case NDPBackplaneEthernetTokenringFDDI:
+ s = "Ethernet, Tokenring and FDDI"
+ case NDPBackplaneEthernetTokenringRedundantPower:
+ s = "Ethernet and Tokenring with redundant power"
+ case NDPBackplaneEthernetTokenringFDDIRedundantPower:
+ s = "Ethernet, Tokenring, FDDI with redundant power"
+ case NDPBackplaneTokenRing:
+ s = "Token Ring"
+ case NDPBackplaneEthernetTokenringFastEthernet:
+ s = "Ethernet, Tokenring and Fast Ethernet"
+ case NDPBackplaneEthernetFastEthernet:
+ s = "Ethernet and Fast Ethernet"
+ case NDPBackplaneEthernetTokenringFastEthernetRedundantPower:
+ s = "Ethernet, Tokenring, Fast Ethernet with redundant power"
+ case NDPBackplaneEthernetFastEthernetGigabitEthernet:
+ s = "Ethernet, Fast Ethernet and Gigabit Ethernet"
+ default:
+ s = "Unknown"
+ }
+ return
+}
+
+func (t NDPState) String() (s string) {
+ switch t {
+ case NDPStateTopology:
+ s = "Topology Change"
+ case NDPStateHeartbeat:
+ s = "Heartbeat"
+ case NDPStateNew:
+ s = "New"
+ default:
+ s = "Unknown"
+ }
+ return
+}
diff --git a/vendor/github.com/google/gopacket/layers/ntp.go b/vendor/github.com/google/gopacket/layers/ntp.go
new file mode 100644
index 0000000..33c15b3
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/ntp.go
@@ -0,0 +1,416 @@
+// Copyright 2016 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+//
+//******************************************************************************
+
+package layers
+
+import (
+ "encoding/binary"
+ "errors"
+
+ "github.com/google/gopacket"
+)
+
+//******************************************************************************
+//
+// Network Time Protocol (NTP) Decoding Layer
+// ------------------------------------------
+// This file provides a GoPacket decoding layer for NTP.
+//
+//******************************************************************************
+//
+// About The Network Time Protocol (NTP)
+// -------------------------------------
+// NTP is a protocol that enables computers on the internet to set their
+// clocks to the correct time (or to a time that is acceptably close to the
+// correct time). NTP runs on top of UDP.
+//
+// There have been a series of versions of the NTP protocol. The latest
+// version is V4 and is specified in RFC 5905:
+// http://www.ietf.org/rfc/rfc5905.txt
+//
+//******************************************************************************
+//
+// References
+// ----------
+//
+// Wikipedia's NTP entry:
+// https://en.wikipedia.org/wiki/Network_Time_Protocol
+// This is the best place to get an overview of NTP.
+//
+// Network Time Protocol Home Website:
+// http://www.ntp.org/
+// This appears to be the official website of NTP.
+//
+// List of current NTP Protocol RFCs:
+// http://www.ntp.org/rfc.html
+//
+// RFC 958: "Network Time Protocol (NTP)" (1985)
+// https://tools.ietf.org/html/rfc958
+// This is the original NTP specification.
+//
+// RFC 1305: "Network Time Protocol (Version 3) Specification, Implementation and Analysis" (1992)
+// https://tools.ietf.org/html/rfc1305
+// The protocol was updated in 1992 yielding NTP V3.
+//
+// RFC 5905: "Network Time Protocol Version 4: Protocol and Algorithms Specification" (2010)
+// https://www.ietf.org/rfc/rfc5905.txt
+// The protocol was updated in 2010 yielding NTP V4.
+// V4 is backwards compatible with all previous versions of NTP.
+//
+// RFC 5906: "Network Time Protocol Version 4: Autokey Specification"
+// https://tools.ietf.org/html/rfc5906
+// This document addresses the security of the NTP protocol
+// and is probably not relevant to this package.
+//
+// RFC 5907: "Definitions of Managed Objects for Network Time Protocol Version 4 (NTPv4)"
+// https://tools.ietf.org/html/rfc5907
+// This document addresses the management of NTP servers and
+// is probably not relevant to this package.
+//
+// RFC 5908: "Network Time Protocol (NTP) Server Option for DHCPv6"
+// https://tools.ietf.org/html/rfc5908
+// This document addresses the use of NTP in DHCPv6 and is
+// probably not relevant to this package.
+//
+// "Let's make a NTP Client in C"
+// https://lettier.github.io/posts/2016-04-26-lets-make-a-ntp-client-in-c.html
+// This web page contains useful information about the details of NTP,
+// including an NTP record struture in C, and C code.
+//
+// "NTP Packet Header (NTP Reference Implementation) (Computer Network Time Synchronization)"
+// http://what-when-how.com/computer-network-time-synchronization/
+// ntp-packet-header-ntp-reference-implementation-computer-network-time-synchronization/
+// This web page contains useful information on the details of NTP.
+//
+// "Technical information - NTP Data Packet"
+// https://www.meinbergglobal.com/english/info/ntp-packet.htm
+// This page has a helpful diagram of an NTP V4 packet.
+//
+//******************************************************************************
+//
+// Obsolete References
+// -------------------
+//
+// RFC 1119: "RFC-1119 "Network Time Protocol (Version 2) Specification and Implementation" (1989)
+// https://tools.ietf.org/html/rfc1119
+// Version 2 was drafted in 1989.
+// It is unclear whether V2 was ever implememented or whether the
+// ideas ended up in V3 (which was implemented in 1992).
+//
+// RFC 1361: "Simple Network Time Protocol (SNTP)"
+// https://tools.ietf.org/html/rfc1361
+// This document is obsoleted by RFC 1769 and is included only for completeness.
+//
+// RFC 1769: "Simple Network Time Protocol (SNTP)"
+// https://tools.ietf.org/html/rfc1769
+// This document is obsoleted by RFC 2030 and RFC 4330 and is included only for completeness.
+//
+// RFC 2030: "Simple Network Time Protocol (SNTP) Version 4 for IPv4, IPv6 and OSI"
+// https://tools.ietf.org/html/rfc2030
+// This document is obsoleted by RFC 4330 and is included only for completeness.
+//
+// RFC 4330: "Simple Network Time Protocol (SNTP) Version 4 for IPv4, IPv6 and OSI"
+// https://tools.ietf.org/html/rfc4330
+// This document is obsoleted by RFC 5905 and is included only for completeness.
+//
+//******************************************************************************
+//
+// Endian And Bit Numbering Issues
+// -------------------------------
+//
+// Endian and bit numbering issues can be confusing. Here is some
+// clarification:
+//
+// ENDIAN: Values are sent big endian.
+// https://en.wikipedia.org/wiki/Endianness
+//
+// BIT NUMBERING: Bits are numbered 0 upwards from the most significant
+// bit to the least significant bit. This means that if there is a 32-bit
+// value, the most significant bit is called bit 0 and the least
+// significant bit is called bit 31.
+//
+// See RFC 791 Appendix B for more discussion.
+//
+//******************************************************************************
+//
+// NTP V3 and V4 Packet Format
+// ---------------------------
+// NTP packets are UDP packets whose payload contains an NTP record.
+//
+// The NTP RFC defines the format of the NTP record.
+//
+// There have been four versions of the protocol:
+//
+// V1 in 1985
+// V2 in 1989
+// V3 in 1992
+// V4 in 2010
+//
+// It is clear that V1 and V2 are obsolete, and there is no need to
+// cater for these formats.
+//
+// V3 and V4 essentially use the same format, with V4 adding some optional
+// fields on the end. So this package supports the V3 and V4 formats.
+//
+// The current version of NTP (NTP V4)'s RFC (V4 - RFC 5905) contains
+// the following diagram for the NTP record format:
+
+// 0 1 2 3
+// 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
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |LI | VN |Mode | Stratum | Poll | Precision |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Root Delay |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Root Dispersion |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Reference ID |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | |
+// + Reference Timestamp (64) +
+// | |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | |
+// + Origin Timestamp (64) +
+// | |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | |
+// + Receive Timestamp (64) +
+// | |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | |
+// + Transmit Timestamp (64) +
+// | |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | |
+// . .
+// . Extension Field 1 (variable) .
+// . .
+// | |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | |
+// . .
+// . Extension Field 2 (variable) .
+// . .
+// | |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Key Identifier |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | |
+// | dgst (128) |
+// | |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// From http://www.ietf.org/rfc/rfc5905.txt
+//
+// The fields "Extension Field 1 (variable)" and later are optional fields,
+// and so we can set a minimum NTP record size of 48 bytes.
+//
+const ntpMinimumRecordSizeInBytes int = 48
+
+//******************************************************************************
+
+// NTP Type
+// --------
+// Type NTP implements the DecodingLayer interface. Each NTP object
+// represents in a structured form the NTP record present as the UDP
+// payload in an NTP UDP packet.
+//
+
+type NTPLeapIndicator uint8
+type NTPVersion uint8
+type NTPMode uint8
+type NTPStratum uint8
+type NTPLog2Seconds int8
+type NTPFixed16Seconds uint32
+type NTPReferenceID uint32
+type NTPTimestamp uint64
+
+type NTP struct {
+ BaseLayer // Stores the packet bytes and payload bytes.
+
+ LeapIndicator NTPLeapIndicator // [0,3]. Indicates whether leap second(s) is to be added.
+ Version NTPVersion // [0,7]. Version of the NTP protocol.
+ Mode NTPMode // [0,7]. Mode.
+ Stratum NTPStratum // [0,255]. Stratum of time server in the server tree.
+ Poll NTPLog2Seconds // [-128,127]. The maximum interval between successive messages, in log2 seconds.
+ Precision NTPLog2Seconds // [-128,127]. The precision of the system clock, in log2 seconds.
+ RootDelay NTPFixed16Seconds // [0,2^32-1]. Total round trip delay to the reference clock in seconds times 2^16.
+ RootDispersion NTPFixed16Seconds // [0,2^32-1]. Total dispersion to the reference clock, in seconds times 2^16.
+ ReferenceID NTPReferenceID // ID code of reference clock [0,2^32-1].
+ ReferenceTimestamp NTPTimestamp // Most recent timestamp from the reference clock.
+ OriginTimestamp NTPTimestamp // Local time when request was sent from local host.
+ ReceiveTimestamp NTPTimestamp // Local time (on server) that request arrived at server host.
+ TransmitTimestamp NTPTimestamp // Local time (on server) that request departed server host.
+
+ // FIX: This package should analyse the extension fields and represent the extension fields too.
+ ExtensionBytes []byte // Just put extensions in a byte slice.
+}
+
+//******************************************************************************
+
+// LayerType returns the layer type of the NTP object, which is LayerTypeNTP.
+func (d *NTP) LayerType() gopacket.LayerType {
+ return LayerTypeNTP
+}
+
+//******************************************************************************
+
+// decodeNTP analyses a byte slice and attempts to decode it as an NTP
+// record of a UDP packet.
+//
+// If it succeeds, it loads p with information about the packet and returns nil.
+// If it fails, it returns an error (non nil).
+//
+// This function is employed in layertypes.go to register the NTP layer.
+func decodeNTP(data []byte, p gopacket.PacketBuilder) error {
+
+ // Attempt to decode the byte slice.
+ d := &NTP{}
+ err := d.DecodeFromBytes(data, p)
+ if err != nil {
+ return err
+ }
+
+ // If the decoding worked, add the layer to the packet and set it
+ // as the application layer too, if there isn't already one.
+ p.AddLayer(d)
+ p.SetApplicationLayer(d)
+
+ return nil
+}
+
+//******************************************************************************
+
+// DecodeFromBytes analyses a byte slice and attempts to decode it as an NTP
+// record of a UDP packet.
+//
+// Upon succeeds, it loads the NTP object with information about the packet
+// and returns nil.
+// Upon failure, it returns an error (non nil).
+func (d *NTP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+
+ // If the data block is too short to be a NTP record, then return an error.
+ if len(data) < ntpMinimumRecordSizeInBytes {
+ df.SetTruncated()
+ return errors.New("NTP packet too short")
+ }
+
+ // RFC 5905 does not appear to define a maximum NTP record length.
+ // The protocol allows "extension fields" to be included in the record,
+ // and states about these fields:"
+ //
+ // "While the minimum field length containing required fields is
+ // four words (16 octets), a maximum field length remains to be
+ // established."
+ //
+ // For this reason, the packet length is not checked here for being too long.
+
+ // NTP type embeds type BaseLayer which contains two fields:
+ // Contents is supposed to contain the bytes of the data at this level.
+ // Payload is supposed to contain the payload of this level.
+ // Here we set the baselayer to be the bytes of the NTP record.
+ d.BaseLayer = BaseLayer{Contents: data[:len(data)]}
+
+ // Extract the fields from the block of bytes.
+ // To make sense of this, refer to the packet diagram
+ // above and the section on endian conventions.
+
+ // The first few fields are all packed into the first 32 bits. Unpack them.
+ f := data[0]
+ d.LeapIndicator = NTPLeapIndicator((f & 0xC0) >> 6)
+ d.Version = NTPVersion((f & 0x38) >> 3)
+ d.Mode = NTPMode(f & 0x07)
+ d.Stratum = NTPStratum(data[1])
+ d.Poll = NTPLog2Seconds(data[2])
+ d.Precision = NTPLog2Seconds(data[3])
+
+ // The remaining fields can just be copied in big endian order.
+ d.RootDelay = NTPFixed16Seconds(binary.BigEndian.Uint32(data[4:8]))
+ d.RootDispersion = NTPFixed16Seconds(binary.BigEndian.Uint32(data[8:12]))
+ d.ReferenceID = NTPReferenceID(binary.BigEndian.Uint32(data[12:16]))
+ d.ReferenceTimestamp = NTPTimestamp(binary.BigEndian.Uint64(data[16:24]))
+ d.OriginTimestamp = NTPTimestamp(binary.BigEndian.Uint64(data[24:32]))
+ d.ReceiveTimestamp = NTPTimestamp(binary.BigEndian.Uint64(data[32:40]))
+ d.TransmitTimestamp = NTPTimestamp(binary.BigEndian.Uint64(data[40:48]))
+
+ // This layer does not attempt to analyse the extension bytes.
+ // But if there are any, we'd like the user to know. So we just
+ // place them all in an ExtensionBytes field.
+ d.ExtensionBytes = data[48:]
+
+ // Return no error.
+ return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (d *NTP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ data, err := b.PrependBytes(ntpMinimumRecordSizeInBytes)
+ if err != nil {
+ return err
+ }
+
+ // Pack the first few fields into the first 32 bits.
+ h := uint8(0)
+ h |= (uint8(d.LeapIndicator) << 6) & 0xC0
+ h |= (uint8(d.Version) << 3) & 0x38
+ h |= (uint8(d.Mode)) & 0x07
+ data[0] = byte(h)
+ data[1] = byte(d.Stratum)
+ data[2] = byte(d.Poll)
+ data[3] = byte(d.Precision)
+
+ // The remaining fields can just be copied in big endian order.
+ binary.BigEndian.PutUint32(data[4:8], uint32(d.RootDelay))
+ binary.BigEndian.PutUint32(data[8:12], uint32(d.RootDispersion))
+ binary.BigEndian.PutUint32(data[12:16], uint32(d.ReferenceID))
+ binary.BigEndian.PutUint64(data[16:24], uint64(d.ReferenceTimestamp))
+ binary.BigEndian.PutUint64(data[24:32], uint64(d.OriginTimestamp))
+ binary.BigEndian.PutUint64(data[32:40], uint64(d.ReceiveTimestamp))
+ binary.BigEndian.PutUint64(data[40:48], uint64(d.TransmitTimestamp))
+
+ ex, err := b.AppendBytes(len(d.ExtensionBytes))
+ if err != nil {
+ return err
+ }
+ copy(ex, d.ExtensionBytes)
+
+ return nil
+}
+
+//******************************************************************************
+
+// CanDecode returns a set of layers that NTP objects can decode.
+// As NTP objects can only decide the NTP layer, we can return just that layer.
+// Apparently a single layer type implements LayerClass.
+func (d *NTP) CanDecode() gopacket.LayerClass {
+ return LayerTypeNTP
+}
+
+//******************************************************************************
+
+// NextLayerType specifies the next layer that GoPacket should attempt to
+// analyse after this (NTP) layer. As NTP packets do not contain any payload
+// bytes, there are no further layers to analyse.
+func (d *NTP) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypeZero
+}
+
+//******************************************************************************
+
+// NTP packets do not carry any data payload, so the empty byte slice is retured.
+// In Go, a nil slice is functionally identical to an empty slice, so we
+// return nil to avoid a heap allocation.
+func (d *NTP) Payload() []byte {
+ return nil
+}
+
+//******************************************************************************
+//* End Of NTP File *
+//******************************************************************************
diff --git a/vendor/github.com/google/gopacket/layers/ntp_test.go b/vendor/github.com/google/gopacket/layers/ntp_test.go
new file mode 100644
index 0000000..b522216
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/ntp_test.go
@@ -0,0 +1,258 @@
+// Copyright 2016 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+//
+//******************************************************************************
+
+package layers
+
+import (
+ "crypto/rand"
+ "github.com/google/gopacket"
+ "io"
+ "reflect"
+ "testing"
+)
+
+//******************************************************************************
+
+// checkNTP() uses the ntp.go code to analyse the packet bytes as an NTP UDP
+// packet and generate an NTP object. It then compares the generated NTP object
+// with the one provided and throws an error if there is any difference.
+// The desc argument is output with any failure message to identify the test.
+func checkNTP(desc string, t *testing.T, packetBytes []byte, pExpectedNTP *NTP) {
+
+ // Analyse the packet bytes, yielding a new packet object p.
+ p := gopacket.NewPacket(packetBytes, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Errorf("Failed to decode packet %s: %v", desc, p.ErrorLayer().Error())
+ }
+
+ // Ensure that the packet analysis yielded the correct set of layers:
+ // Link Layer = Ethernet.
+ // Network Layer = IPv4.
+ // Transport Layer = UDP.
+ // Application Layer = NTP.
+ checkLayers(p, []gopacket.LayerType{
+ LayerTypeEthernet,
+ LayerTypeIPv4,
+ LayerTypeUDP,
+ LayerTypeNTP}, t)
+
+ // Select the Application (NTP) layer.
+ pResultNTP, ok := p.ApplicationLayer().(*NTP)
+ if !ok {
+ t.Error("No NTP layer type found in packet in " + desc + ".")
+ }
+
+ // Compare the generated NTP object with the expected NTP object.
+ if !reflect.DeepEqual(pResultNTP, pExpectedNTP) {
+ t.Errorf("NTP packet processing failed for packet "+desc+
+ ":\ngot :\n%#v\n\nwant :\n%#v\n\n", pResultNTP, pExpectedNTP)
+ }
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{}
+ err := pResultNTP.SerializeTo(buf, opts)
+ if err != nil {
+ t.Error(err)
+ }
+ if !reflect.DeepEqual(pResultNTP.BaseLayer.Contents, buf.Bytes()) {
+ t.Errorf("NTP packet serialization failed for packet "+desc+
+ ":\ngot :\n%x\n\nwant :\n%x\n\n", buf.Bytes(), packetBytes)
+ }
+}
+
+//******************************************************************************
+
+func TestNTPOne(t *testing.T) {
+
+ // This test packet is the first NTP packet in the NTP sample capture
+ // pcap file NTP_sync.pcap on the Wireshark sample captures page:
+ //
+ // https://wiki.wireshark.org/SampleCaptures
+ // https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=NTP_sync.pcap
+ var testPacketNTP = []byte{
+ 0x00, 0x0c, 0x41, 0x82, 0xb2, 0x53, 0x00, 0xd0,
+ 0x59, 0x6c, 0x40, 0x4e, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0x4c, 0x0a, 0x42, 0x00, 0x00, 0x80, 0x11,
+ 0xb5, 0xfa, 0xc0, 0xa8, 0x32, 0x32, 0x43, 0x81,
+ 0x44, 0x09, 0x00, 0x7b, 0x00, 0x7b, 0x00, 0x38,
+ 0xf8, 0xd2, 0xd9, 0x00, 0x0a, 0xfa, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x02, 0x90, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc5, 0x02, 0x04, 0xec, 0xec, 0x42,
+ 0xee, 0x92,
+ }
+
+ // Assemble the NTP object that we expect to emerge from this test.
+ pExpectedNTP := &NTP{
+ BaseLayer: BaseLayer{
+ Contents: []byte{0xd9, 0x0, 0xa, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x1, 0x2, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0xc5, 0x2, 0x4, 0xec, 0xec, 0x42, 0xee, 0x92},
+ Payload: nil,
+ },
+ LeapIndicator: 3,
+ Version: 3,
+ Mode: 1,
+ Stratum: 0,
+ Poll: 10,
+ Precision: -6,
+ RootDelay: 0,
+ RootDispersion: 0x10290,
+ ReferenceID: 0,
+ ReferenceTimestamp: 0,
+ OriginTimestamp: 0,
+ ReceiveTimestamp: 0,
+ TransmitTimestamp: 0xc50204ecec42ee92,
+ ExtensionBytes: []byte{},
+ }
+
+ checkNTP("test01", t, testPacketNTP, pExpectedNTP)
+}
+
+//******************************************************************************
+
+func TestNTPTwo(t *testing.T) {
+
+ // This test packet is packet #18 in the NTP sample capture
+ // pcap file NTP_sync.pcap on the Wireshark sample captures page:
+ //
+ // https://wiki.wireshark.org/SampleCaptures
+ // https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=NTP_sync.pcap
+ //
+ // This packet was chosen because it is the first NTP packet after the first
+ // NTP packet that has non-zero timestamps.
+
+ var testPacketNTP = []byte{
+ 0x00, 0xd0, 0x59, 0x6c, 0x40, 0x4e, 0x00, 0x0c,
+ 0x41, 0x82, 0xb2, 0x53, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0x4c, 0x32, 0x46, 0x40, 0x00, 0x2f, 0x11,
+ 0xa8, 0x18, 0x45, 0x2c, 0x39, 0x3c, 0xc0, 0xa8,
+ 0x32, 0x32, 0x00, 0x7b, 0x00, 0x7b, 0x00, 0x38,
+ 0x09, 0x58, 0x1a, 0x03, 0x0a, 0xee, 0x00, 0x00,
+ 0x1b, 0xf7, 0x00, 0x00, 0x14, 0xec, 0x51, 0xae,
+ 0x80, 0xb7, 0xc5, 0x02, 0x03, 0x4c, 0x8d, 0x0e,
+ 0x66, 0xcb, 0xc5, 0x02, 0x04, 0xec, 0xec, 0x42,
+ 0xee, 0x92, 0xc5, 0x02, 0x04, 0xeb, 0xcf, 0x49,
+ 0x59, 0xe6, 0xc5, 0x02, 0x04, 0xeb, 0xcf, 0x4c,
+ 0x6e, 0x6e,
+ }
+
+ // Assemble the NTP object that we expect to emerge from this test.
+ pExpectedNTP := &NTP{
+ BaseLayer: BaseLayer{
+ Contents: []byte{0x1a, 0x03, 0x0a, 0xee, 0x00, 0x00,
+ 0x1b, 0xf7, 0x00, 0x00, 0x14, 0xec, 0x51, 0xae,
+ 0x80, 0xb7, 0xc5, 0x02, 0x03, 0x4c, 0x8d, 0x0e,
+ 0x66, 0xcb, 0xc5, 0x02, 0x04, 0xec, 0xec, 0x42,
+ 0xee, 0x92, 0xc5, 0x02, 0x04, 0xeb, 0xcf, 0x49,
+ 0x59, 0xe6, 0xc5, 0x02, 0x04, 0xeb, 0xcf, 0x4c,
+ 0x6e, 0x6e},
+ Payload: nil,
+ },
+ LeapIndicator: 0,
+ Version: 3,
+ Mode: 2,
+ Stratum: 3,
+ Poll: 10,
+ Precision: -18,
+ RootDelay: 0x1bf7,
+ RootDispersion: 0x14ec,
+ ReferenceID: 0x51ae80b7,
+ ReferenceTimestamp: 0xc502034c8d0e66cb,
+ OriginTimestamp: 0xc50204ecec42ee92,
+ ReceiveTimestamp: 0xc50204ebcf4959e6,
+ TransmitTimestamp: 0xc50204ebcf4c6e6e,
+ ExtensionBytes: []byte{},
+ }
+
+ checkNTP("test02", t, testPacketNTP, pExpectedNTP)
+}
+
+//******************************************************************************
+
+func TestNTPThree(t *testing.T) {
+
+ // This test packet is packet #19 in the NTP sample capture
+ // pcap file NTP_sync.pcap on the Wireshark sample captures page:
+ //
+ // https://wiki.wireshark.org/SampleCaptures
+ // https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=NTP_sync.pcap
+
+ var testPacketNTP = []byte{
+ 0x00, 0xd0, 0x59, 0x6c, 0x40, 0x4e, 0x00, 0x0c,
+ 0x41, 0x82, 0xb2, 0x53, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0x4c, 0x00, 0x00, 0x40, 0x00, 0x30, 0x11,
+ 0x74, 0x65, 0x18, 0x7b, 0xca, 0xe6, 0xc0, 0xa8,
+ 0x32, 0x32, 0x00, 0x7b, 0x00, 0x7b, 0x00, 0x38,
+ 0x44, 0x05, 0x1a, 0x02, 0x0a, 0xec, 0x00, 0x00,
+ 0x07, 0xc3, 0x00, 0x00, 0x2f, 0x80, 0xc6, 0x1e,
+ 0x5c, 0x02, 0xc5, 0x01, 0xf9, 0x95, 0x42, 0x50,
+ 0x82, 0xcf, 0xc5, 0x02, 0x04, 0xec, 0xec, 0x42,
+ 0xee, 0x92, 0xc5, 0x02, 0x04, 0xeb, 0xd2, 0x35,
+ 0x2e, 0xb5, 0xc5, 0x02, 0x04, 0xeb, 0xd2, 0x35,
+ 0xd6, 0x7b,
+ }
+
+ // Assemble the NTP object that we expect to emerge from this test.
+ pExpectedNTP := &NTP{
+ BaseLayer: BaseLayer{
+ Contents: []byte{0x1a, 0x02, 0x0a, 0xec, 0x00, 0x00,
+ 0x07, 0xc3, 0x00, 0x00, 0x2f, 0x80, 0xc6, 0x1e,
+ 0x5c, 0x02, 0xc5, 0x01, 0xf9, 0x95, 0x42, 0x50,
+ 0x82, 0xcf, 0xc5, 0x02, 0x04, 0xec, 0xec, 0x42,
+ 0xee, 0x92, 0xc5, 0x02, 0x04, 0xeb, 0xd2, 0x35,
+ 0x2e, 0xb5, 0xc5, 0x02, 0x04, 0xeb, 0xd2, 0x35,
+ 0xd6, 0x7b},
+ Payload: nil,
+ },
+ LeapIndicator: 0,
+ Version: 3,
+ Mode: 2,
+ Stratum: 2,
+ Poll: 10,
+ Precision: -20,
+ RootDelay: 0x7c3,
+ RootDispersion: 0x2f80,
+ ReferenceID: 0xc61e5c02,
+ ReferenceTimestamp: 0xc501f995425082cf,
+ OriginTimestamp: 0xc50204ecec42ee92,
+ ReceiveTimestamp: 0xc50204ebd2352eb5,
+ TransmitTimestamp: 0xc50204ebd235d67b,
+ ExtensionBytes: []byte{},
+ }
+
+ checkNTP("test03", t, testPacketNTP, pExpectedNTP)
+}
+
+//******************************************************************************
+
+// TestNTPIsomorphism tests whether random data gets parsed into NTP layer and
+// gets serialized back from it to the same value.
+func TestNTPIsomorphism(t *testing.T) {
+ NTPData := make([]byte, ntpMinimumRecordSizeInBytes+7)
+ _, err := io.ReadFull(rand.Reader, NTPData)
+ if err != nil {
+ t.Error(err)
+ }
+ ntpLayer := &NTP{}
+ err = ntpLayer.DecodeFromBytes(NTPData, gopacket.NilDecodeFeedback)
+ if err != nil {
+ t.Error(err)
+ }
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{}
+ err = ntpLayer.SerializeTo(buf, opts)
+ if err != nil {
+ t.Error(err)
+ }
+ if !reflect.DeepEqual(NTPData, buf.Bytes()) {
+ t.Errorf("NTP packet is not isomorphic:\ngot :\n%x\n\nwant :\n%x\n\n", buf.Bytes(), NTPData)
+ }
+}
diff --git a/vendor/github.com/google/gopacket/layers/ospf.go b/vendor/github.com/google/gopacket/layers/ospf.go
new file mode 100644
index 0000000..eee8542
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/ospf.go
@@ -0,0 +1,509 @@
+// Copyright 2017 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "fmt"
+
+ "github.com/google/gopacket"
+)
+
+// OSPFType denotes what kind of OSPF type it is
+type OSPFType uint8
+
+// Potential values for OSPF.Type.
+const (
+ OSPFHello OSPFType = 1
+ OSPFDatabaseDescription OSPFType = 2
+ OSPFLinkStateRequest OSPFType = 3
+ OSPFLinkStateUpdate OSPFType = 4
+ OSPFLinkStateAcknowledgment OSPFType = 5
+)
+
+// LSA Function Codes for LSAheader.LSType
+const (
+ RouterLSAtype = 0x2001
+ NetworkLSAtype = 0x2002
+ InterAreaPrefixLSAtype = 0x2003
+ InterAreaRouterLSAtype = 0x2004
+ ASExternalLSAtype = 0x4005
+ NSSALSAtype = 0x2007
+ LinkLSAtype = 0x0008
+ IntraAreaPrefixLSAtype = 0x2009
+)
+
+// String conversions for OSPFType
+func (i OSPFType) String() string {
+ switch i {
+ case OSPFHello:
+ return "Hello"
+ case OSPFDatabaseDescription:
+ return "Database Description"
+ case OSPFLinkStateRequest:
+ return "Link State Request"
+ case OSPFLinkStateUpdate:
+ return "Link State Update"
+ case OSPFLinkStateAcknowledgment:
+ return "Link State Acknowledgment"
+ default:
+ return ""
+ }
+}
+
+// Prefix extends IntraAreaPrefixLSA
+type Prefix struct {
+ PrefixLength uint8
+ PrefixOptions uint8
+ Metric uint16
+ AddressPrefix []byte
+}
+
+// IntraAreaPrefixLSA is the struct from RFC 5340 A.4.10.
+type IntraAreaPrefixLSA struct {
+ NumOfPrefixes uint16
+ RefLSType uint16
+ RefLinkStateID uint32
+ RefAdvRouter uint32
+ Prefixes []Prefix
+}
+
+// LinkLSA is the struct from RFC 5340 A.4.9.
+type LinkLSA struct {
+ RtrPriority uint8
+ Options uint32
+ LinkLocalAddress []byte
+ NumOfPrefixes uint32
+ Prefixes []Prefix
+}
+
+// ASExternalLSA is the struct from RFC 5340 A.4.7.
+type ASExternalLSA struct {
+ Flags uint8
+ Metric uint32
+ PrefixLength uint8
+ PrefixOptions uint8
+ RefLSType uint16
+ AddressPrefix []byte
+ ForwardingAddress []byte
+ ExternalRouteTag uint32
+ RefLinkStateID uint32
+}
+
+// InterAreaRouterLSA is the struct from RFC 5340 A.4.6.
+type InterAreaRouterLSA struct {
+ Options uint32
+ Metric uint32
+ DestinationRouterID uint32
+}
+
+// InterAreaPrefixLSA is the struct from RFC 5340 A.4.5.
+type InterAreaPrefixLSA struct {
+ Metric uint32
+ PrefixLength uint8
+ PrefixOptions uint8
+ AddressPrefix []byte
+}
+
+// NetworkLSA is the struct from RFC 5340 A.4.4.
+type NetworkLSA struct {
+ Options uint32
+ AttachedRouter []uint32
+}
+
+// Router extends RouterLSA
+type Router struct {
+ Type uint8
+ Metric uint16
+ InterfaceID uint32
+ NeighborInterfaceID uint32
+ NeighborRouterID uint32
+}
+
+// RouterLSA is the struct from RFC 5340 A.4.3.
+type RouterLSA struct {
+ Flags uint8
+ Options uint32
+ Routers []Router
+}
+
+// LSAheader is the struct from RFC 5340 A.4.2.
+type LSAheader struct {
+ LSAge uint16
+ LSType uint16
+ LinkStateID uint32
+ AdvRouter uint32
+ LSSeqNumber uint32
+ LSChecksum uint16
+ Length uint16
+}
+
+// LSA links LSAheader with the structs from RFC 5340 A.4.
+type LSA struct {
+ LSAheader
+ Content interface{}
+}
+
+// LSUpdate is the struct from RFC 5340 A.3.5.
+type LSUpdate struct {
+ NumOfLSAs uint32
+ LSAs []LSA
+}
+
+// LSReq is the struct from RFC 5340 A.3.4.
+type LSReq struct {
+ LSType uint16
+ LSID uint32
+ AdvRouter uint32
+}
+
+// DbDescPkg is the struct from RFC 5340 A.3.3.
+type DbDescPkg struct {
+ Options uint32
+ InterfaceMTU uint16
+ Flags uint16
+ DDSeqNumber uint32
+ LSAinfo []LSAheader
+}
+
+// HelloPkg is the struct from RFC 5340 A.3.2.
+type HelloPkg struct {
+ InterfaceID uint32
+ RtrPriority uint8
+ Options uint32
+ HelloInterval uint16
+ RouterDeadInterval uint16
+ DesignatedRouterID uint32
+ BackupDesignatedRouterID uint32
+ NeighborID []uint32
+}
+
+// HelloPkgV2 extends the HelloPkg struct with OSPFv2 information
+type HelloPkgV2 struct {
+ HelloPkg
+ NetworkMask uint32
+}
+
+// OSPF is a basic OSPF packet header with common fields of Version 2 and Version 3.
+type OSPF struct {
+ Version uint8
+ Type OSPFType
+ PacketLength uint16
+ RouterID uint32
+ AreaID uint32
+ Checksum uint16
+ Content interface{}
+}
+
+//OSPFv2 extend the OSPF head with version 2 specific fields
+type OSPFv2 struct {
+ BaseLayer
+ OSPF
+ AuType uint16
+ Authentication uint64
+}
+
+// OSPFv3 extend the OSPF head with version 3 specific fields
+type OSPFv3 struct {
+ BaseLayer
+ OSPF
+ Instance uint8
+ Reserved uint8
+}
+
+// getLSAs parses the LSA information from the packet
+func getLSAs(num uint32, data []byte) ([]LSA, error) {
+ var lsas []LSA
+ var i uint32 = 0
+ var offset uint32 = 0
+ for ; i < num; i++ {
+ var content interface{}
+ lstype := binary.BigEndian.Uint16(data[offset+2 : offset+4])
+ lsalength := binary.BigEndian.Uint16(data[offset+18 : offset+20])
+
+ switch lstype {
+ case RouterLSAtype:
+ var routers []Router
+ var j uint32
+ for j = 24; j < uint32(lsalength); j += 16 {
+ router := Router{
+ Type: uint8(data[offset+j]),
+ Metric: binary.BigEndian.Uint16(data[offset+j+2 : offset+j+4]),
+ InterfaceID: binary.BigEndian.Uint32(data[offset+j+4 : offset+j+8]),
+ NeighborInterfaceID: binary.BigEndian.Uint32(data[offset+j+8 : offset+j+12]),
+ NeighborRouterID: binary.BigEndian.Uint32(data[offset+j+12 : offset+j+16]),
+ }
+ routers = append(routers, router)
+ }
+ content = RouterLSA{
+ Flags: uint8(data[offset+20]),
+ Options: binary.BigEndian.Uint32(data[offset+20:offset+24]) & 0x00FFFFFF,
+ Routers: routers,
+ }
+ case NetworkLSAtype:
+ var routers []uint32
+ var j uint32
+ for j = 24; j < uint32(lsalength); j += 4 {
+ routers = append(routers, binary.BigEndian.Uint32(data[offset+j:offset+j+4]))
+ }
+ content = NetworkLSA{
+ Options: binary.BigEndian.Uint32(data[offset+20:offset+24]) & 0x00FFFFFF,
+ AttachedRouter: routers,
+ }
+ case InterAreaPrefixLSAtype:
+ content = InterAreaPrefixLSA{
+ Metric: binary.BigEndian.Uint32(data[offset+20:offset+24]) & 0x00FFFFFF,
+ PrefixLength: uint8(data[offset+24]),
+ PrefixOptions: uint8(data[offset+25]),
+ AddressPrefix: data[offset+28 : offset+uint32(lsalength)],
+ }
+ case InterAreaRouterLSAtype:
+ content = InterAreaRouterLSA{
+ Options: binary.BigEndian.Uint32(data[offset+20:offset+24]) & 0x00FFFFFF,
+ Metric: binary.BigEndian.Uint32(data[offset+24:offset+28]) & 0x00FFFFFF,
+ DestinationRouterID: binary.BigEndian.Uint32(data[offset+28 : offset+32]),
+ }
+ case ASExternalLSAtype:
+ fallthrough
+ case NSSALSAtype:
+
+ flags := uint8(data[offset+20])
+ prefixLen := uint8(data[offset+24]) / 8
+ var forwardingAddress []byte
+ if (flags & 0x02) == 0x02 {
+ forwardingAddress = data[offset+28+uint32(prefixLen) : offset+28+uint32(prefixLen)+16]
+ }
+ content = ASExternalLSA{
+ Flags: flags,
+ Metric: binary.BigEndian.Uint32(data[offset+20:offset+24]) & 0x00FFFFFF,
+ PrefixLength: prefixLen,
+ PrefixOptions: uint8(data[offset+25]),
+ RefLSType: binary.BigEndian.Uint16(data[offset+26 : offset+28]),
+ AddressPrefix: data[offset+28 : offset+28+uint32(prefixLen)],
+ ForwardingAddress: forwardingAddress,
+ }
+ case LinkLSAtype:
+ var prefixes []Prefix
+ var prefixOffset uint32 = offset + 44
+ var j uint32
+ numOfPrefixes := binary.BigEndian.Uint32(data[offset+40 : offset+44])
+ for j = 0; j < numOfPrefixes; j++ {
+ prefixLen := uint8(data[prefixOffset])
+ prefix := Prefix{
+ PrefixLength: prefixLen,
+ PrefixOptions: uint8(data[prefixOffset+1]),
+ AddressPrefix: data[prefixOffset+4 : prefixOffset+4+uint32(prefixLen)/8],
+ }
+ prefixes = append(prefixes, prefix)
+ prefixOffset = prefixOffset + 4 + uint32(prefixLen)/8
+ }
+ content = LinkLSA{
+ RtrPriority: uint8(data[offset+20]),
+ Options: binary.BigEndian.Uint32(data[offset+20:offset+24]) & 0x00FFFFFF,
+ LinkLocalAddress: data[offset+24 : offset+40],
+ NumOfPrefixes: numOfPrefixes,
+ Prefixes: prefixes,
+ }
+ case IntraAreaPrefixLSAtype:
+ var prefixes []Prefix
+ var prefixOffset uint32 = offset + 32
+ var j uint16
+ numOfPrefixes := binary.BigEndian.Uint16(data[offset+20 : offset+22])
+ for j = 0; j < numOfPrefixes; j++ {
+ prefixLen := uint8(data[prefixOffset])
+ prefix := Prefix{
+ PrefixLength: prefixLen,
+ PrefixOptions: uint8(data[prefixOffset+1]),
+ Metric: binary.BigEndian.Uint16(data[prefixOffset+2 : prefixOffset+4]),
+ AddressPrefix: data[prefixOffset+4 : prefixOffset+4+uint32(prefixLen)/8],
+ }
+ prefixes = append(prefixes, prefix)
+ prefixOffset = prefixOffset + 4 + uint32(prefixLen)
+ }
+ content = IntraAreaPrefixLSA{
+ NumOfPrefixes: numOfPrefixes,
+ RefLSType: binary.BigEndian.Uint16(data[offset+22 : offset+24]),
+ RefLinkStateID: binary.BigEndian.Uint32(data[offset+24 : offset+28]),
+ RefAdvRouter: binary.BigEndian.Uint32(data[offset+28 : offset+32]),
+ Prefixes: prefixes,
+ }
+ default:
+ return nil, fmt.Errorf("Unknown Link State type.")
+ }
+ lsa := LSA{
+ LSAheader: LSAheader{
+ LSAge: binary.BigEndian.Uint16(data[offset : offset+2]),
+ LSType: lstype,
+ LinkStateID: binary.BigEndian.Uint32(data[offset+4 : offset+8]),
+ AdvRouter: binary.BigEndian.Uint32(data[offset+8 : offset+12]),
+ LSSeqNumber: binary.BigEndian.Uint32(data[offset+12 : offset+16]),
+ LSChecksum: binary.BigEndian.Uint16(data[offset+16 : offset+18]),
+ Length: lsalength,
+ },
+ Content: content,
+ }
+ lsas = append(lsas, lsa)
+ offset += uint32(lsalength)
+ }
+ return lsas, nil
+}
+
+// DecodeFromBytes decodes the given bytes into the OSPF layer.
+func (ospf *OSPFv2) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 24 {
+ return fmt.Errorf("Packet too smal for OSPF Version 2")
+ }
+
+ ospf.Version = uint8(data[0])
+ ospf.Type = OSPFType(data[1])
+ ospf.PacketLength = binary.BigEndian.Uint16(data[2:4])
+ ospf.RouterID = binary.BigEndian.Uint32(data[4:8])
+ ospf.AreaID = binary.BigEndian.Uint32(data[8:12])
+ ospf.Checksum = binary.BigEndian.Uint16(data[12:14])
+ ospf.AuType = binary.BigEndian.Uint16(data[14:16])
+ ospf.Authentication = binary.BigEndian.Uint64(data[16:24])
+
+ return nil
+}
+
+// DecodeFromBytes decodes the given bytes into the OSPF layer.
+func (ospf *OSPFv3) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+
+ if len(data) < 16 {
+ return fmt.Errorf("Packet too smal for OSPF Version 3")
+ }
+
+ ospf.Version = uint8(data[0])
+ ospf.Type = OSPFType(data[1])
+ ospf.PacketLength = binary.BigEndian.Uint16(data[2:4])
+ ospf.RouterID = binary.BigEndian.Uint32(data[4:8])
+ ospf.AreaID = binary.BigEndian.Uint32(data[8:12])
+ ospf.Checksum = binary.BigEndian.Uint16(data[12:14])
+ ospf.Instance = uint8(data[14])
+ ospf.Reserved = uint8(data[15])
+
+ switch ospf.Type {
+ case OSPFHello:
+ var neighbors []uint32
+ for i := 36; uint16(i+4) <= ospf.PacketLength; i += 4 {
+ neighbors = append(neighbors, binary.BigEndian.Uint32(data[i:i+4]))
+ }
+ ospf.Content = HelloPkg{
+ InterfaceID: binary.BigEndian.Uint32(data[16:20]),
+ RtrPriority: uint8(data[20]),
+ Options: binary.BigEndian.Uint32(data[21:25]) >> 8,
+ HelloInterval: binary.BigEndian.Uint16(data[24:26]),
+ RouterDeadInterval: binary.BigEndian.Uint16(data[26:28]),
+ DesignatedRouterID: binary.BigEndian.Uint32(data[28:32]),
+ BackupDesignatedRouterID: binary.BigEndian.Uint32(data[32:36]),
+ NeighborID: neighbors,
+ }
+ case OSPFDatabaseDescription:
+ var lsas []LSAheader
+ for i := 28; uint16(i+20) <= ospf.PacketLength; i += 20 {
+ lsa := LSAheader{
+ LSAge: binary.BigEndian.Uint16(data[i : i+2]),
+ LSType: binary.BigEndian.Uint16(data[i+2 : i+4]),
+ LinkStateID: binary.BigEndian.Uint32(data[i+4 : i+8]),
+ AdvRouter: binary.BigEndian.Uint32(data[i+8 : i+12]),
+ LSSeqNumber: binary.BigEndian.Uint32(data[i+12 : i+16]),
+ LSChecksum: binary.BigEndian.Uint16(data[i+16 : i+18]),
+ Length: binary.BigEndian.Uint16(data[i+18 : i+20]),
+ }
+ lsas = append(lsas, lsa)
+ }
+ ospf.Content = DbDescPkg{
+ Options: binary.BigEndian.Uint32(data[16:20]) & 0x00FFFFFF,
+ InterfaceMTU: binary.BigEndian.Uint16(data[20:22]),
+ Flags: binary.BigEndian.Uint16(data[22:24]),
+ DDSeqNumber: binary.BigEndian.Uint32(data[24:28]),
+ LSAinfo: lsas,
+ }
+ case OSPFLinkStateRequest:
+ var lsrs []LSReq
+ for i := 16; uint16(i+12) <= ospf.PacketLength; i += 12 {
+ lsr := LSReq{
+ LSType: binary.BigEndian.Uint16(data[i+2 : i+4]),
+ LSID: binary.BigEndian.Uint32(data[i+4 : i+8]),
+ AdvRouter: binary.BigEndian.Uint32(data[i+8 : i+12]),
+ }
+ lsrs = append(lsrs, lsr)
+ }
+ ospf.Content = lsrs
+ case OSPFLinkStateUpdate:
+ num := binary.BigEndian.Uint32(data[16:20])
+ lsas, err := getLSAs(num, data[20:])
+ if err != nil {
+ return fmt.Errorf("Cannot parse Link State Update packet: %v", err)
+ }
+ ospf.Content = LSUpdate{
+ NumOfLSAs: num,
+ LSAs: lsas,
+ }
+
+ case OSPFLinkStateAcknowledgment:
+ var lsas []LSAheader
+ for i := 16; uint16(i+20) <= ospf.PacketLength; i += 20 {
+ lsa := LSAheader{
+ LSAge: binary.BigEndian.Uint16(data[i : i+2]),
+ LSType: binary.BigEndian.Uint16(data[i+2 : i+4]),
+ LinkStateID: binary.BigEndian.Uint32(data[i+4 : i+8]),
+ AdvRouter: binary.BigEndian.Uint32(data[i+8 : i+12]),
+ LSSeqNumber: binary.BigEndian.Uint32(data[i+12 : i+16]),
+ LSChecksum: binary.BigEndian.Uint16(data[i+16 : i+18]),
+ Length: binary.BigEndian.Uint16(data[i+18 : i+20]),
+ }
+ lsas = append(lsas, lsa)
+ }
+ ospf.Content = lsas
+ default:
+ }
+
+ return nil
+}
+
+// LayerType returns LayerTypeOSPF
+func (ospf *OSPFv2) LayerType() gopacket.LayerType {
+ return LayerTypeOSPF
+}
+func (ospf *OSPFv3) LayerType() gopacket.LayerType {
+ return LayerTypeOSPF
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (ospf *OSPFv2) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypeZero
+}
+func (ospf *OSPFv3) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypeZero
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (ospf *OSPFv2) CanDecode() gopacket.LayerClass {
+ return LayerTypeOSPF
+}
+func (ospf *OSPFv3) CanDecode() gopacket.LayerClass {
+ return LayerTypeOSPF
+}
+
+func decodeOSPF(data []byte, p gopacket.PacketBuilder) error {
+ if len(data) < 14 {
+ return fmt.Errorf("Packet too smal for OSPF")
+ }
+
+ switch uint8(data[0]) {
+ case 2:
+ ospf := &OSPFv2{}
+ return decodingLayerDecoder(ospf, data, p)
+ case 3:
+ ospf := &OSPFv3{}
+ return decodingLayerDecoder(ospf, data, p)
+ default:
+ }
+
+ return fmt.Errorf("Unable to determine OSPF type.")
+}
diff --git a/vendor/github.com/google/gopacket/layers/ospf_test.go b/vendor/github.com/google/gopacket/layers/ospf_test.go
new file mode 100644
index 0000000..930bb4d
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/ospf_test.go
@@ -0,0 +1,559 @@
+// Copyright 2017 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "github.com/google/gopacket"
+ "reflect"
+ "testing"
+)
+
+// testPacketOSPF3Hello is the packet:
+// 14:43:11.663317 IP6 fe80::1 > ff02::5: OSPFv3, Hello, length 36
+// 0x0000: 3333 0000 0005 c200 1ffa 0001 86dd 6e00 33............n.
+// 0x0010: 0000 0024 5901 fe80 0000 0000 0000 0000 ...$Y...........
+// 0x0020: 0000 0000 0001 ff02 0000 0000 0000 0000 ................
+// 0x0030: 0000 0000 0005 0301 0024 0101 0101 0000 .........$......
+// 0x0040: 0001 fb86 0000 0000 0005 0100 0013 000a ................
+// 0x0050: 0028 0000 0000 0000 0000 .(........
+var testPacketOSPF3Hello = []byte{
+ 0x33, 0x33, 0x00, 0x00, 0x00, 0x05, 0xc2, 0x00, 0x1f, 0xfa, 0x00, 0x01, 0x86, 0xdd, 0x6e, 0x00,
+ 0x00, 0x00, 0x00, 0x24, 0x59, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x03, 0x01, 0x00, 0x24, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
+ 0x00, 0x01, 0xfb, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x13, 0x00, 0x0a,
+ 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestPacketOSPF3Hello(t *testing.T) {
+ p := gopacket.NewPacket(testPacketOSPF3Hello, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeOSPF}, t)
+
+ ospf := p.Layer(LayerTypeOSPF).(*OSPFv3)
+ if ospf.Version != 3 {
+ t.Fatal("Invalid OSPF version")
+ }
+ if got, ok := p.Layer(LayerTypeOSPF).(*OSPFv3); ok {
+ want := &OSPFv3{
+ OSPF: OSPF{
+ Version: 3,
+ Type: OSPFHello,
+ PacketLength: 36,
+ RouterID: 0x1010101,
+ AreaID: 1,
+ Checksum: 0xfb86,
+ Content: HelloPkg{
+ InterfaceID: 5,
+ RtrPriority: 1,
+ Options: 0x000013,
+ HelloInterval: 10,
+ RouterDeadInterval: 40,
+ DesignatedRouterID: 0,
+ BackupDesignatedRouterID: 0,
+ },
+ },
+ Instance: 0,
+ Reserved: 0,
+ }
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("OSPF packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want)
+ }
+ } else {
+ t.Error("No OSPF layer type found in packet")
+ }
+}
+func BenchmarkDecodePacketPacket0(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketOSPF3Hello, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+// testPacketOSPF3DBDesc is the packet:
+// 14:43:51.657571 IP6 fe80::2 > fe80::1: OSPFv3, Database Description, length 28
+// 0x0000: c200 1ffa 0001 c201 1ffa 0001 86dd 6e00 ..............n.
+// 0x0010: 0000 001c 5901 fe80 0000 0000 0000 0000 ....Y...........
+// 0x0020: 0000 0000 0002 fe80 0000 0000 0000 0000 ................
+// 0x0030: 0000 0000 0001 0302 001c 0202 0202 0000 ................
+// 0x0040: 0001 d826 0000 0000 0013 05dc 0007 0000 ...&............
+// 0x0050: 1d46 .F
+var testPacketOSPF3DBDesc = []byte{
+ 0xc2, 0x00, 0x1f, 0xfa, 0x00, 0x01, 0xc2, 0x01, 0x1f, 0xfa, 0x00, 0x01, 0x86, 0xdd, 0x6e, 0x00,
+ 0x00, 0x00, 0x00, 0x1c, 0x59, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x02, 0x00, 0x1c, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x01, 0xd8, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x05, 0xdc, 0x00, 0x07, 0x00, 0x00,
+ 0x1d, 0x46,
+}
+
+func TestPacketOSPF3DBDesc(t *testing.T) {
+ p := gopacket.NewPacket(testPacketOSPF3DBDesc, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeOSPF}, t)
+ if got, ok := p.Layer(LayerTypeOSPF).(*OSPFv3); ok {
+ want := &OSPFv3{
+ OSPF: OSPF{
+ Version: 3,
+ Type: OSPFDatabaseDescription,
+ PacketLength: 28,
+ RouterID: 0x2020202,
+ AreaID: 1,
+ Checksum: 0xd826,
+ Content: DbDescPkg{
+ Options: 0x000013,
+ InterfaceMTU: 1500,
+ Flags: 0x7,
+ DDSeqNumber: 7494,
+ },
+ },
+ Instance: 0,
+ Reserved: 0,
+ }
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("OSPF packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want)
+ }
+ } else {
+ t.Error("No OSPF layer type found in packet")
+ }
+}
+func BenchmarkDecodePacketPacket1(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketOSPF3DBDesc, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+// testPacketOSPF3LSRequest is the packet:
+// 14:43:51.673584 IP6 fe80::2 > fe80::1: OSPFv3, LS-Request, length 100
+// 0x0000: c200 1ffa 0001 c201 1ffa 0001 86dd 6e00 ..............n.
+// 0x0010: 0000 0064 5901 fe80 0000 0000 0000 0000 ...dY...........
+// 0x0020: 0000 0000 0002 fe80 0000 0000 0000 0000 ................
+// 0x0030: 0000 0000 0001 0303 0064 0202 0202 0000 .........d......
+// 0x0040: 0001 2c9a 0000 0000 2001 0000 0000 0101 ..,.............
+// 0x0050: 0101 0000 2003 0000 0003 0101 0101 0000 ................
+// 0x0060: 2003 0000 0002 0101 0101 0000 2003 0000 ................
+// 0x0070: 0001 0101 0101 0000 2003 0000 0000 0101 ................
+// 0x0080: 0101 0000 0008 0000 0005 0101 0101 0000 ................
+// 0x0090: 2009 0000 0000 0101 0101 ..........
+var testPacketOSPF3LSRequest = []byte{
+ 0xc2, 0x00, 0x1f, 0xfa, 0x00, 0x01, 0xc2, 0x01, 0x1f, 0xfa, 0x00, 0x01, 0x86, 0xdd, 0x6e, 0x00,
+ 0x00, 0x00, 0x00, 0x64, 0x59, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x00, 0x64, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x01, 0x2c, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+ 0x01, 0x01, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
+ 0x20, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x05, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
+ 0x20, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
+}
+
+func TestPacketOSPF3LSRequest(t *testing.T) {
+ p := gopacket.NewPacket(testPacketOSPF3LSRequest, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeOSPF}, t)
+ if got, ok := p.Layer(LayerTypeOSPF).(*OSPFv3); ok {
+ want := &OSPFv3{
+ OSPF: OSPF{
+ Version: 3,
+ Type: OSPFLinkStateRequest,
+ PacketLength: 100,
+ RouterID: 0x2020202,
+ AreaID: 1,
+ Checksum: 0x2c9a,
+ Content: []LSReq{
+ LSReq{
+ LSType: 0x2001,
+ LSID: 0x00000000,
+ AdvRouter: 0x01010101,
+ },
+ LSReq{
+ LSType: 0x2003,
+ LSID: 0x00000003,
+ AdvRouter: 0x01010101,
+ },
+ LSReq{
+ LSType: 0x2003,
+ LSID: 0x00000002,
+ AdvRouter: 0x01010101,
+ },
+ LSReq{
+ LSType: 0x2003,
+ LSID: 0x00000001,
+ AdvRouter: 0x01010101,
+ },
+ LSReq{
+ LSType: 0x2003,
+ LSID: 0x00000000,
+ AdvRouter: 0x01010101,
+ },
+ LSReq{
+ LSType: 0x0008,
+ LSID: 0x00000005,
+ AdvRouter: 0x01010101,
+ },
+ LSReq{
+ LSType: 0x2009,
+ LSID: 0x00000000,
+ AdvRouter: 0x01010101,
+ },
+ },
+ },
+ Instance: 0,
+ Reserved: 0,
+ }
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("OSPF packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want)
+ }
+ } else {
+ t.Error("No OSPF layer type found in packet")
+ }
+}
+func BenchmarkDecodePacketPacket2(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketOSPF3LSRequest, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+// testPacketOSPF3LSUpdate is the packet:
+// 14:43:51.681554 IP6 fe80::1 > fe80::2: OSPFv3, LS-Update, length 288
+// 0x0000: c201 1ffa 0001 c200 1ffa 0001 86dd 6e00 ..............n.
+// 0x0010: 0000 0120 5901 fe80 0000 0000 0000 0000 ....Y...........
+// 0x0020: 0000 0000 0001 fe80 0000 0000 0000 0000 ................
+// 0x0030: 0000 0000 0002 0304 0120 0101 0101 0000 ................
+// 0x0040: 0001 e556 0000 0000 0007 0028 2001 0000 ...V.......(....
+// 0x0050: 0000 0101 0101 8000 0002 d13a 0018 0100 ...........:....
+// 0x0060: 0033 0029 2003 0000 0003 0101 0101 8000 .3.)............
+// 0x0070: 0001 6259 0024 0000 004a 4000 0000 2001 ..bY.$...J@.....
+// 0x0080: 0db8 0000 0003 0029 2003 0000 0002 0101 .......)........
+// 0x0090: 0101 8000 0001 baf6 0024 0000 0054 4000 .........$...T@.
+// 0x00a0: 0000 2001 0db8 0000 0004 0029 2003 0000 ...........)....
+// 0x00b0: 0001 0101 0101 8000 0001 eba0 0024 0000 .............$..
+// 0x00c0: 004a 4000 0000 2001 0db8 0000 0034 0029 .J@..........4.)
+// 0x00d0: 2003 0000 0000 0101 0101 8000 0001 0ebd ................
+// 0x00e0: 0024 0000 0040 4000 0000 2001 0db8 0000 .$...@@.........
+// 0x00f0: 0000 0023 0008 0000 0005 0101 0101 8000 ...#............
+// 0x0100: 0002 3d08 0038 0100 0033 fe80 0000 0000 ..=..8...3......
+// 0x0110: 0000 0000 0000 0000 0001 0000 0001 4000 ..............@.
+// 0x0120: 0000 2001 0db8 0000 0012 0023 2009 0000 ...........#....
+// 0x0130: 0000 0101 0101 8000 0001 e8d2 002c 0001 .............,..
+// 0x0140: 2001 0000 0000 0101 0101 4000 000a 2001 ..........@.....
+// 0x0150: 0db8 0000 0012 ......
+var testPacketOSPF3LSUpdate = []byte{
+ 0xc2, 0x01, 0x1f, 0xfa, 0x00, 0x01, 0xc2, 0x00, 0x1f, 0xfa, 0x00, 0x01, 0x86, 0xdd, 0x6e, 0x00,
+ 0x00, 0x00, 0x01, 0x20, 0x59, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x04, 0x01, 0x20, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
+ 0x00, 0x01, 0xe5, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x28, 0x20, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x80, 0x00, 0x00, 0x02, 0xd1, 0x3a, 0x00, 0x18, 0x01, 0x00,
+ 0x00, 0x33, 0x00, 0x29, 0x20, 0x03, 0x00, 0x00, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x80, 0x00,
+ 0x00, 0x01, 0x62, 0x59, 0x00, 0x24, 0x00, 0x00, 0x00, 0x4a, 0x40, 0x00, 0x00, 0x00, 0x20, 0x01,
+ 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x03, 0x00, 0x29, 0x20, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01,
+ 0x01, 0x01, 0x80, 0x00, 0x00, 0x01, 0xba, 0xf6, 0x00, 0x24, 0x00, 0x00, 0x00, 0x54, 0x40, 0x00,
+ 0x00, 0x00, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x04, 0x00, 0x29, 0x20, 0x03, 0x00, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x00, 0x00, 0x01, 0xeb, 0xa0, 0x00, 0x24, 0x00, 0x00,
+ 0x00, 0x4a, 0x40, 0x00, 0x00, 0x00, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x34, 0x00, 0x29,
+ 0x20, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x80, 0x00, 0x00, 0x01, 0x0e, 0xbd,
+ 0x00, 0x24, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x23, 0x00, 0x08, 0x00, 0x00, 0x00, 0x05, 0x01, 0x01, 0x01, 0x01, 0x80, 0x00,
+ 0x00, 0x02, 0x3d, 0x08, 0x00, 0x38, 0x01, 0x00, 0x00, 0x33, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00,
+ 0x00, 0x00, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x12, 0x00, 0x23, 0x20, 0x09, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x80, 0x00, 0x00, 0x01, 0xe8, 0xd2, 0x00, 0x2c, 0x00, 0x01,
+ 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x40, 0x00, 0x00, 0x0a, 0x20, 0x01,
+ 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x12,
+}
+
+func TestPacketOSPF3LSUpdate(t *testing.T) {
+ p := gopacket.NewPacket(testPacketOSPF3LSUpdate, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeOSPF}, t)
+ if got, ok := p.Layer(LayerTypeOSPF).(*OSPFv3); ok {
+ want := &OSPFv3{
+ OSPF: OSPF{
+ Version: 3,
+ Type: OSPFLinkStateUpdate,
+ PacketLength: 288,
+ RouterID: 0x1010101,
+ AreaID: 1,
+ Checksum: 0xe556,
+ Content: LSUpdate{
+ NumOfLSAs: 7,
+ LSAs: []LSA{
+ LSA{
+ LSAheader: LSAheader{
+ LSAge: 40,
+ LSType: 0x2001,
+ LinkStateID: 0x00000000,
+ AdvRouter: 0x01010101,
+ LSSeqNumber: 0x80000002,
+ LSChecksum: 0xd13a,
+ Length: 24,
+ },
+ Content: RouterLSA{
+ Flags: 0x1,
+ Options: 0x33,
+ },
+ },
+ LSA{
+ LSAheader: LSAheader{
+ LSAge: 41,
+ LSType: 0x2003,
+ LinkStateID: 0x00000003,
+ AdvRouter: 0x01010101,
+ LSSeqNumber: 0x80000001,
+ LSChecksum: 0x6259,
+ Length: 36,
+ },
+ Content: InterAreaPrefixLSA{
+ Metric: 74,
+ PrefixLength: 64,
+ PrefixOptions: 0,
+ AddressPrefix: []byte{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x03},
+ },
+ },
+ LSA{
+ LSAheader: LSAheader{
+ LSAge: 41,
+ LSType: 0x2003,
+ LinkStateID: 0x00000002,
+ AdvRouter: 0x01010101,
+ LSSeqNumber: 0x80000001,
+ LSChecksum: 0xbaf6,
+ Length: 36,
+ },
+ Content: InterAreaPrefixLSA{
+ Metric: 84,
+ PrefixLength: 64,
+ PrefixOptions: 0,
+ AddressPrefix: []byte{0x20, 0x1, 0xd, 0xb8, 0x0, 0x0, 0x0, 0x4},
+ },
+ },
+ LSA{
+ LSAheader: LSAheader{
+ LSAge: 41,
+ LSType: 0x2003,
+ LinkStateID: 0x00000001,
+ AdvRouter: 0x01010101,
+ LSSeqNumber: 0x80000001,
+ LSChecksum: 0xeba0,
+ Length: 36,
+ },
+ Content: InterAreaPrefixLSA{
+ Metric: 74,
+ PrefixLength: 64,
+ PrefixOptions: 0,
+ AddressPrefix: []byte{0x20, 0x1, 0xd, 0xb8, 0x0, 0x0, 0x0, 0x34},
+ },
+ },
+ LSA{
+ LSAheader: LSAheader{
+ LSAge: 41,
+ LSType: 0x2003,
+ LinkStateID: 0x00000000,
+ AdvRouter: 0x01010101,
+ LSSeqNumber: 0x80000001,
+ LSChecksum: 0xebd,
+ Length: 36,
+ },
+ Content: InterAreaPrefixLSA{
+ Metric: 64,
+ PrefixLength: 64,
+ PrefixOptions: 0,
+ AddressPrefix: []byte{0x20, 0x1, 0xd, 0xb8, 0x0, 0x0, 0x0, 0x0},
+ },
+ },
+ LSA{
+ LSAheader: LSAheader{
+ LSAge: 35,
+ LSType: 0x8,
+ LinkStateID: 0x00000005,
+ AdvRouter: 0x01010101,
+ LSSeqNumber: 0x80000002,
+ LSChecksum: 0x3d08,
+ Length: 56,
+ },
+ Content: LinkLSA{
+ RtrPriority: 1,
+ Options: 0x33,
+ LinkLocalAddress: []byte{0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
+ NumOfPrefixes: 1,
+ Prefixes: []Prefix{
+ Prefix{
+ PrefixLength: 64,
+ PrefixOptions: 0,
+ AddressPrefix: []byte{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x12},
+ },
+ },
+ },
+ },
+ LSA{
+ LSAheader: LSAheader{
+ LSAge: 35,
+ LSType: 0x2009,
+ LinkStateID: 0x00000000,
+ AdvRouter: 0x01010101,
+ LSSeqNumber: 0x80000001,
+ LSChecksum: 0xe8d2,
+ Length: 44,
+ },
+ Content: IntraAreaPrefixLSA{
+ NumOfPrefixes: 1,
+ RefLSType: 0x2001,
+ RefAdvRouter: 0x01010101,
+ Prefixes: []Prefix{
+ Prefix{
+ PrefixLength: 64,
+ PrefixOptions: 0,
+ Metric: 10,
+ AddressPrefix: []byte{0x20, 0x1, 0xd, 0xb8, 0x0, 0x0, 0x0, 0x12},
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ Instance: 0,
+ Reserved: 0,
+ }
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("OSPF packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want)
+ }
+ } else {
+ t.Error("No OSPF layer type found in packet")
+ }
+}
+func BenchmarkDecodePacketPacket3(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketOSPF3LSUpdate, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+// testPacketOSPF3LSAck is the packet:
+// 14:43:54.185384 IP6 fe80::1 > ff02::5: OSPFv3, LS-Ack, length 136
+// 0x0000: 3333 0000 0005 c200 1ffa 0001 86dd 6e00 33............n.
+// 0x0010: 0000 0088 5901 fe80 0000 0000 0000 0000 ....Y...........
+// 0x0020: 0000 0000 0001 ff02 0000 0000 0000 0000 ................
+// 0x0030: 0000 0000 0005 0305 0088 0101 0101 0000 ................
+// 0x0040: 0001 9d2c 0000 0005 2001 0000 0000 0202 ...,............
+// 0x0050: 0202 8000 0002 b354 0018 0006 2003 0000 .......T........
+// 0x0060: 0003 0202 0202 8000 0001 4473 0024 0006 ..........Ds.$..
+// 0x0070: 2003 0000 0002 0202 0202 8000 0001 9c11 ................
+// 0x0080: 0024 0006 2003 0000 0001 0202 0202 8000 .$..............
+// 0x0090: 0001 cdba 0024 0006 2003 0000 0000 0202 .....$..........
+// 0x00a0: 0202 8000 0001 efd7 0024 0005 0008 0000 .........$......
+// 0x00b0: 0005 0202 0202 8000 0001 5433 002c ..........T3.,
+var testPacketOSPF3LSAck = []byte{
+ 0x33, 0x33, 0x00, 0x00, 0x00, 0x05, 0xc2, 0x00, 0x1f, 0xfa, 0x00, 0x01, 0x86, 0xdd, 0x6e, 0x00,
+ 0x00, 0x00, 0x00, 0x88, 0x59, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x03, 0x05, 0x00, 0x88, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
+ 0x00, 0x01, 0x9d, 0x2c, 0x00, 0x00, 0x00, 0x05, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
+ 0x02, 0x02, 0x80, 0x00, 0x00, 0x02, 0xb3, 0x54, 0x00, 0x18, 0x00, 0x06, 0x20, 0x03, 0x00, 0x00,
+ 0x00, 0x03, 0x02, 0x02, 0x02, 0x02, 0x80, 0x00, 0x00, 0x01, 0x44, 0x73, 0x00, 0x24, 0x00, 0x06,
+ 0x20, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x80, 0x00, 0x00, 0x01, 0x9c, 0x11,
+ 0x00, 0x24, 0x00, 0x06, 0x20, 0x03, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x80, 0x00,
+ 0x00, 0x01, 0xcd, 0xba, 0x00, 0x24, 0x00, 0x06, 0x20, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
+ 0x02, 0x02, 0x80, 0x00, 0x00, 0x01, 0xef, 0xd7, 0x00, 0x24, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00,
+ 0x00, 0x05, 0x02, 0x02, 0x02, 0x02, 0x80, 0x00, 0x00, 0x01, 0x54, 0x33, 0x00, 0x2c,
+}
+
+func TestPacketOSPF3LSAck(t *testing.T) {
+ p := gopacket.NewPacket(testPacketOSPF3LSAck, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeOSPF}, t)
+ if got, ok := p.Layer(LayerTypeOSPF).(*OSPFv3); ok {
+ want := &OSPFv3{
+ OSPF: OSPF{
+ Version: 3,
+ Type: OSPFLinkStateAcknowledgment,
+ PacketLength: 136,
+ RouterID: 0x1010101,
+ AreaID: 1,
+ Checksum: 0x9d2c,
+ Content: []LSAheader{
+ LSAheader{
+ LSAge: 5,
+ LSType: 0x2001,
+ LinkStateID: 0x00000000,
+ AdvRouter: 0x02020202,
+ LSSeqNumber: 0x80000002,
+ LSChecksum: 0xb354,
+ Length: 24,
+ },
+ LSAheader{
+ LSAge: 6,
+ LSType: 0x2003,
+ LinkStateID: 0x00000003,
+ AdvRouter: 0x02020202,
+ LSSeqNumber: 0x80000001,
+ LSChecksum: 0x4473,
+ Length: 36,
+ },
+ LSAheader{
+ LSAge: 6,
+ LSType: 0x2003,
+ LinkStateID: 0x00000002,
+ AdvRouter: 0x02020202,
+ LSSeqNumber: 0x80000001,
+ LSChecksum: 0x9c11,
+ Length: 36,
+ },
+ LSAheader{
+ LSAge: 6,
+ LSType: 0x2003,
+ LinkStateID: 0x00000001,
+ AdvRouter: 0x02020202,
+ LSSeqNumber: 0x80000001,
+ LSChecksum: 0xcdba,
+ Length: 36,
+ },
+ LSAheader{
+ LSAge: 6,
+ LSType: 0x2003,
+ LinkStateID: 0x00000000,
+ AdvRouter: 0x02020202,
+ LSSeqNumber: 0x80000001,
+ LSChecksum: 0xefd7,
+ Length: 36,
+ },
+ LSAheader{
+ LSAge: 5,
+ LSType: 0x0008,
+ LinkStateID: 0x00000005,
+ AdvRouter: 0x02020202,
+ LSSeqNumber: 0x80000001,
+ LSChecksum: 0x5433,
+ Length: 44,
+ },
+ },
+ },
+ Instance: 0,
+ Reserved: 0,
+ }
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("OSPF packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want)
+ }
+ } else {
+ t.Error("No OSPF layer type found in packet")
+ }
+}
+func BenchmarkDecodePacketPacket4(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketOSPF3LSAck, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
diff --git a/vendor/github.com/google/gopacket/layers/pflog.go b/vendor/github.com/google/gopacket/layers/pflog.go
new file mode 100644
index 0000000..853882f
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/pflog.go
@@ -0,0 +1,76 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "errors"
+
+ "github.com/google/gopacket"
+)
+
+type PFDirection uint8
+
+const (
+ PFDirectionInOut PFDirection = 0
+ PFDirectionIn PFDirection = 1
+ PFDirectionOut PFDirection = 2
+)
+
+// PFLog provides the layer for 'pf' packet-filter logging, as described at
+// http://www.freebsd.org/cgi/man.cgi?query=pflog&sektion=4
+type PFLog struct {
+ BaseLayer
+ Length uint8
+ Family ProtocolFamily
+ Action, Reason uint8
+ IFName, Ruleset []byte
+ RuleNum, SubruleNum uint32
+ UID uint32
+ PID int32
+ RuleUID uint32
+ RulePID int32
+ Direction PFDirection
+ // The remainder is padding
+}
+
+func (pf *PFLog) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ pf.Length = data[0]
+ pf.Family = ProtocolFamily(data[1])
+ pf.Action = data[2]
+ pf.Reason = data[3]
+ pf.IFName = data[4:20]
+ pf.Ruleset = data[20:36]
+ pf.RuleNum = binary.BigEndian.Uint32(data[36:40])
+ pf.SubruleNum = binary.BigEndian.Uint32(data[40:44])
+ pf.UID = binary.BigEndian.Uint32(data[44:48])
+ pf.PID = int32(binary.BigEndian.Uint32(data[48:52]))
+ pf.RuleUID = binary.BigEndian.Uint32(data[52:56])
+ pf.RulePID = int32(binary.BigEndian.Uint32(data[56:60]))
+ pf.Direction = PFDirection(data[60])
+ if pf.Length%4 != 1 {
+ return errors.New("PFLog header length should be 3 less than multiple of 4")
+ }
+ actualLength := int(pf.Length) + 3
+ pf.Contents = data[:actualLength]
+ pf.Payload = data[actualLength:]
+ return nil
+}
+
+// LayerType returns layers.LayerTypePFLog
+func (pf *PFLog) LayerType() gopacket.LayerType { return LayerTypePFLog }
+
+func (pf *PFLog) CanDecode() gopacket.LayerClass { return LayerTypePFLog }
+
+func (pf *PFLog) NextLayerType() gopacket.LayerType {
+ return pf.Family.LayerType()
+}
+
+func decodePFLog(data []byte, p gopacket.PacketBuilder) error {
+ pf := &PFLog{}
+ return decodingLayerDecoder(pf, data, p)
+}
diff --git a/vendor/github.com/google/gopacket/layers/ports.go b/vendor/github.com/google/gopacket/layers/ports.go
new file mode 100644
index 0000000..431358c
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/ports.go
@@ -0,0 +1,140 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "fmt"
+ "strconv"
+
+ "github.com/google/gopacket"
+)
+
+// TCPPort is a port in a TCP layer.
+type TCPPort uint16
+
+// UDPPort is a port in a UDP layer.
+type UDPPort uint16
+
+// RUDPPort is a port in a RUDP layer.
+type RUDPPort uint8
+
+// SCTPPort is a port in a SCTP layer.
+type SCTPPort uint16
+
+// UDPLitePort is a port in a UDPLite layer.
+type UDPLitePort uint16
+
+// RUDPPortNames contains the string names for all RUDP ports.
+var RUDPPortNames = map[RUDPPort]string{}
+
+// UDPLitePortNames contains the string names for all UDPLite ports.
+var UDPLitePortNames = map[UDPLitePort]string{}
+
+// {TCP,UDP,SCTP}PortNames can be found in iana_ports.go
+
+// String returns the port as "number(name)" if there's a well-known port name,
+// or just "number" if there isn't. Well-known names are stored in
+// TCPPortNames.
+func (a TCPPort) String() string {
+ if name, ok := TCPPortNames[a]; ok {
+ return fmt.Sprintf("%d(%s)", a, name)
+ }
+ return strconv.Itoa(int(a))
+}
+
+// LayerType returns a LayerType that would be able to decode the
+// application payload. It uses some well-known ports such as 53 for
+// DNS.
+//
+// Returns gopacket.LayerTypePayload for unknown/unsupported port numbers.
+func (a TCPPort) LayerType() gopacket.LayerType {
+ lt := tcpPortLayerType[uint16(a)]
+ if lt != 0 {
+ return lt
+ }
+ return gopacket.LayerTypePayload
+}
+
+var tcpPortLayerType = [65536]gopacket.LayerType{
+ 53: LayerTypeDNS,
+}
+
+// RegisterTCPPortLayerType creates a new mapping between a TCPPort
+// and an underlaying LayerType.
+func RegisterTCPPortLayerType(port TCPPort, layerType gopacket.LayerType) {
+ tcpPortLayerType[port] = layerType
+}
+
+// String returns the port as "number(name)" if there's a well-known port name,
+// or just "number" if there isn't. Well-known names are stored in
+// UDPPortNames.
+func (a UDPPort) String() string {
+ if name, ok := UDPPortNames[a]; ok {
+ return fmt.Sprintf("%d(%s)", a, name)
+ }
+ return strconv.Itoa(int(a))
+}
+
+// LayerType returns a LayerType that would be able to decode the
+// application payload. It uses some well-known ports such as 53 for
+// DNS.
+//
+// Returns gopacket.LayerTypePayload for unknown/unsupported port numbers.
+func (a UDPPort) LayerType() gopacket.LayerType {
+ lt := udpPortLayerType[uint16(a)]
+ if lt != 0 {
+ return lt
+ }
+ return gopacket.LayerTypePayload
+}
+
+var udpPortLayerType = [65536]gopacket.LayerType{
+ 53: LayerTypeDNS,
+ 123: LayerTypeNTP,
+ 4789: LayerTypeVXLAN,
+ 67: LayerTypeDHCPv4,
+ 68: LayerTypeDHCPv4,
+ 6343: LayerTypeSFlow,
+ 6081: LayerTypeGeneve,
+ 3784: LayerTypeBFD,
+}
+
+// RegisterUDPPortLayerType creates a new mapping between a UDPPort
+// and an underlaying LayerType.
+func RegisterUDPPortLayerType(port UDPPort, layerType gopacket.LayerType) {
+ udpPortLayerType[port] = layerType
+}
+
+// String returns the port as "number(name)" if there's a well-known port name,
+// or just "number" if there isn't. Well-known names are stored in
+// RUDPPortNames.
+func (a RUDPPort) String() string {
+ if name, ok := RUDPPortNames[a]; ok {
+ return fmt.Sprintf("%d(%s)", a, name)
+ }
+ return strconv.Itoa(int(a))
+}
+
+// String returns the port as "number(name)" if there's a well-known port name,
+// or just "number" if there isn't. Well-known names are stored in
+// SCTPPortNames.
+func (a SCTPPort) String() string {
+ if name, ok := SCTPPortNames[a]; ok {
+ return fmt.Sprintf("%d(%s)", a, name)
+ }
+ return strconv.Itoa(int(a))
+}
+
+// String returns the port as "number(name)" if there's a well-known port name,
+// or just "number" if there isn't. Well-known names are stored in
+// UDPLitePortNames.
+func (a UDPLitePort) String() string {
+ if name, ok := UDPLitePortNames[a]; ok {
+ return fmt.Sprintf("%d(%s)", a, name)
+ }
+ return strconv.Itoa(int(a))
+}
diff --git a/vendor/github.com/google/gopacket/layers/ppp.go b/vendor/github.com/google/gopacket/layers/ppp.go
new file mode 100644
index 0000000..1d2e7b8
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/ppp.go
@@ -0,0 +1,74 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "errors"
+ "github.com/google/gopacket"
+)
+
+// PPP is the layer for PPP encapsulation headers.
+type PPP struct {
+ BaseLayer
+ PPPType PPPType
+}
+
+// PPPEndpoint is a singleton endpoint for PPP. Since there is no actual
+// addressing for the two ends of a PPP connection, we use a singleton value
+// named 'point' for each endpoint.
+var PPPEndpoint = gopacket.NewEndpoint(EndpointPPP, nil)
+
+// PPPFlow is a singleton flow for PPP. Since there is no actual addressing for
+// the two ends of a PPP connection, we use a singleton value to represent the
+// flow for all PPP connections.
+var PPPFlow = gopacket.NewFlow(EndpointPPP, nil, nil)
+
+// LayerType returns LayerTypePPP
+func (p *PPP) LayerType() gopacket.LayerType { return LayerTypePPP }
+
+// LinkFlow returns PPPFlow.
+func (p *PPP) LinkFlow() gopacket.Flow { return PPPFlow }
+
+func decodePPP(data []byte, p gopacket.PacketBuilder) error {
+ ppp := &PPP{}
+ if data[0]&0x1 == 0 {
+ if data[1]&0x1 == 0 {
+ return errors.New("PPP has invalid type")
+ }
+ ppp.PPPType = PPPType(binary.BigEndian.Uint16(data[:2]))
+ ppp.Contents = data[:2]
+ ppp.Payload = data[2:]
+ } else {
+ ppp.PPPType = PPPType(data[0])
+ ppp.Contents = data[:1]
+ ppp.Payload = data[1:]
+ }
+ p.AddLayer(ppp)
+ p.SetLinkLayer(ppp)
+ return p.NextDecoder(ppp.PPPType)
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (p *PPP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ if p.PPPType&0x100 == 0 {
+ bytes, err := b.PrependBytes(2)
+ if err != nil {
+ return err
+ }
+ binary.BigEndian.PutUint16(bytes, uint16(p.PPPType))
+ } else {
+ bytes, err := b.PrependBytes(1)
+ if err != nil {
+ return err
+ }
+ bytes[0] = uint8(p.PPPType)
+ }
+ return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/pppoe.go b/vendor/github.com/google/gopacket/layers/pppoe.go
new file mode 100644
index 0000000..14cd63a
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/pppoe.go
@@ -0,0 +1,60 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "github.com/google/gopacket"
+)
+
+// PPPoE is the layer for PPPoE encapsulation headers.
+type PPPoE struct {
+ BaseLayer
+ Version uint8
+ Type uint8
+ Code PPPoECode
+ SessionId uint16
+ Length uint16
+}
+
+// LayerType returns gopacket.LayerTypePPPoE.
+func (p *PPPoE) LayerType() gopacket.LayerType {
+ return LayerTypePPPoE
+}
+
+// decodePPPoE decodes the PPPoE header (see http://tools.ietf.org/html/rfc2516).
+func decodePPPoE(data []byte, p gopacket.PacketBuilder) error {
+ pppoe := &PPPoE{
+ Version: data[0] >> 4,
+ Type: data[0] & 0x0F,
+ Code: PPPoECode(data[1]),
+ SessionId: binary.BigEndian.Uint16(data[2:4]),
+ Length: binary.BigEndian.Uint16(data[4:6]),
+ }
+ pppoe.BaseLayer = BaseLayer{data[:6], data[6 : 6+pppoe.Length]}
+ p.AddLayer(pppoe)
+ return p.NextDecoder(pppoe.Code)
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (p *PPPoE) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ payload := b.Bytes()
+ bytes, err := b.PrependBytes(6)
+ if err != nil {
+ return err
+ }
+ bytes[0] = (p.Version << 4) | p.Type
+ bytes[1] = byte(p.Code)
+ binary.BigEndian.PutUint16(bytes[2:], p.SessionId)
+ if opts.FixLengths {
+ p.Length = uint16(len(payload))
+ }
+ binary.BigEndian.PutUint16(bytes[4:], p.Length)
+ return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/prism.go b/vendor/github.com/google/gopacket/layers/prism.go
new file mode 100644
index 0000000..e1711e7
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/prism.go
@@ -0,0 +1,146 @@
+// Copyright 2015 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// http://www.tcpdump.org/linktypes/LINKTYPE_IEEE802_11_PRISM.html
+
+package layers
+
+import (
+ "encoding/binary"
+ "errors"
+
+ "github.com/google/gopacket"
+)
+
+func decodePrismValue(data []byte, pv *PrismValue) {
+ pv.DID = PrismDID(binary.LittleEndian.Uint32(data[0:4]))
+ pv.Status = binary.LittleEndian.Uint16(data[4:6])
+ pv.Length = binary.LittleEndian.Uint16(data[6:8])
+ pv.Data = data[8 : 8+pv.Length]
+}
+
+type PrismDID uint32
+
+const (
+ PrismDIDType1HostTime PrismDID = 0x10044
+ PrismDIDType2HostTime PrismDID = 0x01041
+ PrismDIDType1MACTime PrismDID = 0x20044
+ PrismDIDType2MACTime PrismDID = 0x02041
+ PrismDIDType1Channel PrismDID = 0x30044
+ PrismDIDType2Channel PrismDID = 0x03041
+ PrismDIDType1RSSI PrismDID = 0x40044
+ PrismDIDType2RSSI PrismDID = 0x04041
+ PrismDIDType1SignalQuality PrismDID = 0x50044
+ PrismDIDType2SignalQuality PrismDID = 0x05041
+ PrismDIDType1Signal PrismDID = 0x60044
+ PrismDIDType2Signal PrismDID = 0x06041
+ PrismDIDType1Noise PrismDID = 0x70044
+ PrismDIDType2Noise PrismDID = 0x07041
+ PrismDIDType1Rate PrismDID = 0x80044
+ PrismDIDType2Rate PrismDID = 0x08041
+ PrismDIDType1TransmittedFrameIndicator PrismDID = 0x90044
+ PrismDIDType2TransmittedFrameIndicator PrismDID = 0x09041
+ PrismDIDType1FrameLength PrismDID = 0xA0044
+ PrismDIDType2FrameLength PrismDID = 0x0A041
+)
+
+const (
+ PrismType1MessageCode uint16 = 0x00000044
+ PrismType2MessageCode uint16 = 0x00000041
+)
+
+func (p PrismDID) String() string {
+ dids := map[PrismDID]string{
+ PrismDIDType1HostTime: "Host Time",
+ PrismDIDType2HostTime: "Host Time",
+ PrismDIDType1MACTime: "MAC Time",
+ PrismDIDType2MACTime: "MAC Time",
+ PrismDIDType1Channel: "Channel",
+ PrismDIDType2Channel: "Channel",
+ PrismDIDType1RSSI: "RSSI",
+ PrismDIDType2RSSI: "RSSI",
+ PrismDIDType1SignalQuality: "Signal Quality",
+ PrismDIDType2SignalQuality: "Signal Quality",
+ PrismDIDType1Signal: "Signal",
+ PrismDIDType2Signal: "Signal",
+ PrismDIDType1Noise: "Noise",
+ PrismDIDType2Noise: "Noise",
+ PrismDIDType1Rate: "Rate",
+ PrismDIDType2Rate: "Rate",
+ PrismDIDType1TransmittedFrameIndicator: "Transmitted Frame Indicator",
+ PrismDIDType2TransmittedFrameIndicator: "Transmitted Frame Indicator",
+ PrismDIDType1FrameLength: "Frame Length",
+ PrismDIDType2FrameLength: "Frame Length",
+ }
+
+ if str, ok := dids[p]; ok {
+ return str
+ }
+
+ return "Unknown DID"
+}
+
+type PrismValue struct {
+ DID PrismDID
+ Status uint16
+ Length uint16
+ Data []byte
+}
+
+func (pv *PrismValue) IsSupplied() bool {
+ return pv.Status == 1
+}
+
+var ErrPrismExpectedMoreData = errors.New("Expected more data.")
+var ErrPrismInvalidCode = errors.New("Invalid header code.")
+
+func decodePrismHeader(data []byte, p gopacket.PacketBuilder) error {
+ d := &PrismHeader{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+type PrismHeader struct {
+ BaseLayer
+ Code uint16
+ Length uint16
+ DeviceName string
+ Values []PrismValue
+}
+
+func (m *PrismHeader) LayerType() gopacket.LayerType { return LayerTypePrismHeader }
+
+func (m *PrismHeader) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ m.Code = binary.LittleEndian.Uint16(data[0:4])
+ m.Length = binary.LittleEndian.Uint16(data[4:8])
+ m.DeviceName = string(data[8:24])
+ m.BaseLayer = BaseLayer{Contents: data[:m.Length], Payload: data[m.Length:len(data)]}
+
+ switch m.Code {
+ case PrismType1MessageCode:
+ fallthrough
+ case PrismType2MessageCode:
+ // valid message code
+ default:
+ return ErrPrismInvalidCode
+ }
+
+ offset := uint16(24)
+
+ m.Values = make([]PrismValue, (m.Length-offset)/12)
+ for i := 0; i < len(m.Values); i++ {
+ decodePrismValue(data[offset:offset+12], &m.Values[i])
+ offset += 12
+ }
+
+ if offset != m.Length {
+ return ErrPrismExpectedMoreData
+ }
+
+ return nil
+}
+
+func (m *PrismHeader) CanDecode() gopacket.LayerClass { return LayerTypePrismHeader }
+func (m *PrismHeader) NextLayerType() gopacket.LayerType { return LayerTypeDot11 }
diff --git a/vendor/github.com/google/gopacket/layers/prism_test.go b/vendor/github.com/google/gopacket/layers/prism_test.go
new file mode 100644
index 0000000..136a04c
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/prism_test.go
@@ -0,0 +1,120 @@
+// Copyright 2014, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "net"
+ "reflect"
+ "testing"
+
+ "github.com/google/gopacket"
+)
+
+// Generator: python layers/test_creator.py --layerType=LayerTypePrismHeader --linkType=LinkTypePrismHeader --name=Prism%s ~/tmp/dump.pcap
+// http://wiki.wireshark.org/SampleCaptures#Sample_Captures
+
+// testPacketPrism is the packet:
+// 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]
+// 0x0000: 4400 0000 9000 0000 7261 3000 0000 0000
+// 0x0010: 0000 0000 0000 0000 4400 0100 0000 0400
+// 0x0020: f9c1 2900 4400 0200 0000 0000 0000 0000
+// 0x0030: 4400 0300 0000 0400 0a00 0000 4400 0400
+// 0x0040: 0000 0400 e1ff ffff 0000 0000 0000 0000
+// 0x0050: 0000 0000 4400 0600 0000 0400 0000 0000
+// 0x0060: 4400 0700 0000 0400 0000 0000 4400 0800
+// 0x0070: 0000 0400 0200 0000 4400 0900 0000 0000
+// 0x0080: 0000 0000 4400 0a00 0000 0400 7e00 0000
+// 0x0090: 4000 0000 ffff ffff ffff ccfa 00ad 79e8
+// 0x00a0: ffff ffff ffff a041 0000 0104 0204 0b16
+// 0x00b0: 3208 0c12 1824 3048 606c 0301 012d 1a2d
+// 0x00c0: 1117 ff00 0000 0000 0000 0000 0000 0000
+// 0x00d0: 0000 0000 0000 0000 007f 0800 0000 0000
+// 0x00e0: 0000 40dd 0900 1018 0200 0010 0000 dd1e
+// 0x00f0: 0090 4c33 2d11 17ff 0000 0000 0000 0000
+// 0x0100: 0000 0000 0000 0000 0000 0000 0000
+
+var testPacketPrism = []byte{
+ 0x44, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x72, 0x61, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00,
+ 0xf9, 0xc1, 0x29, 0x00, 0x44, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x44, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x44, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0xe1, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x44, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x08, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x44, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x7e, 0x00, 0x00, 0x00,
+ 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcc, 0xfa, 0x00, 0xad, 0x79, 0xe8,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x41, 0x00, 0x00, 0x01, 0x04, 0x02, 0x04, 0x0b, 0x16,
+ 0x32, 0x08, 0x0c, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6c, 0x03, 0x01, 0x01, 0x2d, 0x1a, 0x2d,
+ 0x11, 0x17, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x40, 0xdd, 0x09, 0x00, 0x10, 0x18, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0xdd, 0x1e,
+ 0x00, 0x90, 0x4c, 0x33, 0x2d, 0x11, 0x17, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestPacketPrism(t *testing.T) {
+ p := gopacket.NewPacket(testPacketPrism, LinkTypePrismHeader, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypePrismHeader, LayerTypeDot11, LayerTypeDot11MgmtProbeReq}, t)
+
+ if got, ok := p.Layer(LayerTypePrismHeader).(*PrismHeader); ok {
+ want := &PrismHeader{
+ BaseLayer: BaseLayer{
+ Contents: []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},
+ Payload: []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",
+ Values: []PrismValue{
+ PrismValue{DID: PrismDIDType1HostTime, Status: 0x0, Length: 0x4, Data: []uint8{0xf9, 0xc1, 0x29, 0x0}},
+ PrismValue{DID: PrismDIDType1MACTime, Status: 0x0, Length: 0x0, Data: []uint8{}},
+ PrismValue{DID: PrismDIDType1Channel, Status: 0x0, Length: 0x4, Data: []uint8{0xa, 0x0, 0x0, 0x0}},
+ PrismValue{DID: PrismDIDType1RSSI, Status: 0x0, Length: 0x4, Data: []uint8{0xe1, 0xff, 0xff, 0xff}},
+ PrismValue{DID: 0x0, Status: 0x0, Length: 0x0, Data: []uint8{}},
+ PrismValue{DID: PrismDIDType1Signal, Status: 0x0, Length: 0x4, Data: []uint8{0x0, 0x0, 0x0, 0x0}},
+ PrismValue{DID: PrismDIDType1Noise, Status: 0x0, Length: 0x4, Data: []uint8{0x0, 0x0, 0x0, 0x0}},
+ PrismValue{DID: PrismDIDType1Rate, Status: 0x0, Length: 0x4, Data: []uint8{0x2, 0x0, 0x0, 0x0}},
+ PrismValue{DID: PrismDIDType1TransmittedFrameIndicator, Status: 0x0, Length: 0x0, Data: []uint8{}},
+ PrismValue{DID: PrismDIDType1FrameLength, Status: 0x0, Length: 0x4, Data: []uint8{0x7e, 0x0, 0x0, 0x0}},
+ },
+ }
+
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("RadioTap packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want)
+ }
+ }
+
+ if got, ok := p.Layer(LayerTypeDot11).(*Dot11); ok {
+ want := &Dot11{
+ BaseLayer: BaseLayer{
+ Contents: []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},
+ Payload: []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},
+ },
+ Type: 0x10,
+ Proto: 0x0,
+ Flags: 0x0,
+ DurationID: 0x0,
+ Address1: net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
+ Address2: net.HardwareAddr{0xcc, 0xfa, 0x0, 0xad, 0x79, 0xe8},
+ Address3: net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
+ Address4: net.HardwareAddr(nil),
+ SequenceNumber: 0x041a,
+ FragmentNumber: 0x0,
+ Checksum: 0x0,
+ }
+
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("Dot11 packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want)
+ }
+ }
+}
+
+func BenchmarkDecodePacketPrism(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketPrism, LinkTypePrismHeader, gopacket.NoCopy)
+ }
+}
diff --git a/vendor/github.com/google/gopacket/layers/radiotap.go b/vendor/github.com/google/gopacket/layers/radiotap.go
new file mode 100644
index 0000000..4304e75
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/radiotap.go
@@ -0,0 +1,1045 @@
+// Copyright 2014 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "bytes"
+ "encoding/binary"
+ "fmt"
+ "hash/crc32"
+ "strings"
+
+ "github.com/google/gopacket"
+)
+
+// align calculates the number of bytes needed to align with the width
+// on the offset, returning the number of bytes we need to skip to
+// align to the offset (width).
+func align(offset uint16, width uint16) uint16 {
+ return ((((offset) + ((width) - 1)) & (^((width) - 1))) - offset)
+}
+
+type RadioTapPresent uint32
+
+const (
+ RadioTapPresentTSFT RadioTapPresent = 1 << iota
+ RadioTapPresentFlags
+ RadioTapPresentRate
+ RadioTapPresentChannel
+ RadioTapPresentFHSS
+ RadioTapPresentDBMAntennaSignal
+ RadioTapPresentDBMAntennaNoise
+ RadioTapPresentLockQuality
+ RadioTapPresentTxAttenuation
+ RadioTapPresentDBTxAttenuation
+ RadioTapPresentDBMTxPower
+ RadioTapPresentAntenna
+ RadioTapPresentDBAntennaSignal
+ RadioTapPresentDBAntennaNoise
+ RadioTapPresentRxFlags
+ RadioTapPresentTxFlags
+ RadioTapPresentRtsRetries
+ RadioTapPresentDataRetries
+ _
+ RadioTapPresentMCS
+ RadioTapPresentAMPDUStatus
+ RadioTapPresentVHT
+ RadioTapPresentEXT RadioTapPresent = 1 << 31
+)
+
+func (r RadioTapPresent) TSFT() bool {
+ return r&RadioTapPresentTSFT != 0
+}
+func (r RadioTapPresent) Flags() bool {
+ return r&RadioTapPresentFlags != 0
+}
+func (r RadioTapPresent) Rate() bool {
+ return r&RadioTapPresentRate != 0
+}
+func (r RadioTapPresent) Channel() bool {
+ return r&RadioTapPresentChannel != 0
+}
+func (r RadioTapPresent) FHSS() bool {
+ return r&RadioTapPresentFHSS != 0
+}
+func (r RadioTapPresent) DBMAntennaSignal() bool {
+ return r&RadioTapPresentDBMAntennaSignal != 0
+}
+func (r RadioTapPresent) DBMAntennaNoise() bool {
+ return r&RadioTapPresentDBMAntennaNoise != 0
+}
+func (r RadioTapPresent) LockQuality() bool {
+ return r&RadioTapPresentLockQuality != 0
+}
+func (r RadioTapPresent) TxAttenuation() bool {
+ return r&RadioTapPresentTxAttenuation != 0
+}
+func (r RadioTapPresent) DBTxAttenuation() bool {
+ return r&RadioTapPresentDBTxAttenuation != 0
+}
+func (r RadioTapPresent) DBMTxPower() bool {
+ return r&RadioTapPresentDBMTxPower != 0
+}
+func (r RadioTapPresent) Antenna() bool {
+ return r&RadioTapPresentAntenna != 0
+}
+func (r RadioTapPresent) DBAntennaSignal() bool {
+ return r&RadioTapPresentDBAntennaSignal != 0
+}
+func (r RadioTapPresent) DBAntennaNoise() bool {
+ return r&RadioTapPresentDBAntennaNoise != 0
+}
+func (r RadioTapPresent) RxFlags() bool {
+ return r&RadioTapPresentRxFlags != 0
+}
+func (r RadioTapPresent) TxFlags() bool {
+ return r&RadioTapPresentTxFlags != 0
+}
+func (r RadioTapPresent) RtsRetries() bool {
+ return r&RadioTapPresentRtsRetries != 0
+}
+func (r RadioTapPresent) DataRetries() bool {
+ return r&RadioTapPresentDataRetries != 0
+}
+func (r RadioTapPresent) MCS() bool {
+ return r&RadioTapPresentMCS != 0
+}
+func (r RadioTapPresent) AMPDUStatus() bool {
+ return r&RadioTapPresentAMPDUStatus != 0
+}
+func (r RadioTapPresent) VHT() bool {
+ return r&RadioTapPresentVHT != 0
+}
+func (r RadioTapPresent) EXT() bool {
+ return r&RadioTapPresentEXT != 0
+}
+
+type RadioTapChannelFlags uint16
+
+const (
+ RadioTapChannelFlagsTurbo RadioTapChannelFlags = 0x0010 // Turbo channel
+ RadioTapChannelFlagsCCK RadioTapChannelFlags = 0x0020 // CCK channel
+ RadioTapChannelFlagsOFDM RadioTapChannelFlags = 0x0040 // OFDM channel
+ RadioTapChannelFlagsGhz2 RadioTapChannelFlags = 0x0080 // 2 GHz spectrum channel.
+ RadioTapChannelFlagsGhz5 RadioTapChannelFlags = 0x0100 // 5 GHz spectrum channel
+ RadioTapChannelFlagsPassive RadioTapChannelFlags = 0x0200 // Only passive scan allowed
+ RadioTapChannelFlagsDynamic RadioTapChannelFlags = 0x0400 // Dynamic CCK-OFDM channel
+ RadioTapChannelFlagsGFSK RadioTapChannelFlags = 0x0800 // GFSK channel (FHSS PHY)
+)
+
+func (r RadioTapChannelFlags) Turbo() bool {
+ return r&RadioTapChannelFlagsTurbo != 0
+}
+func (r RadioTapChannelFlags) CCK() bool {
+ return r&RadioTapChannelFlagsCCK != 0
+}
+func (r RadioTapChannelFlags) OFDM() bool {
+ return r&RadioTapChannelFlagsOFDM != 0
+}
+func (r RadioTapChannelFlags) Ghz2() bool {
+ return r&RadioTapChannelFlagsGhz2 != 0
+}
+func (r RadioTapChannelFlags) Ghz5() bool {
+ return r&RadioTapChannelFlagsGhz5 != 0
+}
+func (r RadioTapChannelFlags) Passive() bool {
+ return r&RadioTapChannelFlagsPassive != 0
+}
+func (r RadioTapChannelFlags) Dynamic() bool {
+ return r&RadioTapChannelFlagsDynamic != 0
+}
+func (r RadioTapChannelFlags) GFSK() bool {
+ return r&RadioTapChannelFlagsGFSK != 0
+}
+
+// String provides a human readable string for RadioTapChannelFlags.
+// This string is possibly subject to change over time; if you're storing this
+// persistently, you should probably store the RadioTapChannelFlags value, not its string.
+func (a RadioTapChannelFlags) String() string {
+ var out bytes.Buffer
+ if a.Turbo() {
+ out.WriteString("Turbo,")
+ }
+ if a.CCK() {
+ out.WriteString("CCK,")
+ }
+ if a.OFDM() {
+ out.WriteString("OFDM,")
+ }
+ if a.Ghz2() {
+ out.WriteString("Ghz2,")
+ }
+ if a.Ghz5() {
+ out.WriteString("Ghz5,")
+ }
+ if a.Passive() {
+ out.WriteString("Passive,")
+ }
+ if a.Dynamic() {
+ out.WriteString("Dynamic,")
+ }
+ if a.GFSK() {
+ out.WriteString("GFSK,")
+ }
+
+ if length := out.Len(); length > 0 {
+ return string(out.Bytes()[:length-1]) // strip final comma
+ }
+ return ""
+}
+
+type RadioTapFlags uint8
+
+const (
+ RadioTapFlagsCFP RadioTapFlags = 1 << iota // sent/received during CFP
+ RadioTapFlagsShortPreamble // sent/received * with short * preamble
+ RadioTapFlagsWEP // sent/received * with WEP encryption
+ RadioTapFlagsFrag // sent/received * with fragmentation
+ RadioTapFlagsFCS // frame includes FCS
+ RadioTapFlagsDatapad // frame has padding between * 802.11 header and payload * (to 32-bit boundary)
+ RadioTapFlagsBadFCS // does not pass FCS check
+ RadioTapFlagsShortGI // HT short GI
+)
+
+func (r RadioTapFlags) CFP() bool {
+ return r&RadioTapFlagsCFP != 0
+}
+func (r RadioTapFlags) ShortPreamble() bool {
+ return r&RadioTapFlagsShortPreamble != 0
+}
+func (r RadioTapFlags) WEP() bool {
+ return r&RadioTapFlagsWEP != 0
+}
+func (r RadioTapFlags) Frag() bool {
+ return r&RadioTapFlagsFrag != 0
+}
+func (r RadioTapFlags) FCS() bool {
+ return r&RadioTapFlagsFCS != 0
+}
+func (r RadioTapFlags) Datapad() bool {
+ return r&RadioTapFlagsDatapad != 0
+}
+func (r RadioTapFlags) BadFCS() bool {
+ return r&RadioTapFlagsBadFCS != 0
+}
+func (r RadioTapFlags) ShortGI() bool {
+ return r&RadioTapFlagsShortGI != 0
+}
+
+// String provides a human readable string for RadioTapFlags.
+// This string is possibly subject to change over time; if you're storing this
+// persistently, you should probably store the RadioTapFlags value, not its string.
+func (a RadioTapFlags) String() string {
+ var out bytes.Buffer
+ if a.CFP() {
+ out.WriteString("CFP,")
+ }
+ if a.ShortPreamble() {
+ out.WriteString("SHORT-PREAMBLE,")
+ }
+ if a.WEP() {
+ out.WriteString("WEP,")
+ }
+ if a.Frag() {
+ out.WriteString("FRAG,")
+ }
+ if a.FCS() {
+ out.WriteString("FCS,")
+ }
+ if a.Datapad() {
+ out.WriteString("DATAPAD,")
+ }
+ if a.ShortGI() {
+ out.WriteString("SHORT-GI,")
+ }
+
+ if length := out.Len(); length > 0 {
+ return string(out.Bytes()[:length-1]) // strip final comma
+ }
+ return ""
+}
+
+type RadioTapRate uint8
+
+func (a RadioTapRate) String() string {
+ return fmt.Sprintf("%v Mb/s", 0.5*float32(a))
+}
+
+type RadioTapChannelFrequency uint16
+
+func (a RadioTapChannelFrequency) String() string {
+ return fmt.Sprintf("%d MHz", a)
+}
+
+type RadioTapRxFlags uint16
+
+const (
+ RadioTapRxFlagsBadPlcp RadioTapRxFlags = 0x0002
+)
+
+func (self RadioTapRxFlags) BadPlcp() bool {
+ return self&RadioTapRxFlagsBadPlcp != 0
+}
+
+func (self RadioTapRxFlags) String() string {
+ if self.BadPlcp() {
+ return "BADPLCP"
+ }
+ return ""
+}
+
+type RadioTapTxFlags uint16
+
+const (
+ RadioTapTxFlagsFail RadioTapTxFlags = 1 << iota
+ RadioTapTxFlagsCTS
+ RadioTapTxFlagsRTS
+ RadioTapTxFlagsNoACK
+)
+
+func (self RadioTapTxFlags) Fail() bool { return self&RadioTapTxFlagsFail != 0 }
+func (self RadioTapTxFlags) CTS() bool { return self&RadioTapTxFlagsCTS != 0 }
+func (self RadioTapTxFlags) RTS() bool { return self&RadioTapTxFlagsRTS != 0 }
+func (self RadioTapTxFlags) NoACK() bool { return self&RadioTapTxFlagsNoACK != 0 }
+
+func (self RadioTapTxFlags) String() string {
+ var tokens []string
+ if self.Fail() {
+ tokens = append(tokens, "Fail")
+ }
+ if self.CTS() {
+ tokens = append(tokens, "CTS")
+ }
+ if self.RTS() {
+ tokens = append(tokens, "RTS")
+ }
+ if self.NoACK() {
+ tokens = append(tokens, "NoACK")
+ }
+ return strings.Join(tokens, ",")
+}
+
+type RadioTapMCS struct {
+ Known RadioTapMCSKnown
+ Flags RadioTapMCSFlags
+ MCS uint8
+}
+
+func (self RadioTapMCS) String() string {
+ var tokens []string
+ if self.Known.Bandwidth() {
+ token := "?"
+ switch self.Flags.Bandwidth() {
+ case 0:
+ token = "20"
+ case 1:
+ token = "40"
+ case 2:
+ token = "40(20L)"
+ case 3:
+ token = "40(20U)"
+ }
+ tokens = append(tokens, token)
+ }
+ if self.Known.MCSIndex() {
+ tokens = append(tokens, fmt.Sprintf("MCSIndex#%d", self.MCS))
+ }
+ if self.Known.GuardInterval() {
+ if self.Flags.ShortGI() {
+ tokens = append(tokens, fmt.Sprintf("shortGI"))
+ } else {
+ tokens = append(tokens, fmt.Sprintf("longGI"))
+ }
+ }
+ if self.Known.HTFormat() {
+ if self.Flags.Greenfield() {
+ tokens = append(tokens, fmt.Sprintf("HT-greenfield"))
+ } else {
+ tokens = append(tokens, fmt.Sprintf("HT-mixed"))
+ }
+ }
+ if self.Known.FECType() {
+ if self.Flags.FECLDPC() {
+ tokens = append(tokens, fmt.Sprintf("LDPC"))
+ } else {
+ tokens = append(tokens, fmt.Sprintf("BCC"))
+ }
+ }
+ if self.Known.STBC() {
+ tokens = append(tokens, fmt.Sprintf("STBC#%d", self.Flags.STBC()))
+ }
+ if self.Known.NESS() {
+ num := 0
+ if self.Known.NESS1() {
+ num |= 0x02
+ }
+ if self.Flags.NESS0() {
+ num |= 0x01
+ }
+ tokens = append(tokens, fmt.Sprintf("num-of-ESS#%d", num))
+ }
+ return strings.Join(tokens, ",")
+}
+
+type RadioTapMCSKnown uint8
+
+const (
+ RadioTapMCSKnownBandwidth RadioTapMCSKnown = 1 << iota
+ RadioTapMCSKnownMCSIndex
+ RadioTapMCSKnownGuardInterval
+ RadioTapMCSKnownHTFormat
+ RadioTapMCSKnownFECType
+ RadioTapMCSKnownSTBC
+ RadioTapMCSKnownNESS
+ RadioTapMCSKnownNESS1
+)
+
+func (self RadioTapMCSKnown) Bandwidth() bool { return self&RadioTapMCSKnownBandwidth != 0 }
+func (self RadioTapMCSKnown) MCSIndex() bool { return self&RadioTapMCSKnownMCSIndex != 0 }
+func (self RadioTapMCSKnown) GuardInterval() bool { return self&RadioTapMCSKnownGuardInterval != 0 }
+func (self RadioTapMCSKnown) HTFormat() bool { return self&RadioTapMCSKnownHTFormat != 0 }
+func (self RadioTapMCSKnown) FECType() bool { return self&RadioTapMCSKnownFECType != 0 }
+func (self RadioTapMCSKnown) STBC() bool { return self&RadioTapMCSKnownSTBC != 0 }
+func (self RadioTapMCSKnown) NESS() bool { return self&RadioTapMCSKnownNESS != 0 }
+func (self RadioTapMCSKnown) NESS1() bool { return self&RadioTapMCSKnownNESS1 != 0 }
+
+type RadioTapMCSFlags uint8
+
+const (
+ RadioTapMCSFlagsBandwidthMask RadioTapMCSFlags = 0x03
+ RadioTapMCSFlagsShortGI = 0x04
+ RadioTapMCSFlagsGreenfield = 0x08
+ RadioTapMCSFlagsFECLDPC = 0x10
+ RadioTapMCSFlagsSTBCMask = 0x60
+ RadioTapMCSFlagsNESS0 = 0x80
+)
+
+func (self RadioTapMCSFlags) Bandwidth() int {
+ return int(self & RadioTapMCSFlagsBandwidthMask)
+}
+func (self RadioTapMCSFlags) ShortGI() bool { return self&RadioTapMCSFlagsShortGI != 0 }
+func (self RadioTapMCSFlags) Greenfield() bool { return self&RadioTapMCSFlagsGreenfield != 0 }
+func (self RadioTapMCSFlags) FECLDPC() bool { return self&RadioTapMCSFlagsFECLDPC != 0 }
+func (self RadioTapMCSFlags) STBC() int {
+ return int(self&RadioTapMCSFlagsSTBCMask) >> 5
+}
+func (self RadioTapMCSFlags) NESS0() bool { return self&RadioTapMCSFlagsNESS0 != 0 }
+
+type RadioTapAMPDUStatus struct {
+ Reference uint32
+ Flags RadioTapAMPDUStatusFlags
+ CRC uint8
+}
+
+func (self RadioTapAMPDUStatus) String() string {
+ tokens := []string{
+ fmt.Sprintf("ref#%x", self.Reference),
+ }
+ if self.Flags.ReportZerolen() && self.Flags.IsZerolen() {
+ tokens = append(tokens, fmt.Sprintf("zero-length"))
+ }
+ if self.Flags.LastKnown() && self.Flags.IsLast() {
+ tokens = append(tokens, "last")
+ }
+ if self.Flags.DelimCRCErr() {
+ tokens = append(tokens, "delimiter CRC error")
+ }
+ if self.Flags.DelimCRCKnown() {
+ tokens = append(tokens, fmt.Sprintf("delimiter-CRC=%02x", self.CRC))
+ }
+ return strings.Join(tokens, ",")
+}
+
+type RadioTapAMPDUStatusFlags uint16
+
+const (
+ RadioTapAMPDUStatusFlagsReportZerolen RadioTapAMPDUStatusFlags = 1 << iota
+ RadioTapAMPDUIsZerolen
+ RadioTapAMPDULastKnown
+ RadioTapAMPDUIsLast
+ RadioTapAMPDUDelimCRCErr
+ RadioTapAMPDUDelimCRCKnown
+)
+
+func (self RadioTapAMPDUStatusFlags) ReportZerolen() bool {
+ return self&RadioTapAMPDUStatusFlagsReportZerolen != 0
+}
+func (self RadioTapAMPDUStatusFlags) IsZerolen() bool { return self&RadioTapAMPDUIsZerolen != 0 }
+func (self RadioTapAMPDUStatusFlags) LastKnown() bool { return self&RadioTapAMPDULastKnown != 0 }
+func (self RadioTapAMPDUStatusFlags) IsLast() bool { return self&RadioTapAMPDUIsLast != 0 }
+func (self RadioTapAMPDUStatusFlags) DelimCRCErr() bool { return self&RadioTapAMPDUDelimCRCErr != 0 }
+func (self RadioTapAMPDUStatusFlags) DelimCRCKnown() bool { return self&RadioTapAMPDUDelimCRCKnown != 0 }
+
+type RadioTapVHT struct {
+ Known RadioTapVHTKnown
+ Flags RadioTapVHTFlags
+ Bandwidth uint8
+ MCSNSS [4]RadioTapVHTMCSNSS
+ Coding uint8
+ GroupId uint8
+ PartialAID uint16
+}
+
+func (self RadioTapVHT) String() string {
+ var tokens []string
+ if self.Known.STBC() {
+ if self.Flags.STBC() {
+ tokens = append(tokens, "STBC")
+ } else {
+ tokens = append(tokens, "no STBC")
+ }
+ }
+ if self.Known.TXOPPSNotAllowed() {
+ if self.Flags.TXOPPSNotAllowed() {
+ tokens = append(tokens, "TXOP doze not allowed")
+ } else {
+ tokens = append(tokens, "TXOP doze allowed")
+ }
+ }
+ if self.Known.GI() {
+ if self.Flags.SGI() {
+ tokens = append(tokens, "short GI")
+ } else {
+ tokens = append(tokens, "long GI")
+ }
+ }
+ if self.Known.SGINSYMDisambiguation() {
+ if self.Flags.SGINSYMMod() {
+ tokens = append(tokens, "NSYM mod 10=9")
+ } else {
+ tokens = append(tokens, "NSYM mod 10!=9 or no short GI")
+ }
+ }
+ if self.Known.LDPCExtraOFDMSymbol() {
+ if self.Flags.LDPCExtraOFDMSymbol() {
+ tokens = append(tokens, "LDPC extra OFDM symbols")
+ } else {
+ tokens = append(tokens, "no LDPC extra OFDM symbols")
+ }
+ }
+ if self.Known.Beamformed() {
+ if self.Flags.Beamformed() {
+ tokens = append(tokens, "beamformed")
+ } else {
+ tokens = append(tokens, "no beamformed")
+ }
+ }
+ if self.Known.Bandwidth() {
+ token := "?"
+ switch self.Bandwidth & 0x1f {
+ case 0:
+ token = "20"
+ case 1:
+ token = "40"
+ case 2:
+ token = "40(20L)"
+ case 3:
+ token = "40(20U)"
+ case 4:
+ token = "80"
+ case 5:
+ token = "80(40L)"
+ case 6:
+ token = "80(40U)"
+ case 7:
+ token = "80(20LL)"
+ case 8:
+ token = "80(20LU)"
+ case 9:
+ token = "80(20UL)"
+ case 10:
+ token = "80(20UU)"
+ case 11:
+ token = "160"
+ case 12:
+ token = "160(80L)"
+ case 13:
+ token = "160(80U)"
+ case 14:
+ token = "160(40LL)"
+ case 15:
+ token = "160(40LU)"
+ case 16:
+ token = "160(40UL)"
+ case 17:
+ token = "160(40UU)"
+ case 18:
+ token = "160(20LLL)"
+ case 19:
+ token = "160(20LLU)"
+ case 20:
+ token = "160(20LUL)"
+ case 21:
+ token = "160(20LUU)"
+ case 22:
+ token = "160(20ULL)"
+ case 23:
+ token = "160(20ULU)"
+ case 24:
+ token = "160(20UUL)"
+ case 25:
+ token = "160(20UUU)"
+ }
+ tokens = append(tokens, token)
+ }
+ for i, MCSNSS := range self.MCSNSS {
+ if MCSNSS.Present() {
+ fec := "?"
+ switch self.Coding & (1 << uint8(i)) {
+ case 0:
+ fec = "BCC"
+ case 1:
+ fec = "LDPC"
+ }
+ tokens = append(tokens, fmt.Sprintf("user%d(%s,%s)", i, MCSNSS.String(), fec))
+ }
+ }
+ if self.Known.GroupId() {
+ tokens = append(tokens,
+ fmt.Sprintf("group=%d", self.GroupId))
+ }
+ if self.Known.PartialAID() {
+ tokens = append(tokens,
+ fmt.Sprintf("partial-AID=%d", self.PartialAID))
+ }
+ return strings.Join(tokens, ",")
+}
+
+type RadioTapVHTKnown uint16
+
+const (
+ RadioTapVHTKnownSTBC RadioTapVHTKnown = 1 << iota
+ RadioTapVHTKnownTXOPPSNotAllowed
+ RadioTapVHTKnownGI
+ RadioTapVHTKnownSGINSYMDisambiguation
+ RadioTapVHTKnownLDPCExtraOFDMSymbol
+ RadioTapVHTKnownBeamformed
+ RadioTapVHTKnownBandwidth
+ RadioTapVHTKnownGroupId
+ RadioTapVHTKnownPartialAID
+)
+
+func (self RadioTapVHTKnown) STBC() bool { return self&RadioTapVHTKnownSTBC != 0 }
+func (self RadioTapVHTKnown) TXOPPSNotAllowed() bool {
+ return self&RadioTapVHTKnownTXOPPSNotAllowed != 0
+}
+func (self RadioTapVHTKnown) GI() bool { return self&RadioTapVHTKnownGI != 0 }
+func (self RadioTapVHTKnown) SGINSYMDisambiguation() bool {
+ return self&RadioTapVHTKnownSGINSYMDisambiguation != 0
+}
+func (self RadioTapVHTKnown) LDPCExtraOFDMSymbol() bool {
+ return self&RadioTapVHTKnownLDPCExtraOFDMSymbol != 0
+}
+func (self RadioTapVHTKnown) Beamformed() bool { return self&RadioTapVHTKnownBeamformed != 0 }
+func (self RadioTapVHTKnown) Bandwidth() bool { return self&RadioTapVHTKnownBandwidth != 0 }
+func (self RadioTapVHTKnown) GroupId() bool { return self&RadioTapVHTKnownGroupId != 0 }
+func (self RadioTapVHTKnown) PartialAID() bool { return self&RadioTapVHTKnownPartialAID != 0 }
+
+type RadioTapVHTFlags uint8
+
+const (
+ RadioTapVHTFlagsSTBC RadioTapVHTFlags = 1 << iota
+ RadioTapVHTFlagsTXOPPSNotAllowed
+ RadioTapVHTFlagsSGI
+ RadioTapVHTFlagsSGINSYMMod
+ RadioTapVHTFlagsLDPCExtraOFDMSymbol
+ RadioTapVHTFlagsBeamformed
+)
+
+func (self RadioTapVHTFlags) STBC() bool { return self&RadioTapVHTFlagsSTBC != 0 }
+func (self RadioTapVHTFlags) TXOPPSNotAllowed() bool {
+ return self&RadioTapVHTFlagsTXOPPSNotAllowed != 0
+}
+func (self RadioTapVHTFlags) SGI() bool { return self&RadioTapVHTFlagsSGI != 0 }
+func (self RadioTapVHTFlags) SGINSYMMod() bool { return self&RadioTapVHTFlagsSGINSYMMod != 0 }
+func (self RadioTapVHTFlags) LDPCExtraOFDMSymbol() bool {
+ return self&RadioTapVHTFlagsLDPCExtraOFDMSymbol != 0
+}
+func (self RadioTapVHTFlags) Beamformed() bool { return self&RadioTapVHTFlagsBeamformed != 0 }
+
+type RadioTapVHTMCSNSS uint8
+
+func (self RadioTapVHTMCSNSS) Present() bool {
+ return self&0x0F != 0
+}
+
+func (self RadioTapVHTMCSNSS) String() string {
+ return fmt.Sprintf("NSS#%dMCS#%d", uint32(self&0xf), uint32(self>>4))
+}
+
+func decodeRadioTap(data []byte, p gopacket.PacketBuilder) error {
+ d := &RadioTap{}
+ // TODO: Should we set LinkLayer here? And implement LinkFlow
+ return decodingLayerDecoder(d, data, p)
+}
+
+type RadioTap struct {
+ BaseLayer
+
+ // Version 0. Only increases for drastic changes, introduction of compatible new fields does not count.
+ Version uint8
+ // Length of the whole header in bytes, including it_version, it_pad, it_len, and data fields.
+ Length uint16
+ // 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.
+ Present RadioTapPresent
+ // 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.
+ TSFT uint64
+ Flags RadioTapFlags
+ // Rate Tx/Rx data rate
+ Rate RadioTapRate
+ // ChannelFrequency Tx/Rx frequency in MHz, followed by flags
+ ChannelFrequency RadioTapChannelFrequency
+ ChannelFlags RadioTapChannelFlags
+ // FHSS For frequency-hopping radios, the hop set (first byte) and pattern (second byte).
+ FHSS uint16
+ // DBMAntennaSignal RF signal power at the antenna, decibel difference from one milliwatt.
+ DBMAntennaSignal int8
+ // DBMAntennaNoise RF noise power at the antenna, decibel difference from one milliwatt.
+ DBMAntennaNoise int8
+ // LockQuality Quality of Barker code lock. Unitless. Monotonically nondecreasing with "better" lock strength. Called "Signal Quality" in datasheets.
+ LockQuality uint16
+ // TxAttenuation Transmit power expressed as unitless distance from max power set at factory calibration. 0 is max power. Monotonically nondecreasing with lower power levels.
+ TxAttenuation uint16
+ // DBTxAttenuation Transmit power expressed as decibel distance from max power set at factory calibration. 0 is max power. Monotonically nondecreasing with lower power levels.
+ DBTxAttenuation uint16
+ // DBMTxPower Transmit power expressed as dBm (decibels from a 1 milliwatt reference). This is the absolute power level measured at the antenna port.
+ DBMTxPower int8
+ // Antenna Unitless indication of the Rx/Tx antenna for this packet. The first antenna is antenna 0.
+ Antenna uint8
+ // DBAntennaSignal RF signal power at the antenna, decibel difference from an arbitrary, fixed reference.
+ DBAntennaSignal uint8
+ // DBAntennaNoise RF noise power at the antenna, decibel difference from an arbitrary, fixed reference point.
+ DBAntennaNoise uint8
+ //
+ RxFlags RadioTapRxFlags
+ TxFlags RadioTapTxFlags
+ RtsRetries uint8
+ DataRetries uint8
+ MCS RadioTapMCS
+ AMPDUStatus RadioTapAMPDUStatus
+ VHT RadioTapVHT
+}
+
+func (m *RadioTap) LayerType() gopacket.LayerType { return LayerTypeRadioTap }
+
+func (m *RadioTap) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ m.Version = uint8(data[0])
+ m.Length = binary.LittleEndian.Uint16(data[2:4])
+ m.Present = RadioTapPresent(binary.LittleEndian.Uint32(data[4:8]))
+
+ offset := uint16(4)
+
+ for (binary.LittleEndian.Uint32(data[offset:offset+4]) & 0x80000000) != 0 {
+ // This parser only handles standard radiotap namespace,
+ // and expects all fields are packed in the first it_present.
+ // Extended bitmap will be just ignored.
+ offset += 4
+ }
+ offset += 4 // skip the bitmap
+
+ if m.Present.TSFT() {
+ offset += align(offset, 8)
+ m.TSFT = binary.LittleEndian.Uint64(data[offset : offset+8])
+ offset += 8
+ }
+ if m.Present.Flags() {
+ m.Flags = RadioTapFlags(data[offset])
+ offset++
+ }
+ if m.Present.Rate() {
+ m.Rate = RadioTapRate(data[offset])
+ offset++
+ }
+ if m.Present.Channel() {
+ offset += align(offset, 2)
+ m.ChannelFrequency = RadioTapChannelFrequency(binary.LittleEndian.Uint16(data[offset : offset+2]))
+ offset += 2
+ m.ChannelFlags = RadioTapChannelFlags(binary.LittleEndian.Uint16(data[offset : offset+2]))
+ offset += 2
+ }
+ if m.Present.FHSS() {
+ m.FHSS = binary.LittleEndian.Uint16(data[offset : offset+2])
+ offset += 2
+ }
+ if m.Present.DBMAntennaSignal() {
+ m.DBMAntennaSignal = int8(data[offset])
+ offset++
+ }
+ if m.Present.DBMAntennaNoise() {
+ m.DBMAntennaNoise = int8(data[offset])
+ offset++
+ }
+ if m.Present.LockQuality() {
+ offset += align(offset, 2)
+ m.LockQuality = binary.LittleEndian.Uint16(data[offset : offset+2])
+ offset += 2
+ }
+ if m.Present.TxAttenuation() {
+ offset += align(offset, 2)
+ m.TxAttenuation = binary.LittleEndian.Uint16(data[offset : offset+2])
+ offset += 2
+ }
+ if m.Present.DBTxAttenuation() {
+ offset += align(offset, 2)
+ m.DBTxAttenuation = binary.LittleEndian.Uint16(data[offset : offset+2])
+ offset += 2
+ }
+ if m.Present.DBMTxPower() {
+ m.DBMTxPower = int8(data[offset])
+ offset++
+ }
+ if m.Present.Antenna() {
+ m.Antenna = uint8(data[offset])
+ offset++
+ }
+ if m.Present.DBAntennaSignal() {
+ m.DBAntennaSignal = uint8(data[offset])
+ offset++
+ }
+ if m.Present.DBAntennaNoise() {
+ m.DBAntennaNoise = uint8(data[offset])
+ offset++
+ }
+ if m.Present.RxFlags() {
+ offset += align(offset, 2)
+ m.RxFlags = RadioTapRxFlags(binary.LittleEndian.Uint16(data[offset:]))
+ offset += 2
+ }
+ if m.Present.TxFlags() {
+ offset += align(offset, 2)
+ m.TxFlags = RadioTapTxFlags(binary.LittleEndian.Uint16(data[offset:]))
+ offset += 2
+ }
+ if m.Present.RtsRetries() {
+ m.RtsRetries = uint8(data[offset])
+ offset++
+ }
+ if m.Present.DataRetries() {
+ m.DataRetries = uint8(data[offset])
+ offset++
+ }
+ if m.Present.MCS() {
+ m.MCS = RadioTapMCS{
+ RadioTapMCSKnown(data[offset]),
+ RadioTapMCSFlags(data[offset+1]),
+ uint8(data[offset+2]),
+ }
+ offset += 3
+ }
+ if m.Present.AMPDUStatus() {
+ offset += align(offset, 4)
+ m.AMPDUStatus = RadioTapAMPDUStatus{
+ Reference: binary.LittleEndian.Uint32(data[offset:]),
+ Flags: RadioTapAMPDUStatusFlags(binary.LittleEndian.Uint16(data[offset+4:])),
+ CRC: uint8(data[offset+6]),
+ }
+ offset += 8
+ }
+ if m.Present.VHT() {
+ offset += align(offset, 2)
+ m.VHT = RadioTapVHT{
+ Known: RadioTapVHTKnown(binary.LittleEndian.Uint16(data[offset:])),
+ Flags: RadioTapVHTFlags(data[offset+2]),
+ Bandwidth: uint8(data[offset+3]),
+ MCSNSS: [4]RadioTapVHTMCSNSS{
+ RadioTapVHTMCSNSS(data[offset+4]),
+ RadioTapVHTMCSNSS(data[offset+5]),
+ RadioTapVHTMCSNSS(data[offset+6]),
+ RadioTapVHTMCSNSS(data[offset+7]),
+ },
+ Coding: uint8(data[offset+8]),
+ GroupId: uint8(data[offset+9]),
+ PartialAID: binary.LittleEndian.Uint16(data[offset+10:]),
+ }
+ offset += 12
+ }
+
+ payload := data[m.Length:]
+ if !m.Flags.FCS() { // Dot11.DecodeFromBytes() expects FCS present
+ fcs := make([]byte, 4)
+ h := crc32.NewIEEE()
+ h.Write(payload)
+ binary.LittleEndian.PutUint32(fcs, h.Sum32())
+ payload = append(payload, fcs...)
+ }
+ m.BaseLayer = BaseLayer{Contents: data[:m.Length], Payload: payload}
+
+ return nil
+}
+
+func (m RadioTap) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ buf := make([]byte, 1024)
+
+ buf[0] = m.Version
+ buf[1] = 0
+
+ binary.LittleEndian.PutUint32(buf[4:8], uint32(m.Present))
+
+ offset := uint16(4)
+
+ for (binary.LittleEndian.Uint32(buf[offset:offset+4]) & 0x80000000) != 0 {
+ offset += 4
+ }
+
+ offset += 4
+
+ if m.Present.TSFT() {
+ offset += align(offset, 8)
+ binary.LittleEndian.PutUint64(buf[offset:offset+8], m.TSFT)
+ offset += 8
+ }
+
+ if m.Present.Flags() {
+ buf[offset] = uint8(m.Flags)
+ offset++
+ }
+
+ if m.Present.Rate() {
+ buf[offset] = uint8(m.Rate)
+ offset++
+ }
+
+ if m.Present.Channel() {
+ offset += align(offset, 2)
+ binary.LittleEndian.PutUint16(buf[offset:offset+2], uint16(m.ChannelFrequency))
+ offset += 2
+ binary.LittleEndian.PutUint16(buf[offset:offset+2], uint16(m.ChannelFlags))
+ offset += 2
+ }
+
+ if m.Present.FHSS() {
+ binary.LittleEndian.PutUint16(buf[offset:offset+2], m.FHSS)
+ offset += 2
+ }
+
+ if m.Present.DBMAntennaSignal() {
+ buf[offset] = byte(m.DBMAntennaSignal)
+ offset++
+ }
+
+ if m.Present.DBMAntennaNoise() {
+ buf[offset] = byte(m.DBMAntennaNoise)
+ offset++
+ }
+
+ if m.Present.LockQuality() {
+ offset += align(offset, 2)
+ binary.LittleEndian.PutUint16(buf[offset:offset+2], m.LockQuality)
+ offset += 2
+ }
+
+ if m.Present.TxAttenuation() {
+ offset += align(offset, 2)
+ binary.LittleEndian.PutUint16(buf[offset:offset+2], m.TxAttenuation)
+ offset += 2
+ }
+
+ if m.Present.DBTxAttenuation() {
+ offset += align(offset, 2)
+ binary.LittleEndian.PutUint16(buf[offset:offset+2], m.DBTxAttenuation)
+ offset += 2
+ }
+
+ if m.Present.DBMTxPower() {
+ buf[offset] = byte(m.DBMTxPower)
+ offset++
+ }
+
+ if m.Present.Antenna() {
+ buf[offset] = uint8(m.Antenna)
+ offset++
+ }
+
+ if m.Present.DBAntennaSignal() {
+ buf[offset] = uint8(m.DBAntennaSignal)
+ offset++
+ }
+
+ if m.Present.DBAntennaNoise() {
+ buf[offset] = uint8(m.DBAntennaNoise)
+ offset++
+ }
+
+ if m.Present.RxFlags() {
+ offset += align(offset, 2)
+ binary.LittleEndian.PutUint16(buf[offset:offset+2], uint16(m.RxFlags))
+ offset += 2
+ }
+
+ if m.Present.TxFlags() {
+ offset += align(offset, 2)
+ binary.LittleEndian.PutUint16(buf[offset:offset+2], uint16(m.TxFlags))
+ offset += 2
+ }
+
+ if m.Present.RtsRetries() {
+ buf[offset] = m.RtsRetries
+ offset++
+ }
+
+ if m.Present.DataRetries() {
+ buf[offset] = m.DataRetries
+ offset++
+ }
+
+ if m.Present.MCS() {
+ buf[offset] = uint8(m.MCS.Known)
+ buf[offset+1] = uint8(m.MCS.Flags)
+ buf[offset+2] = uint8(m.MCS.MCS)
+
+ offset += 3
+ }
+
+ if m.Present.AMPDUStatus() {
+ offset += align(offset, 4)
+
+ binary.LittleEndian.PutUint32(buf[offset:offset+4], m.AMPDUStatus.Reference)
+ binary.LittleEndian.PutUint16(buf[offset+4:offset+6], uint16(m.AMPDUStatus.Flags))
+
+ buf[offset+6] = m.AMPDUStatus.CRC
+
+ offset += 8
+ }
+
+ if m.Present.VHT() {
+ offset += align(offset, 2)
+
+ binary.LittleEndian.PutUint16(buf[offset:], uint16(m.VHT.Known))
+
+ buf[offset+2] = uint8(m.VHT.Flags)
+ buf[offset+3] = uint8(m.VHT.Bandwidth)
+ buf[offset+4] = uint8(m.VHT.MCSNSS[0])
+ buf[offset+5] = uint8(m.VHT.MCSNSS[1])
+ buf[offset+6] = uint8(m.VHT.MCSNSS[2])
+ buf[offset+7] = uint8(m.VHT.MCSNSS[3])
+ buf[offset+8] = uint8(m.VHT.Coding)
+ buf[offset+9] = uint8(m.VHT.GroupId)
+
+ binary.LittleEndian.PutUint16(buf[offset+10:offset+12], m.VHT.PartialAID)
+
+ offset += 12
+ }
+
+ packetBuf, err := b.PrependBytes(int(offset))
+
+ if err != nil {
+ return err
+ }
+
+ if opts.FixLengths {
+ m.Length = offset
+ }
+
+ binary.LittleEndian.PutUint16(buf[2:4], m.Length)
+
+ copy(packetBuf, buf)
+
+ return nil
+}
+
+func (m *RadioTap) CanDecode() gopacket.LayerClass { return LayerTypeRadioTap }
+func (m *RadioTap) NextLayerType() gopacket.LayerType { return LayerTypeDot11 }
diff --git a/vendor/github.com/google/gopacket/layers/radiotap_test.go b/vendor/github.com/google/gopacket/layers/radiotap_test.go
new file mode 100644
index 0000000..4d3c7d0
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/radiotap_test.go
@@ -0,0 +1,79 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+package layers
+
+import (
+ "github.com/google/gopacket"
+ "testing"
+)
+
+// testPacketRadiotap0 is the packet:
+// 09:34:34.799438 1.0 Mb/s 2412 MHz 11b -58dB signal antenna 7 Acknowledgment RA:88:1f:a1:ae:9d:cb
+// 0x0000: 0000 1200 2e48 0000 1002 6c09 a000 c607 .....H....l.....
+// 0x0010: 0000 d400 0000 881f a1ae 9dcb c630 4b4b .............0KK
+var testPacketRadiotap0 = []byte{
+ 0x00, 0x00, 0x12, 0x00, 0x2e, 0x48, 0x00, 0x00, 0x10, 0x02, 0x6c, 0x09, 0xa0, 0x00, 0xc6, 0x07,
+ 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x88, 0x1f, 0xa1, 0xae, 0x9d, 0xcb, 0xc6, 0x30, 0x4b, 0x4b,
+}
+
+func TestPacketRadiotap0(t *testing.T) {
+ p := gopacket.NewPacket(testPacketRadiotap0, LayerTypeRadioTap, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11}, t)
+ rt := p.Layer(LayerTypeRadioTap).(*RadioTap)
+ if rt.ChannelFrequency != 2412 || rt.DBMAntennaSignal != -58 || rt.Antenna != 7 {
+ t.Error("Radiotap decode error")
+ }
+ if rt.Rate != 2 { // 500Kbps unit
+ t.Error("Radiotap Rate decode error")
+ }
+}
+func BenchmarkDecodePacketRadiotap0(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketRadiotap0, LayerTypeRadioTap, gopacket.NoCopy)
+ }
+}
+
+// testPacketRadiotap1 is the packet:
+// 05:24:21.380948 2412 MHz 11g -36dB signal antenna 5 65.0 Mb/s MCS 7 20 MHz lon GI
+// 0x0000: 0000 1500 2a48 0800 1000 6c09 8004 dc05 ....*H....l.....
+// 0x0010: 0000 0700 0748 112c 0000 3a9d aaf0 191c .....H.,..:.....
+// 0x0020: aba7 f213 9d00 3a9d aaf0 1970 b2ee a9f1 ......:....p....
+// 0x0030: 16 .
+var testPacketRadiotap1 = []byte{
+ 0x00, 0x00, 0x15, 0x00, 0x2a, 0x48, 0x08, 0x00, 0x10, 0x00, 0x6c, 0x09, 0x80, 0x04, 0xdc, 0x05,
+ 0x00, 0x00, 0x07, 0x00, 0x07, 0x48, 0x11, 0x2c, 0x00, 0x00, 0x3a, 0x9d, 0xaa, 0xf0, 0x19, 0x1c,
+ 0xab, 0xa7, 0xf2, 0x13, 0x9d, 0x00, 0x3a, 0x9d, 0xaa, 0xf0, 0x19, 0x70, 0xb2, 0xee, 0xa9, 0xf1,
+ 0x16,
+}
+
+func TestPacketRadiotap1(t *testing.T) {
+ p := gopacket.NewPacket(testPacketRadiotap1, LayerTypeRadioTap, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11}, t)
+ rt := p.Layer(LayerTypeRadioTap).(*RadioTap)
+ if rt.ChannelFrequency != 2412 || rt.DBMAntennaSignal != -36 || rt.Antenna != 5 {
+ t.Error("Radiotap decode error")
+ }
+ if !rt.MCS.Known.MCSIndex() || rt.MCS.MCS != 7 {
+ t.Error("Radiotap MCS error")
+ }
+ if !rt.MCS.Known.Bandwidth() || rt.MCS.Flags.Bandwidth() != 0 {
+ t.Error("Radiotap bandwidth error")
+ }
+ if !rt.MCS.Known.GuardInterval() || rt.MCS.Flags.ShortGI() {
+ t.Error("Radiotap GI error")
+ }
+}
+func BenchmarkDecodePacketRadiotap1(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketRadiotap1, LayerTypeRadioTap, gopacket.NoCopy)
+ }
+}
diff --git a/vendor/github.com/google/gopacket/layers/rudp.go b/vendor/github.com/google/gopacket/layers/rudp.go
new file mode 100644
index 0000000..8435129
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/rudp.go
@@ -0,0 +1,93 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "fmt"
+ "github.com/google/gopacket"
+)
+
+type RUDP struct {
+ BaseLayer
+ SYN, ACK, EACK, RST, NUL bool
+ Version uint8
+ HeaderLength uint8
+ SrcPort, DstPort RUDPPort
+ DataLength uint16
+ Seq, Ack, Checksum uint32
+ VariableHeaderArea []byte
+ // RUDPHeaderSyn contains SYN information for the RUDP packet,
+ // if the SYN flag is set
+ *RUDPHeaderSYN
+ // RUDPHeaderEack contains EACK information for the RUDP packet,
+ // if the EACK flag is set.
+ *RUDPHeaderEACK
+}
+
+type RUDPHeaderSYN struct {
+ MaxOutstandingSegments, MaxSegmentSize, OptionFlags uint16
+}
+
+type RUDPHeaderEACK struct {
+ SeqsReceivedOK []uint32
+}
+
+// LayerType returns gopacket.LayerTypeRUDP.
+func (r *RUDP) LayerType() gopacket.LayerType { return LayerTypeRUDP }
+
+func decodeRUDP(data []byte, p gopacket.PacketBuilder) error {
+ r := &RUDP{
+ SYN: data[0]&0x80 != 0,
+ ACK: data[0]&0x40 != 0,
+ EACK: data[0]&0x20 != 0,
+ RST: data[0]&0x10 != 0,
+ NUL: data[0]&0x08 != 0,
+ Version: data[0] & 0x3,
+ HeaderLength: data[1],
+ SrcPort: RUDPPort(data[2]),
+ DstPort: RUDPPort(data[3]),
+ DataLength: binary.BigEndian.Uint16(data[4:6]),
+ Seq: binary.BigEndian.Uint32(data[6:10]),
+ Ack: binary.BigEndian.Uint32(data[10:14]),
+ Checksum: binary.BigEndian.Uint32(data[14:18]),
+ }
+ if r.HeaderLength < 9 {
+ return fmt.Errorf("RUDP packet with too-short header length %d", r.HeaderLength)
+ }
+ hlen := int(r.HeaderLength) * 2
+ r.Contents = data[:hlen]
+ r.Payload = data[hlen : hlen+int(r.DataLength)]
+ r.VariableHeaderArea = data[18:hlen]
+ headerData := r.VariableHeaderArea
+ switch {
+ case r.SYN:
+ if len(headerData) != 6 {
+ return fmt.Errorf("RUDP packet invalid SYN header length: %d", len(headerData))
+ }
+ r.RUDPHeaderSYN = &RUDPHeaderSYN{
+ MaxOutstandingSegments: binary.BigEndian.Uint16(headerData[:2]),
+ MaxSegmentSize: binary.BigEndian.Uint16(headerData[2:4]),
+ OptionFlags: binary.BigEndian.Uint16(headerData[4:6]),
+ }
+ case r.EACK:
+ if len(headerData)%4 != 0 {
+ return fmt.Errorf("RUDP packet invalid EACK header length: %d", len(headerData))
+ }
+ r.RUDPHeaderEACK = &RUDPHeaderEACK{make([]uint32, len(headerData)/4)}
+ for i := 0; i < len(headerData); i += 4 {
+ r.SeqsReceivedOK[i/4] = binary.BigEndian.Uint32(headerData[i : i+4])
+ }
+ }
+ p.AddLayer(r)
+ p.SetTransportLayer(r)
+ return p.NextDecoder(gopacket.LayerTypePayload)
+}
+
+func (r *RUDP) TransportFlow() gopacket.Flow {
+ return gopacket.NewFlow(EndpointRUDPPort, []byte{byte(r.SrcPort)}, []byte{byte(r.DstPort)})
+}
diff --git a/vendor/github.com/google/gopacket/layers/sctp.go b/vendor/github.com/google/gopacket/layers/sctp.go
new file mode 100644
index 0000000..511176e
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/sctp.go
@@ -0,0 +1,746 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "errors"
+ "fmt"
+ "hash/crc32"
+
+ "github.com/google/gopacket"
+)
+
+// SCTP contains information on the top level of an SCTP packet.
+type SCTP struct {
+ BaseLayer
+ SrcPort, DstPort SCTPPort
+ VerificationTag uint32
+ Checksum uint32
+ sPort, dPort []byte
+}
+
+// LayerType returns gopacket.LayerTypeSCTP
+func (s *SCTP) LayerType() gopacket.LayerType { return LayerTypeSCTP }
+
+func decodeSCTP(data []byte, p gopacket.PacketBuilder) error {
+ sctp := &SCTP{}
+ err := sctp.DecodeFromBytes(data, p)
+ p.AddLayer(sctp)
+ p.SetTransportLayer(sctp)
+ if err != nil {
+ return err
+ }
+ return p.NextDecoder(sctpChunkTypePrefixDecoder)
+}
+
+var sctpChunkTypePrefixDecoder = gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix)
+
+// TransportFlow returns a flow based on the source and destination SCTP port.
+func (s *SCTP) TransportFlow() gopacket.Flow {
+ return gopacket.NewFlow(EndpointSCTPPort, s.sPort, s.dPort)
+}
+
+func decodeWithSCTPChunkTypePrefix(data []byte, p gopacket.PacketBuilder) error {
+ chunkType := SCTPChunkType(data[0])
+ return chunkType.Decode(data, p)
+}
+
+// SerializeTo is for gopacket.SerializableLayer.
+func (s SCTP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ bytes, err := b.PrependBytes(12)
+ if err != nil {
+ return err
+ }
+ binary.BigEndian.PutUint16(bytes[0:2], uint16(s.SrcPort))
+ binary.BigEndian.PutUint16(bytes[2:4], uint16(s.DstPort))
+ binary.BigEndian.PutUint32(bytes[4:8], s.VerificationTag)
+ if opts.ComputeChecksums {
+ // Note: MakeTable(Castagnoli) actually only creates the table once, then
+ // passes back a singleton on every other call, so this shouldn't cause
+ // excessive memory allocation.
+ binary.LittleEndian.PutUint32(bytes[8:12], crc32.Checksum(b.Bytes(), crc32.MakeTable(crc32.Castagnoli)))
+ }
+ return nil
+}
+
+func (sctp *SCTP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 12 {
+ return errors.New("Invalid SCTP common header length")
+ }
+ sctp.SrcPort = SCTPPort(binary.BigEndian.Uint16(data[:2]))
+ sctp.sPort = data[:2]
+ sctp.DstPort = SCTPPort(binary.BigEndian.Uint16(data[2:4]))
+ sctp.dPort = data[2:4]
+ sctp.VerificationTag = binary.BigEndian.Uint32(data[4:8])
+ sctp.Checksum = binary.BigEndian.Uint32(data[8:12])
+ sctp.BaseLayer = BaseLayer{data[:12], data[12:]}
+
+ return nil
+}
+
+func (t *SCTP) CanDecode() gopacket.LayerClass {
+ return LayerTypeSCTP
+}
+
+func (t *SCTP) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypePayload
+}
+
+// SCTPChunk contains the common fields in all SCTP chunks.
+type SCTPChunk struct {
+ BaseLayer
+ Type SCTPChunkType
+ Flags uint8
+ Length uint16
+ // ActualLength is the total length of an SCTP chunk, including padding.
+ // SCTP chunks start and end on 4-byte boundaries. So if a chunk has a length
+ // of 18, it means that it has data up to and including byte 18, then padding
+ // up to the next 4-byte boundary, 20. In this case, Length would be 18, and
+ // ActualLength would be 20.
+ ActualLength int
+}
+
+func roundUpToNearest4(i int) int {
+ if i%4 == 0 {
+ return i
+ }
+ return i + 4 - (i % 4)
+}
+
+func decodeSCTPChunk(data []byte) (SCTPChunk, error) {
+ length := binary.BigEndian.Uint16(data[2:4])
+ if length < 4 {
+ return SCTPChunk{}, errors.New("invalid SCTP chunk length")
+ }
+ actual := roundUpToNearest4(int(length))
+ ct := SCTPChunkType(data[0])
+
+ // For SCTP Data, use a separate layer for the payload
+ delta := 0
+ if ct == SCTPChunkTypeData {
+ delta = int(actual) - int(length)
+ actual = 16
+ }
+
+ return SCTPChunk{
+ Type: ct,
+ Flags: data[1],
+ Length: length,
+ ActualLength: actual,
+ BaseLayer: BaseLayer{data[:actual], data[actual : len(data)-delta]},
+ }, nil
+}
+
+// SCTPParameter is a TLV parameter inside a SCTPChunk.
+type SCTPParameter struct {
+ Type uint16
+ Length uint16
+ ActualLength int
+ Value []byte
+}
+
+func decodeSCTPParameter(data []byte) SCTPParameter {
+ length := binary.BigEndian.Uint16(data[2:4])
+ return SCTPParameter{
+ Type: binary.BigEndian.Uint16(data[0:2]),
+ Length: length,
+ Value: data[4:length],
+ ActualLength: roundUpToNearest4(int(length)),
+ }
+}
+
+func (p SCTPParameter) Bytes() []byte {
+ length := 4 + len(p.Value)
+ data := make([]byte, roundUpToNearest4(length))
+ binary.BigEndian.PutUint16(data[0:2], p.Type)
+ binary.BigEndian.PutUint16(data[2:4], uint16(length))
+ copy(data[4:], p.Value)
+ return data
+}
+
+// SCTPUnknownChunkType is the layer type returned when we don't recognize the
+// chunk type. Since there's a length in a known location, we can skip over
+// it even if we don't know what it is, and continue parsing the rest of the
+// chunks. This chunk is stored as an ErrorLayer in the packet.
+type SCTPUnknownChunkType struct {
+ SCTPChunk
+ bytes []byte
+}
+
+func decodeSCTPChunkTypeUnknown(data []byte, p gopacket.PacketBuilder) error {
+ chunk, err := decodeSCTPChunk(data)
+ if err != nil {
+ return err
+ }
+ sc := &SCTPUnknownChunkType{SCTPChunk: chunk}
+ sc.bytes = data[:sc.ActualLength]
+ p.AddLayer(sc)
+ p.SetErrorLayer(sc)
+ return p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))
+}
+
+// SerializeTo is for gopacket.SerializableLayer.
+func (s SCTPUnknownChunkType) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ bytes, err := b.PrependBytes(s.ActualLength)
+ if err != nil {
+ return err
+ }
+ copy(bytes, s.bytes)
+ return nil
+}
+
+// LayerType returns gopacket.LayerTypeSCTPUnknownChunkType.
+func (s *SCTPUnknownChunkType) LayerType() gopacket.LayerType { return LayerTypeSCTPUnknownChunkType }
+
+// Payload returns all bytes in this header, including the decoded Type, Length,
+// and Flags.
+func (s *SCTPUnknownChunkType) Payload() []byte { return s.bytes }
+
+// Error implements ErrorLayer.
+func (s *SCTPUnknownChunkType) Error() error {
+ return fmt.Errorf("No decode method available for SCTP chunk type %s", s.Type)
+}
+
+// SCTPData is the SCTP Data chunk layer.
+type SCTPData struct {
+ SCTPChunk
+ Unordered, BeginFragment, EndFragment bool
+ TSN uint32
+ StreamId uint16
+ StreamSequence uint16
+ PayloadProtocol SCTPPayloadProtocol
+}
+
+// LayerType returns gopacket.LayerTypeSCTPData.
+func (s *SCTPData) LayerType() gopacket.LayerType { return LayerTypeSCTPData }
+
+// SCTPPayloadProtocol represents a payload protocol
+type SCTPPayloadProtocol uint32
+
+// SCTPPayloadProtocol constonts from http://www.iana.org/assignments/sctp-parameters/sctp-parameters.xhtml
+const (
+ SCTPProtocolReserved SCTPPayloadProtocol = 0
+ SCTPPayloadUIA = 1
+ SCTPPayloadM2UA = 2
+ SCTPPayloadM3UA = 3
+ SCTPPayloadSUA = 4
+ SCTPPayloadM2PA = 5
+ SCTPPayloadV5UA = 6
+ SCTPPayloadH248 = 7
+ SCTPPayloadBICC = 8
+ SCTPPayloadTALI = 9
+ SCTPPayloadDUA = 10
+ SCTPPayloadASAP = 11
+ SCTPPayloadENRP = 12
+ SCTPPayloadH323 = 13
+ SCTPPayloadQIPC = 14
+ SCTPPayloadSIMCO = 15
+ SCTPPayloadDDPSegment = 16
+ SCTPPayloadDDPStream = 17
+ SCTPPayloadS1AP = 18
+)
+
+func (p SCTPPayloadProtocol) String() string {
+ switch p {
+ case SCTPProtocolReserved:
+ return "Reserved"
+ case SCTPPayloadUIA:
+ return "UIA"
+ case SCTPPayloadM2UA:
+ return "M2UA"
+ case SCTPPayloadM3UA:
+ return "M3UA"
+ case SCTPPayloadSUA:
+ return "SUA"
+ case SCTPPayloadM2PA:
+ return "M2PA"
+ case SCTPPayloadV5UA:
+ return "V5UA"
+ case SCTPPayloadH248:
+ return "H.248"
+ case SCTPPayloadBICC:
+ return "BICC"
+ case SCTPPayloadTALI:
+ return "TALI"
+ case SCTPPayloadDUA:
+ return "DUA"
+ case SCTPPayloadASAP:
+ return "ASAP"
+ case SCTPPayloadENRP:
+ return "ENRP"
+ case SCTPPayloadH323:
+ return "H.323"
+ case SCTPPayloadQIPC:
+ return "QIPC"
+ case SCTPPayloadSIMCO:
+ return "SIMCO"
+ case SCTPPayloadDDPSegment:
+ return "DDPSegment"
+ case SCTPPayloadDDPStream:
+ return "DDPStream"
+ case SCTPPayloadS1AP:
+ return "S1AP"
+ }
+ return fmt.Sprintf("Unknown(%d)", p)
+}
+
+func decodeSCTPData(data []byte, p gopacket.PacketBuilder) error {
+ chunk, err := decodeSCTPChunk(data)
+ if err != nil {
+ return err
+ }
+ sc := &SCTPData{
+ SCTPChunk: chunk,
+ Unordered: data[1]&0x4 != 0,
+ BeginFragment: data[1]&0x2 != 0,
+ EndFragment: data[1]&0x1 != 0,
+ TSN: binary.BigEndian.Uint32(data[4:8]),
+ StreamId: binary.BigEndian.Uint16(data[8:10]),
+ StreamSequence: binary.BigEndian.Uint16(data[10:12]),
+ PayloadProtocol: SCTPPayloadProtocol(binary.BigEndian.Uint32(data[12:16])),
+ }
+ // Length is the length in bytes of the data, INCLUDING the 16-byte header.
+ p.AddLayer(sc)
+ return p.NextDecoder(gopacket.LayerTypePayload)
+}
+
+// SerializeTo is for gopacket.SerializableLayer.
+func (sc SCTPData) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ payload := b.Bytes()
+ // Pad the payload to a 32 bit boundary
+ if rem := len(payload) % 4; rem != 0 {
+ b.AppendBytes(4 - rem)
+ }
+ length := 16
+ bytes, err := b.PrependBytes(length)
+ if err != nil {
+ return err
+ }
+ bytes[0] = uint8(sc.Type)
+ flags := uint8(0)
+ if sc.Unordered {
+ flags |= 0x4
+ }
+ if sc.BeginFragment {
+ flags |= 0x2
+ }
+ if sc.EndFragment {
+ flags |= 0x1
+ }
+ bytes[1] = flags
+ binary.BigEndian.PutUint16(bytes[2:4], uint16(length+len(payload)))
+ binary.BigEndian.PutUint32(bytes[4:8], sc.TSN)
+ binary.BigEndian.PutUint16(bytes[8:10], sc.StreamId)
+ binary.BigEndian.PutUint16(bytes[10:12], sc.StreamSequence)
+ binary.BigEndian.PutUint32(bytes[12:16], uint32(sc.PayloadProtocol))
+ return nil
+}
+
+// SCTPInitParameter is a parameter for an SCTP Init or InitAck packet.
+type SCTPInitParameter SCTPParameter
+
+// SCTPInit is used as the return value for both SCTPInit and SCTPInitAck
+// messages.
+type SCTPInit struct {
+ SCTPChunk
+ InitiateTag uint32
+ AdvertisedReceiverWindowCredit uint32
+ OutboundStreams, InboundStreams uint16
+ InitialTSN uint32
+ Parameters []SCTPInitParameter
+}
+
+// LayerType returns either gopacket.LayerTypeSCTPInit or gopacket.LayerTypeSCTPInitAck.
+func (sc *SCTPInit) LayerType() gopacket.LayerType {
+ if sc.Type == SCTPChunkTypeInitAck {
+ return LayerTypeSCTPInitAck
+ }
+ // sc.Type == SCTPChunkTypeInit
+ return LayerTypeSCTPInit
+}
+
+func decodeSCTPInit(data []byte, p gopacket.PacketBuilder) error {
+ chunk, err := decodeSCTPChunk(data)
+ if err != nil {
+ return err
+ }
+ sc := &SCTPInit{
+ SCTPChunk: chunk,
+ InitiateTag: binary.BigEndian.Uint32(data[4:8]),
+ AdvertisedReceiverWindowCredit: binary.BigEndian.Uint32(data[8:12]),
+ OutboundStreams: binary.BigEndian.Uint16(data[12:14]),
+ InboundStreams: binary.BigEndian.Uint16(data[14:16]),
+ InitialTSN: binary.BigEndian.Uint32(data[16:20]),
+ }
+ paramData := data[20:sc.ActualLength]
+ for len(paramData) > 0 {
+ p := SCTPInitParameter(decodeSCTPParameter(paramData))
+ paramData = paramData[p.ActualLength:]
+ sc.Parameters = append(sc.Parameters, p)
+ }
+ p.AddLayer(sc)
+ return p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))
+}
+
+// SerializeTo is for gopacket.SerializableLayer.
+func (sc SCTPInit) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ var payload []byte
+ for _, param := range sc.Parameters {
+ payload = append(payload, SCTPParameter(param).Bytes()...)
+ }
+ length := 20 + len(payload)
+ bytes, err := b.PrependBytes(roundUpToNearest4(length))
+ if err != nil {
+ return err
+ }
+ bytes[0] = uint8(sc.Type)
+ bytes[1] = sc.Flags
+ binary.BigEndian.PutUint16(bytes[2:4], uint16(length))
+ binary.BigEndian.PutUint32(bytes[4:8], sc.InitiateTag)
+ binary.BigEndian.PutUint32(bytes[8:12], sc.AdvertisedReceiverWindowCredit)
+ binary.BigEndian.PutUint16(bytes[12:14], sc.OutboundStreams)
+ binary.BigEndian.PutUint16(bytes[14:16], sc.InboundStreams)
+ binary.BigEndian.PutUint32(bytes[16:20], sc.InitialTSN)
+ copy(bytes[20:], payload)
+ return nil
+}
+
+// SCTPSack is the SCTP Selective ACK chunk layer.
+type SCTPSack struct {
+ SCTPChunk
+ CumulativeTSNAck uint32
+ AdvertisedReceiverWindowCredit uint32
+ NumGapACKs, NumDuplicateTSNs uint16
+ GapACKs []uint16
+ DuplicateTSNs []uint32
+}
+
+// LayerType return LayerTypeSCTPSack
+func (sc *SCTPSack) LayerType() gopacket.LayerType {
+ return LayerTypeSCTPSack
+}
+
+func decodeSCTPSack(data []byte, p gopacket.PacketBuilder) error {
+ chunk, err := decodeSCTPChunk(data)
+ if err != nil {
+ return err
+ }
+ sc := &SCTPSack{
+ SCTPChunk: chunk,
+ CumulativeTSNAck: binary.BigEndian.Uint32(data[4:8]),
+ AdvertisedReceiverWindowCredit: binary.BigEndian.Uint32(data[8:12]),
+ NumGapACKs: binary.BigEndian.Uint16(data[12:14]),
+ NumDuplicateTSNs: binary.BigEndian.Uint16(data[14:16]),
+ }
+ // We maximize gapAcks and dupTSNs here so we're not allocating tons
+ // of memory based on a user-controlable field. Our maximums are not exact,
+ // but should give us sane defaults... we'll still hit slice boundaries and
+ // fail if the user-supplied values are too high (in the for loops below), but
+ // the amount of memory we'll have allocated because of that should be small
+ // (< sc.ActualLength)
+ gapAcks := sc.SCTPChunk.ActualLength / 2
+ dupTSNs := (sc.SCTPChunk.ActualLength - gapAcks*2) / 4
+ if gapAcks > int(sc.NumGapACKs) {
+ gapAcks = int(sc.NumGapACKs)
+ }
+ if dupTSNs > int(sc.NumDuplicateTSNs) {
+ dupTSNs = int(sc.NumDuplicateTSNs)
+ }
+ sc.GapACKs = make([]uint16, 0, gapAcks)
+ sc.DuplicateTSNs = make([]uint32, 0, dupTSNs)
+ bytesRemaining := data[16:]
+ for i := 0; i < int(sc.NumGapACKs); i++ {
+ sc.GapACKs = append(sc.GapACKs, binary.BigEndian.Uint16(bytesRemaining[:2]))
+ bytesRemaining = bytesRemaining[2:]
+ }
+ for i := 0; i < int(sc.NumDuplicateTSNs); i++ {
+ sc.DuplicateTSNs = append(sc.DuplicateTSNs, binary.BigEndian.Uint32(bytesRemaining[:4]))
+ bytesRemaining = bytesRemaining[4:]
+ }
+ p.AddLayer(sc)
+ return p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))
+}
+
+// SerializeTo is for gopacket.SerializableLayer.
+func (sc SCTPSack) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ length := 16 + 2*len(sc.GapACKs) + 4*len(sc.DuplicateTSNs)
+ bytes, err := b.PrependBytes(roundUpToNearest4(length))
+ if err != nil {
+ return err
+ }
+ bytes[0] = uint8(sc.Type)
+ bytes[1] = sc.Flags
+ binary.BigEndian.PutUint16(bytes[2:4], uint16(length))
+ binary.BigEndian.PutUint32(bytes[4:8], sc.CumulativeTSNAck)
+ binary.BigEndian.PutUint32(bytes[8:12], sc.AdvertisedReceiverWindowCredit)
+ binary.BigEndian.PutUint16(bytes[12:14], uint16(len(sc.GapACKs)))
+ binary.BigEndian.PutUint16(bytes[14:16], uint16(len(sc.DuplicateTSNs)))
+ for i, v := range sc.GapACKs {
+ binary.BigEndian.PutUint16(bytes[16+i*2:], v)
+ }
+ offset := 16 + 2*len(sc.GapACKs)
+ for i, v := range sc.DuplicateTSNs {
+ binary.BigEndian.PutUint32(bytes[offset+i*4:], v)
+ }
+ return nil
+}
+
+// SCTPHeartbeatParameter is the parameter type used by SCTP heartbeat and
+// heartbeat ack layers.
+type SCTPHeartbeatParameter SCTPParameter
+
+// SCTPHeartbeat is the SCTP heartbeat layer, also used for heatbeat ack.
+type SCTPHeartbeat struct {
+ SCTPChunk
+ Parameters []SCTPHeartbeatParameter
+}
+
+// LayerType returns gopacket.LayerTypeSCTPHeartbeat.
+func (sc *SCTPHeartbeat) LayerType() gopacket.LayerType {
+ if sc.Type == SCTPChunkTypeHeartbeatAck {
+ return LayerTypeSCTPHeartbeatAck
+ }
+ // sc.Type == SCTPChunkTypeHeartbeat
+ return LayerTypeSCTPHeartbeat
+}
+
+func decodeSCTPHeartbeat(data []byte, p gopacket.PacketBuilder) error {
+ chunk, err := decodeSCTPChunk(data)
+ if err != nil {
+ return err
+ }
+ sc := &SCTPHeartbeat{
+ SCTPChunk: chunk,
+ }
+ paramData := data[4:sc.Length]
+ for len(paramData) > 0 {
+ p := SCTPHeartbeatParameter(decodeSCTPParameter(paramData))
+ paramData = paramData[p.ActualLength:]
+ sc.Parameters = append(sc.Parameters, p)
+ }
+ p.AddLayer(sc)
+ return p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))
+}
+
+// SerializeTo is for gopacket.SerializableLayer.
+func (sc SCTPHeartbeat) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ var payload []byte
+ for _, param := range sc.Parameters {
+ payload = append(payload, SCTPParameter(param).Bytes()...)
+ }
+ length := 4 + len(payload)
+
+ bytes, err := b.PrependBytes(roundUpToNearest4(length))
+ if err != nil {
+ return err
+ }
+ bytes[0] = uint8(sc.Type)
+ bytes[1] = sc.Flags
+ binary.BigEndian.PutUint16(bytes[2:4], uint16(length))
+ copy(bytes[4:], payload)
+ return nil
+}
+
+// SCTPErrorParameter is the parameter type used by SCTP Abort and Error layers.
+type SCTPErrorParameter SCTPParameter
+
+// SCTPError is the SCTP error layer, also used for SCTP aborts.
+type SCTPError struct {
+ SCTPChunk
+ Parameters []SCTPErrorParameter
+}
+
+// LayerType returns LayerTypeSCTPAbort or LayerTypeSCTPError.
+func (sc *SCTPError) LayerType() gopacket.LayerType {
+ if sc.Type == SCTPChunkTypeAbort {
+ return LayerTypeSCTPAbort
+ }
+ // sc.Type == SCTPChunkTypeError
+ return LayerTypeSCTPError
+}
+
+func decodeSCTPError(data []byte, p gopacket.PacketBuilder) error {
+ // remarkably similar to decodeSCTPHeartbeat ;)
+ chunk, err := decodeSCTPChunk(data)
+ if err != nil {
+ return err
+ }
+ sc := &SCTPError{
+ SCTPChunk: chunk,
+ }
+ paramData := data[4:sc.Length]
+ for len(paramData) > 0 {
+ p := SCTPErrorParameter(decodeSCTPParameter(paramData))
+ paramData = paramData[p.ActualLength:]
+ sc.Parameters = append(sc.Parameters, p)
+ }
+ p.AddLayer(sc)
+ return p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))
+}
+
+// SerializeTo is for gopacket.SerializableLayer.
+func (sc SCTPError) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ var payload []byte
+ for _, param := range sc.Parameters {
+ payload = append(payload, SCTPParameter(param).Bytes()...)
+ }
+ length := 4 + len(payload)
+
+ bytes, err := b.PrependBytes(roundUpToNearest4(length))
+ if err != nil {
+ return err
+ }
+ bytes[0] = uint8(sc.Type)
+ bytes[1] = sc.Flags
+ binary.BigEndian.PutUint16(bytes[2:4], uint16(length))
+ copy(bytes[4:], payload)
+ return nil
+}
+
+// SCTPShutdown is the SCTP shutdown layer.
+type SCTPShutdown struct {
+ SCTPChunk
+ CumulativeTSNAck uint32
+}
+
+// LayerType returns gopacket.LayerTypeSCTPShutdown.
+func (sc *SCTPShutdown) LayerType() gopacket.LayerType { return LayerTypeSCTPShutdown }
+
+func decodeSCTPShutdown(data []byte, p gopacket.PacketBuilder) error {
+ chunk, err := decodeSCTPChunk(data)
+ if err != nil {
+ return err
+ }
+ sc := &SCTPShutdown{
+ SCTPChunk: chunk,
+ CumulativeTSNAck: binary.BigEndian.Uint32(data[4:8]),
+ }
+ p.AddLayer(sc)
+ return p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))
+}
+
+// SerializeTo is for gopacket.SerializableLayer.
+func (sc SCTPShutdown) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ bytes, err := b.PrependBytes(8)
+ if err != nil {
+ return err
+ }
+ bytes[0] = uint8(sc.Type)
+ bytes[1] = sc.Flags
+ binary.BigEndian.PutUint16(bytes[2:4], 8)
+ binary.BigEndian.PutUint32(bytes[4:8], sc.CumulativeTSNAck)
+ return nil
+}
+
+// SCTPShutdownAck is the SCTP shutdown layer.
+type SCTPShutdownAck struct {
+ SCTPChunk
+}
+
+// LayerType returns gopacket.LayerTypeSCTPShutdownAck.
+func (sc *SCTPShutdownAck) LayerType() gopacket.LayerType { return LayerTypeSCTPShutdownAck }
+
+func decodeSCTPShutdownAck(data []byte, p gopacket.PacketBuilder) error {
+ chunk, err := decodeSCTPChunk(data)
+ if err != nil {
+ return err
+ }
+ sc := &SCTPShutdownAck{
+ SCTPChunk: chunk,
+ }
+ p.AddLayer(sc)
+ return p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))
+}
+
+// SerializeTo is for gopacket.SerializableLayer.
+func (sc SCTPShutdownAck) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ bytes, err := b.PrependBytes(4)
+ if err != nil {
+ return err
+ }
+ bytes[0] = uint8(sc.Type)
+ bytes[1] = sc.Flags
+ binary.BigEndian.PutUint16(bytes[2:4], 4)
+ return nil
+}
+
+// SCTPCookieEcho is the SCTP Cookie Echo layer.
+type SCTPCookieEcho struct {
+ SCTPChunk
+ Cookie []byte
+}
+
+// LayerType returns gopacket.LayerTypeSCTPCookieEcho.
+func (sc *SCTPCookieEcho) LayerType() gopacket.LayerType { return LayerTypeSCTPCookieEcho }
+
+func decodeSCTPCookieEcho(data []byte, p gopacket.PacketBuilder) error {
+ chunk, err := decodeSCTPChunk(data)
+ if err != nil {
+ return err
+ }
+ sc := &SCTPCookieEcho{
+ SCTPChunk: chunk,
+ }
+ sc.Cookie = data[4:sc.Length]
+ p.AddLayer(sc)
+ return p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))
+}
+
+// SerializeTo is for gopacket.SerializableLayer.
+func (sc SCTPCookieEcho) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ length := 4 + len(sc.Cookie)
+ bytes, err := b.PrependBytes(roundUpToNearest4(length))
+ if err != nil {
+ return err
+ }
+ bytes[0] = uint8(sc.Type)
+ bytes[1] = sc.Flags
+ binary.BigEndian.PutUint16(bytes[2:4], uint16(length))
+ copy(bytes[4:], sc.Cookie)
+ return nil
+}
+
+// This struct is used by all empty SCTP chunks (currently CookieAck and
+// ShutdownComplete).
+type SCTPEmptyLayer struct {
+ SCTPChunk
+}
+
+// LayerType returns either gopacket.LayerTypeSCTPShutdownComplete or
+// LayerTypeSCTPCookieAck.
+func (sc *SCTPEmptyLayer) LayerType() gopacket.LayerType {
+ if sc.Type == SCTPChunkTypeShutdownComplete {
+ return LayerTypeSCTPShutdownComplete
+ }
+ // sc.Type == SCTPChunkTypeCookieAck
+ return LayerTypeSCTPCookieAck
+}
+
+func decodeSCTPEmptyLayer(data []byte, p gopacket.PacketBuilder) error {
+ chunk, err := decodeSCTPChunk(data)
+ if err != nil {
+ return err
+ }
+ sc := &SCTPEmptyLayer{
+ SCTPChunk: chunk,
+ }
+ p.AddLayer(sc)
+ return p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))
+}
+
+// SerializeTo is for gopacket.SerializableLayer.
+func (sc SCTPEmptyLayer) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ bytes, err := b.PrependBytes(4)
+ if err != nil {
+ return err
+ }
+ bytes[0] = uint8(sc.Type)
+ bytes[1] = sc.Flags
+ binary.BigEndian.PutUint16(bytes[2:4], 4)
+ return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/sflow.go b/vendor/github.com/google/gopacket/layers/sflow.go
new file mode 100644
index 0000000..55ce31e
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/sflow.go
@@ -0,0 +1,2187 @@
+// Copyright 2014 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+/*
+This layer decodes SFlow version 5 datagrams.
+
+The specification can be found here: http://sflow.org/sflow_version_5.txt
+
+Additional developer information about sflow can be found at:
+http://sflow.org/developers/specifications.php
+
+And SFlow in general:
+http://sflow.org/index.php
+
+Two forms of sample data are defined: compact and expanded. The
+Specification has this to say:
+
+ Compact and expand forms of counter and flow samples are defined.
+ An agent must not mix compact/expanded encodings. If an agent
+ will never use ifIndex numbers >= 2^24 then it must use compact
+ encodings for all interfaces. Otherwise the expanded formats must
+ be used for all interfaces.
+
+This decoder only supports the compact form, because that is the only
+one for which data was avaialble.
+
+The datagram is composed of one or more samples of type flow or counter,
+and each sample is composed of one or more records describing the sample.
+A sample is a single instance of sampled inforamtion, and each record in
+the sample gives additional / supplimentary information about the sample.
+
+The following sample record types are supported:
+
+ Raw Packet Header
+ opaque = flow_data; enterprise = 0; format = 1
+
+ Extended Switch Data
+ opaque = flow_data; enterprise = 0; format = 1001
+
+ Extended Router Data
+ opaque = flow_data; enterprise = 0; format = 1002
+
+ Extended Gateway Data
+ opaque = flow_data; enterprise = 0; format = 1003
+
+ Extended User Data
+ opaque = flow_data; enterprise = 0; format = 1004
+
+ Extended URL Data
+ opaque = flow_data; enterprise = 0; format = 1005
+
+The following types of counter records are supported:
+
+ Generic Interface Counters - see RFC 2233
+ opaque = counter_data; enterprise = 0; format = 1
+
+ Ethernet Interface Counters - see RFC 2358
+ opaque = counter_data; enterprise = 0; format = 2
+
+SFlow is encoded using XDR (RFC4506). There are a few places
+where the standard 4-byte fields are partitioned into two
+bitfields of different lengths. I'm not sure why the designers
+chose to pack together two values like this in some places, and
+in others they use the entire 4-byte value to store a number that
+will never be more than a few bits. In any case, there are a couple
+of types defined to handle the decoding of these bitfields, and
+that's why they're there. */
+
+package layers
+
+import (
+ "encoding/binary"
+ "errors"
+ "fmt"
+ "net"
+
+ "github.com/google/gopacket"
+)
+
+// SFlowRecord holds both flow sample records and counter sample records.
+// A Record is the structure that actually holds the sampled data
+// and / or counters.
+type SFlowRecord interface {
+}
+
+// SFlowDataSource encodes a 2-bit SFlowSourceFormat in its most significant
+// 2 bits, and an SFlowSourceValue in its least significant 30 bits.
+// These types and values define the meaning of the inteface information
+// presented in the sample metadata.
+type SFlowDataSource int32
+
+func (sdc SFlowDataSource) decode() (SFlowSourceFormat, SFlowSourceValue) {
+ leftField := sdc >> 30
+ rightField := uint32(0x3FFFFFFF) & uint32(sdc)
+ return SFlowSourceFormat(leftField), SFlowSourceValue(rightField)
+}
+
+type SFlowDataSourceExpanded struct {
+ SourceIDClass SFlowSourceFormat
+ SourceIDIndex SFlowSourceValue
+}
+
+func (sdce SFlowDataSourceExpanded) decode() (SFlowSourceFormat, SFlowSourceValue) {
+ leftField := sdce.SourceIDClass >> 30
+ rightField := uint32(0x3FFFFFFF) & uint32(sdce.SourceIDIndex)
+ return SFlowSourceFormat(leftField), SFlowSourceValue(rightField)
+}
+
+type SFlowSourceFormat uint32
+
+type SFlowSourceValue uint32
+
+const (
+ SFlowTypeSingleInterface SFlowSourceFormat = 0
+ SFlowTypePacketDiscarded SFlowSourceFormat = 1
+ SFlowTypeMultipleDestinations SFlowSourceFormat = 2
+)
+
+func (sdf SFlowSourceFormat) String() string {
+ switch sdf {
+ case SFlowTypeSingleInterface:
+ return "Single Interface"
+ case SFlowTypePacketDiscarded:
+ return "Packet Discarded"
+ case SFlowTypeMultipleDestinations:
+ return "Multiple Destinations"
+ default:
+ return "UNKNOWN"
+ }
+}
+
+func decodeSFlow(data []byte, p gopacket.PacketBuilder) error {
+ s := &SFlowDatagram{}
+ err := s.DecodeFromBytes(data, p)
+ if err != nil {
+ return err
+ }
+ p.AddLayer(s)
+ p.SetApplicationLayer(s)
+ return nil
+}
+
+// SFlowDatagram is the outermost container which holds some basic information
+// about the reporting agent, and holds at least one sample record
+type SFlowDatagram struct {
+ BaseLayer
+
+ DatagramVersion uint32
+ AgentAddress net.IP
+ SubAgentID uint32
+ SequenceNumber uint32
+ AgentUptime uint32
+ SampleCount uint32
+ FlowSamples []SFlowFlowSample
+ CounterSamples []SFlowCounterSample
+}
+
+// An SFlow datagram's outer container has the following
+// structure:
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int sFlow version (2|4|5) |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int IP version of the Agent (1=v4|2=v6) |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// / Agent IP address (v4=4byte|v6=16byte) /
+// / /
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int sub agent id |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int datagram sequence number |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int switch uptime in ms |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int n samples in datagram |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// / n samples /
+// / /
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+// SFlowDataFormat encodes the EnterpriseID in the most
+// significant 12 bits, and the SampleType in the least significant
+// 20 bits.
+type SFlowDataFormat uint32
+
+func (sdf SFlowDataFormat) decode() (SFlowEnterpriseID, SFlowSampleType) {
+ leftField := sdf >> 12
+ rightField := uint32(0xFFF) & uint32(sdf)
+ return SFlowEnterpriseID(leftField), SFlowSampleType(rightField)
+}
+
+// SFlowEnterpriseID is used to differentiate between the
+// official SFlow standard, and other, vendor-specific
+// types of flow data. (Similiar to SNMP's enterprise MIB
+// OIDs) Only the office SFlow Enterprise ID is decoded
+// here.
+type SFlowEnterpriseID uint32
+
+const (
+ SFlowStandard SFlowEnterpriseID = 0
+)
+
+func (eid SFlowEnterpriseID) String() string {
+ switch eid {
+ case SFlowStandard:
+ return "Standard SFlow"
+ default:
+ return ""
+ }
+}
+
+func (eid SFlowEnterpriseID) GetType() SFlowEnterpriseID {
+ return SFlowStandard
+}
+
+// SFlowSampleType specifies the type of sample. Only flow samples
+// and counter samples are supported
+type SFlowSampleType uint32
+
+const (
+ SFlowTypeFlowSample SFlowSampleType = 1
+ SFlowTypeCounterSample SFlowSampleType = 2
+ SFlowTypeExpandedFlowSample SFlowSampleType = 3
+ SFlowTypeExpandedCounterSample SFlowSampleType = 4
+)
+
+func (st SFlowSampleType) GetType() SFlowSampleType {
+ switch st {
+ case SFlowTypeFlowSample:
+ return SFlowTypeFlowSample
+ case SFlowTypeCounterSample:
+ return SFlowTypeCounterSample
+ case SFlowTypeExpandedFlowSample:
+ return SFlowTypeExpandedFlowSample
+ case SFlowTypeExpandedCounterSample:
+ return SFlowTypeExpandedCounterSample
+ default:
+ panic("Invalid Sample Type")
+ }
+}
+
+func (st SFlowSampleType) String() string {
+ switch st {
+ case SFlowTypeFlowSample:
+ return "Flow Sample"
+ case SFlowTypeCounterSample:
+ return "Counter Sample"
+ case SFlowTypeExpandedFlowSample:
+ return "Expanded Flow Sample"
+ case SFlowTypeExpandedCounterSample:
+ return "Expanded Counter Sample"
+ default:
+ return ""
+ }
+}
+
+func (s *SFlowDatagram) LayerType() gopacket.LayerType { return LayerTypeSFlow }
+
+func (d *SFlowDatagram) Payload() []byte { return nil }
+
+func (d *SFlowDatagram) CanDecode() gopacket.LayerClass { return LayerTypeSFlow }
+
+func (d *SFlowDatagram) NextLayerType() gopacket.LayerType { return gopacket.LayerTypePayload }
+
+// SFlowIPType determines what form the IP address being decoded will
+// take. This is an XDR union type allowing for both IPv4 and IPv6
+type SFlowIPType uint32
+
+const (
+ SFlowIPv4 SFlowIPType = 1
+ SFlowIPv6 SFlowIPType = 2
+)
+
+func (s SFlowIPType) String() string {
+ switch s {
+ case SFlowIPv4:
+ return "IPv4"
+ case SFlowIPv6:
+ return "IPv6"
+ default:
+ return ""
+ }
+}
+
+func (s SFlowIPType) Length() int {
+ switch s {
+ case SFlowIPv4:
+ return 4
+ case SFlowIPv6:
+ return 16
+ default:
+ return 0
+ }
+}
+
+func (s *SFlowDatagram) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ var agentAddressType SFlowIPType
+
+ data, s.DatagramVersion = data[4:], binary.BigEndian.Uint32(data[:4])
+ data, agentAddressType = data[4:], SFlowIPType(binary.BigEndian.Uint32(data[:4]))
+ data, s.AgentAddress = data[agentAddressType.Length():], data[:agentAddressType.Length()]
+ data, s.SubAgentID = data[4:], binary.BigEndian.Uint32(data[:4])
+ data, s.SequenceNumber = data[4:], binary.BigEndian.Uint32(data[:4])
+ data, s.AgentUptime = data[4:], binary.BigEndian.Uint32(data[:4])
+ data, s.SampleCount = data[4:], binary.BigEndian.Uint32(data[:4])
+
+ if s.SampleCount < 1 {
+ return fmt.Errorf("SFlow Datagram has invalid sample length: %d", s.SampleCount)
+ }
+ for i := uint32(0); i < s.SampleCount; i++ {
+ sdf := SFlowDataFormat(binary.BigEndian.Uint32(data[:4]))
+ _, sampleType := sdf.decode()
+ switch sampleType {
+ case SFlowTypeFlowSample:
+ if flowSample, err := decodeFlowSample(&data, false); err == nil {
+ s.FlowSamples = append(s.FlowSamples, flowSample)
+ } else {
+ return err
+ }
+ case SFlowTypeCounterSample:
+ if counterSample, err := decodeCounterSample(&data, false); err == nil {
+ s.CounterSamples = append(s.CounterSamples, counterSample)
+ } else {
+ return err
+ }
+ case SFlowTypeExpandedFlowSample:
+ if flowSample, err := decodeFlowSample(&data, true); err == nil {
+ s.FlowSamples = append(s.FlowSamples, flowSample)
+ } else {
+ return err
+ }
+ case SFlowTypeExpandedCounterSample:
+ if counterSample, err := decodeCounterSample(&data, true); err == nil {
+ s.CounterSamples = append(s.CounterSamples, counterSample)
+ } else {
+ return err
+ }
+
+ default:
+ return fmt.Errorf("Unsupported SFlow sample type %d", sampleType)
+ }
+ }
+ return nil
+}
+
+// SFlowFlowSample represents a sampled packet and contains
+// one or more records describing the packet
+type SFlowFlowSample struct {
+ EnterpriseID SFlowEnterpriseID
+ Format SFlowSampleType
+ SampleLength uint32
+ SequenceNumber uint32
+ SourceIDClass SFlowSourceFormat
+ SourceIDIndex SFlowSourceValue
+ SamplingRate uint32
+ SamplePool uint32
+ Dropped uint32
+ InputInterfaceFormat uint32
+ InputInterface uint32
+ OutputInterfaceFormat uint32
+ OutputInterface uint32
+ RecordCount uint32
+ Records []SFlowRecord
+}
+
+// Flow samples have the following structure. Note
+// the bit fields to encode the Enterprise ID and the
+// Flow record format: type 1
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | 20 bit Interprise (0) |12 bit format |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | sample length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int sample sequence number |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// |id type | src id index value |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int sampling rate |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int sample pool |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int drops |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int input ifIndex |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int output ifIndex |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int number of records |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// / flow records /
+// / /
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+// Flow samples have the following structure.
+// Flow record format: type 3
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | 20 bit Interprise (0) |12 bit format |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | sample length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int sample sequence number |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int src id type |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int src id index value |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int sampling rate |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int sample pool |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int drops |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int input interface format |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int input interface value |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int output interface format |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int output interface value |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int number of records |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// / flow records /
+// / /
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+type SFlowFlowDataFormat uint32
+
+func (fdf SFlowFlowDataFormat) decode() (SFlowEnterpriseID, SFlowFlowRecordType) {
+ leftField := fdf >> 12
+ rightField := uint32(0xFFF) & uint32(fdf)
+ return SFlowEnterpriseID(leftField), SFlowFlowRecordType(rightField)
+}
+
+func (fs SFlowFlowSample) GetRecords() []SFlowRecord {
+ return fs.Records
+}
+
+func (fs SFlowFlowSample) GetType() SFlowSampleType {
+ return SFlowTypeFlowSample
+}
+
+func skipRecord(data *[]byte) {
+ recordLength := int(binary.BigEndian.Uint32((*data)[4:]))
+ *data = (*data)[(recordLength+((4-recordLength)%4))+8:]
+}
+
+func decodeFlowSample(data *[]byte, expanded bool) (SFlowFlowSample, error) {
+ s := SFlowFlowSample{}
+ var sdf SFlowDataFormat
+ *data, sdf = (*data)[4:], SFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ var sdc SFlowDataSource
+
+ s.EnterpriseID, s.Format = sdf.decode()
+ *data, s.SampleLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, s.SequenceNumber = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ if expanded {
+ *data, s.SourceIDClass = (*data)[4:], SFlowSourceFormat(binary.BigEndian.Uint32((*data)[:4]))
+ *data, s.SourceIDIndex = (*data)[4:], SFlowSourceValue(binary.BigEndian.Uint32((*data)[:4]))
+ } else {
+ *data, sdc = (*data)[4:], SFlowDataSource(binary.BigEndian.Uint32((*data)[:4]))
+ s.SourceIDClass, s.SourceIDIndex = sdc.decode()
+ }
+ *data, s.SamplingRate = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, s.SamplePool = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, s.Dropped = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+
+ if expanded {
+ *data, s.InputInterfaceFormat = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, s.InputInterface = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, s.OutputInterfaceFormat = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, s.OutputInterface = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ } else {
+ *data, s.InputInterface = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, s.OutputInterface = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ }
+ *data, s.RecordCount = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+
+ for i := uint32(0); i < s.RecordCount; i++ {
+ rdf := SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ _, flowRecordType := rdf.decode()
+
+ switch flowRecordType {
+ case SFlowTypeRawPacketFlow:
+ if record, err := decodeRawPacketFlowRecord(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ case SFlowTypeExtendedUserFlow:
+ if record, err := decodeExtendedUserFlow(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ case SFlowTypeExtendedUrlFlow:
+ if record, err := decodeExtendedURLRecord(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ case SFlowTypeExtendedSwitchFlow:
+ if record, err := decodeExtendedSwitchFlowRecord(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ case SFlowTypeExtendedRouterFlow:
+ if record, err := decodeExtendedRouterFlowRecord(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ case SFlowTypeExtendedGatewayFlow:
+ if record, err := decodeExtendedGatewayFlowRecord(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ case SFlowTypeEthernetFrameFlow:
+ // TODO
+ skipRecord(data)
+ return s, errors.New("skipping TypeEthernetFrameFlow")
+ case SFlowTypeIpv4Flow:
+ if record, err := decodeSFlowIpv4Record(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ case SFlowTypeIpv6Flow:
+ if record, err := decodeSFlowIpv6Record(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ case SFlowTypeExtendedMlpsFlow:
+ // TODO
+ skipRecord(data)
+ return s, errors.New("skipping TypeExtendedMlpsFlow")
+ case SFlowTypeExtendedNatFlow:
+ // TODO
+ skipRecord(data)
+ return s, errors.New("skipping TypeExtendedNatFlow")
+ case SFlowTypeExtendedMlpsTunnelFlow:
+ // TODO
+ skipRecord(data)
+ return s, errors.New("skipping TypeExtendedMlpsTunnelFlow")
+ case SFlowTypeExtendedMlpsVcFlow:
+ // TODO
+ skipRecord(data)
+ return s, errors.New("skipping TypeExtendedMlpsVcFlow")
+ case SFlowTypeExtendedMlpsFecFlow:
+ // TODO
+ skipRecord(data)
+ return s, errors.New("skipping TypeExtendedMlpsFecFlow")
+ case SFlowTypeExtendedMlpsLvpFecFlow:
+ // TODO
+ skipRecord(data)
+ return s, errors.New("skipping TypeExtendedMlpsLvpFecFlow")
+ case SFlowTypeExtendedVlanFlow:
+ // TODO
+ skipRecord(data)
+ return s, errors.New("skipping TypeExtendedVlanFlow")
+ case SFlowTypeExtendedIpv4TunnelEgressFlow:
+ if record, err := decodeExtendedIpv4TunnelEgress(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ case SFlowTypeExtendedIpv4TunnelIngressFlow:
+ if record, err := decodeExtendedIpv4TunnelIngress(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ case SFlowTypeExtendedIpv6TunnelEgressFlow:
+ if record, err := decodeExtendedIpv6TunnelEgress(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ case SFlowTypeExtendedIpv6TunnelIngressFlow:
+ if record, err := decodeExtendedIpv6TunnelIngress(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ case SFlowTypeExtendedDecapsulateEgressFlow:
+ if record, err := decodeExtendedDecapsulateEgress(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ case SFlowTypeExtendedDecapsulateIngressFlow:
+ if record, err := decodeExtendedDecapsulateIngress(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ case SFlowTypeExtendedVniEgressFlow:
+ if record, err := decodeExtendedVniEgress(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ case SFlowTypeExtendedVniIngressFlow:
+ if record, err := decodeExtendedVniIngress(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ default:
+ return s, fmt.Errorf("Unsupported flow record type: %d", flowRecordType)
+ }
+ }
+ return s, nil
+}
+
+// Counter samples report information about various counter
+// objects. Typically these are items like IfInOctets, or
+// CPU / Memory stats, etc. SFlow will report these at regular
+// intervals as configured on the agent. If one were sufficiently
+// industrious, this could be used to replace the typical
+// SNMP polling used for such things.
+type SFlowCounterSample struct {
+ EnterpriseID SFlowEnterpriseID
+ Format SFlowSampleType
+ SampleLength uint32
+ SequenceNumber uint32
+ SourceIDClass SFlowSourceFormat
+ SourceIDIndex SFlowSourceValue
+ RecordCount uint32
+ Records []SFlowRecord
+}
+
+// Counter samples have the following structure:
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int sample sequence number |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// |id type | src id index value |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | int number of records |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// / counter records /
+// / /
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+type SFlowCounterDataFormat uint32
+
+func (cdf SFlowCounterDataFormat) decode() (SFlowEnterpriseID, SFlowCounterRecordType) {
+ leftField := cdf >> 12
+ rightField := uint32(0xFFF) & uint32(cdf)
+ return SFlowEnterpriseID(leftField), SFlowCounterRecordType(rightField)
+}
+
+// GetRecords will return a slice of interface types
+// representing records. A type switch can be used to
+// get at the underlying SFlowCounterRecordType.
+func (cs SFlowCounterSample) GetRecords() []SFlowRecord {
+ return cs.Records
+}
+
+// GetType will report the type of sample. Only the
+// compact form of counter samples is supported
+func (cs SFlowCounterSample) GetType() SFlowSampleType {
+ return SFlowTypeCounterSample
+}
+
+type SFlowCounterRecordType uint32
+
+const (
+ SFlowTypeGenericInterfaceCounters SFlowCounterRecordType = 1
+ SFlowTypeEthernetInterfaceCounters SFlowCounterRecordType = 2
+ SFlowTypeTokenRingInterfaceCounters SFlowCounterRecordType = 3
+ SFlowType100BaseVGInterfaceCounters SFlowCounterRecordType = 4
+ SFlowTypeVLANCounters SFlowCounterRecordType = 5
+ SFlowTypeProcessorCounters SFlowCounterRecordType = 1001
+)
+
+func (cr SFlowCounterRecordType) String() string {
+ switch cr {
+ case SFlowTypeGenericInterfaceCounters:
+ return "Generic Interface Counters"
+ case SFlowTypeEthernetInterfaceCounters:
+ return "Ethernet Interface Counters"
+ case SFlowTypeTokenRingInterfaceCounters:
+ return "Token Ring Interface Counters"
+ case SFlowType100BaseVGInterfaceCounters:
+ return "100BaseVG Interface Counters"
+ case SFlowTypeVLANCounters:
+ return "VLAN Counters"
+ case SFlowTypeProcessorCounters:
+ return "Processor Counters"
+ default:
+ return ""
+
+ }
+}
+
+func decodeCounterSample(data *[]byte, expanded bool) (SFlowCounterSample, error) {
+ s := SFlowCounterSample{}
+ var sdc SFlowDataSource
+ var sdce SFlowDataSourceExpanded
+ var sdf SFlowDataFormat
+
+ *data, sdf = (*data)[4:], SFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ s.EnterpriseID, s.Format = sdf.decode()
+ *data, s.SampleLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, s.SequenceNumber = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ if expanded {
+ *data, sdce = (*data)[8:], SFlowDataSourceExpanded{SFlowSourceFormat(binary.BigEndian.Uint32((*data)[:4])), SFlowSourceValue(binary.BigEndian.Uint32((*data)[4:8]))}
+ s.SourceIDClass, s.SourceIDIndex = sdce.decode()
+ } else {
+ *data, sdc = (*data)[4:], SFlowDataSource(binary.BigEndian.Uint32((*data)[:4]))
+ s.SourceIDClass, s.SourceIDIndex = sdc.decode()
+ }
+ *data, s.RecordCount = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+
+ for i := uint32(0); i < s.RecordCount; i++ {
+ cdf := SFlowCounterDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ _, counterRecordType := cdf.decode()
+ switch counterRecordType {
+ case SFlowTypeGenericInterfaceCounters:
+ if record, err := decodeGenericInterfaceCounters(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ case SFlowTypeEthernetInterfaceCounters:
+ if record, err := decodeEthernetCounters(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ case SFlowTypeTokenRingInterfaceCounters:
+ skipRecord(data)
+ return s, errors.New("skipping TypeTokenRingInterfaceCounters")
+ case SFlowType100BaseVGInterfaceCounters:
+ skipRecord(data)
+ return s, errors.New("skipping Type100BaseVGInterfaceCounters")
+ case SFlowTypeVLANCounters:
+ skipRecord(data)
+ return s, errors.New("skipping TypeVLANCounters")
+ case SFlowTypeProcessorCounters:
+ if record, err := decodeProcessorCounters(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ default:
+ return s, fmt.Errorf("Invalid counter record type: %d", counterRecordType)
+ }
+ }
+ return s, nil
+}
+
+// SFlowBaseFlowRecord holds the fields common to all records
+// of type SFlowFlowRecordType
+type SFlowBaseFlowRecord struct {
+ EnterpriseID SFlowEnterpriseID
+ Format SFlowFlowRecordType
+ FlowDataLength uint32
+}
+
+func (bfr SFlowBaseFlowRecord) GetType() SFlowFlowRecordType {
+ return bfr.Format
+}
+
+// SFlowFlowRecordType denotes what kind of Flow Record is
+// represented. See RFC 3176
+type SFlowFlowRecordType uint32
+
+const (
+ SFlowTypeRawPacketFlow SFlowFlowRecordType = 1
+ SFlowTypeEthernetFrameFlow SFlowFlowRecordType = 2
+ SFlowTypeIpv4Flow SFlowFlowRecordType = 3
+ SFlowTypeIpv6Flow SFlowFlowRecordType = 4
+ SFlowTypeExtendedSwitchFlow SFlowFlowRecordType = 1001
+ SFlowTypeExtendedRouterFlow SFlowFlowRecordType = 1002
+ SFlowTypeExtendedGatewayFlow SFlowFlowRecordType = 1003
+ SFlowTypeExtendedUserFlow SFlowFlowRecordType = 1004
+ SFlowTypeExtendedUrlFlow SFlowFlowRecordType = 1005
+ SFlowTypeExtendedMlpsFlow SFlowFlowRecordType = 1006
+ SFlowTypeExtendedNatFlow SFlowFlowRecordType = 1007
+ SFlowTypeExtendedMlpsTunnelFlow SFlowFlowRecordType = 1008
+ SFlowTypeExtendedMlpsVcFlow SFlowFlowRecordType = 1009
+ SFlowTypeExtendedMlpsFecFlow SFlowFlowRecordType = 1010
+ SFlowTypeExtendedMlpsLvpFecFlow SFlowFlowRecordType = 1011
+ SFlowTypeExtendedVlanFlow SFlowFlowRecordType = 1012
+ SFlowTypeExtendedIpv4TunnelEgressFlow SFlowFlowRecordType = 1023
+ SFlowTypeExtendedIpv4TunnelIngressFlow SFlowFlowRecordType = 1024
+ SFlowTypeExtendedIpv6TunnelEgressFlow SFlowFlowRecordType = 1025
+ SFlowTypeExtendedIpv6TunnelIngressFlow SFlowFlowRecordType = 1026
+ SFlowTypeExtendedDecapsulateEgressFlow SFlowFlowRecordType = 1027
+ SFlowTypeExtendedDecapsulateIngressFlow SFlowFlowRecordType = 1028
+ SFlowTypeExtendedVniEgressFlow SFlowFlowRecordType = 1029
+ SFlowTypeExtendedVniIngressFlow SFlowFlowRecordType = 1030
+)
+
+func (rt SFlowFlowRecordType) String() string {
+ switch rt {
+ case SFlowTypeRawPacketFlow:
+ return "Raw Packet Flow Record"
+ case SFlowTypeEthernetFrameFlow:
+ return "Ethernet Frame Flow Record"
+ case SFlowTypeIpv4Flow:
+ return "IPv4 Flow Record"
+ case SFlowTypeIpv6Flow:
+ return "IPv6 Flow Record"
+ case SFlowTypeExtendedSwitchFlow:
+ return "Extended Switch Flow Record"
+ case SFlowTypeExtendedRouterFlow:
+ return "Extended Router Flow Record"
+ case SFlowTypeExtendedGatewayFlow:
+ return "Extended Gateway Flow Record"
+ case SFlowTypeExtendedUserFlow:
+ return "Extended User Flow Record"
+ case SFlowTypeExtendedUrlFlow:
+ return "Extended URL Flow Record"
+ case SFlowTypeExtendedMlpsFlow:
+ return "Extended MPLS Flow Record"
+ case SFlowTypeExtendedNatFlow:
+ return "Extended NAT Flow Record"
+ case SFlowTypeExtendedMlpsTunnelFlow:
+ return "Extended MPLS Tunnel Flow Record"
+ case SFlowTypeExtendedMlpsVcFlow:
+ return "Extended MPLS VC Flow Record"
+ case SFlowTypeExtendedMlpsFecFlow:
+ return "Extended MPLS FEC Flow Record"
+ case SFlowTypeExtendedMlpsLvpFecFlow:
+ return "Extended MPLS LVP FEC Flow Record"
+ case SFlowTypeExtendedVlanFlow:
+ return "Extended VLAN Flow Record"
+ case SFlowTypeExtendedIpv4TunnelEgressFlow:
+ return "Extended IPv4 Tunnel Egress Record"
+ case SFlowTypeExtendedIpv4TunnelIngressFlow:
+ return "Extended IPv4 Tunnel Ingress Record"
+ case SFlowTypeExtendedIpv6TunnelEgressFlow:
+ return "Extended IPv6 Tunnel Egress Record"
+ case SFlowTypeExtendedIpv6TunnelIngressFlow:
+ return "Extended IPv6 Tunnel Ingress Record"
+ case SFlowTypeExtendedDecapsulateEgressFlow:
+ return "Extended Decapsulate Egress Record"
+ case SFlowTypeExtendedDecapsulateIngressFlow:
+ return "Extended Decapsulate Ingress Record"
+ case SFlowTypeExtendedVniEgressFlow:
+ return "Extended VNI Ingress Record"
+ case SFlowTypeExtendedVniIngressFlow:
+ return "Extended VNI Ingress Record"
+ default:
+ return ""
+ }
+}
+
+// SFlowRawPacketFlowRecords hold information about a sampled
+// packet grabbed as it transited the agent. This is
+// perhaps the most useful and interesting record type,
+// as it holds the headers of the sampled packet and
+// can be used to build up a complete picture of the
+// traffic patterns on a network.
+//
+// The raw packet header is sent back into gopacket for
+// decoding, and the resulting gopackt.Packet is stored
+// in the Header member
+type SFlowRawPacketFlowRecord struct {
+ SFlowBaseFlowRecord
+ HeaderProtocol SFlowRawHeaderProtocol
+ FrameLength uint32
+ PayloadRemoved uint32
+ HeaderLength uint32
+ Header gopacket.Packet
+}
+
+// Raw packet record types have the following structure:
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | 20 bit Interprise (0) |12 bit format |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | record length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Header Protocol |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Frame Length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Payload Removed |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Header Length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// \ Header \
+// \ \
+// \ \
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+type SFlowRawHeaderProtocol uint32
+
+const (
+ SFlowProtoEthernet SFlowRawHeaderProtocol = 1
+ SFlowProtoISO88024 SFlowRawHeaderProtocol = 2
+ SFlowProtoISO88025 SFlowRawHeaderProtocol = 3
+ SFlowProtoFDDI SFlowRawHeaderProtocol = 4
+ SFlowProtoFrameRelay SFlowRawHeaderProtocol = 5
+ SFlowProtoX25 SFlowRawHeaderProtocol = 6
+ SFlowProtoPPP SFlowRawHeaderProtocol = 7
+ SFlowProtoSMDS SFlowRawHeaderProtocol = 8
+ SFlowProtoAAL5 SFlowRawHeaderProtocol = 9
+ SFlowProtoAAL5_IP SFlowRawHeaderProtocol = 10 /* e.g. Cisco AAL5 mux */
+ SFlowProtoIPv4 SFlowRawHeaderProtocol = 11
+ SFlowProtoIPv6 SFlowRawHeaderProtocol = 12
+ SFlowProtoMPLS SFlowRawHeaderProtocol = 13
+ SFlowProtoPOS SFlowRawHeaderProtocol = 14 /* RFC 1662, 2615 */
+)
+
+func (sfhp SFlowRawHeaderProtocol) String() string {
+ switch sfhp {
+ case SFlowProtoEthernet:
+ return "ETHERNET-ISO88023"
+ case SFlowProtoISO88024:
+ return "ISO88024-TOKENBUS"
+ case SFlowProtoISO88025:
+ return "ISO88025-TOKENRING"
+ case SFlowProtoFDDI:
+ return "FDDI"
+ case SFlowProtoFrameRelay:
+ return "FRAME-RELAY"
+ case SFlowProtoX25:
+ return "X25"
+ case SFlowProtoPPP:
+ return "PPP"
+ case SFlowProtoSMDS:
+ return "SMDS"
+ case SFlowProtoAAL5:
+ return "AAL5"
+ case SFlowProtoAAL5_IP:
+ return "AAL5-IP"
+ case SFlowProtoIPv4:
+ return "IPv4"
+ case SFlowProtoIPv6:
+ return "IPv6"
+ case SFlowProtoMPLS:
+ return "MPLS"
+ case SFlowProtoPOS:
+ return "POS"
+ }
+ return "UNKNOWN"
+}
+
+func decodeRawPacketFlowRecord(data *[]byte) (SFlowRawPacketFlowRecord, error) {
+ rec := SFlowRawPacketFlowRecord{}
+ header := []byte{}
+ var fdf SFlowFlowDataFormat
+
+ *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ rec.EnterpriseID, rec.Format = fdf.decode()
+ *data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, rec.HeaderProtocol = (*data)[4:], SFlowRawHeaderProtocol(binary.BigEndian.Uint32((*data)[:4]))
+ *data, rec.FrameLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, rec.PayloadRemoved = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, rec.HeaderLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ headerLenWithPadding := int(rec.HeaderLength + ((4 - rec.HeaderLength) % 4))
+ *data, header = (*data)[headerLenWithPadding:], (*data)[:headerLenWithPadding]
+ rec.Header = gopacket.NewPacket(header, LayerTypeEthernet, gopacket.Default)
+ return rec, nil
+}
+
+// SFlowExtendedSwitchFlowRecord give additional information
+// about the sampled packet if it's available. It's mainly
+// useful for getting at the incoming and outgoing VLANs
+// An agent may or may not provide this information.
+type SFlowExtendedSwitchFlowRecord struct {
+ SFlowBaseFlowRecord
+ IncomingVLAN uint32
+ IncomingVLANPriority uint32
+ OutgoingVLAN uint32
+ OutgoingVLANPriority uint32
+}
+
+// Extended switch records have the following structure:
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | 20 bit Interprise (0) |12 bit format |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | record length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Incoming VLAN |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Incoming VLAN Priority |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Outgoing VLAN |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Outgoing VLAN Priority |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+func decodeExtendedSwitchFlowRecord(data *[]byte) (SFlowExtendedSwitchFlowRecord, error) {
+ es := SFlowExtendedSwitchFlowRecord{}
+ var fdf SFlowFlowDataFormat
+
+ *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ es.EnterpriseID, es.Format = fdf.decode()
+ *data, es.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, es.IncomingVLAN = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, es.IncomingVLANPriority = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, es.OutgoingVLAN = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, es.OutgoingVLANPriority = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ return es, nil
+}
+
+// SFlowExtendedRouterFlowRecord gives additional information
+// about the layer 3 routing information used to forward
+// the packet
+type SFlowExtendedRouterFlowRecord struct {
+ SFlowBaseFlowRecord
+ NextHop net.IP
+ NextHopSourceMask uint32
+ NextHopDestinationMask uint32
+}
+
+// Extended router records have the following structure:
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | 20 bit Interprise (0) |12 bit format |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | record length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | IP version of next hop router (1=v4|2=v6) |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// / Next Hop address (v4=4byte|v6=16byte) /
+// / /
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Next Hop Source Mask |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Next Hop Destination Mask |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+func decodeExtendedRouterFlowRecord(data *[]byte) (SFlowExtendedRouterFlowRecord, error) {
+ er := SFlowExtendedRouterFlowRecord{}
+ var fdf SFlowFlowDataFormat
+ var extendedRouterAddressType SFlowIPType
+
+ *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ er.EnterpriseID, er.Format = fdf.decode()
+ *data, er.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, extendedRouterAddressType = (*data)[4:], SFlowIPType(binary.BigEndian.Uint32((*data)[:4]))
+ *data, er.NextHop = (*data)[extendedRouterAddressType.Length():], (*data)[:extendedRouterAddressType.Length()]
+ *data, er.NextHopSourceMask = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, er.NextHopDestinationMask = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ return er, nil
+}
+
+// SFlowExtendedGatewayFlowRecord describes information treasured by
+// nework engineers everywhere: AS path information listing which
+// BGP peer sent the packet, and various other BGP related info.
+// This information is vital because it gives a picture of how much
+// traffic is being sent from / received by various BGP peers.
+
+// Extended gateway records have the following structure:
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | 20 bit Interprise (0) |12 bit format |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | record length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | IP version of next hop router (1=v4|2=v6) |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// / Next Hop address (v4=4byte|v6=16byte) /
+// / /
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | AS |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Source AS |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Peer AS |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | AS Path Count |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// / AS Path / Sequence /
+// / /
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// / Communities /
+// / /
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Local Pref |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+// AS Path / Sequence:
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | AS Source Type (Path=1 / Sequence=2) |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Path / Sequence length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// / Path / Sequence Members /
+// / /
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+// Communities:
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | communitiy length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// / communitiy Members /
+// / /
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+type SFlowExtendedGatewayFlowRecord struct {
+ SFlowBaseFlowRecord
+ NextHop net.IP
+ AS uint32
+ SourceAS uint32
+ PeerAS uint32
+ ASPathCount uint32
+ ASPath []SFlowASDestination
+ Communities []uint32
+ LocalPref uint32
+}
+
+type SFlowASPathType uint32
+
+const (
+ SFlowASSet SFlowASPathType = 1
+ SFlowASSequence SFlowASPathType = 2
+)
+
+func (apt SFlowASPathType) String() string {
+ switch apt {
+ case SFlowASSet:
+ return "AS Set"
+ case SFlowASSequence:
+ return "AS Sequence"
+ default:
+ return ""
+ }
+}
+
+type SFlowASDestination struct {
+ Type SFlowASPathType
+ Count uint32
+ Members []uint32
+}
+
+func (asd SFlowASDestination) String() string {
+ switch asd.Type {
+ case SFlowASSet:
+ return fmt.Sprint("AS Set:", asd.Members)
+ case SFlowASSequence:
+ return fmt.Sprint("AS Sequence:", asd.Members)
+ default:
+ return ""
+ }
+}
+
+func (ad *SFlowASDestination) decodePath(data *[]byte) {
+ *data, ad.Type = (*data)[4:], SFlowASPathType(binary.BigEndian.Uint32((*data)[:4]))
+ *data, ad.Count = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ ad.Members = make([]uint32, ad.Count)
+ for i := uint32(0); i < ad.Count; i++ {
+ var member uint32
+ *data, member = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ ad.Members[i] = member
+ }
+}
+
+func decodeExtendedGatewayFlowRecord(data *[]byte) (SFlowExtendedGatewayFlowRecord, error) {
+ eg := SFlowExtendedGatewayFlowRecord{}
+ var fdf SFlowFlowDataFormat
+ var extendedGatewayAddressType SFlowIPType
+ var communitiesLength uint32
+ var community uint32
+
+ *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ eg.EnterpriseID, eg.Format = fdf.decode()
+ *data, eg.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, extendedGatewayAddressType = (*data)[4:], SFlowIPType(binary.BigEndian.Uint32((*data)[:4]))
+ *data, eg.NextHop = (*data)[extendedGatewayAddressType.Length():], (*data)[:extendedGatewayAddressType.Length()]
+ *data, eg.AS = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, eg.SourceAS = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, eg.PeerAS = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, eg.ASPathCount = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ for i := uint32(0); i < eg.ASPathCount; i++ {
+ asPath := SFlowASDestination{}
+ asPath.decodePath(data)
+ eg.ASPath = append(eg.ASPath, asPath)
+ }
+ *data, communitiesLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ eg.Communities = make([]uint32, communitiesLength)
+ for j := uint32(0); j < communitiesLength; j++ {
+ *data, community = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ eg.Communities[j] = community
+ }
+ *data, eg.LocalPref = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ return eg, nil
+}
+
+// **************************************************
+// Extended URL Flow Record
+// **************************************************
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | 20 bit Interprise (0) |12 bit format |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | record length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | direction |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | URL |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Host |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+type SFlowURLDirection uint32
+
+const (
+ SFlowURLsrc SFlowURLDirection = 1
+ SFlowURLdst SFlowURLDirection = 2
+)
+
+func (urld SFlowURLDirection) String() string {
+ switch urld {
+ case SFlowURLsrc:
+ return "Source address is the server"
+ case SFlowURLdst:
+ return "Destination address is the server"
+ default:
+ return ""
+ }
+}
+
+type SFlowExtendedURLRecord struct {
+ SFlowBaseFlowRecord
+ Direction SFlowURLDirection
+ URL string
+ Host string
+}
+
+func decodeExtendedURLRecord(data *[]byte) (SFlowExtendedURLRecord, error) {
+ eur := SFlowExtendedURLRecord{}
+ var fdf SFlowFlowDataFormat
+ var urlLen uint32
+ var urlLenWithPad int
+ var hostLen uint32
+ var hostLenWithPad int
+ var urlBytes []byte
+ var hostBytes []byte
+
+ *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ eur.EnterpriseID, eur.Format = fdf.decode()
+ *data, eur.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, eur.Direction = (*data)[4:], SFlowURLDirection(binary.BigEndian.Uint32((*data)[:4]))
+ *data, urlLen = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ urlLenWithPad = int(urlLen + ((4 - urlLen) % 4))
+ *data, urlBytes = (*data)[urlLenWithPad:], (*data)[:urlLenWithPad]
+ eur.URL = string(urlBytes[:urlLen])
+ *data, hostLen = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ hostLenWithPad = int(hostLen + ((4 - hostLen) % 4))
+ *data, hostBytes = (*data)[hostLenWithPad:], (*data)[:hostLenWithPad]
+ eur.Host = string(hostBytes[:hostLen])
+ return eur, nil
+}
+
+// **************************************************
+// Extended User Flow Record
+// **************************************************
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | 20 bit Interprise (0) |12 bit format |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | record length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Source Character Set |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Source User Id |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Destination Character Set |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Destination User ID |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+type SFlowExtendedUserFlow struct {
+ SFlowBaseFlowRecord
+ SourceCharSet SFlowCharSet
+ SourceUserID string
+ DestinationCharSet SFlowCharSet
+ DestinationUserID string
+}
+
+type SFlowCharSet uint32
+
+const (
+ SFlowCSunknown SFlowCharSet = 2
+ SFlowCSASCII SFlowCharSet = 3
+ SFlowCSISOLatin1 SFlowCharSet = 4
+ SFlowCSISOLatin2 SFlowCharSet = 5
+ SFlowCSISOLatin3 SFlowCharSet = 6
+ SFlowCSISOLatin4 SFlowCharSet = 7
+ SFlowCSISOLatinCyrillic SFlowCharSet = 8
+ SFlowCSISOLatinArabic SFlowCharSet = 9
+ SFlowCSISOLatinGreek SFlowCharSet = 10
+ SFlowCSISOLatinHebrew SFlowCharSet = 11
+ SFlowCSISOLatin5 SFlowCharSet = 12
+ SFlowCSISOLatin6 SFlowCharSet = 13
+ SFlowCSISOTextComm SFlowCharSet = 14
+ SFlowCSHalfWidthKatakana SFlowCharSet = 15
+ SFlowCSJISEncoding SFlowCharSet = 16
+ SFlowCSShiftJIS SFlowCharSet = 17
+ SFlowCSEUCPkdFmtJapanese SFlowCharSet = 18
+ SFlowCSEUCFixWidJapanese SFlowCharSet = 19
+ SFlowCSISO4UnitedKingdom SFlowCharSet = 20
+ SFlowCSISO11SwedishForNames SFlowCharSet = 21
+ SFlowCSISO15Italian SFlowCharSet = 22
+ SFlowCSISO17Spanish SFlowCharSet = 23
+ SFlowCSISO21German SFlowCharSet = 24
+ SFlowCSISO60DanishNorwegian SFlowCharSet = 25
+ SFlowCSISO69French SFlowCharSet = 26
+ SFlowCSISO10646UTF1 SFlowCharSet = 27
+ SFlowCSISO646basic1983 SFlowCharSet = 28
+ SFlowCSINVARIANT SFlowCharSet = 29
+ SFlowCSISO2IntlRefVersion SFlowCharSet = 30
+ SFlowCSNATSSEFI SFlowCharSet = 31
+ SFlowCSNATSSEFIADD SFlowCharSet = 32
+ SFlowCSNATSDANO SFlowCharSet = 33
+ SFlowCSNATSDANOADD SFlowCharSet = 34
+ SFlowCSISO10Swedish SFlowCharSet = 35
+ SFlowCSKSC56011987 SFlowCharSet = 36
+ SFlowCSISO2022KR SFlowCharSet = 37
+ SFlowCSEUCKR SFlowCharSet = 38
+ SFlowCSISO2022JP SFlowCharSet = 39
+ SFlowCSISO2022JP2 SFlowCharSet = 40
+ SFlowCSISO13JISC6220jp SFlowCharSet = 41
+ SFlowCSISO14JISC6220ro SFlowCharSet = 42
+ SFlowCSISO16Portuguese SFlowCharSet = 43
+ SFlowCSISO18Greek7Old SFlowCharSet = 44
+ SFlowCSISO19LatinGreek SFlowCharSet = 45
+ SFlowCSISO25French SFlowCharSet = 46
+ SFlowCSISO27LatinGreek1 SFlowCharSet = 47
+ SFlowCSISO5427Cyrillic SFlowCharSet = 48
+ SFlowCSISO42JISC62261978 SFlowCharSet = 49
+ SFlowCSISO47BSViewdata SFlowCharSet = 50
+ SFlowCSISO49INIS SFlowCharSet = 51
+ SFlowCSISO50INIS8 SFlowCharSet = 52
+ SFlowCSISO51INISCyrillic SFlowCharSet = 53
+ SFlowCSISO54271981 SFlowCharSet = 54
+ SFlowCSISO5428Greek SFlowCharSet = 55
+ SFlowCSISO57GB1988 SFlowCharSet = 56
+ SFlowCSISO58GB231280 SFlowCharSet = 57
+ SFlowCSISO61Norwegian2 SFlowCharSet = 58
+ SFlowCSISO70VideotexSupp1 SFlowCharSet = 59
+ SFlowCSISO84Portuguese2 SFlowCharSet = 60
+ SFlowCSISO85Spanish2 SFlowCharSet = 61
+ SFlowCSISO86Hungarian SFlowCharSet = 62
+ SFlowCSISO87JISX0208 SFlowCharSet = 63
+ SFlowCSISO88Greek7 SFlowCharSet = 64
+ SFlowCSISO89ASMO449 SFlowCharSet = 65
+ SFlowCSISO90 SFlowCharSet = 66
+ SFlowCSISO91JISC62291984a SFlowCharSet = 67
+ SFlowCSISO92JISC62991984b SFlowCharSet = 68
+ SFlowCSISO93JIS62291984badd SFlowCharSet = 69
+ SFlowCSISO94JIS62291984hand SFlowCharSet = 70
+ SFlowCSISO95JIS62291984handadd SFlowCharSet = 71
+ SFlowCSISO96JISC62291984kana SFlowCharSet = 72
+ SFlowCSISO2033 SFlowCharSet = 73
+ SFlowCSISO99NAPLPS SFlowCharSet = 74
+ SFlowCSISO102T617bit SFlowCharSet = 75
+ SFlowCSISO103T618bit SFlowCharSet = 76
+ SFlowCSISO111ECMACyrillic SFlowCharSet = 77
+ SFlowCSa71 SFlowCharSet = 78
+ SFlowCSa72 SFlowCharSet = 79
+ SFlowCSISO123CSAZ24341985gr SFlowCharSet = 80
+ SFlowCSISO88596E SFlowCharSet = 81
+ SFlowCSISO88596I SFlowCharSet = 82
+ SFlowCSISO128T101G2 SFlowCharSet = 83
+ SFlowCSISO88598E SFlowCharSet = 84
+ SFlowCSISO88598I SFlowCharSet = 85
+ SFlowCSISO139CSN369103 SFlowCharSet = 86
+ SFlowCSISO141JUSIB1002 SFlowCharSet = 87
+ SFlowCSISO143IECP271 SFlowCharSet = 88
+ SFlowCSISO146Serbian SFlowCharSet = 89
+ SFlowCSISO147Macedonian SFlowCharSet = 90
+ SFlowCSISO150 SFlowCharSet = 91
+ SFlowCSISO151Cuba SFlowCharSet = 92
+ SFlowCSISO6937Add SFlowCharSet = 93
+ SFlowCSISO153GOST1976874 SFlowCharSet = 94
+ SFlowCSISO8859Supp SFlowCharSet = 95
+ SFlowCSISO10367Box SFlowCharSet = 96
+ SFlowCSISO158Lap SFlowCharSet = 97
+ SFlowCSISO159JISX02121990 SFlowCharSet = 98
+ SFlowCSISO646Danish SFlowCharSet = 99
+ SFlowCSUSDK SFlowCharSet = 100
+ SFlowCSDKUS SFlowCharSet = 101
+ SFlowCSKSC5636 SFlowCharSet = 102
+ SFlowCSUnicode11UTF7 SFlowCharSet = 103
+ SFlowCSISO2022CN SFlowCharSet = 104
+ SFlowCSISO2022CNEXT SFlowCharSet = 105
+ SFlowCSUTF8 SFlowCharSet = 106
+ SFlowCSISO885913 SFlowCharSet = 109
+ SFlowCSISO885914 SFlowCharSet = 110
+ SFlowCSISO885915 SFlowCharSet = 111
+ SFlowCSISO885916 SFlowCharSet = 112
+ SFlowCSGBK SFlowCharSet = 113
+ SFlowCSGB18030 SFlowCharSet = 114
+ SFlowCSOSDEBCDICDF0415 SFlowCharSet = 115
+ SFlowCSOSDEBCDICDF03IRV SFlowCharSet = 116
+ SFlowCSOSDEBCDICDF041 SFlowCharSet = 117
+ SFlowCSISO115481 SFlowCharSet = 118
+ SFlowCSKZ1048 SFlowCharSet = 119
+ SFlowCSUnicode SFlowCharSet = 1000
+ SFlowCSUCS4 SFlowCharSet = 1001
+ SFlowCSUnicodeASCII SFlowCharSet = 1002
+ SFlowCSUnicodeLatin1 SFlowCharSet = 1003
+ SFlowCSUnicodeJapanese SFlowCharSet = 1004
+ SFlowCSUnicodeIBM1261 SFlowCharSet = 1005
+ SFlowCSUnicodeIBM1268 SFlowCharSet = 1006
+ SFlowCSUnicodeIBM1276 SFlowCharSet = 1007
+ SFlowCSUnicodeIBM1264 SFlowCharSet = 1008
+ SFlowCSUnicodeIBM1265 SFlowCharSet = 1009
+ SFlowCSUnicode11 SFlowCharSet = 1010
+ SFlowCSSCSU SFlowCharSet = 1011
+ SFlowCSUTF7 SFlowCharSet = 1012
+ SFlowCSUTF16BE SFlowCharSet = 1013
+ SFlowCSUTF16LE SFlowCharSet = 1014
+ SFlowCSUTF16 SFlowCharSet = 1015
+ SFlowCSCESU8 SFlowCharSet = 1016
+ SFlowCSUTF32 SFlowCharSet = 1017
+ SFlowCSUTF32BE SFlowCharSet = 1018
+ SFlowCSUTF32LE SFlowCharSet = 1019
+ SFlowCSBOCU1 SFlowCharSet = 1020
+ SFlowCSWindows30Latin1 SFlowCharSet = 2000
+ SFlowCSWindows31Latin1 SFlowCharSet = 2001
+ SFlowCSWindows31Latin2 SFlowCharSet = 2002
+ SFlowCSWindows31Latin5 SFlowCharSet = 2003
+ SFlowCSHPRoman8 SFlowCharSet = 2004
+ SFlowCSAdobeStandardEncoding SFlowCharSet = 2005
+ SFlowCSVenturaUS SFlowCharSet = 2006
+ SFlowCSVenturaInternational SFlowCharSet = 2007
+ SFlowCSDECMCS SFlowCharSet = 2008
+ SFlowCSPC850Multilingual SFlowCharSet = 2009
+ SFlowCSPCp852 SFlowCharSet = 2010
+ SFlowCSPC8CodePage437 SFlowCharSet = 2011
+ SFlowCSPC8DanishNorwegian SFlowCharSet = 2012
+ SFlowCSPC862LatinHebrew SFlowCharSet = 2013
+ SFlowCSPC8Turkish SFlowCharSet = 2014
+ SFlowCSIBMSymbols SFlowCharSet = 2015
+ SFlowCSIBMThai SFlowCharSet = 2016
+ SFlowCSHPLegal SFlowCharSet = 2017
+ SFlowCSHPPiFont SFlowCharSet = 2018
+ SFlowCSHPMath8 SFlowCharSet = 2019
+ SFlowCSHPPSMath SFlowCharSet = 2020
+ SFlowCSHPDesktop SFlowCharSet = 2021
+ SFlowCSVenturaMath SFlowCharSet = 2022
+ SFlowCSMicrosoftPublishing SFlowCharSet = 2023
+ SFlowCSWindows31J SFlowCharSet = 2024
+ SFlowCSGB2312 SFlowCharSet = 2025
+ SFlowCSBig5 SFlowCharSet = 2026
+ SFlowCSMacintosh SFlowCharSet = 2027
+ SFlowCSIBM037 SFlowCharSet = 2028
+ SFlowCSIBM038 SFlowCharSet = 2029
+ SFlowCSIBM273 SFlowCharSet = 2030
+ SFlowCSIBM274 SFlowCharSet = 2031
+ SFlowCSIBM275 SFlowCharSet = 2032
+ SFlowCSIBM277 SFlowCharSet = 2033
+ SFlowCSIBM278 SFlowCharSet = 2034
+ SFlowCSIBM280 SFlowCharSet = 2035
+ SFlowCSIBM281 SFlowCharSet = 2036
+ SFlowCSIBM284 SFlowCharSet = 2037
+ SFlowCSIBM285 SFlowCharSet = 2038
+ SFlowCSIBM290 SFlowCharSet = 2039
+ SFlowCSIBM297 SFlowCharSet = 2040
+ SFlowCSIBM420 SFlowCharSet = 2041
+ SFlowCSIBM423 SFlowCharSet = 2042
+ SFlowCSIBM424 SFlowCharSet = 2043
+ SFlowCSIBM500 SFlowCharSet = 2044
+ SFlowCSIBM851 SFlowCharSet = 2045
+ SFlowCSIBM855 SFlowCharSet = 2046
+ SFlowCSIBM857 SFlowCharSet = 2047
+ SFlowCSIBM860 SFlowCharSet = 2048
+ SFlowCSIBM861 SFlowCharSet = 2049
+ SFlowCSIBM863 SFlowCharSet = 2050
+ SFlowCSIBM864 SFlowCharSet = 2051
+ SFlowCSIBM865 SFlowCharSet = 2052
+ SFlowCSIBM868 SFlowCharSet = 2053
+ SFlowCSIBM869 SFlowCharSet = 2054
+ SFlowCSIBM870 SFlowCharSet = 2055
+ SFlowCSIBM871 SFlowCharSet = 2056
+ SFlowCSIBM880 SFlowCharSet = 2057
+ SFlowCSIBM891 SFlowCharSet = 2058
+ SFlowCSIBM903 SFlowCharSet = 2059
+ SFlowCSIBBM904 SFlowCharSet = 2060
+ SFlowCSIBM905 SFlowCharSet = 2061
+ SFlowCSIBM918 SFlowCharSet = 2062
+ SFlowCSIBM1026 SFlowCharSet = 2063
+ SFlowCSIBMEBCDICATDE SFlowCharSet = 2064
+ SFlowCSEBCDICATDEA SFlowCharSet = 2065
+ SFlowCSEBCDICCAFR SFlowCharSet = 2066
+ SFlowCSEBCDICDKNO SFlowCharSet = 2067
+ SFlowCSEBCDICDKNOA SFlowCharSet = 2068
+ SFlowCSEBCDICFISE SFlowCharSet = 2069
+ SFlowCSEBCDICFISEA SFlowCharSet = 2070
+ SFlowCSEBCDICFR SFlowCharSet = 2071
+ SFlowCSEBCDICIT SFlowCharSet = 2072
+ SFlowCSEBCDICPT SFlowCharSet = 2073
+ SFlowCSEBCDICES SFlowCharSet = 2074
+ SFlowCSEBCDICESA SFlowCharSet = 2075
+ SFlowCSEBCDICESS SFlowCharSet = 2076
+ SFlowCSEBCDICUK SFlowCharSet = 2077
+ SFlowCSEBCDICUS SFlowCharSet = 2078
+ SFlowCSUnknown8BiT SFlowCharSet = 2079
+ SFlowCSMnemonic SFlowCharSet = 2080
+ SFlowCSMnem SFlowCharSet = 2081
+ SFlowCSVISCII SFlowCharSet = 2082
+ SFlowCSVIQR SFlowCharSet = 2083
+ SFlowCSKOI8R SFlowCharSet = 2084
+ SFlowCSHZGB2312 SFlowCharSet = 2085
+ SFlowCSIBM866 SFlowCharSet = 2086
+ SFlowCSPC775Baltic SFlowCharSet = 2087
+ SFlowCSKOI8U SFlowCharSet = 2088
+ SFlowCSIBM00858 SFlowCharSet = 2089
+ SFlowCSIBM00924 SFlowCharSet = 2090
+ SFlowCSIBM01140 SFlowCharSet = 2091
+ SFlowCSIBM01141 SFlowCharSet = 2092
+ SFlowCSIBM01142 SFlowCharSet = 2093
+ SFlowCSIBM01143 SFlowCharSet = 2094
+ SFlowCSIBM01144 SFlowCharSet = 2095
+ SFlowCSIBM01145 SFlowCharSet = 2096
+ SFlowCSIBM01146 SFlowCharSet = 2097
+ SFlowCSIBM01147 SFlowCharSet = 2098
+ SFlowCSIBM01148 SFlowCharSet = 2099
+ SFlowCSIBM01149 SFlowCharSet = 2100
+ SFlowCSBig5HKSCS SFlowCharSet = 2101
+ SFlowCSIBM1047 SFlowCharSet = 2102
+ SFlowCSPTCP154 SFlowCharSet = 2103
+ SFlowCSAmiga1251 SFlowCharSet = 2104
+ SFlowCSKOI7switched SFlowCharSet = 2105
+ SFlowCSBRF SFlowCharSet = 2106
+ SFlowCSTSCII SFlowCharSet = 2107
+ SFlowCSCP51932 SFlowCharSet = 2108
+ SFlowCSWindows874 SFlowCharSet = 2109
+ SFlowCSWindows1250 SFlowCharSet = 2250
+ SFlowCSWindows1251 SFlowCharSet = 2251
+ SFlowCSWindows1252 SFlowCharSet = 2252
+ SFlowCSWindows1253 SFlowCharSet = 2253
+ SFlowCSWindows1254 SFlowCharSet = 2254
+ SFlowCSWindows1255 SFlowCharSet = 2255
+ SFlowCSWindows1256 SFlowCharSet = 2256
+ SFlowCSWindows1257 SFlowCharSet = 2257
+ SFlowCSWindows1258 SFlowCharSet = 2258
+ SFlowCSTIS620 SFlowCharSet = 2259
+ SFlowCS50220 SFlowCharSet = 2260
+ SFlowCSreserved SFlowCharSet = 3000
+)
+
+func decodeExtendedUserFlow(data *[]byte) (SFlowExtendedUserFlow, error) {
+ eu := SFlowExtendedUserFlow{}
+ var fdf SFlowFlowDataFormat
+ var srcUserLen uint32
+ var srcUserLenWithPad int
+ var srcUserBytes []byte
+ var dstUserLen uint32
+ var dstUserLenWithPad int
+ var dstUserBytes []byte
+
+ *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ eu.EnterpriseID, eu.Format = fdf.decode()
+ *data, eu.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, eu.SourceCharSet = (*data)[4:], SFlowCharSet(binary.BigEndian.Uint32((*data)[:4]))
+ *data, srcUserLen = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ srcUserLenWithPad = int(srcUserLen + ((4 - srcUserLen) % 4))
+ *data, srcUserBytes = (*data)[srcUserLenWithPad:], (*data)[:srcUserLenWithPad]
+ eu.SourceUserID = string(srcUserBytes[:srcUserLen])
+ *data, eu.DestinationCharSet = (*data)[4:], SFlowCharSet(binary.BigEndian.Uint32((*data)[:4]))
+ *data, dstUserLen = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ dstUserLenWithPad = int(dstUserLen + ((4 - dstUserLen) % 4))
+ *data, dstUserBytes = (*data)[dstUserLenWithPad:], (*data)[:dstUserLenWithPad]
+ eu.DestinationUserID = string(dstUserBytes[:dstUserLen])
+ return eu, nil
+}
+
+// **************************************************
+// Packet IP version 4 Record
+// **************************************************
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Protocol |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Source IPv4 |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Destination IPv4 |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Source Port |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Destionation Port |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | TCP Flags |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | TOS |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+type SFlowIpv4Record struct {
+ // The length of the IP packet excluding ower layer encapsulations
+ Length uint32
+ // IP Protocol type (for example, TCP = 6, UDP = 17)
+ Protocol uint32
+ // Source IP Address
+ IPSrc net.IP
+ // Destination IP Address
+ IPDst net.IP
+ // TCP/UDP source port number or equivalent
+ PortSrc uint32
+ // TCP/UDP destination port number or equivalent
+ PortDst uint32
+ // TCP flags
+ TCPFlags uint32
+ // IP type of service
+ TOS uint32
+}
+
+func decodeSFlowIpv4Record(data *[]byte) (SFlowIpv4Record, error) {
+ si := SFlowIpv4Record{}
+
+ *data, si.Length = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, si.Protocol = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, si.IPSrc = (*data)[4:], net.IP((*data)[:4])
+ *data, si.IPDst = (*data)[4:], net.IP((*data)[:4])
+ *data, si.PortSrc = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, si.PortDst = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, si.TCPFlags = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, si.TOS = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+
+ return si, nil
+}
+
+// **************************************************
+// Packet IP version 6 Record
+// **************************************************
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Protocol |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Source IPv4 |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Destination IPv4 |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Source Port |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Destionation Port |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | TCP Flags |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Priority |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+type SFlowIpv6Record struct {
+ // The length of the IP packet excluding ower layer encapsulations
+ Length uint32
+ // IP Protocol type (for example, TCP = 6, UDP = 17)
+ Protocol uint32
+ // Source IP Address
+ IPSrc net.IP
+ // Destination IP Address
+ IPDst net.IP
+ // TCP/UDP source port number or equivalent
+ PortSrc uint32
+ // TCP/UDP destination port number or equivalent
+ PortDst uint32
+ // TCP flags
+ TCPFlags uint32
+ // IP priority
+ Priority uint32
+}
+
+func decodeSFlowIpv6Record(data *[]byte) (SFlowIpv6Record, error) {
+ si := SFlowIpv6Record{}
+
+ *data, si.Length = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, si.Protocol = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, si.IPSrc = (*data)[16:], net.IP((*data)[:16])
+ *data, si.IPDst = (*data)[16:], net.IP((*data)[:16])
+ *data, si.PortSrc = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, si.PortDst = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, si.TCPFlags = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, si.Priority = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+
+ return si, nil
+}
+
+// **************************************************
+// Extended IPv4 Tunnel Egress
+// **************************************************
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | 20 bit Interprise (0) |12 bit format |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | record length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// / Packet IP version 4 Record /
+// / /
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+type SFlowExtendedIpv4TunnelEgressRecord struct {
+ SFlowBaseFlowRecord
+ SFlowIpv4Record SFlowIpv4Record
+}
+
+func decodeExtendedIpv4TunnelEgress(data *[]byte) (SFlowExtendedIpv4TunnelEgressRecord, error) {
+ rec := SFlowExtendedIpv4TunnelEgressRecord{}
+ var fdf SFlowFlowDataFormat
+
+ *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ rec.EnterpriseID, rec.Format = fdf.decode()
+ *data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ rec.SFlowIpv4Record, _ = decodeSFlowIpv4Record(data)
+
+ return rec, nil
+}
+
+// **************************************************
+// Extended IPv4 Tunnel Ingress
+// **************************************************
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | 20 bit Interprise (0) |12 bit format |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | record length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// / Packet IP version 4 Record /
+// / /
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+type SFlowExtendedIpv4TunnelIngressRecord struct {
+ SFlowBaseFlowRecord
+ SFlowIpv4Record SFlowIpv4Record
+}
+
+func decodeExtendedIpv4TunnelIngress(data *[]byte) (SFlowExtendedIpv4TunnelIngressRecord, error) {
+ rec := SFlowExtendedIpv4TunnelIngressRecord{}
+ var fdf SFlowFlowDataFormat
+
+ *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ rec.EnterpriseID, rec.Format = fdf.decode()
+ *data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ rec.SFlowIpv4Record, _ = decodeSFlowIpv4Record(data)
+
+ return rec, nil
+}
+
+// **************************************************
+// Extended IPv6 Tunnel Egress
+// **************************************************
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | 20 bit Interprise (0) |12 bit format |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | record length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// / Packet IP version 6 Record /
+// / /
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+type SFlowExtendedIpv6TunnelEgressRecord struct {
+ SFlowBaseFlowRecord
+ SFlowIpv6Record
+}
+
+func decodeExtendedIpv6TunnelEgress(data *[]byte) (SFlowExtendedIpv6TunnelEgressRecord, error) {
+ rec := SFlowExtendedIpv6TunnelEgressRecord{}
+ var fdf SFlowFlowDataFormat
+
+ *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ rec.EnterpriseID, rec.Format = fdf.decode()
+ *data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ rec.SFlowIpv6Record, _ = decodeSFlowIpv6Record(data)
+
+ return rec, nil
+}
+
+// **************************************************
+// Extended IPv6 Tunnel Ingress
+// **************************************************
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | 20 bit Interprise (0) |12 bit format |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | record length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// / Packet IP version 6 Record /
+// / /
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+type SFlowExtendedIpv6TunnelIngressRecord struct {
+ SFlowBaseFlowRecord
+ SFlowIpv6Record
+}
+
+func decodeExtendedIpv6TunnelIngress(data *[]byte) (SFlowExtendedIpv6TunnelIngressRecord, error) {
+ rec := SFlowExtendedIpv6TunnelIngressRecord{}
+ var fdf SFlowFlowDataFormat
+
+ *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ rec.EnterpriseID, rec.Format = fdf.decode()
+ *data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ rec.SFlowIpv6Record, _ = decodeSFlowIpv6Record(data)
+
+ return rec, nil
+}
+
+// **************************************************
+// Extended Decapsulate Egress
+// **************************************************
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | 20 bit Interprise (0) |12 bit format |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | record length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Inner Header Offset |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+type SFlowExtendedDecapsulateEgressRecord struct {
+ SFlowBaseFlowRecord
+ InnerHeaderOffset uint32
+}
+
+func decodeExtendedDecapsulateEgress(data *[]byte) (SFlowExtendedDecapsulateEgressRecord, error) {
+ rec := SFlowExtendedDecapsulateEgressRecord{}
+ var fdf SFlowFlowDataFormat
+
+ *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ rec.EnterpriseID, rec.Format = fdf.decode()
+ *data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, rec.InnerHeaderOffset = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+
+ return rec, nil
+}
+
+// **************************************************
+// Extended Decapsulate Ingress
+// **************************************************
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | 20 bit Interprise (0) |12 bit format |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | record length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Inner Header Offset |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+type SFlowExtendedDecapsulateIngressRecord struct {
+ SFlowBaseFlowRecord
+ InnerHeaderOffset uint32
+}
+
+func decodeExtendedDecapsulateIngress(data *[]byte) (SFlowExtendedDecapsulateIngressRecord, error) {
+ rec := SFlowExtendedDecapsulateIngressRecord{}
+ var fdf SFlowFlowDataFormat
+
+ *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ rec.EnterpriseID, rec.Format = fdf.decode()
+ *data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, rec.InnerHeaderOffset = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+
+ return rec, nil
+}
+
+// **************************************************
+// Extended VNI Egress
+// **************************************************
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | 20 bit Interprise (0) |12 bit format |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | record length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | VNI |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+type SFlowExtendedVniEgressRecord struct {
+ SFlowBaseFlowRecord
+ VNI uint32
+}
+
+func decodeExtendedVniEgress(data *[]byte) (SFlowExtendedVniEgressRecord, error) {
+ rec := SFlowExtendedVniEgressRecord{}
+ var fdf SFlowFlowDataFormat
+
+ *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ rec.EnterpriseID, rec.Format = fdf.decode()
+ *data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, rec.VNI = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+
+ return rec, nil
+}
+
+// **************************************************
+// Extended VNI Ingress
+// **************************************************
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | 20 bit Interprise (0) |12 bit format |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | record length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | VNI |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+type SFlowExtendedVniIngressRecord struct {
+ SFlowBaseFlowRecord
+ VNI uint32
+}
+
+func decodeExtendedVniIngress(data *[]byte) (SFlowExtendedVniIngressRecord, error) {
+ rec := SFlowExtendedVniIngressRecord{}
+ var fdf SFlowFlowDataFormat
+
+ *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ rec.EnterpriseID, rec.Format = fdf.decode()
+ *data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, rec.VNI = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+
+ return rec, nil
+}
+
+// **************************************************
+// Counter Record
+// **************************************************
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | 20 bit Interprise (0) |12 bit format |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | counter length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// / counter data /
+// / /
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+type SFlowBaseCounterRecord struct {
+ EnterpriseID SFlowEnterpriseID
+ Format SFlowCounterRecordType
+ FlowDataLength uint32
+}
+
+func (bcr SFlowBaseCounterRecord) GetType() SFlowCounterRecordType {
+ switch bcr.Format {
+ case SFlowTypeGenericInterfaceCounters:
+ return SFlowTypeGenericInterfaceCounters
+ case SFlowTypeEthernetInterfaceCounters:
+ return SFlowTypeEthernetInterfaceCounters
+ case SFlowTypeTokenRingInterfaceCounters:
+ return SFlowTypeTokenRingInterfaceCounters
+ case SFlowType100BaseVGInterfaceCounters:
+ return SFlowType100BaseVGInterfaceCounters
+ case SFlowTypeVLANCounters:
+ return SFlowTypeVLANCounters
+ case SFlowTypeProcessorCounters:
+ return SFlowTypeProcessorCounters
+
+ }
+ unrecognized := fmt.Sprint("Unrecognized counter record type:", bcr.Format)
+ panic(unrecognized)
+}
+
+// **************************************************
+// Counter Record
+// **************************************************
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | 20 bit Interprise (0) |12 bit format |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | counter length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | IfIndex |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | IfType |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | IfSpeed |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | IfDirection |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | IfStatus |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | IFInOctets |
+// | |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | IfInUcastPkts |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | IfInMulticastPkts |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | IfInBroadcastPkts |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | IfInDiscards |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | InInErrors |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | IfInUnknownProtos |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | IfOutOctets |
+// | |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | IfOutUcastPkts |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | IfOutMulticastPkts |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | IfOutBroadcastPkts |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | IfOutDiscards |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | IfOUtErrors |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | IfPromiscouousMode |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+type SFlowGenericInterfaceCounters struct {
+ SFlowBaseCounterRecord
+ IfIndex uint32
+ IfType uint32
+ IfSpeed uint64
+ IfDirection uint32
+ IfStatus uint32
+ IfInOctets uint64
+ IfInUcastPkts uint32
+ IfInMulticastPkts uint32
+ IfInBroadcastPkts uint32
+ IfInDiscards uint32
+ IfInErrors uint32
+ IfInUnknownProtos uint32
+ IfOutOctets uint64
+ IfOutUcastPkts uint32
+ IfOutMulticastPkts uint32
+ IfOutBroadcastPkts uint32
+ IfOutDiscards uint32
+ IfOutErrors uint32
+ IfPromiscuousMode uint32
+}
+
+func decodeGenericInterfaceCounters(data *[]byte) (SFlowGenericInterfaceCounters, error) {
+ gic := SFlowGenericInterfaceCounters{}
+ var cdf SFlowCounterDataFormat
+
+ *data, cdf = (*data)[4:], SFlowCounterDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ gic.EnterpriseID, gic.Format = cdf.decode()
+ *data, gic.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, gic.IfIndex = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, gic.IfType = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, gic.IfSpeed = (*data)[8:], binary.BigEndian.Uint64((*data)[:8])
+ *data, gic.IfDirection = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, gic.IfStatus = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, gic.IfInOctets = (*data)[8:], binary.BigEndian.Uint64((*data)[:8])
+ *data, gic.IfInUcastPkts = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, gic.IfInMulticastPkts = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, gic.IfInBroadcastPkts = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, gic.IfInDiscards = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, gic.IfInErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, gic.IfInUnknownProtos = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, gic.IfOutOctets = (*data)[8:], binary.BigEndian.Uint64((*data)[:8])
+ *data, gic.IfOutUcastPkts = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, gic.IfOutMulticastPkts = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, gic.IfOutBroadcastPkts = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, gic.IfOutDiscards = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, gic.IfOutErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, gic.IfPromiscuousMode = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ return gic, nil
+}
+
+// **************************************************
+// Counter Record
+// **************************************************
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | 20 bit Interprise (0) |12 bit format |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | counter length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// / counter data /
+// / /
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+type SFlowEthernetCounters struct {
+ SFlowBaseCounterRecord
+ AlignmentErrors uint32
+ FCSErrors uint32
+ SingleCollisionFrames uint32
+ MultipleCollisionFrames uint32
+ SQETestErrors uint32
+ DeferredTransmissions uint32
+ LateCollisions uint32
+ ExcessiveCollisions uint32
+ InternalMacTransmitErrors uint32
+ CarrierSenseErrors uint32
+ FrameTooLongs uint32
+ InternalMacReceiveErrors uint32
+ SymbolErrors uint32
+}
+
+func decodeEthernetCounters(data *[]byte) (SFlowEthernetCounters, error) {
+ ec := SFlowEthernetCounters{}
+ var cdf SFlowCounterDataFormat
+
+ *data, cdf = (*data)[4:], SFlowCounterDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ ec.EnterpriseID, ec.Format = cdf.decode()
+ *data, ec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, ec.AlignmentErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, ec.FCSErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, ec.SingleCollisionFrames = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, ec.MultipleCollisionFrames = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, ec.SQETestErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, ec.DeferredTransmissions = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, ec.LateCollisions = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, ec.ExcessiveCollisions = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, ec.InternalMacTransmitErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, ec.CarrierSenseErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, ec.FrameTooLongs = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, ec.InternalMacReceiveErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, ec.SymbolErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ return ec, nil
+}
+
+// **************************************************
+// Processor Counter Record
+// **************************************************
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | 20 bit Interprise (0) |12 bit format |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | counter length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | FiveSecCpu |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | OneMinCpu |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | GiveMinCpu |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | TotalMemory |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | FreeMemory |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+type SFlowProcessorCounters struct {
+ SFlowBaseCounterRecord
+ FiveSecCpu uint32 // 5 second average CPU utilization
+ OneMinCpu uint32 // 1 minute average CPU utilization
+ FiveMinCpu uint32 // 5 minute average CPU utilization
+ TotalMemory uint64 // total memory (in bytes)
+ FreeMemory uint64 // free memory (in bytes)
+}
+
+func decodeProcessorCounters(data *[]byte) (SFlowProcessorCounters, error) {
+ pc := SFlowProcessorCounters{}
+ var cdf SFlowCounterDataFormat
+ var high32, low32 uint32
+
+ *data, cdf = (*data)[4:], SFlowCounterDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ pc.EnterpriseID, pc.Format = cdf.decode()
+ *data, pc.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+
+ *data, pc.FiveSecCpu = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, pc.OneMinCpu = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, pc.FiveMinCpu = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, high32 = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, low32 = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ pc.TotalMemory = (uint64(high32) << 32) + uint64(low32)
+ *data, high32 = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, low32 = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ pc.FreeMemory = (uint64(high32)) + uint64(low32)
+
+ return pc, nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/sflow_test.go b/vendor/github.com/google/gopacket/layers/sflow_test.go
new file mode 100644
index 0000000..ca0f2ab
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/sflow_test.go
@@ -0,0 +1,1246 @@
+// Copyright 2014 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+package layers
+
+import (
+ "github.com/google/gopacket"
+ "net"
+ "reflect"
+ "testing"
+)
+
+// Test packet collected from live network. See the test below for contents
+var SFlowTestPacket1 = []byte{
+ 0x84, 0x2b, 0x2b, 0x16, 0x8b, 0x62, 0xf0, 0x50, 0x56, 0x85, 0x3a, 0xfd, 0x08, 0x00, 0x45, 0x00,
+ 0x05, 0xbc, 0x9c, 0x04, 0x40, 0x00, 0xff, 0x11, 0xc7, 0x00, 0x0a, 0x01, 0xff, 0x0e, 0x0a, 0x01,
+ 0x00, 0x1b, 0xc7, 0x57, 0x18, 0xc7, 0x05, 0xa8, 0x22, 0x3b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x01, 0x0a, 0x01, 0xf8, 0x16, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x9d, 0xfb, 0x40, 0x49,
+ 0xc6, 0xcd, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x26,
+ 0x27, 0xe8, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0x3e, 0x80, 0x50, 0xbd, 0xe5, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0xd2, 0x00, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x3c, 0x8a, 0xb0, 0xe7, 0x54, 0x41, 0xb8, 0xca, 0x3a, 0x6d,
+ 0xf0, 0x40, 0x08, 0x00, 0x45, 0x00, 0x05, 0xc0, 0x6b, 0xaa, 0x40, 0x00, 0x40, 0x06, 0x8f, 0x41,
+ 0x0a, 0x01, 0x0e, 0x16, 0x36, 0xf0, 0xeb, 0x45, 0x76, 0xfd, 0x00, 0x50, 0xca, 0x77, 0xef, 0x96,
+ 0xfc, 0x28, 0x63, 0x40, 0x50, 0x10, 0x00, 0x3c, 0x64, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
+ 0xf4, 0x00, 0x00, 0x02, 0x77, 0x00, 0x00, 0x00, 0xfd, 0x3b, 0x8c, 0xe7, 0x04, 0x4a, 0x2d, 0xb2,
+ 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x01, 0x48, 0xcc, 0x11, 0x0d, 0xe3, 0x00,
+ 0x26, 0x85, 0x30, 0x00, 0x00, 0x07, 0x66, 0x00, 0x02, 0xd0, 0x8a, 0x00, 0x02, 0xce, 0xf0, 0x00,
+ 0x29, 0x7e, 0x80, 0x00, 0x02, 0xd0, 0x98, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x26, 0x85, 0x30, 0x00,
+ 0x00, 0x00, 0xf4, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0xe9, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x01, 0x5e, 0x5c, 0x1e, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00,
+ 0x07, 0xd0, 0xb1, 0x2f, 0xa2, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x05, 0xee, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x3c, 0x8a,
+ 0xb0, 0xe7, 0x54, 0x41, 0xb8, 0xca, 0x3a, 0x6f, 0xbe, 0xd8, 0x08, 0x00, 0x45, 0x00, 0x05, 0xdc,
+ 0x9f, 0xfd, 0x40, 0x00, 0x40, 0x06, 0x6a, 0xfa, 0x0a, 0x01, 0x0e, 0x10, 0x0a, 0x01, 0x08, 0x13,
+ 0x23, 0x84, 0xb7, 0x22, 0x8a, 0xc9, 0x50, 0xb5, 0x4e, 0x10, 0x2a, 0x87, 0x80, 0x10, 0x06, 0x01,
+ 0x10, 0xa6, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0xef, 0x1f, 0xf4, 0x07, 0x99, 0x3a, 0xd8, 0x5b,
+ 0x01, 0x46, 0x09, 0x00, 0x0c, 0x00, 0x0c, 0x3c, 0xac, 0x4a, 0x1b, 0x06, 0x04, 0x78, 0x78, 0x4e,
+ 0xc2, 0x05, 0x46, 0x43, 0x06, 0x04, 0x78, 0x78, 0xee, 0x9c, 0x00, 0x41, 0xef, 0x05, 0x81, 0x32,
+ 0x1b, 0x06, 0x04, 0x78, 0x78, 0x56, 0x72, 0x05, 0x4e, 0x92, 0x00, 0x96, 0x39, 0x00, 0xea, 0x3f,
+ 0x01, 0x15, 0xa3, 0x08, 0x04, 0x42, 0x6a, 0x82, 0x87, 0x08, 0x05, 0xcc, 0x00, 0x04, 0x00, 0x00,
+ 0x03, 0xe9, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x01, 0x5a,
+ 0xcd, 0xd0, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x07, 0xd0, 0x95, 0x67, 0xe1, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x46, 0x00, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x3c, 0x8a, 0xb0, 0xe7, 0x54, 0x41, 0xb8, 0xca, 0x3a, 0x6f,
+ 0x11, 0x28, 0x08, 0x00, 0x45, 0x00, 0x04, 0x34, 0xdb, 0x36, 0x40, 0x00, 0x40, 0x06, 0x38, 0xac,
+ 0x0a, 0x01, 0x0e, 0x11, 0x0a, 0x01, 0x00, 0xcf, 0x23, 0x84, 0xa0, 0x3f, 0x3c, 0xce, 0xd5, 0x4a,
+ 0x72, 0x0b, 0x5d, 0x1a, 0x80, 0x10, 0x06, 0x01, 0x8a, 0x50, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a,
+ 0xef, 0x1f, 0xa2, 0xba, 0xe6, 0xfa, 0xae, 0xb3, 0xfe, 0xcf, 0x00, 0x19, 0xcf, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0xb9, 0x79, 0xdd, 0x42, 0x00, 0x00, 0x02, 0x84, 0x9b, 0xa9, 0x02, 0xe2, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x32, 0x39, 0x35, 0x34, 0x33, 0x36, 0x00, 0x00, 0x02, 0x70, 0xcd,
+ 0x16, 0x40, 0xa6, 0x98, 0x88, 0x24, 0x06, 0x50, 0xb0, 0xf4, 0xee, 0x03, 0xa6, 0xfa, 0x87, 0xaf,
+ 0xc1, 0x99, 0x52, 0x0d, 0x07, 0xa8, 0x00, 0x00, 0x03, 0xe9, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x20, 0xf2, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00,
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00,
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x54, 0x0b, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x03, 0x00, 0x01, 0x29, 0x82, 0x6d, 0xb0, 0x6c, 0x0b, 0xcb, 0x0d, 0xdd, 0x96, 0x00, 0x06,
+ 0xa8, 0xc6, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x34, 0x02, 0x35, 0x58, 0x7c, 0x9e, 0x56, 0x64, 0x25, 0x71, 0x00, 0x70,
+ 0x5a, 0xc4, 0x00, 0x09, 0x08, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x01, 0x5e, 0x5c, 0x1f, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00,
+ 0x07, 0xd0, 0xb1, 0x2f, 0xaa, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x05, 0xee, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x3c, 0x8a,
+ 0xb0, 0xe7, 0x54, 0x41, 0xb8, 0xca, 0x3a, 0x6f, 0xbe, 0xd8, 0x08, 0x00, 0x45, 0x00, 0x05, 0xdc,
+ 0x0f, 0xba, 0x40, 0x00, 0x40, 0x06, 0xf4, 0x3f, 0x0a, 0x01, 0x0e, 0x10, 0x0a, 0x01, 0x0f, 0x11,
+ 0x23, 0x84, 0xcd, 0xc0, 0xf4, 0x0e, 0x90, 0x23, 0xd7, 0x32, 0x8b, 0x31, 0x80, 0x10, 0x00, 0x1d,
+ 0x6b, 0x12, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0xef, 0x1f, 0xf4, 0x28, 0xef, 0x1f, 0xec, 0x76,
+ 0xaa, 0x25, 0x01, 0x04, 0xc0, 0xac, 0xfe, 0x25, 0x01, 0x8e, 0x25, 0x01, 0x16, 0xc7, 0x28, 0xfe,
+ 0x7e, 0x70, 0xfe, 0x7e, 0x70, 0x52, 0x7e, 0x70, 0x15, 0x9b, 0xfe, 0x35, 0x01, 0xfe, 0x35, 0x01,
+ 0x42, 0x35, 0x01, 0xfe, 0x95, 0x77, 0xfe, 0x95, 0x77, 0xfe, 0x95, 0x77, 0x52, 0x95, 0x77, 0x00,
+ 0xd2, 0xfe, 0x70, 0x02, 0x92, 0x70, 0x02, 0x16, 0x60, 0x22, 0x00, 0x7e, 0xb2, 0x15, 0x00, 0x00,
+ 0x03, 0xe9, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x01, 0x5a,
+ 0xcd, 0xd1, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x07, 0xd0, 0x95, 0x67, 0xe9, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0xee, 0x00, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0xb8, 0xca, 0x3a, 0x6f, 0xbe, 0xd8, 0xb8, 0xca, 0x3a, 0x6f,
+ 0x11, 0x28, 0x08, 0x00, 0x45, 0x00, 0x05, 0xdc, 0xfe, 0x05, 0x40, 0x00, 0x40, 0x06, 0x06, 0xf4,
+ 0x0a, 0x01, 0x0e, 0x11, 0x0a, 0x01, 0x0e, 0x10, 0x23, 0x84, 0xfa, 0x29, 0xae, 0xd4, 0x95, 0x03,
+ 0x99, 0xb8, 0x77, 0xd0, 0x80, 0x10, 0x00, 0x1d, 0x6f, 0x4f, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a,
+ 0xef, 0x1f, 0xa2, 0xcc, 0xef, 0x1f, 0xf4, 0x2c, 0xfe, 0xdb, 0x05, 0xa1, 0xdb, 0x04, 0x9e, 0xc0,
+ 0xfe, 0x30, 0x08, 0xb2, 0x30, 0x08, 0xda, 0x2b, 0xbd, 0xfe, 0x2a, 0x01, 0xfe, 0x2a, 0x01, 0x21,
+ 0x2a, 0x00, 0xb2, 0xfe, 0x57, 0xb0, 0xb6, 0x57, 0xb0, 0x14, 0x74, 0xf4, 0xf0, 0x4c, 0x05, 0x68,
+ 0xfe, 0x54, 0x02, 0xfe, 0x54, 0x02, 0xd2, 0x54, 0x02, 0x00, 0xbe, 0xfe, 0x32, 0x0f, 0xb6, 0x32,
+ 0x0f, 0x14, 0x2e, 0x16, 0xaf, 0x47, 0x00, 0x00, 0x03, 0xe9, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x01, 0x5e, 0x5c, 0x20, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00,
+ 0x07, 0xd0, 0xb1, 0x2f, 0xb2, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x42, 0x3c, 0x8a,
+ 0xb0, 0xe7, 0x54, 0x41, 0xb8, 0xca, 0x3a, 0x6f, 0xbe, 0xd8, 0x08, 0x00, 0x45, 0x00, 0x00, 0x34,
+ 0xa8, 0x23, 0x40, 0x00, 0x40, 0x06, 0x61, 0x7f, 0x0a, 0x01, 0x0e, 0x10, 0x0a, 0x01, 0x0f, 0x10,
+ 0x97, 0x91, 0x23, 0x84, 0x24, 0xfa, 0x91, 0xf7, 0xb4, 0xe8, 0xf3, 0x2d, 0x80, 0x10, 0x00, 0xab,
+ 0x7b, 0x7d, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0xef, 0x1f, 0xf4, 0x36, 0xef, 0x1f, 0xdc, 0xde,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0xe9, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+}
+
+// Test collected from the SFlow reference agent. Contains dummy data for several record types
+// that wern't available on an actual network for sampling.
+var SFlowTestPacket2 = []byte{
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
+ 0x04, 0x88, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11, 0x38, 0x63, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00,
+ 0x00, 0x01, 0xdc, 0xb8, 0x18, 0xc7, 0x04, 0x74, 0x02, 0x88, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x01, 0xc0, 0xa8, 0x5b, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0x3a, 0x00, 0x00,
+ 0xcb, 0x20, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x54, 0x00, 0x02,
+ 0x1f, 0x6e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x1f, 0x6e, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x03, 0xed, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0x68, 0x74,
+ 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6f,
+ 0x72, 0x67, 0x00, 0x00, 0x00, 0x0f, 0x68, 0x6f, 0x73, 0x74, 0x31, 0x2e, 0x73, 0x66, 0x6c, 0x6f,
+ 0x77, 0x2e, 0x6f, 0x72, 0x67, 0x06, 0x00, 0x00, 0x03, 0xec, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00,
+ 0x00, 0x6a, 0x00, 0x00, 0x00, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x75, 0x73, 0x65,
+ 0x72, 0xdc, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x10, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x00, 0x00, 0x03, 0xeb, 0x00, 0x00,
+ 0x00, 0x64, 0x00, 0x00, 0x00, 0x01, 0x0d, 0x0c, 0x0b, 0x0a, 0x00, 0x00, 0xfd, 0xe9, 0x00, 0x00,
+ 0x00, 0x7b, 0x00, 0x00, 0x03, 0xe7, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x01, 0xc8, 0x00, 0x00, 0x03, 0x15, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x2b, 0x67, 0x00, 0x00, 0x56, 0xce, 0x00, 0x00,
+ 0x82, 0x35, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00,
+ 0x03, 0x78, 0x00, 0x00, 0x03, 0xe7, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00,
+ 0x00, 0x0d, 0x00, 0x00, 0x01, 0xb0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x42, 0x00, 0x0c,
+ 0x29, 0x67, 0xa0, 0xe5, 0x00, 0x50, 0x56, 0xc0, 0x00, 0x09, 0x08, 0x00, 0x45, 0x10, 0x00, 0x34,
+ 0x92, 0xc3, 0x40, 0x00, 0x40, 0x06, 0x70, 0x8d, 0xc0, 0xa8, 0x5b, 0x01, 0xc0, 0xa8, 0x5b, 0x11,
+ 0xd3, 0xdd, 0x00, 0x16, 0xe3, 0x2e, 0x84, 0x77, 0x13, 0x6d, 0xc5, 0x53, 0x80, 0x10, 0x1f, 0xf7,
+ 0xe7, 0x7d, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0x2e, 0xc6, 0x70, 0x3a, 0x00, 0x0f, 0x84, 0x7a,
+ 0xbc, 0xd2, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x90, 0x00, 0x02, 0x1f, 0x6f, 0x00, 0x00,
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x1f, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0xed, 0x00, 0x00,
+ 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+ 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6f, 0x72, 0x67, 0x00, 0x00,
+ 0x00, 0x0f, 0x68, 0x6f, 0x73, 0x74, 0x31, 0x2e, 0x73, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6f, 0x72,
+ 0x67, 0x03, 0x00, 0x00, 0x03, 0xec, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00,
+ 0x00, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x77, 0x00, 0x00,
+ 0x00, 0x6a, 0x00, 0x00, 0x00, 0x10, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x00, 0x00, 0x03, 0xeb, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00,
+ 0x00, 0x01, 0x0d, 0x0c, 0x0b, 0x0a, 0x00, 0x00, 0xfd, 0xe9, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00,
+ 0x03, 0xe7, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
+ 0x00, 0x7b, 0x00, 0x00, 0x01, 0xc8, 0x00, 0x00, 0x03, 0x15, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x03, 0x00, 0x00, 0x2b, 0x67, 0x00, 0x00, 0x56, 0xce, 0x00, 0x00, 0x82, 0x35, 0x00, 0x00,
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x03, 0x78, 0x00, 0x00,
+ 0x03, 0xe7, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00,
+ 0x01, 0xb0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x01, 0x86, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x50, 0x56, 0xc0, 0x00, 0x09,
+ 0x00, 0x0c, 0x29, 0x67, 0xa0, 0xe5, 0x08, 0x00, 0x45, 0x10, 0x01, 0x74, 0xbb, 0xfa, 0x40, 0x00,
+ 0x40, 0x06, 0x46, 0x16, 0xc0, 0xa8, 0x5b, 0x11, 0xc0, 0xa8, 0x5b, 0x01, 0x00, 0x16, 0xd3, 0xdd,
+ 0x13, 0x6d, 0xc5, 0x53, 0xe3, 0x2e, 0x84, 0x77, 0x80, 0x18, 0x01, 0x10, 0x38, 0xca, 0x00, 0x00,
+ 0x01, 0x01, 0x08, 0x0a, 0x00, 0x0f, 0x84, 0x7d, 0x2e, 0xc6, 0x70, 0x3a, 0xe3, 0x92, 0x97, 0x1a,
+ 0x67, 0x3b, 0xac, 0xec, 0xfa, 0x43, 0x71, 0x5e, 0x36, 0xa1, 0x0a, 0xc6, 0x1a, 0x6a, 0xed, 0x08,
+ 0xac, 0xf4, 0xbe, 0xd8, 0x36, 0x59, 0xf6, 0xe2, 0x3d, 0x34, 0x26, 0xf2, 0x42, 0xbd, 0x32, 0xd3,
+ 0x37, 0x52, 0xb8, 0xf4, 0x38, 0xf0, 0xf4, 0xeb, 0x76, 0x3b, 0xda, 0x23, 0xf1, 0x92, 0x96, 0xca,
+ 0xbb, 0x9c, 0x20, 0x0a, 0x38, 0x37, 0x6f, 0xd9, 0x26, 0xe6, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x01, 0x54, 0x00, 0x02, 0x1f, 0x70, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02,
+ 0x1f, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x03, 0xed, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x14, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x66, 0x6c,
+ 0x6f, 0x77, 0x2e, 0x6f, 0x72, 0x67, 0x00, 0x00, 0x00, 0x0f, 0x68, 0x6f, 0x73, 0x74, 0x31, 0x2e,
+ 0x73, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6f, 0x72, 0x67, 0xff, 0x00, 0x00, 0x03, 0xec, 0x00, 0x00,
+ 0x00, 0x2c, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+ 0x20, 0x75, 0x73, 0x65, 0x72, 0x77, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x10, 0x64, 0x65,
+ 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x00, 0x00,
+ 0x03, 0xeb, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x01, 0x0d, 0x0c, 0x0b, 0x0a, 0x00, 0x00,
+ 0xfd, 0xe9, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x03, 0xe7, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x01, 0xc8, 0x00, 0x00,
+ 0x03, 0x15, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x2b, 0x67, 0x00, 0x00,
+ 0x56, 0xce, 0x00, 0x00, 0x82, 0x35, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
+ 0x03, 0x09, 0x00, 0x00, 0x03, 0x78, 0x00, 0x00, 0x03, 0xe7, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x01, 0xb0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x42, 0x00, 0x0c, 0x29, 0x67, 0xa0, 0xe5, 0x00, 0x50, 0x56, 0xc0, 0x00, 0x09, 0x08, 0x00,
+ 0x45, 0x10, 0x00, 0x34, 0x65, 0x7d, 0x40, 0x00, 0x40, 0x06, 0x9d, 0xd3, 0xc0, 0xa8, 0x5b, 0x01,
+ 0xc0, 0xa8, 0x5b, 0x11, 0xd3, 0xdd, 0x00, 0x16, 0xe3, 0x2e, 0x84, 0x77, 0x13, 0x6d, 0xc6, 0x93,
+ 0x80, 0x10, 0x1f, 0xec, 0xe6, 0x43, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0x2e, 0xc6, 0x70, 0x3c,
+ 0x00, 0x0f, 0x84, 0x7d, 0x00, 0x50,
+}
+
+// processor counter sample
+var SFlowTestPacket3 = []byte{
+ 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01,
+ 0x0a, 0x14, 0x04, 0x00, 0x00, 0x00, 0x00, 0x64,
+ 0x00, 0x01, 0x78, 0xe0, 0x73, 0x03, 0x48, 0x78,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x34, 0x00, 0x01, 0x78, 0xe0,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0xe9,
+ 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x05, 0xaa,
+ 0x00, 0x00, 0x05, 0x5a, 0x00, 0x00, 0x05, 0x32,
+ 0x00, 0x00, 0x00, 0x00, 0xe7, 0x8d, 0x70, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x55, 0xe7, 0x70, 0x00,
+}
+
+// expanded flow sample - extended switch flow record
+var SFlowTestPacket4 = []byte{
+ 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01,
+ 0xc0, 0xa8, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x7e, 0x32, 0xe0, 0xe4, 0x7c,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x01, 0x23,
+ 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x03, 0x37, 0x00, 0x00, 0x56, 0x23,
+ 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0xe9,
+ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05,
+ 0xff, 0xff, 0xff, 0xff,
+}
+
+// expanded flow sample - extended router flow record
+var SFlowTestPacket5 = []byte{
+ 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01,
+ 0xc0, 0xa8, 0x01, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x7e, 0x32, 0xe0, 0xe4, 0x7c,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x01, 0x23,
+ 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x03, 0x34, 0x00, 0x00, 0x56, 0x02,
+ 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0xea,
+ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01,
+ 0xc0, 0xa8, 0x01, 0x21, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x80,
+}
+
+// expanded flow sample - Ipv4 Tunnel Ingress record
+var SFlowTestPacket6 = []byte{
+ 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x00, 0x01, 0xbd, 0x50,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48,
+ 0x00, 0x00, 0x00, 0x74, 0x02, 0x00, 0x03, 0xe8, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f,
+ 0xc0, 0xa8, 0x00, 0x54, 0xc0, 0xa8, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+}
+
+// expanded flow sample - Ipv4 Tunnel Egress record
+var SFlowTestPacket7 = []byte{
+ 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x42, 0x68,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48,
+ 0x00, 0x00, 0x00, 0x12, 0x02, 0x00, 0x03, 0xe9, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c,
+ 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xa8, 0x00, 0x54,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+}
+
+// expanded flow sample - extended router flow record IPv6 next hop
+var SFlowTestPacket8 = []byte{
+ 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01,
+ 0xc0, 0xa8, 0x01, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x7e, 0x32, 0xe0, 0xe4, 0x7c,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x01, 0x23,
+ 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x03, 0x34, 0x00, 0x00, 0x56, 0x02,
+ 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0xea,
+ 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x02,
+ 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
+}
+
+func TestDecodeUDPSFlow(t *testing.T) {
+ p := gopacket.NewPacket(SFlowTestPacket1, LayerTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeSFlow}, t)
+ if got, ok := p.TransportLayer().(*UDP); ok {
+ want := &UDP{
+ BaseLayer: BaseLayer{SFlowTestPacket1[34:42], SFlowTestPacket1[42:]},
+ sPort: []byte{199, 87},
+ dPort: []byte{24, 199},
+ SrcPort: 51031,
+ DstPort: 6343,
+ Checksum: 8763,
+ Length: 1448,
+ }
+ if !reflect.DeepEqual(want, got) {
+ t.Errorf("UDP layer mismatch, \nwant %#v\ngot %#v\n", want, got)
+ }
+ } else {
+ t.Error("Transport layer packet not UDP")
+ }
+}
+
+func TestDecodeSFlowDatagram(t *testing.T) {
+ p := gopacket.NewPacket(SFlowTestPacket1, LayerTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeSFlow}, t)
+ if got, ok := p.ApplicationLayer().(*SFlowDatagram); ok {
+ want := &SFlowDatagram{
+ DatagramVersion: uint32(5),
+ AgentAddress: []byte{0xa, 0x1, 0xf8, 0x16},
+ SubAgentID: uint32(17),
+ SequenceNumber: uint32(40443),
+ AgentUptime: uint32(1078576845),
+ SampleCount: uint32(7),
+ FlowSamples: []SFlowFlowSample{
+ SFlowFlowSample{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ SampleLength: 0xd0,
+ SequenceNumber: 0x2627e8,
+ SourceIDClass: 0x0,
+ SourceIDIndex: 0x213,
+ SamplingRate: 0x3e80,
+ SamplePool: 0x50bde580,
+ Dropped: 0x0,
+ InputInterface: 0x213,
+ OutputInterface: 0x0,
+ RecordCount: 0x2,
+ Records: []SFlowRecord{
+ SFlowRawPacketFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ FlowDataLength: 0x90,
+ },
+ HeaderProtocol: 0x1,
+ FrameLength: 0x5d2,
+ PayloadRemoved: 0x4,
+ HeaderLength: 0x80,
+ Header: gopacket.NewPacket(SFlowTestPacket1[134:262], LayerTypeEthernet, gopacket.Default),
+ },
+ SFlowExtendedSwitchFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: 0x3e9,
+ FlowDataLength: 0x10,
+ },
+ IncomingVLAN: 0x202,
+ IncomingVLANPriority: 0x0,
+ OutgoingVLAN: 0x0,
+ OutgoingVLANPriority: 0x0,
+ },
+ },
+ },
+ SFlowFlowSample{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ SampleLength: 0xd0,
+ SequenceNumber: 0x15e5c1e,
+ SourceIDClass: 0x0,
+ SourceIDIndex: 0x257,
+ SamplingRate: 0x7d0,
+ SamplePool: 0xb12fa290,
+ Dropped: 0x0,
+ InputInterface: 0x257,
+ OutputInterface: 0x0,
+ RecordCount: 0x2,
+ Records: []SFlowRecord{
+ SFlowRawPacketFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ FlowDataLength: 0x90,
+ },
+ HeaderProtocol: 0x1,
+ FrameLength: 0x5ee,
+ PayloadRemoved: 0x4,
+ HeaderLength: 0x80,
+ Header: gopacket.NewPacket(SFlowTestPacket1[350:478], LayerTypeEthernet, gopacket.Default),
+ },
+ SFlowExtendedSwitchFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: 0x3e9,
+ FlowDataLength: 0x10,
+ },
+ IncomingVLAN: 0x202,
+ IncomingVLANPriority: 0x0,
+ OutgoingVLAN: 0x0,
+ OutgoingVLANPriority: 0x0,
+ },
+ },
+ },
+ SFlowFlowSample{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ SampleLength: 0xd0,
+ SequenceNumber: 0x15acdd0,
+ SourceIDClass: 0x0,
+ SourceIDIndex: 0x255,
+ SamplingRate: 0x7d0,
+ SamplePool: 0x9567e130,
+ Dropped: 0x0,
+ InputInterface: 0x255,
+ OutputInterface: 0x0,
+ RecordCount: 0x2,
+ Records: []SFlowRecord{
+ SFlowRawPacketFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ FlowDataLength: 0x90,
+ },
+ HeaderProtocol: 0x1,
+ FrameLength: 0x446,
+ PayloadRemoved: 0x4,
+ HeaderLength: 0x80,
+ Header: gopacket.NewPacket(SFlowTestPacket1[566:694], LayerTypeEthernet, gopacket.Default),
+ },
+ SFlowExtendedSwitchFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: 0x3e9,
+ FlowDataLength: 0x10,
+ },
+ IncomingVLAN: 0x202,
+ IncomingVLANPriority: 0x0,
+ OutgoingVLAN: 0x0,
+ OutgoingVLANPriority: 0x0,
+ },
+ },
+ },
+ SFlowFlowSample{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ SampleLength: 0xd0,
+ SequenceNumber: 0x15e5c1f,
+ SourceIDClass: 0x0,
+ SourceIDIndex: 0x257,
+ SamplingRate: 0x7d0,
+ SamplePool: 0xb12faa60,
+ Dropped: 0x0,
+ InputInterface: 0x257,
+ OutputInterface: 0x0,
+ RecordCount: 0x2,
+ Records: []SFlowRecord{
+ SFlowRawPacketFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ FlowDataLength: 0x90,
+ },
+ HeaderProtocol: 0x1,
+ FrameLength: 0x5ee,
+ PayloadRemoved: 0x4,
+ HeaderLength: 0x80,
+ Header: gopacket.NewPacket(SFlowTestPacket1[958:1086], LayerTypeEthernet, gopacket.Default),
+ },
+ SFlowExtendedSwitchFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: 0x3e9,
+ FlowDataLength: 0x10,
+ },
+ IncomingVLAN: 0x202,
+ IncomingVLANPriority: 0x0,
+ OutgoingVLAN: 0x0,
+ OutgoingVLANPriority: 0x0,
+ },
+ },
+ },
+ SFlowFlowSample{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ SampleLength: 0xd0,
+ SequenceNumber: 0x15acdd1,
+ SourceIDClass: 0x0,
+ SourceIDIndex: 0x255,
+ SamplingRate: 0x7d0,
+ SamplePool: 0x9567e900,
+ Dropped: 0x0,
+ InputInterface: 0x255,
+ OutputInterface: 0x257,
+ RecordCount: 0x2,
+ Records: []SFlowRecord{
+ SFlowRawPacketFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ FlowDataLength: 0x90,
+ },
+ HeaderProtocol: 0x1,
+ FrameLength: 0x5ee,
+ PayloadRemoved: 0x4,
+ HeaderLength: 0x80,
+ Header: gopacket.NewPacket(SFlowTestPacket1[1174:1302], LayerTypeEthernet, gopacket.Default),
+ },
+ SFlowExtendedSwitchFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: 0x3e9,
+ FlowDataLength: 0x10,
+ },
+ IncomingVLAN: 0x202,
+ IncomingVLANPriority: 0x0,
+ OutgoingVLAN: 0x202,
+ OutgoingVLANPriority: 0x0,
+ },
+ },
+ },
+ SFlowFlowSample{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ SampleLength: 0x94,
+ SequenceNumber: 0x15e5c20,
+ SourceIDClass: 0x0,
+ SourceIDIndex: 0x257,
+ SamplingRate: 0x7d0,
+ SamplePool: 0xb12fb230,
+ Dropped: 0x0,
+ InputInterface: 0x257,
+ OutputInterface: 0x0,
+ RecordCount: 0x2,
+ Records: []SFlowRecord{
+ SFlowRawPacketFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ FlowDataLength: 0x54,
+ },
+ HeaderProtocol: 0x1,
+ FrameLength: 0x46,
+ PayloadRemoved: 0x4,
+ HeaderLength: 0x42,
+ Header: gopacket.NewPacket(SFlowTestPacket1[1390:1458], LayerTypeEthernet, gopacket.Default),
+ },
+ SFlowExtendedSwitchFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: 0x3e9,
+ FlowDataLength: 0x10,
+ },
+ IncomingVLAN: 0x202,
+ IncomingVLANPriority: 0x0,
+ OutgoingVLAN: 0x0,
+ OutgoingVLANPriority: 0x0,
+ },
+ },
+ },
+ },
+ CounterSamples: []SFlowCounterSample{
+ SFlowCounterSample{
+ Format: 0x2,
+ SampleLength: 0xa8,
+ SequenceNumber: 0x20f2,
+ SourceIDClass: 0x0,
+ SourceIDIndex: 0x20a,
+ RecordCount: 0x2,
+ Records: []SFlowRecord{
+ SFlowGenericInterfaceCounters{
+ SFlowBaseCounterRecord: SFlowBaseCounterRecord{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ FlowDataLength: 0x58,
+ },
+ IfIndex: 0x20a,
+ IfType: 0x6,
+ IfSpeed: 0x2540be400,
+ IfDirection: 0x1,
+ IfStatus: 0x3,
+ IfInOctets: 0x129826db06c0b,
+ IfInUcastPkts: 0xcb0ddd96,
+ IfInMulticastPkts: 0x6a8c6,
+ IfInBroadcastPkts: 0x7b,
+ IfInDiscards: 0x0,
+ IfInErrors: 0x0,
+ IfInUnknownProtos: 0x0,
+ IfOutOctets: 0x340235587c9e,
+ IfOutUcastPkts: 0x56642571,
+ IfOutMulticastPkts: 0x705ac4,
+ IfOutBroadcastPkts: 0x908f1,
+ IfOutDiscards: 0x0,
+ IfOutErrors: 0x0,
+ IfPromiscuousMode: 0x0,
+ },
+ SFlowEthernetCounters{
+ SFlowBaseCounterRecord: SFlowBaseCounterRecord{
+ EnterpriseID: 0x0,
+ Format: 0x2,
+ FlowDataLength: 0x34,
+ },
+ AlignmentErrors: 0x0,
+ FCSErrors: 0x0,
+ SingleCollisionFrames: 0x0,
+ MultipleCollisionFrames: 0x0,
+ SQETestErrors: 0x0,
+ DeferredTransmissions: 0x0,
+ LateCollisions: 0x0,
+ ExcessiveCollisions: 0x0,
+ InternalMacTransmitErrors: 0x0,
+ CarrierSenseErrors: 0x0,
+ FrameTooLongs: 0x0,
+ InternalMacReceiveErrors: 0x0,
+ SymbolErrors: 0x0,
+ },
+ },
+ },
+ },
+ }
+ if !reflect.DeepEqual(want, got) {
+ t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got)
+ }
+ } else {
+ t.Error("Application layer packet not UDP")
+ }
+}
+
+func TestPacketPacket0(t *testing.T) {
+ p := gopacket.NewPacket(SFlowTestPacket2, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeSFlow}, t)
+ if got, ok := p.ApplicationLayer().(*SFlowDatagram); ok {
+ want := &SFlowDatagram{
+ DatagramVersion: uint32(5),
+ AgentAddress: []byte{192, 168, 91, 17},
+ SubAgentID: uint32(0),
+ SequenceNumber: uint32(46394),
+ AgentUptime: uint32(52000),
+ SampleCount: uint32(3),
+ FlowSamples: []SFlowFlowSample{
+ SFlowFlowSample{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ SampleLength: 340,
+ SequenceNumber: 139118,
+ SourceIDClass: 0,
+ SourceIDIndex: 3,
+ SamplingRate: 1,
+ SamplePool: 139118,
+ Dropped: 0,
+ InputInterface: 3,
+ OutputInterface: 1073741823,
+ RecordCount: 4,
+ Records: []SFlowRecord{
+ SFlowExtendedURLRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0,
+ Format: 1005,
+ FlowDataLength: 48,
+ },
+ Direction: SFlowURLsrc,
+ URL: "http://www.sflow.org",
+ Host: "host1.sflow.org",
+ },
+ SFlowExtendedUserFlow{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0,
+ Format: 1004,
+ FlowDataLength: 44,
+ },
+ SourceCharSet: SFlowCSUTF8,
+ SourceUserID: "source user",
+ DestinationCharSet: SFlowCSUTF8,
+ DestinationUserID: "destination user",
+ },
+ SFlowExtendedGatewayFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0,
+ Format: 1003,
+ FlowDataLength: 100,
+ },
+ NextHop: []byte{0x0d, 0x0c, 0x0b, 0x0a},
+ AS: 65001,
+ SourceAS: 123,
+ PeerAS: 999,
+ ASPathCount: 3,
+ ASPath: []SFlowASDestination{
+ SFlowASDestination{
+ Type: SFlowASSequence,
+ Count: 3,
+ Members: []uint32{123, 456, 789},
+ },
+ SFlowASDestination{
+ Type: SFlowASSet,
+ Count: 3,
+ Members: []uint32{11111, 22222, 33333},
+ },
+ SFlowASDestination{
+ Type: SFlowASSequence,
+ Count: 3,
+ Members: []uint32{777, 888, 999},
+ },
+ },
+ Communities: []uint32{12, 13},
+ LocalPref: 432,
+ },
+ SFlowRawPacketFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ FlowDataLength: 84,
+ },
+ HeaderProtocol: 1,
+ FrameLength: 70,
+ PayloadRemoved: 4,
+ HeaderLength: 0x42,
+ Header: gopacket.NewPacket(SFlowTestPacket2[350:418], LayerTypeEthernet, gopacket.Default),
+ },
+ },
+ },
+ SFlowFlowSample{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ SampleLength: 400,
+ SequenceNumber: 139119,
+ SourceIDClass: 0,
+ SourceIDIndex: 3,
+ SamplingRate: 1,
+ SamplePool: 139119,
+ Dropped: 0,
+ InputInterface: 1073741823,
+ OutputInterface: 3,
+ RecordCount: 4,
+ Records: []SFlowRecord{
+ SFlowExtendedURLRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0,
+ Format: 1005,
+ FlowDataLength: 48,
+ },
+ Direction: SFlowURLsrc,
+ URL: "http://www.sflow.org",
+ Host: "host1.sflow.org",
+ },
+ SFlowExtendedUserFlow{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0,
+ Format: 1004,
+ FlowDataLength: 44,
+ },
+ SourceCharSet: SFlowCSUTF8,
+ SourceUserID: "source user",
+ DestinationCharSet: SFlowCSUTF8,
+ DestinationUserID: "destination user",
+ },
+ SFlowExtendedGatewayFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0,
+ Format: 1003,
+ FlowDataLength: 100,
+ },
+ NextHop: []byte{0x0d, 0x0c, 0x0b, 0x0a},
+ AS: 65001,
+ SourceAS: 123,
+ PeerAS: 999,
+ ASPathCount: 3,
+ ASPath: []SFlowASDestination{
+ SFlowASDestination{
+ Type: SFlowASSequence,
+ Count: 3,
+ Members: []uint32{123, 456, 789},
+ },
+ SFlowASDestination{
+ Type: SFlowASSet,
+ Count: 3,
+ Members: []uint32{11111, 22222, 33333},
+ },
+ SFlowASDestination{
+ Type: SFlowASSequence,
+ Count: 3,
+ Members: []uint32{777, 888, 999},
+ },
+ },
+ Communities: []uint32{12, 13},
+ LocalPref: 432,
+ },
+ SFlowRawPacketFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ FlowDataLength: 144,
+ },
+ HeaderProtocol: 1,
+ FrameLength: 390,
+ PayloadRemoved: 4,
+ HeaderLength: 0x80,
+ Header: gopacket.NewPacket(SFlowTestPacket2[698:826], LayerTypeEthernet, gopacket.Default),
+ },
+ },
+ },
+ SFlowFlowSample{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ SampleLength: 340,
+ SequenceNumber: 139120,
+ SourceIDClass: 0,
+ SourceIDIndex: 3,
+ SamplingRate: 1,
+ SamplePool: 139120,
+ Dropped: 0,
+ InputInterface: 3,
+ OutputInterface: 1073741823,
+ RecordCount: 4,
+ Records: []SFlowRecord{
+ SFlowExtendedURLRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0,
+ Format: 1005,
+ FlowDataLength: 48,
+ },
+ Direction: SFlowURLsrc,
+ URL: "http://www.sflow.org",
+ Host: "host1.sflow.org",
+ },
+ SFlowExtendedUserFlow{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0,
+ Format: 1004,
+ FlowDataLength: 44,
+ },
+ SourceCharSet: SFlowCSUTF8,
+ SourceUserID: "source user",
+ DestinationCharSet: SFlowCSUTF8,
+ DestinationUserID: "destination user",
+ },
+ SFlowExtendedGatewayFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0,
+ Format: 1003,
+ FlowDataLength: 100,
+ },
+ NextHop: []byte{0x0d, 0x0c, 0x0b, 0x0a},
+ AS: 65001,
+ SourceAS: 123,
+ PeerAS: 999,
+ ASPathCount: 3,
+ ASPath: []SFlowASDestination{
+ SFlowASDestination{
+ Type: SFlowASSequence,
+ Count: 3,
+ Members: []uint32{123, 456, 789},
+ },
+ SFlowASDestination{
+ Type: SFlowASSet,
+ Count: 3,
+ Members: []uint32{11111, 22222, 33333},
+ },
+ SFlowASDestination{
+ Type: SFlowASSequence,
+ Count: 3,
+ Members: []uint32{777, 888, 999},
+ },
+ },
+ Communities: []uint32{12, 13},
+ LocalPref: 432,
+ },
+ SFlowRawPacketFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ FlowDataLength: 84,
+ },
+ HeaderProtocol: 1,
+ FrameLength: 70,
+ PayloadRemoved: 4,
+ HeaderLength: 0x42,
+ Header: gopacket.NewPacket(SFlowTestPacket2[1106:1174], LayerTypeEthernet, gopacket.Default),
+ },
+ },
+ },
+ },
+ }
+ if !reflect.DeepEqual(want, got) {
+ t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got)
+ }
+ } else {
+ t.Error("Application layer packet not UDP")
+ }
+}
+
+func TestDecodeProcessorCounter(t *testing.T) {
+ p := gopacket.NewPacket(SFlowTestPacket3, LayerTypeSFlow, gopacket.Default)
+
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t)
+
+ got := p.ApplicationLayer().(*SFlowDatagram)
+
+ want := &SFlowDatagram{
+ DatagramVersion: uint32(5),
+ AgentAddress: []byte{0x0a, 0x14, 0x04, 0x00},
+ SubAgentID: uint32(0x64),
+ SequenceNumber: uint32(96480),
+ AgentUptime: uint32(1929595000),
+ SampleCount: uint32(1),
+ CounterSamples: []SFlowCounterSample{
+ SFlowCounterSample{
+ Format: SFlowTypeExpandedCounterSample,
+ SampleLength: 0x34,
+ SequenceNumber: 0x0178e0,
+ SourceIDClass: 0x00,
+ SourceIDIndex: 0x01,
+ RecordCount: 0x01,
+ Records: []SFlowRecord{
+ SFlowProcessorCounters{
+ SFlowBaseCounterRecord: SFlowBaseCounterRecord{
+ EnterpriseID: 0x0,
+ Format: SFlowTypeProcessorCounters,
+ FlowDataLength: 0x1c,
+ },
+ FiveSecCpu: 0x05aa,
+ OneMinCpu: 0x055a,
+ FiveMinCpu: 0x0532,
+ TotalMemory: 0xe78d7000,
+ FreeMemory: 0x55e77000,
+ },
+ },
+ },
+ },
+ }
+ if !reflect.DeepEqual(want, got) {
+ t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got)
+ }
+}
+
+func TestDecodeExtendedSwitchFlow(t *testing.T) {
+ p := gopacket.NewPacket(SFlowTestPacket4, LayerTypeSFlow, gopacket.Default)
+
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t)
+
+ got := p.ApplicationLayer().(*SFlowDatagram)
+
+ want := &SFlowDatagram{
+ DatagramVersion: uint32(5),
+ AgentAddress: []byte{0xc0, 0xa8, 0x01, 0x07},
+ SubAgentID: uint32(0x00),
+ SequenceNumber: uint32(0x027e),
+ AgentUptime: uint32(0x32e0e47c),
+ SampleCount: uint32(1),
+ FlowSamples: []SFlowFlowSample{
+ SFlowFlowSample{
+ Format: SFlowTypeFlowSample,
+ SampleLength: 0x38,
+ SequenceNumber: 0x123,
+ SourceIDClass: 0x00,
+ SourceIDIndex: 0x1d,
+ SamplingRate: 0x100,
+ SamplePool: 0x337,
+ Dropped: 0x5623,
+ InputInterfaceFormat: 0x00,
+ InputInterface: 0x1d,
+ OutputInterfaceFormat: 0x00,
+ OutputInterface: 0x04,
+ RecordCount: 0x01,
+ Records: []SFlowRecord{
+ SFlowExtendedSwitchFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: SFlowTypeExtendedSwitchFlow,
+ FlowDataLength: 0x10,
+ },
+ IncomingVLAN: 0x03,
+ IncomingVLANPriority: 0x02,
+ OutgoingVLAN: 0x05,
+ OutgoingVLANPriority: 0xffffffff,
+ },
+ },
+ },
+ },
+ }
+ if !reflect.DeepEqual(want, got) {
+ t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got)
+ }
+}
+
+func TestDecodeExtendedRouterFlow(t *testing.T) {
+ p := gopacket.NewPacket(SFlowTestPacket5, LayerTypeSFlow, gopacket.Default)
+
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t)
+
+ got := p.ApplicationLayer().(*SFlowDatagram)
+
+ want := &SFlowDatagram{
+ DatagramVersion: uint32(5),
+ AgentAddress: []byte{0xc0, 0xa8, 0x01, 0x12},
+ SubAgentID: uint32(0x00),
+ SequenceNumber: uint32(0x027e),
+ AgentUptime: uint32(0x32e0e47c),
+ SampleCount: uint32(1),
+ FlowSamples: []SFlowFlowSample{
+ SFlowFlowSample{
+ Format: SFlowTypeFlowSample,
+ SampleLength: 0x34,
+ SequenceNumber: 0x123,
+ SourceIDClass: 0x00,
+ SourceIDIndex: 0x1d,
+ SamplingRate: 0x100,
+ SamplePool: 0x334,
+ Dropped: 0x5602,
+ InputInterfaceFormat: 0x00,
+ InputInterface: 0x1d,
+ OutputInterfaceFormat: 0x00,
+ OutputInterface: 0x04,
+ RecordCount: 0x01,
+ Records: []SFlowRecord{
+ SFlowExtendedRouterFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: SFlowTypeExtendedRouterFlow,
+ FlowDataLength: 0x10,
+ },
+ NextHop: []byte{0xc0, 0xa8, 0x01, 0x21},
+ NextHopSourceMask: 0xffffffff,
+ NextHopDestinationMask: 0xffffff80,
+ },
+ },
+ },
+ },
+ }
+ if !reflect.DeepEqual(want, got) {
+ t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got)
+ }
+}
+
+func TestDecodeExtendedRouterFlowIPv6(t *testing.T) {
+ p := gopacket.NewPacket(SFlowTestPacket8, LayerTypeSFlow, gopacket.Default)
+
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t)
+
+ got := p.ApplicationLayer().(*SFlowDatagram)
+
+ want := &SFlowDatagram{
+ DatagramVersion: uint32(5),
+ AgentAddress: []byte{0xc0, 0xa8, 0x01, 0x12},
+ SubAgentID: uint32(0x00),
+ SequenceNumber: uint32(0x027e),
+ AgentUptime: uint32(0x32e0e47c),
+ SampleCount: uint32(1),
+ FlowSamples: []SFlowFlowSample{
+ SFlowFlowSample{
+ Format: SFlowTypeFlowSample,
+ SampleLength: 0x34,
+ SequenceNumber: 0x123,
+ SourceIDClass: 0x00,
+ SourceIDIndex: 0x1d,
+ SamplingRate: 0x100,
+ SamplePool: 0x334,
+ Dropped: 0x5602,
+ InputInterfaceFormat: 0x00,
+ InputInterface: 0x1d,
+ OutputInterfaceFormat: 0x00,
+ OutputInterface: 0x04,
+ RecordCount: 0x01,
+ Records: []SFlowRecord{
+ SFlowExtendedRouterFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: SFlowTypeExtendedRouterFlow,
+ FlowDataLength: 0x1c,
+ },
+ NextHop: []byte{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ NextHopSourceMask: 0xffffffff,
+ NextHopDestinationMask: 0xffffff80,
+ },
+ },
+ },
+ },
+ }
+ if !reflect.DeepEqual(want, got) {
+ t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got)
+ }
+}
+
+func TestDecodeExtendedIpv4TunnelIngressFlow(t *testing.T) {
+ p := gopacket.NewPacket(SFlowTestPacket6, LayerTypeSFlow, gopacket.Default)
+
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t)
+
+ got := p.ApplicationLayer().(*SFlowDatagram)
+
+ want := &SFlowDatagram{
+ DatagramVersion: uint32(5),
+ AgentAddress: []byte{0x7f, 0x0, 0x0, 0x1},
+ SubAgentID: uint32(0),
+ SequenceNumber: uint32(0x72),
+ AgentUptime: uint32(0x1bd50),
+ SampleCount: uint32(1),
+ FlowSamples: []SFlowFlowSample{
+ SFlowFlowSample{
+ Format: SFlowTypeFlowSample,
+ SampleLength: 0x48,
+ SequenceNumber: 0x74,
+ SourceIDClass: 0x0,
+ SourceIDIndex: 0x20003e8,
+ SamplingRate: 0x1,
+ SamplePool: 0x74,
+ Dropped: 0x0,
+ InputInterfaceFormat: 0x0,
+ InputInterface: 0x0,
+ OutputInterfaceFormat: 0x0,
+ OutputInterface: 0x80000001,
+ RecordCount: 0x1,
+ Records: []SFlowRecord{
+ SFlowExtendedIpv4TunnelIngressRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: SFlowTypeExtendedIpv4TunnelIngressFlow,
+ FlowDataLength: 0x20,
+ },
+ SFlowIpv4Record: SFlowIpv4Record{
+ Length: 0x0,
+ Protocol: 0x2f,
+ IPSrc: net.IP{0xc0, 0xa8, 0x0, 0x54},
+ IPDst: net.IP{0xc0, 0xa8, 0x0, 0x53},
+ PortSrc: 0x0,
+ PortDst: 0x0,
+ TCPFlags: 0x0,
+ TOS: 0x0,
+ },
+ },
+ },
+ },
+ },
+ }
+ if !reflect.DeepEqual(want, got) {
+ t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got)
+ }
+}
+
+func TestDecodeExtendedIpv4TunnelEgressFlow(t *testing.T) {
+ p := gopacket.NewPacket(SFlowTestPacket7, LayerTypeSFlow, gopacket.Default)
+
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t)
+
+ got := p.ApplicationLayer().(*SFlowDatagram)
+
+ want := &SFlowDatagram{
+ DatagramVersion: uint32(5),
+ AgentAddress: []byte{0x7f, 0x0, 0x0, 0x1},
+ SubAgentID: uint32(1),
+ SequenceNumber: uint32(0x12),
+ AgentUptime: uint32(0x4268),
+ SampleCount: uint32(1),
+ FlowSamples: []SFlowFlowSample{
+ SFlowFlowSample{
+ Format: SFlowTypeFlowSample,
+ SampleLength: 0x48,
+ SequenceNumber: 0x12,
+ SourceIDClass: 0x0,
+ SourceIDIndex: 0x20003e9,
+ SamplingRate: 0x1,
+ SamplePool: 0x12,
+ Dropped: 0x0,
+ InputInterfaceFormat: 0x0,
+ InputInterface: 0x6c,
+ OutputInterfaceFormat: 0x0,
+ OutputInterface: 0x80000001,
+ RecordCount: 0x1,
+ Records: []SFlowRecord{
+ SFlowExtendedIpv4TunnelEgressRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: SFlowTypeExtendedIpv4TunnelEgressFlow,
+ FlowDataLength: 0x20,
+ },
+ SFlowIpv4Record: SFlowIpv4Record{
+ Length: 0x0,
+ Protocol: 0x0,
+ IPSrc: net.IP{0x0, 0x0, 0x0, 0x0},
+ IPDst: net.IP{0xc0, 0xa8, 0x0, 0x54},
+ PortSrc: 0x0,
+ PortDst: 0x0,
+ TCPFlags: 0x0,
+ TOS: 0x0,
+ },
+ },
+ },
+ },
+ },
+ }
+ if !reflect.DeepEqual(want, got) {
+ t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got)
+ }
+}
+
+func BenchmarkDecodeSFlowPacket1(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(SFlowTestPacket1, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+func BenchmarkDecodeSFlowPacket2(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(SFlowTestPacket2, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+func BenchmarkDecodeSFlowPacket3(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(SFlowTestPacket3, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+func BenchmarkDecodeSFlowPacket4(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(SFlowTestPacket4, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+func BenchmarkDecodeSFlowLayerPacket1(b *testing.B) {
+ var sflow SFlowDatagram
+ for i := 0; i < b.N; i++ {
+ sflow.DecodeFromBytes(SFlowTestPacket1[ /*eth*/ 14+ /*ipv4*/ 20+ /*udp*/ 8:], gopacket.NilDecodeFeedback)
+ }
+}
+
+func BenchmarkDecodeSFlowLayerPacket2(b *testing.B) {
+ var sflow SFlowDatagram
+ for i := 0; i < b.N; i++ {
+ sflow.DecodeFromBytes(SFlowTestPacket2[ /*eth*/ 14+ /*ipv4*/ 20+ /*udp*/ 8:], gopacket.NilDecodeFeedback)
+ }
+}
diff --git a/vendor/github.com/google/gopacket/layers/stp.go b/vendor/github.com/google/gopacket/layers/stp.go
new file mode 100644
index 0000000..bde7d7c
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/stp.go
@@ -0,0 +1,27 @@
+// Copyright 2017 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "github.com/google/gopacket"
+)
+
+// STP decode spanning tree protocol packets to transport BPDU (bridge protocol data unit) message.
+type STP struct {
+ BaseLayer
+}
+
+// LayerType returns gopacket.LayerTypeSTP.
+func (s *STP) LayerType() gopacket.LayerType { return LayerTypeSTP }
+
+func decodeSTP(data []byte, p gopacket.PacketBuilder) error {
+ stp := &STP{}
+ stp.Contents = data[:]
+ // TODO: parse the STP protocol into actual subfields.
+ p.AddLayer(stp)
+ return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/tcp.go b/vendor/github.com/google/gopacket/layers/tcp.go
new file mode 100644
index 0000000..fb731da
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/tcp.go
@@ -0,0 +1,327 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "encoding/hex"
+ "errors"
+ "fmt"
+
+ "github.com/google/gopacket"
+)
+
+// TCP is the layer for TCP headers.
+type TCP struct {
+ BaseLayer
+ SrcPort, DstPort TCPPort
+ Seq uint32
+ Ack uint32
+ DataOffset uint8
+ FIN, SYN, RST, PSH, ACK, URG, ECE, CWR, NS bool
+ Window uint16
+ Checksum uint16
+ Urgent uint16
+ sPort, dPort []byte
+ Options []TCPOption
+ Padding []byte
+ opts [4]TCPOption
+ tcpipchecksum
+}
+
+// TCPOptionKind represents a TCP option code.
+type TCPOptionKind uint8
+
+const (
+ TCPOptionKindEndList = 0
+ TCPOptionKindNop = 1
+ TCPOptionKindMSS = 2 // len = 4
+ TCPOptionKindWindowScale = 3 // len = 3
+ TCPOptionKindSACKPermitted = 4 // len = 2
+ TCPOptionKindSACK = 5 // len = n
+ TCPOptionKindEcho = 6 // len = 6, obsolete
+ TCPOptionKindEchoReply = 7 // len = 6, obsolete
+ TCPOptionKindTimestamps = 8 // len = 10
+ TCPOptionKindPartialOrderConnectionPermitted = 9 // len = 2, obsolete
+ TCPOptionKindPartialOrderServiceProfile = 10 // len = 3, obsolete
+ TCPOptionKindCC = 11 // obsolete
+ TCPOptionKindCCNew = 12 // obsolete
+ TCPOptionKindCCEcho = 13 // obsolete
+ TCPOptionKindAltChecksum = 14 // len = 3, obsolete
+ TCPOptionKindAltChecksumData = 15 // len = n, obsolete
+)
+
+func (k TCPOptionKind) String() string {
+ switch k {
+ case TCPOptionKindEndList:
+ return "EndList"
+ case TCPOptionKindNop:
+ return "NOP"
+ case TCPOptionKindMSS:
+ return "MSS"
+ case TCPOptionKindWindowScale:
+ return "WindowScale"
+ case TCPOptionKindSACKPermitted:
+ return "SACKPermitted"
+ case TCPOptionKindSACK:
+ return "SACK"
+ case TCPOptionKindEcho:
+ return "Echo"
+ case TCPOptionKindEchoReply:
+ return "EchoReply"
+ case TCPOptionKindTimestamps:
+ return "Timestamps"
+ case TCPOptionKindPartialOrderConnectionPermitted:
+ return "PartialOrderConnectionPermitted"
+ case TCPOptionKindPartialOrderServiceProfile:
+ return "PartialOrderServiceProfile"
+ case TCPOptionKindCC:
+ return "CC"
+ case TCPOptionKindCCNew:
+ return "CCNew"
+ case TCPOptionKindCCEcho:
+ return "CCEcho"
+ case TCPOptionKindAltChecksum:
+ return "AltChecksum"
+ case TCPOptionKindAltChecksumData:
+ return "AltChecksumData"
+ default:
+ return fmt.Sprintf("Unknown(%d)", k)
+ }
+}
+
+type TCPOption struct {
+ OptionType TCPOptionKind
+ OptionLength uint8
+ OptionData []byte
+}
+
+func (t TCPOption) String() string {
+ hd := hex.EncodeToString(t.OptionData)
+ if len(hd) > 0 {
+ hd = " 0x" + hd
+ }
+ switch t.OptionType {
+ case TCPOptionKindMSS:
+ return fmt.Sprintf("TCPOption(%s:%v%s)",
+ t.OptionType,
+ binary.BigEndian.Uint16(t.OptionData),
+ hd)
+
+ case TCPOptionKindTimestamps:
+ if len(t.OptionData) == 8 {
+ return fmt.Sprintf("TCPOption(%s:%v/%v%s)",
+ t.OptionType,
+ binary.BigEndian.Uint32(t.OptionData[:4]),
+ binary.BigEndian.Uint32(t.OptionData[4:8]),
+ hd)
+ }
+ }
+ return fmt.Sprintf("TCPOption(%s:%s)", t.OptionType, hd)
+}
+
+// LayerType returns gopacket.LayerTypeTCP
+func (t *TCP) LayerType() gopacket.LayerType { return LayerTypeTCP }
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (t *TCP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ var optionLength int
+ for _, o := range t.Options {
+ switch o.OptionType {
+ case 0, 1:
+ optionLength += 1
+ default:
+ optionLength += 2 + len(o.OptionData)
+ }
+ }
+ if opts.FixLengths {
+ if rem := optionLength % 4; rem != 0 {
+ t.Padding = lotsOfZeros[:4-rem]
+ }
+ t.DataOffset = uint8((len(t.Padding) + optionLength + 20) / 4)
+ }
+ bytes, err := b.PrependBytes(20 + optionLength + len(t.Padding))
+ if err != nil {
+ return err
+ }
+ binary.BigEndian.PutUint16(bytes, uint16(t.SrcPort))
+ binary.BigEndian.PutUint16(bytes[2:], uint16(t.DstPort))
+ binary.BigEndian.PutUint32(bytes[4:], t.Seq)
+ binary.BigEndian.PutUint32(bytes[8:], t.Ack)
+ binary.BigEndian.PutUint16(bytes[12:], t.flagsAndOffset())
+ binary.BigEndian.PutUint16(bytes[14:], t.Window)
+ binary.BigEndian.PutUint16(bytes[18:], t.Urgent)
+ start := 20
+ for _, o := range t.Options {
+ bytes[start] = byte(o.OptionType)
+ switch o.OptionType {
+ case 0, 1:
+ start++
+ default:
+ if opts.FixLengths {
+ o.OptionLength = uint8(len(o.OptionData) + 2)
+ }
+ bytes[start+1] = o.OptionLength
+ copy(bytes[start+2:start+len(o.OptionData)+2], o.OptionData)
+ start += int(o.OptionLength)
+ }
+ }
+ copy(bytes[start:], t.Padding)
+ if opts.ComputeChecksums {
+ // zero out checksum bytes in current serialization.
+ bytes[16] = 0
+ bytes[17] = 0
+ csum, err := t.computeChecksum(b.Bytes(), IPProtocolTCP)
+ if err != nil {
+ return err
+ }
+ t.Checksum = csum
+ }
+ binary.BigEndian.PutUint16(bytes[16:], t.Checksum)
+ return nil
+}
+
+func (t *TCP) ComputeChecksum() (uint16, error) {
+ return t.computeChecksum(append(t.Contents, t.Payload...), IPProtocolTCP)
+}
+
+func (t *TCP) flagsAndOffset() uint16 {
+ f := uint16(t.DataOffset) << 12
+ if t.FIN {
+ f |= 0x0001
+ }
+ if t.SYN {
+ f |= 0x0002
+ }
+ if t.RST {
+ f |= 0x0004
+ }
+ if t.PSH {
+ f |= 0x0008
+ }
+ if t.ACK {
+ f |= 0x0010
+ }
+ if t.URG {
+ f |= 0x0020
+ }
+ if t.ECE {
+ f |= 0x0040
+ }
+ if t.CWR {
+ f |= 0x0080
+ }
+ if t.NS {
+ f |= 0x0100
+ }
+ return f
+}
+
+func (tcp *TCP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ tcp.SrcPort = TCPPort(binary.BigEndian.Uint16(data[0:2]))
+ tcp.sPort = data[0:2]
+ tcp.DstPort = TCPPort(binary.BigEndian.Uint16(data[2:4]))
+ tcp.dPort = data[2:4]
+ tcp.Seq = binary.BigEndian.Uint32(data[4:8])
+ tcp.Ack = binary.BigEndian.Uint32(data[8:12])
+ tcp.DataOffset = data[12] >> 4
+ tcp.FIN = data[13]&0x01 != 0
+ tcp.SYN = data[13]&0x02 != 0
+ tcp.RST = data[13]&0x04 != 0
+ tcp.PSH = data[13]&0x08 != 0
+ tcp.ACK = data[13]&0x10 != 0
+ tcp.URG = data[13]&0x20 != 0
+ tcp.ECE = data[13]&0x40 != 0
+ tcp.CWR = data[13]&0x80 != 0
+ tcp.NS = data[12]&0x01 != 0
+ tcp.Window = binary.BigEndian.Uint16(data[14:16])
+ tcp.Checksum = binary.BigEndian.Uint16(data[16:18])
+ tcp.Urgent = binary.BigEndian.Uint16(data[18:20])
+ tcp.Options = tcp.opts[:0]
+ if tcp.DataOffset < 5 {
+ return fmt.Errorf("Invalid TCP data offset %d < 5", tcp.DataOffset)
+ }
+ dataStart := int(tcp.DataOffset) * 4
+ if dataStart > len(data) {
+ df.SetTruncated()
+ tcp.Payload = nil
+ tcp.Contents = data
+ return errors.New("TCP data offset greater than packet length")
+ }
+ tcp.Contents = data[:dataStart]
+ tcp.Payload = data[dataStart:]
+ // From here on, data points just to the header options.
+ data = data[20:dataStart]
+ for len(data) > 0 {
+ if tcp.Options == nil {
+ // Pre-allocate to avoid allocating a slice.
+ tcp.Options = tcp.opts[:0]
+ }
+ tcp.Options = append(tcp.Options, TCPOption{OptionType: TCPOptionKind(data[0])})
+ opt := &tcp.Options[len(tcp.Options)-1]
+ switch opt.OptionType {
+ case TCPOptionKindEndList: // End of options
+ opt.OptionLength = 1
+ tcp.Padding = data[1:]
+ break
+ case TCPOptionKindNop: // 1 byte padding
+ opt.OptionLength = 1
+ default:
+ opt.OptionLength = data[1]
+ if opt.OptionLength < 2 {
+ return fmt.Errorf("Invalid TCP option length %d < 2", opt.OptionLength)
+ } else if int(opt.OptionLength) > len(data) {
+ return fmt.Errorf("Invalid TCP option length %d exceeds remaining %d bytes", opt.OptionLength, len(data))
+ }
+ opt.OptionData = data[2:opt.OptionLength]
+ }
+ data = data[opt.OptionLength:]
+ }
+ return nil
+}
+
+func (t *TCP) CanDecode() gopacket.LayerClass {
+ return LayerTypeTCP
+}
+
+func (t *TCP) NextLayerType() gopacket.LayerType {
+ lt := t.DstPort.LayerType()
+ if lt == gopacket.LayerTypePayload {
+ lt = t.SrcPort.LayerType()
+ }
+ return lt
+}
+
+func decodeTCP(data []byte, p gopacket.PacketBuilder) error {
+ tcp := &TCP{}
+ err := tcp.DecodeFromBytes(data, p)
+ p.AddLayer(tcp)
+ p.SetTransportLayer(tcp)
+ if err != nil {
+ return err
+ }
+ if p.DecodeOptions().DecodeStreamsAsDatagrams {
+ return p.NextDecoder(tcp.NextLayerType())
+ } else {
+ return p.NextDecoder(gopacket.LayerTypePayload)
+ }
+}
+
+func (t *TCP) TransportFlow() gopacket.Flow {
+ return gopacket.NewFlow(EndpointTCPPort, t.sPort, t.dPort)
+}
+
+// For testing only
+func (t *TCP) SetInternalPortsForTesting() {
+ t.sPort = make([]byte, 2)
+ t.dPort = make([]byte, 2)
+ binary.BigEndian.PutUint16(t.sPort, uint16(t.SrcPort))
+ binary.BigEndian.PutUint16(t.dPort, uint16(t.DstPort))
+}
diff --git a/vendor/github.com/google/gopacket/layers/tcp_test.go b/vendor/github.com/google/gopacket/layers/tcp_test.go
new file mode 100644
index 0000000..56a6aaa
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/tcp_test.go
@@ -0,0 +1,60 @@
+// Copyright 2016, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "testing"
+
+ "github.com/google/gopacket"
+)
+
+func TestTCPOptionKindString(t *testing.T) {
+ testData := []struct {
+ o *TCPOption
+ s string
+ }{
+ {&TCPOption{
+ OptionType: TCPOptionKindNop,
+ OptionLength: 1,
+ },
+ "TCPOption(NOP:)"},
+ {&TCPOption{
+ OptionType: TCPOptionKindMSS,
+ OptionLength: 4,
+ OptionData: []byte{0x12, 0x34},
+ },
+ "TCPOption(MSS:4660 0x1234)"},
+ {&TCPOption{
+ OptionType: TCPOptionKindTimestamps,
+ OptionLength: 10,
+ OptionData: []byte{0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01},
+ },
+ "TCPOption(Timestamps:2/1 0x0000000200000001)"}}
+
+ for _, tc := range testData {
+ if s := tc.o.String(); s != tc.s {
+ t.Errorf("expected %#v string to be %s, got %s", tc.o, tc.s, s)
+ }
+ }
+}
+
+func TestTCPSerializePadding(t *testing.T) {
+ tcp := &TCP{}
+ tcp.Options = append(tcp.Options, TCPOption{
+ OptionType: TCPOptionKindNop,
+ OptionLength: 1,
+ })
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{FixLengths: true}
+ err := gopacket.SerializeLayers(buf, opts, tcp)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if len(buf.Bytes())%4 != 0 {
+ t.Errorf("TCP data of len %d not padding to 32 bit boundary", len(buf.Bytes()))
+ }
+}
diff --git a/vendor/github.com/google/gopacket/layers/tcpip.go b/vendor/github.com/google/gopacket/layers/tcpip.go
new file mode 100644
index 0000000..64ba51c
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/tcpip.go
@@ -0,0 +1,104 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "errors"
+ "fmt"
+
+ "github.com/google/gopacket"
+)
+
+// Checksum computation for TCP/UDP.
+type tcpipchecksum struct {
+ pseudoheader tcpipPseudoHeader
+}
+
+type tcpipPseudoHeader interface {
+ pseudoheaderChecksum() (uint32, error)
+}
+
+func (ip *IPv4) pseudoheaderChecksum() (csum uint32, err error) {
+ if err := ip.AddressTo4(); err != nil {
+ return 0, err
+ }
+ csum += (uint32(ip.SrcIP[0]) + uint32(ip.SrcIP[2])) << 8
+ csum += uint32(ip.SrcIP[1]) + uint32(ip.SrcIP[3])
+ csum += (uint32(ip.DstIP[0]) + uint32(ip.DstIP[2])) << 8
+ csum += uint32(ip.DstIP[1]) + uint32(ip.DstIP[3])
+ return csum, nil
+}
+
+func (ip *IPv6) pseudoheaderChecksum() (csum uint32, err error) {
+ if err := ip.AddressTo16(); err != nil {
+ return 0, err
+ }
+ for i := 0; i < 16; i += 2 {
+ csum += uint32(ip.SrcIP[i]) << 8
+ csum += uint32(ip.SrcIP[i+1])
+ csum += uint32(ip.DstIP[i]) << 8
+ csum += uint32(ip.DstIP[i+1])
+ }
+ return csum, nil
+}
+
+// Calculate the TCP/IP checksum defined in rfc1071. The passed-in csum is any
+// initial checksum data that's already been computed.
+func tcpipChecksum(data []byte, csum uint32) uint16 {
+ // to handle odd lengths, we loop to length - 1, incrementing by 2, then
+ // handle the last byte specifically by checking against the original
+ // length.
+ length := len(data) - 1
+ for i := 0; i < length; i += 2 {
+ // For our test packet, doing this manually is about 25% faster
+ // (740 ns vs. 1000ns) than doing it by calling binary.BigEndian.Uint16.
+ csum += uint32(data[i]) << 8
+ csum += uint32(data[i+1])
+ }
+ if len(data)%2 == 1 {
+ csum += uint32(data[length]) << 8
+ }
+ for csum > 0xffff {
+ csum = (csum >> 16) + (csum & 0xffff)
+ }
+ return ^uint16(csum)
+}
+
+// computeChecksum computes a TCP or UDP checksum. headerAndPayload is the
+// serialized TCP or UDP header plus its payload, with the checksum zero'd
+// out. headerProtocol is the IP protocol number of the upper-layer header.
+func (c *tcpipchecksum) computeChecksum(headerAndPayload []byte, headerProtocol IPProtocol) (uint16, error) {
+ if c.pseudoheader == nil {
+ return 0, errors.New("TCP/IP layer 4 checksum cannot be computed without network layer... call SetNetworkLayerForChecksum to set which layer to use")
+ }
+ length := uint32(len(headerAndPayload))
+ csum, err := c.pseudoheader.pseudoheaderChecksum()
+ if err != nil {
+ return 0, err
+ }
+ csum += uint32(headerProtocol)
+ csum += length & 0xffff
+ csum += length >> 16
+ return tcpipChecksum(headerAndPayload, csum), nil
+}
+
+// SetNetworkLayerForChecksum tells this layer which network layer is wrapping it.
+// This is needed for computing the checksum when serializing, since TCP/IP transport
+// layer checksums depends on fields in the IPv4 or IPv6 layer that contains it.
+// The passed in layer must be an *IPv4 or *IPv6.
+func (i *tcpipchecksum) SetNetworkLayerForChecksum(l gopacket.NetworkLayer) error {
+ switch v := l.(type) {
+ case *IPv4:
+ i.pseudoheader = v
+ case *IPv6:
+ i.pseudoheader = v
+ default:
+ return fmt.Errorf("cannot use layer type %v for tcp checksum network layer", l.LayerType())
+ }
+ return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/tcpip_test.go b/vendor/github.com/google/gopacket/layers/tcpip_test.go
new file mode 100644
index 0000000..c002e84
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/tcpip_test.go
@@ -0,0 +1,185 @@
+// Copyright 2014, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "github.com/google/gopacket"
+ "net"
+ "testing"
+)
+
+const (
+ ipv4UDPChecksum = uint16(0xbc5f) // Wireshark
+ ipv6UDPChecksumWithIPv6DstOpts = uint16(0x4d21) // Wireshark
+ ipv6UDPChecksumJumbogram = uint16(0xcda8)
+)
+
+func createIPv4ChecksumTestLayer() (ip4 *IPv4) {
+ ip4 = &IPv4{}
+ ip4.Version = 4
+ ip4.TTL = 64
+ ip4.SrcIP = net.ParseIP("192.0.2.1")
+ ip4.DstIP = net.ParseIP("198.51.100.1")
+ return
+}
+
+func createIPv6ChecksumTestLayer() (ip6 *IPv6) {
+ ip6 = &IPv6{}
+ ip6.Version = 6
+ ip6.NextHeader = IPProtocolNoNextHeader
+ ip6.HopLimit = 64
+ ip6.SrcIP = net.ParseIP("2001:db8::1")
+ ip6.DstIP = net.ParseIP("2001:db8::2")
+ return
+}
+
+func createIPv6DestinationChecksumTestLayer() (dst *IPv6Destination) {
+ tlv := &IPv6DestinationOption{}
+ tlv.OptionType = 0x01 //PadN
+ tlv.OptionData = []byte{0x00, 0x00, 0x00, 0x00}
+ dst = &IPv6Destination{}
+ dst.Options = append(dst.Options, tlv)
+ dst.NextHeader = IPProtocolNoNextHeader
+ return
+}
+
+func createUDPChecksumTestLayer() (udp *UDP) {
+ udp = &UDP{}
+ udp.SrcPort = UDPPort(12345)
+ udp.DstPort = UDPPort(9999)
+ return
+}
+
+func TestIPv4UDPChecksum(t *testing.T) {
+ var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 2)
+ var u *UDP
+ var err error
+
+ ip4 := createIPv4ChecksumTestLayer()
+ ip4.Protocol = IPProtocolUDP
+ serialize = append(serialize, ip4)
+
+ udp := createUDPChecksumTestLayer()
+ udp.SetNetworkLayerForChecksum(ip4)
+ serialize = append(serialize, udp)
+
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true}
+ err = gopacket.SerializeLayers(buf, opts, serialize...)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ p := gopacket.NewPacket(buf.Bytes(), LinkTypeRaw, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Fatal("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeIPv4, LayerTypeUDP}, t)
+
+ if l, ok := p.Layer(LayerTypeUDP).(*UDP); !ok {
+ t.Fatal("No UDP layer type found in packet")
+ } else {
+ u = l
+ }
+ got := u.Checksum
+ want := ipv4UDPChecksum
+ if got != want {
+ t.Errorf("Bad checksum:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+ }
+}
+
+func TestIPv6UDPChecksumWithIPv6DstOpts(t *testing.T) {
+ var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 3)
+ var u *UDP
+ var err error
+
+ ip6 := createIPv6ChecksumTestLayer()
+ ip6.NextHeader = IPProtocolIPv6Destination
+ serialize = append(serialize, ip6)
+
+ dst := createIPv6DestinationChecksumTestLayer()
+ dst.NextHeader = IPProtocolUDP
+ serialize = append(serialize, dst)
+
+ udp := createUDPChecksumTestLayer()
+ udp.SetNetworkLayerForChecksum(ip6)
+ serialize = append(serialize, udp)
+
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true}
+ err = gopacket.SerializeLayers(buf, opts, serialize...)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ p := gopacket.NewPacket(buf.Bytes(), LinkTypeRaw, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Fatal("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeIPv6, LayerTypeIPv6Destination, LayerTypeUDP}, t)
+
+ if l, ok := p.Layer(LayerTypeUDP).(*UDP); !ok {
+ t.Fatal("No UDP layer type found in packet")
+ } else {
+ u = l
+ }
+ got := u.Checksum
+ want := ipv6UDPChecksumWithIPv6DstOpts
+ if got != want {
+ t.Errorf("Bad checksum:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+ }
+}
+
+func TestIPv6JumbogramUDPChecksum(t *testing.T) {
+ var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 4)
+ var u *UDP
+ var err error
+
+ ip6 := &IPv6{}
+ ip6.Version = 6
+ ip6.NextHeader = IPProtocolUDP
+ ip6.HopLimit = 64
+ ip6.SrcIP = net.ParseIP("2001:db8::1")
+ ip6.DstIP = net.ParseIP("2001:db8::2")
+ serialize = append(serialize, ip6)
+
+ udp := &UDP{}
+ udp.SrcPort = UDPPort(12345)
+ udp.DstPort = UDPPort(9999)
+ udp.SetNetworkLayerForChecksum(ip6)
+ serialize = append(serialize, udp)
+
+ payload := make([]byte, ipv6MaxPayloadLength+1)
+ for i := range payload {
+ payload[i] = 0xfe
+ }
+ serialize = append(serialize, gopacket.Payload(payload))
+
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true}
+ err = gopacket.SerializeLayers(buf, opts, serialize...)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ p := gopacket.NewPacket(buf.Bytes(), LinkTypeRaw, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Fatal("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeIPv6, LayerTypeIPv6HopByHop, LayerTypeUDP, gopacket.LayerTypePayload}, t)
+
+ if l, ok := p.Layer(LayerTypeUDP).(*UDP); !ok {
+ t.Fatal("No UDP layer type found in packet")
+ } else {
+ u = l
+ }
+ got := u.Checksum
+ want := ipv6UDPChecksumJumbogram
+ if got != want {
+ t.Errorf("Bad checksum:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+ }
+}
diff --git a/vendor/github.com/google/gopacket/layers/test_creator.py b/vendor/github.com/google/gopacket/layers/test_creator.py
new file mode 100755
index 0000000..c92d276
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/test_creator.py
@@ -0,0 +1,103 @@
+#!/usr/bin/python
+# Copyright 2012 Google, Inc. All rights reserved.
+
+"""TestCreator creates test templates from pcap files."""
+
+import argparse
+import base64
+import glob
+import re
+import string
+import subprocess
+import sys
+
+
+class Packet(object):
+ """Helper class encapsulating packet from a pcap file."""
+
+ def __init__(self, packet_lines):
+ self.packet_lines = packet_lines
+ self.data = self._DecodeText(packet_lines)
+
+ @classmethod
+ def _DecodeText(cls, packet_lines):
+ packet_bytes = []
+ # First line is timestamp and stuff, skip it.
+ # Format: 0x0010: 0000 0020 3aff 3ffe 0000 0000 0000 0000 ....:.?.........
+
+ for line in packet_lines[1:]:
+ m = re.match(r'\s+0x[a-f\d]+:\s+((?:[\da-f]{2,4}\s)*)', line, re.IGNORECASE)
+ if m is None: continue
+ for hexpart in m.group(1).split():
+ packet_bytes.append(base64.b16decode(hexpart.upper()))
+ return ''.join(packet_bytes)
+
+ def Test(self, name, link_type):
+ """Yields a test using this packet, as a set of lines."""
+ yield '// testPacket%s is the packet:' % name
+ for line in self.packet_lines:
+ yield '// ' + line
+ yield 'var testPacket%s = []byte{' % name
+ data = list(self.data)
+ while data:
+ linebytes, data = data[:16], data[16:]
+ yield ''.join(['\t'] + ['0x%02x, ' % ord(c) for c in linebytes])
+ yield '}'
+ yield 'func TestPacket%s(t *testing.T) {' % name
+ yield '\tp := gopacket.NewPacket(testPacket%s, LinkType%s, gopacket.Default)' % (name, link_type)
+ yield '\tif p.ErrorLayer() != nil {'
+ yield '\t\tt.Error("Failed to decode packet:", p.ErrorLayer().Error())'
+ yield '\t}'
+ yield '\tcheckLayers(p, []gopacket.LayerType{LayerType%s, FILL_ME_IN_WITH_ACTUAL_LAYERS}, t)' % link_type
+ yield '}'
+ yield 'func BenchmarkDecodePacket%s(b *testing.B) {' % name
+ yield '\tfor i := 0; i < b.N; i++ {'
+ yield '\t\tgopacket.NewPacket(testPacket%s, LinkType%s, gopacket.NoCopy)' % (name, link_type)
+ yield '\t}'
+ yield '}'
+
+
+
+def GetTcpdumpOutput(filename):
+ """Runs tcpdump on the given file, returning output as string."""
+ return subprocess.check_output(
+ ['tcpdump', '-XX', '-s', '0', '-n', '-r', filename])
+
+
+def TcpdumpOutputToPackets(output):
+ """Reads a pcap file with TCPDump, yielding Packet objects."""
+ pdata = []
+ for line in output.splitlines():
+ if line[0] not in string.whitespace and pdata:
+ yield Packet(pdata)
+ pdata = []
+ pdata.append(line)
+ if pdata:
+ yield Packet(pdata)
+
+
+def main():
+ class CustomHelpFormatter(argparse.ArgumentDefaultsHelpFormatter):
+ def _format_usage(self, usage, actions, groups, prefix=None):
+ header =('TestCreator creates gopacket tests using a pcap file.\n\n'
+ 'Tests are written to standard out... they can then be \n'
+ 'copied into the file of your choice and modified as \n'
+ 'you see.\n\n')
+ return header + argparse.ArgumentDefaultsHelpFormatter._format_usage(
+ self, usage, actions, groups, prefix)
+
+ parser = argparse.ArgumentParser(formatter_class=CustomHelpFormatter)
+ parser.add_argument('--link_type', default='Ethernet', help='the link type (default: %(default)s)')
+ parser.add_argument('--name', default='Packet%d', help='the layer type, must have "%d" inside it')
+ parser.add_argument('files', metavar='file.pcap', type=str, nargs='+', help='the files to process')
+
+ args = parser.parse_args()
+
+ for arg in args.files:
+ for path in glob.glob(arg):
+ for i, packet in enumerate(TcpdumpOutputToPackets(GetTcpdumpOutput(path))):
+ print '\n'.join(packet.Test(
+ args.name % i, args.link_type))
+
+if __name__ == '__main__':
+ main()
diff --git a/vendor/github.com/google/gopacket/layers/udp.go b/vendor/github.com/google/gopacket/layers/udp.go
new file mode 100644
index 0000000..20f8c50
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/udp.go
@@ -0,0 +1,120 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "fmt"
+ "github.com/google/gopacket"
+)
+
+// UDP is the layer for UDP headers.
+type UDP struct {
+ BaseLayer
+ SrcPort, DstPort UDPPort
+ Length uint16
+ Checksum uint16
+ sPort, dPort []byte
+ tcpipchecksum
+}
+
+// LayerType returns gopacket.LayerTypeUDP
+func (u *UDP) LayerType() gopacket.LayerType { return LayerTypeUDP }
+
+func (udp *UDP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ udp.SrcPort = UDPPort(binary.BigEndian.Uint16(data[0:2]))
+ udp.sPort = data[0:2]
+ udp.DstPort = UDPPort(binary.BigEndian.Uint16(data[2:4]))
+ udp.dPort = data[2:4]
+ udp.Length = binary.BigEndian.Uint16(data[4:6])
+ udp.Checksum = binary.BigEndian.Uint16(data[6:8])
+ udp.BaseLayer = BaseLayer{Contents: data[:8]}
+ switch {
+ case udp.Length >= 8:
+ hlen := int(udp.Length)
+ if hlen > len(data) {
+ df.SetTruncated()
+ hlen = len(data)
+ }
+ udp.Payload = data[8:hlen]
+ case udp.Length == 0: // Jumbogram, use entire rest of data
+ udp.Payload = data[8:]
+ default:
+ return fmt.Errorf("UDP packet too small: %d bytes", udp.Length)
+ }
+ return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (u *UDP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ var jumbo bool
+
+ payload := b.Bytes()
+ if _, ok := u.pseudoheader.(*IPv6); ok {
+ if len(payload)+8 > 65535 {
+ jumbo = true
+ }
+ }
+ bytes, err := b.PrependBytes(8)
+ if err != nil {
+ return err
+ }
+ binary.BigEndian.PutUint16(bytes, uint16(u.SrcPort))
+ binary.BigEndian.PutUint16(bytes[2:], uint16(u.DstPort))
+ if opts.FixLengths {
+ if jumbo {
+ u.Length = 0
+ } else {
+ u.Length = uint16(len(payload)) + 8
+ }
+ }
+ binary.BigEndian.PutUint16(bytes[4:], u.Length)
+ if opts.ComputeChecksums {
+ // zero out checksum bytes
+ bytes[6] = 0
+ bytes[7] = 0
+ csum, err := u.computeChecksum(b.Bytes(), IPProtocolUDP)
+ if err != nil {
+ return err
+ }
+ u.Checksum = csum
+ }
+ binary.BigEndian.PutUint16(bytes[6:], u.Checksum)
+ return nil
+}
+
+func (u *UDP) CanDecode() gopacket.LayerClass {
+ return LayerTypeUDP
+}
+
+// NextLayerType use the destination port to select the
+// right next decoder. It tries first to decode via the
+// destination port, then the source port.
+func (u *UDP) NextLayerType() gopacket.LayerType {
+ if lt := u.DstPort.LayerType(); lt != gopacket.LayerTypePayload {
+ return lt
+ }
+ return u.SrcPort.LayerType()
+}
+
+func decodeUDP(data []byte, p gopacket.PacketBuilder) error {
+ udp := &UDP{}
+ err := udp.DecodeFromBytes(data, p)
+ p.AddLayer(udp)
+ p.SetTransportLayer(udp)
+ if err != nil {
+ return err
+ }
+ return p.NextDecoder(udp.NextLayerType())
+}
+
+func (u *UDP) TransportFlow() gopacket.Flow {
+ return gopacket.NewFlow(EndpointUDPPort, u.sPort, u.dPort)
+}
diff --git a/vendor/github.com/google/gopacket/layers/udp_test.go b/vendor/github.com/google/gopacket/layers/udp_test.go
new file mode 100644
index 0000000..e71236c
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/udp_test.go
@@ -0,0 +1,372 @@
+// Copyright 2012, Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "reflect"
+ "testing"
+
+ "github.com/google/gopacket"
+)
+
+// testUDPPacketDNS is the packet:
+// 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)
+// 0x0000: 24be 0527 0b17 001f cab3 75c0 0800 4500 $..'......u...E.
+// 0x0010: 00e6 68cf 0000 3f11 a6f9 ac10 ff01 ac1d ..h...?.........
+// 0x0020: 140f 0035 896d 00d2 754a b8d8 8180 0001 ...5.m..uJ......
+// 0x0030: 0007 0000 0000 0478 6b63 6403 636f 6d00 .......xkcd.com.
+// 0x0040: 000f 0001 c00c 000f 0001 0000 0258 0018 .............X..
+// 0x0050: 0014 0441 4c54 3205 4153 504d 5801 4c06 ...ALT2.ASPMX.L.
+// 0x0060: 474f 4f47 4c45 c011 c00c 000f 0001 0000 GOOGLE..........
+// 0x0070: 0258 0016 001e 0641 5350 4d58 320a 474f .X.....ASPMX2.GO
+// 0x0080: 4f47 4c45 4d41 494c c011 c00c 000f 0001 OGLEMAIL........
+// 0x0090: 0000 0258 000b 001e 0641 5350 4d58 33c0 ...X.....ASPMX3.
+// 0x00a0: 53c0 0c00 0f00 0100 0002 5800 0b00 1e06 S.........X.....
+// 0x00b0: 4153 504d 5834 c053 c00c 000f 0001 0000 ASPMX4.S........
+// 0x00c0: 0258 000b 001e 0641 5350 4d58 35c0 53c0 .X.....ASPMX5.S.
+// 0x00d0: 0c00 0f00 0100 0002 5800 0400 0ac0 2dc0 ........X.....-.
+// 0x00e0: 0c00 0f00 0100 0002 5800 0900 1404 414c ........X.....AL
+// 0x00f0: 5431 c02d T1.-
+// Packet generated by doing DNS query for 'xkcd.com'
+var testUDPPacketDNS = []byte{
+ 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x75, 0xc0, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0xe6, 0x68, 0xcf, 0x00, 0x00, 0x3f, 0x11, 0xa6, 0xf9, 0xac, 0x10, 0xff, 0x01, 0xac, 0x1d,
+ 0x14, 0x0f, 0x00, 0x35, 0x89, 0x6d, 0x00, 0xd2, 0x75, 0x4a, 0xb8, 0xd8, 0x81, 0x80, 0x00, 0x01,
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x04, 0x78, 0x6b, 0x63, 0x64, 0x03, 0x63, 0x6f, 0x6d, 0x00,
+ 0x00, 0x0f, 0x00, 0x01, 0xc0, 0x0c, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00, 0x02, 0x58, 0x00, 0x18,
+ 0x00, 0x14, 0x04, 0x41, 0x4c, 0x54, 0x32, 0x05, 0x41, 0x53, 0x50, 0x4d, 0x58, 0x01, 0x4c, 0x06,
+ 0x47, 0x4f, 0x4f, 0x47, 0x4c, 0x45, 0xc0, 0x11, 0xc0, 0x0c, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00,
+ 0x02, 0x58, 0x00, 0x16, 0x00, 0x1e, 0x06, 0x41, 0x53, 0x50, 0x4d, 0x58, 0x32, 0x0a, 0x47, 0x4f,
+ 0x4f, 0x47, 0x4c, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0xc0, 0x11, 0xc0, 0x0c, 0x00, 0x0f, 0x00, 0x01,
+ 0x00, 0x00, 0x02, 0x58, 0x00, 0x0b, 0x00, 0x1e, 0x06, 0x41, 0x53, 0x50, 0x4d, 0x58, 0x33, 0xc0,
+ 0x53, 0xc0, 0x0c, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00, 0x02, 0x58, 0x00, 0x0b, 0x00, 0x1e, 0x06,
+ 0x41, 0x53, 0x50, 0x4d, 0x58, 0x34, 0xc0, 0x53, 0xc0, 0x0c, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00,
+ 0x02, 0x58, 0x00, 0x0b, 0x00, 0x1e, 0x06, 0x41, 0x53, 0x50, 0x4d, 0x58, 0x35, 0xc0, 0x53, 0xc0,
+ 0x0c, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00, 0x02, 0x58, 0x00, 0x04, 0x00, 0x0a, 0xc0, 0x2d, 0xc0,
+ 0x0c, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00, 0x02, 0x58, 0x00, 0x09, 0x00, 0x14, 0x04, 0x41, 0x4c,
+ 0x54, 0x31, 0xc0, 0x2d,
+}
+
+func TestUDPPacketDNS(t *testing.T) {
+ p := gopacket.NewPacket(testUDPPacketDNS, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeDNS}, t)
+ if got, ok := p.TransportLayer().(*UDP); ok {
+ want := &UDP{
+ BaseLayer: BaseLayer{
+ Contents: []byte{0x0, 0x35, 0x89, 0x6d, 0x0, 0xd2, 0x75, 0x4a},
+ Payload: []byte{0xb8, 0xd8, 0x81, 0x80, 0x0, 0x1, 0x0,
+ 0x7, 0x0, 0x0, 0x0, 0x0, 0x4, 0x78, 0x6b, 0x63, 0x64, 0x3, 0x63, 0x6f,
+ 0x6d, 0x0, 0x0, 0xf, 0x0, 0x1, 0xc0, 0xc, 0x0, 0xf, 0x0, 0x1, 0x0, 0x0,
+ 0x2, 0x58, 0x0, 0x18, 0x0, 0x14, 0x4, 0x41, 0x4c, 0x54, 0x32, 0x5, 0x41,
+ 0x53, 0x50, 0x4d, 0x58, 0x1, 0x4c, 0x6, 0x47, 0x4f, 0x4f, 0x47, 0x4c,
+ 0x45, 0xc0, 0x11, 0xc0, 0xc, 0x0, 0xf, 0x0, 0x1, 0x0, 0x0, 0x2, 0x58, 0x0,
+ 0x16, 0x0, 0x1e, 0x6, 0x41, 0x53, 0x50, 0x4d, 0x58, 0x32, 0xa, 0x47, 0x4f,
+ 0x4f, 0x47, 0x4c, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0xc0, 0x11, 0xc0, 0xc,
+ 0x0, 0xf, 0x0, 0x1, 0x0, 0x0, 0x2, 0x58, 0x0, 0xb, 0x0, 0x1e, 0x6, 0x41,
+ 0x53, 0x50, 0x4d, 0x58, 0x33, 0xc0, 0x53, 0xc0, 0xc, 0x0, 0xf, 0x0, 0x1,
+ 0x0, 0x0, 0x2, 0x58, 0x0, 0xb, 0x0, 0x1e, 0x6, 0x41, 0x53, 0x50, 0x4d,
+ 0x58, 0x34, 0xc0, 0x53, 0xc0, 0xc, 0x0, 0xf, 0x0, 0x1, 0x0, 0x0, 0x2,
+ 0x58, 0x0, 0xb, 0x0, 0x1e, 0x6, 0x41, 0x53, 0x50, 0x4d, 0x58, 0x35, 0xc0,
+ 0x53, 0xc0, 0xc, 0x0, 0xf, 0x0, 0x1, 0x0, 0x0, 0x2, 0x58, 0x0, 0x4, 0x0,
+ 0xa, 0xc0, 0x2d, 0xc0, 0xc, 0x0, 0xf, 0x0, 0x1, 0x0, 0x0, 0x2, 0x58, 0x0,
+ 0x9, 0x0, 0x14, 0x4, 0x41, 0x4c, 0x54, 0x31, 0xc0, 0x2d},
+ },
+ SrcPort: 53,
+ DstPort: 35181,
+ Length: 210,
+ Checksum: 30026,
+ sPort: []byte{0x0, 0x35},
+ dPort: []byte{0x89, 0x6d},
+ }
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("UDP packet mismatch:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want)
+ }
+ } else {
+ t.Error("Transport layer packet not UDP")
+ }
+}
+
+func loadDNS(dnspacket []byte, t *testing.T) *DNS {
+ p := gopacket.NewPacket(dnspacket, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4,
+ LayerTypeUDP, LayerTypeDNS}, t)
+
+ dnsL := p.Layer(LayerTypeDNS)
+ if dnsL == nil {
+ t.Error("No DNS Layer found")
+ }
+
+ dns, ok := dnsL.(*DNS)
+ if !ok {
+ return nil
+ }
+ return dns
+}
+
+var testDNSQueryA = []byte{
+ 0xfe, 0x54, 0x00, 0x3e, 0x00, 0x96, 0x52, 0x54, /* .T.>..RT */
+ 0x00, 0xbd, 0x1c, 0x70, 0x08, 0x00, 0x45, 0x00, /* ...p..E. */
+ 0x00, 0x3c, 0x22, 0xe0, 0x00, 0x00, 0x40, 0x11, /* .<"...@. */
+ 0xe2, 0x38, 0xc0, 0xa8, 0x7a, 0x46, 0xc0, 0xa8, /* .8..zF.. */
+ 0x7a, 0x01, 0xc3, 0x35, 0x00, 0x35, 0x00, 0x28, /* z..5.5.( */
+ 0x75, 0xd2, 0x52, 0x41, 0x01, 0x00, 0x00, 0x01, /* u.RA.... */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x77, /* .......w */
+ 0x77, 0x77, 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, /* ww.googl */
+ 0x65, 0x03, 0x63, 0x6f, 0x6d, 0x00, 0x00, 0x01, /* e.com... */
+ 0x00, 0x01, /* .. */
+}
+
+func TestDNSQueryA(t *testing.T) {
+ dns := loadDNS(testDNSQueryA, t)
+ if dns == nil {
+ t.Fatal("Failed to get a pointer to DNS struct")
+ }
+
+ if uint16(len(dns.Questions)) != dns.QDCount {
+ t.Fatal("Invalid query decoding, not the right number of questions")
+ }
+
+ if string(dns.Questions[0].Name) != "www.google.com" {
+ t.Errorf("Invalid query decoding, expecting 'www.google.com', got '%s'",
+ dns.Questions[0].Name)
+ }
+ if dns.Questions[0].Class != DNSClassIN {
+ t.Errorf("Invalid query decoding, expecting Class IN, got '%d'",
+ dns.Questions[0].Class)
+ }
+
+ if dns.Questions[0].Type != DNSTypeA {
+ t.Errorf("Invalid query decoding, expecting Type A, got '%d'",
+ dns.Questions[0].Type)
+ }
+}
+
+var testDNSRRA = []byte{
+ 0x52, 0x54, 0x00, 0xbd, 0x1c, 0x70, 0xfe, 0x54, /* RT...p.T */
+ 0x00, 0x3e, 0x00, 0x96, 0x08, 0x00, 0x45, 0x00, /* .>....E. */
+ 0x01, 0x24, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11, /* .$..@.@. */
+ 0xc4, 0x30, 0xc0, 0xa8, 0x7a, 0x01, 0xc0, 0xa8, /* .0..z... */
+ 0x7a, 0x46, 0x00, 0x35, 0xc3, 0x35, 0x01, 0x10, /* zF.5.5.. */
+ 0x76, 0xba, 0x52, 0x41, 0x81, 0x80, 0x00, 0x01, /* v.RA.... */
+ 0x00, 0x06, 0x00, 0x04, 0x00, 0x04, 0x03, 0x77, /* .......w */
+ 0x77, 0x77, 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, /* ww.googl */
+ 0x65, 0x03, 0x63, 0x6f, 0x6d, 0x00, 0x00, 0x01, /* e.com... */
+ 0x00, 0x01, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, /* ........ */
+ 0x00, 0x00, 0x01, 0x2c, 0x00, 0x04, 0x4a, 0x7d, /* ...,..J} */
+ 0xc3, 0x67, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, /* .g...... */
+ 0x00, 0x00, 0x01, 0x2c, 0x00, 0x04, 0x4a, 0x7d, /* ...,..J} */
+ 0xc3, 0x68, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, /* .h...... */
+ 0x00, 0x00, 0x01, 0x2c, 0x00, 0x04, 0x4a, 0x7d, /* ...,..J} */
+ 0xc3, 0x69, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, /* .i...... */
+ 0x00, 0x00, 0x01, 0x2c, 0x00, 0x04, 0x4a, 0x7d, /* ...,..J} */
+ 0xc3, 0x6a, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, /* .j...... */
+ 0x00, 0x00, 0x01, 0x2c, 0x00, 0x04, 0x4a, 0x7d, /* ...,..J} */
+ 0xc3, 0x93, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, /* ........ */
+ 0x00, 0x00, 0x01, 0x2c, 0x00, 0x04, 0x4a, 0x7d, /* ...,..J} */
+ 0xc3, 0x63, 0xc0, 0x10, 0x00, 0x02, 0x00, 0x01, /* .c...... */
+ 0x00, 0x02, 0xa3, 0x00, 0x00, 0x06, 0x03, 0x6e, /* .......n */
+ 0x73, 0x32, 0xc0, 0x10, 0xc0, 0x10, 0x00, 0x02, /* s2...... */
+ 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, 0x00, 0x06, /* ........ */
+ 0x03, 0x6e, 0x73, 0x33, 0xc0, 0x10, 0xc0, 0x10, /* .ns3.... */
+ 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, /* ........ */
+ 0x00, 0x06, 0x03, 0x6e, 0x73, 0x31, 0xc0, 0x10, /* ...ns1.. */
+ 0xc0, 0x10, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, /* ........ */
+ 0xa3, 0x00, 0x00, 0x06, 0x03, 0x6e, 0x73, 0x34, /* .....ns4 */
+ 0xc0, 0x10, 0xc0, 0xb0, 0x00, 0x01, 0x00, 0x01, /* ........ */
+ 0x00, 0x02, 0xa3, 0x00, 0x00, 0x04, 0xd8, 0xef, /* ........ */
+ 0x20, 0x0a, 0xc0, 0x8c, 0x00, 0x01, 0x00, 0x01, /* ....... */
+ 0x00, 0x02, 0xa3, 0x00, 0x00, 0x04, 0xd8, 0xef, /* ........ */
+ 0x22, 0x0a, 0xc0, 0x9e, 0x00, 0x01, 0x00, 0x01, /* "....... */
+ 0x00, 0x02, 0xa3, 0x00, 0x00, 0x04, 0xd8, 0xef, /* ........ */
+ 0x24, 0x0a, 0xc0, 0xc2, 0x00, 0x01, 0x00, 0x01, /* $....... */
+ 0x00, 0x02, 0xa3, 0x00, 0x00, 0x04, 0xd8, 0xef, /* ........ */
+ 0x26, 0x0a, /* &. */
+}
+
+func TestDNSRRA(t *testing.T) {
+ dns := loadDNS(testDNSRRA, t)
+ if dns == nil {
+ t.Fatal("Failed to get a pointer to DNS struct")
+ return
+ }
+
+ if uint16(len(dns.Questions)) != dns.QDCount {
+ t.Fatal("Invalid query decoding, not the right number of questions")
+ } else if uint16(len(dns.Answers)) != dns.ANCount {
+ t.Fatal("Invalid query decoding, not the right number of answers")
+ } else if uint16(len(dns.Authorities)) != dns.NSCount {
+ t.Fatal("Invalid query decoding, not the right number of authorities")
+ } else if uint16(len(dns.Additionals)) != dns.ARCount {
+ t.Fatal("Invalid query decoding, not the right number of additionals info")
+ }
+
+ if string(dns.Questions[0].Name) != "www.google.com" {
+ t.Errorf("Invalid query decoding, expecting 'www.google.com', got '%s'",
+ dns.Questions[0].Name)
+ }
+ if string(dns.Answers[0].Name) != "www.google.com" {
+ t.Errorf("Invalid query decoding, expecting 'www.google.com', got '%d'",
+ dns.Questions[0].Class)
+ }
+ if dns.Answers[0].Class != DNSClassIN {
+ t.Errorf("Invalid query decoding, expecting Class IN, got '%d'",
+ dns.Questions[0].Class)
+ }
+ if dns.Answers[0].Type != DNSTypeA {
+ t.Errorf("Invalid query decoding, expecting Type A, got '%d'",
+ dns.Questions[0].Type)
+ }
+ if !dns.Answers[0].IP.Equal([]byte{74, 125, 195, 103}) {
+ t.Errorf("Invalid query decoding, invalid IP address,"+
+ " expecting '74.125.195.103', got '%s'",
+ dns.Answers[0].IP.String())
+ }
+ if len(dns.Answers) != 6 {
+ t.Errorf("No correct number of answers, expecting 6, go '%d'",
+ len(dns.Answers))
+ }
+ if len(dns.Authorities) != 4 {
+ t.Errorf("No correct number of answers, expecting 4, go '%d'",
+ len(dns.Answers))
+ }
+ if len(dns.Additionals) != 4 {
+ t.Errorf("No correct number of answers, expecting 4, go '%d'",
+ len(dns.Answers))
+ } else {
+ for i, want := range []string{
+ "ns1.google.com",
+ "ns2.google.com",
+ "ns3.google.com",
+ "ns4.google.com",
+ } {
+ if got := string(dns.Additionals[i].Name); got != want {
+ t.Errorf("got %q want %q", got, want)
+ }
+ }
+ }
+}
+
+var testDNSAAAA = []byte{
+ 0x52, 0x54, 0x00, 0xbd, 0x1c, 0x70, 0xfe, 0x54, /* RT...p.T */
+ 0x00, 0x3e, 0x00, 0x96, 0x08, 0x00, 0x45, 0x00, /* .>....E. */
+ 0x00, 0xe0, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11, /* ....@.@. */
+ 0xc4, 0x74, 0xc0, 0xa8, 0x7a, 0x01, 0xc0, 0xa8, /* .t..z... */
+ 0x7a, 0x46, 0x00, 0x35, 0xdb, 0x13, 0x00, 0xcc, /* zF.5.... */
+ 0x76, 0x76, 0xf3, 0x03, 0x81, 0x80, 0x00, 0x01, /* vv...... */
+ 0x00, 0x01, 0x00, 0x04, 0x00, 0x04, 0x03, 0x77, /* .......w */
+ 0x77, 0x77, 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, /* ww.googl */
+ 0x65, 0x03, 0x63, 0x6f, 0x6d, 0x00, 0x00, 0x1c, /* e.com... */
+ 0x00, 0x01, 0xc0, 0x0c, 0x00, 0x1c, 0x00, 0x01, /* ........ */
+ 0x00, 0x00, 0x01, 0x2c, 0x00, 0x10, 0x2a, 0x00, /* ...,..*. */
+ 0x14, 0x50, 0x40, 0x0c, 0x0c, 0x01, 0x00, 0x00, /* .P@..... */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0xc0, 0x10, /* .....i.. */
+ 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, /* ........ */
+ 0x00, 0x06, 0x03, 0x6e, 0x73, 0x34, 0xc0, 0x10, /* ...ns4.. */
+ 0xc0, 0x10, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, /* ........ */
+ 0xa3, 0x00, 0x00, 0x06, 0x03, 0x6e, 0x73, 0x32, /* .....ns2 */
+ 0xc0, 0x10, 0xc0, 0x10, 0x00, 0x02, 0x00, 0x01, /* ........ */
+ 0x00, 0x02, 0xa3, 0x00, 0x00, 0x06, 0x03, 0x6e, /* .......n */
+ 0x73, 0x31, 0xc0, 0x10, 0xc0, 0x10, 0x00, 0x02, /* s1...... */
+ 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, 0x00, 0x06, /* ........ */
+ 0x03, 0x6e, 0x73, 0x33, 0xc0, 0x10, 0xc0, 0x6c, /* .ns3...l */
+ 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, /* ........ */
+ 0x00, 0x04, 0xd8, 0xef, 0x20, 0x0a, 0xc0, 0x5a, /* .... ..Z */
+ 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, /* ........ */
+ 0x00, 0x04, 0xd8, 0xef, 0x22, 0x0a, 0xc0, 0x7e, /* ...."..~ */
+ 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, /* ........ */
+ 0x00, 0x04, 0xd8, 0xef, 0x24, 0x0a, 0xc0, 0x48, /* ....$..H */
+ 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, /* ........ */
+ 0x00, 0x04, 0xd8, 0xef, 0x26, 0x0a, /* ....&. */
+}
+
+func TestDNSAAAA(t *testing.T) {
+ dns := loadDNS(testDNSAAAA, t)
+ if dns == nil {
+ t.Error("Failed to get a pointer to DNS struct")
+ return
+ }
+
+ if len(dns.Questions) != 1 {
+ t.Error("Invalid number of question")
+ return
+ }
+ if dns.Questions[0].Type != DNSTypeAAAA {
+ t.Errorf("Invalid question, Type is not AAAA, found %d",
+ dns.Questions[0].Type)
+ }
+
+ if len(dns.Answers) != 1 {
+ t.Error("Invalid number of answers")
+ }
+ if !dns.Answers[0].IP.Equal([]byte{0x2a, 0x00, 0x14, 0x50, 0x40,
+ 0x0c, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69}) {
+ t.Error("Invalid IP address, found ",
+ dns.Answers[0].IP.String())
+ }
+}
+
+var testDNSMXSOA = []byte{
+ 0x52, 0x54, 0x00, 0xbd, 0x1c, 0x70, 0xfe, 0x54, /* RT...p.T */
+ 0x00, 0x3e, 0x00, 0x96, 0x08, 0x00, 0x45, 0x00, /* .>....E. */
+ 0x00, 0x6e, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11, /* .n..@.@. */
+ 0xc4, 0xe6, 0xc0, 0xa8, 0x7a, 0x01, 0xc0, 0xa8, /* ....z... */
+ 0x7a, 0x46, 0x00, 0x35, 0x9c, 0x60, 0x00, 0x5a, /* zF.5.`.Z */
+ 0x76, 0x04, 0xfc, 0x7a, 0x81, 0x80, 0x00, 0x01, /* v..z.... */
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0x77, /* .......w */
+ 0x77, 0x77, 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, /* ww.googl */
+ 0x65, 0x03, 0x63, 0x6f, 0x6d, 0x00, 0x00, 0x0f, /* e.com... */
+ 0x00, 0x01, 0xc0, 0x10, 0x00, 0x06, 0x00, 0x01, /* ........ */
+ 0x00, 0x00, 0x00, 0x3c, 0x00, 0x26, 0x03, 0x6e, /* ...<.&.n */
+ 0x73, 0x31, 0xc0, 0x10, 0x09, 0x64, 0x6e, 0x73, /* s1...dns */
+ 0x2d, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0xc0, 0x10, /* -admin.. */
+ 0x00, 0x17, 0x9f, 0x64, 0x00, 0x00, 0x1c, 0x20, /* ...d... */
+ 0x00, 0x00, 0x07, 0x08, 0x00, 0x12, 0x75, 0x00, /* ......u. */
+ 0x00, 0x00, 0x01, 0x2c, /* ..., */
+}
+
+func TestDNSMXSOA(t *testing.T) {
+ dns := loadDNS(testDNSMXSOA, t)
+ if dns == nil {
+ t.Error("Failed to get a pointer to DNS struct")
+ return
+ }
+
+ if len(dns.Authorities) != 1 {
+ t.Error("Invalid number of authoritative answers, found ",
+ len(dns.Authorities))
+ return
+ }
+}
+
+func BenchmarkDecodeDNS(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testDNSQueryA, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+func BenchmarkDecodeDNSLayer(b *testing.B) {
+ var dns DNS
+ for i := 0; i < b.N; i++ {
+ dns.DecodeFromBytes(testDNSAAAA[ /*eth*/ 14+ /*ipv4*/ 20+ /*udp*/ 8:], gopacket.NilDecodeFeedback)
+ }
+}
+func TestDNSDoesNotMalloc(t *testing.T) {
+ var dns DNS
+ if n := testing.AllocsPerRun(1000, func() {
+ if err := dns.DecodeFromBytes(testDNSAAAA[ /*eth*/ 14+ /*ipv4*/ 20+ /*udp*/ 8:], gopacket.NilDecodeFeedback); err != nil {
+ t.Fatal(err)
+ }
+ }); n > 0 {
+ t.Error(n, "mallocs decoding DNS")
+ }
+}
diff --git a/vendor/github.com/google/gopacket/layers/udplite.go b/vendor/github.com/google/gopacket/layers/udplite.go
new file mode 100644
index 0000000..7d84c51
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/udplite.go
@@ -0,0 +1,44 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "github.com/google/gopacket"
+)
+
+// UDPLite is the layer for UDP-Lite headers (rfc 3828).
+type UDPLite struct {
+ BaseLayer
+ SrcPort, DstPort UDPLitePort
+ ChecksumCoverage uint16
+ Checksum uint16
+ sPort, dPort []byte
+}
+
+// LayerType returns gopacket.LayerTypeUDPLite
+func (u *UDPLite) LayerType() gopacket.LayerType { return LayerTypeUDPLite }
+
+func decodeUDPLite(data []byte, p gopacket.PacketBuilder) error {
+ udp := &UDPLite{
+ SrcPort: UDPLitePort(binary.BigEndian.Uint16(data[0:2])),
+ sPort: data[0:2],
+ DstPort: UDPLitePort(binary.BigEndian.Uint16(data[2:4])),
+ dPort: data[2:4],
+ ChecksumCoverage: binary.BigEndian.Uint16(data[4:6]),
+ Checksum: binary.BigEndian.Uint16(data[6:8]),
+ BaseLayer: BaseLayer{data[:8], data[8:]},
+ }
+ p.AddLayer(udp)
+ p.SetTransportLayer(udp)
+ return p.NextDecoder(gopacket.LayerTypePayload)
+}
+
+func (u *UDPLite) TransportFlow() gopacket.Flow {
+ return gopacket.NewFlow(EndpointUDPLitePort, u.sPort, u.dPort)
+}
diff --git a/vendor/github.com/google/gopacket/layers/usb.go b/vendor/github.com/google/gopacket/layers/usb.go
new file mode 100644
index 0000000..d4f483c
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/usb.go
@@ -0,0 +1,308 @@
+// Copyright 2014 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "github.com/google/gopacket"
+)
+
+type USBEventType uint8
+
+const (
+ USBEventTypeSubmit USBEventType = 'S'
+ USBEventTypeComplete USBEventType = 'C'
+ USBEventTypeError USBEventType = 'E'
+)
+
+func (a USBEventType) String() string {
+ switch a {
+ case USBEventTypeSubmit:
+ return "SUBMIT"
+ case USBEventTypeComplete:
+ return "COMPLETE"
+ case USBEventTypeError:
+ return "ERROR"
+ default:
+ return "Unknown event type"
+ }
+}
+
+type USBRequestBlockSetupRequest uint8
+
+const (
+ USBRequestBlockSetupRequestGetStatus USBRequestBlockSetupRequest = 0x00
+ USBRequestBlockSetupRequestClearFeature USBRequestBlockSetupRequest = 0x01
+ USBRequestBlockSetupRequestSetFeature USBRequestBlockSetupRequest = 0x03
+ USBRequestBlockSetupRequestSetAddress USBRequestBlockSetupRequest = 0x05
+ USBRequestBlockSetupRequestGetDescriptor USBRequestBlockSetupRequest = 0x06
+ USBRequestBlockSetupRequestSetDescriptor USBRequestBlockSetupRequest = 0x07
+ USBRequestBlockSetupRequestGetConfiguration USBRequestBlockSetupRequest = 0x08
+ USBRequestBlockSetupRequestSetConfiguration USBRequestBlockSetupRequest = 0x09
+ USBRequestBlockSetupRequestSetIdle USBRequestBlockSetupRequest = 0x0a
+)
+
+func (a USBRequestBlockSetupRequest) String() string {
+ switch a {
+ case USBRequestBlockSetupRequestGetStatus:
+ return "GET_STATUS"
+ case USBRequestBlockSetupRequestClearFeature:
+ return "CLEAR_FEATURE"
+ case USBRequestBlockSetupRequestSetFeature:
+ return "SET_FEATURE"
+ case USBRequestBlockSetupRequestSetAddress:
+ return "SET_ADDRESS"
+ case USBRequestBlockSetupRequestGetDescriptor:
+ return "GET_DESCRIPTOR"
+ case USBRequestBlockSetupRequestSetDescriptor:
+ return "SET_DESCRIPTOR"
+ case USBRequestBlockSetupRequestGetConfiguration:
+ return "GET_CONFIGURATION"
+ case USBRequestBlockSetupRequestSetConfiguration:
+ return "SET_CONFIGURATION"
+ case USBRequestBlockSetupRequestSetIdle:
+ return "SET_IDLE"
+ default:
+ return "UNKNOWN"
+ }
+}
+
+type USBTransportType uint8
+
+const (
+ USBTransportTypeTransferIn USBTransportType = 0x80 // Indicates send or receive
+ USBTransportTypeIsochronous USBTransportType = 0x00 // Isochronous transfers occur continuously and periodically. They typically contain time sensitive information, such as an audio or video stream.
+ USBTransportTypeInterrupt USBTransportType = 0x01 // Interrupt transfers are typically non-periodic, small device "initiated" communication requiring bounded latency, such as pointing devices or keyboards.
+ USBTransportTypeControl USBTransportType = 0x02 // Control transfers are typically used for command and status operations.
+ USBTransportTypeBulk 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.
+)
+
+func (a USBTransportType) LayerType() gopacket.LayerType {
+ return USBTypeMetadata[a].LayerType
+}
+
+func (a USBTransportType) String() string {
+ switch a {
+ case USBTransportTypeTransferIn:
+ return "Transfer In"
+ case USBTransportTypeIsochronous:
+ return "Isochronous"
+ case USBTransportTypeInterrupt:
+ return "Interrupt"
+ case USBTransportTypeControl:
+ return "Control"
+ case USBTransportTypeBulk:
+ return "Bulk"
+ default:
+ return "Unknown transport type"
+ }
+}
+
+type USBDirectionType uint8
+
+const (
+ USBDirectionTypeUnknown USBDirectionType = iota
+ USBDirectionTypeIn
+ USBDirectionTypeOut
+)
+
+func (a USBDirectionType) String() string {
+ switch a {
+ case USBDirectionTypeIn:
+ return "In"
+ case USBDirectionTypeOut:
+ return "Out"
+ default:
+ return "Unknown direction type"
+ }
+}
+
+// The reference at http://www.beyondlogic.org/usbnutshell/usb1.shtml contains more information about the protocol.
+type USB struct {
+ BaseLayer
+ ID uint64
+ EventType USBEventType
+ TransferType USBTransportType
+ Direction USBDirectionType
+ EndpointNumber uint8
+ DeviceAddress uint8
+ BusID uint16
+ TimestampSec int64
+ TimestampUsec int32
+ Setup bool
+ Data bool
+ Status int32
+ UrbLength uint32
+ UrbDataLength uint32
+
+ UrbInterval uint32
+ UrbStartFrame uint32
+ UrbCopyOfTransferFlags uint32
+ IsoNumDesc uint32
+}
+
+func (u *USB) LayerType() gopacket.LayerType { return LayerTypeUSB }
+
+func (m *USB) NextLayerType() gopacket.LayerType {
+ if m.Setup {
+ return LayerTypeUSBRequestBlockSetup
+ } else if m.Data {
+ }
+
+ return m.TransferType.LayerType()
+}
+
+func decodeUSB(data []byte, p gopacket.PacketBuilder) error {
+ d := &USB{}
+
+ return decodingLayerDecoder(d, data, p)
+}
+
+func (m *USB) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ m.ID = binary.LittleEndian.Uint64(data[0:8])
+ m.EventType = USBEventType(data[8])
+ m.TransferType = USBTransportType(data[9])
+
+ m.EndpointNumber = data[10] & 0x7f
+ if data[10]&uint8(USBTransportTypeTransferIn) > 0 {
+ m.Direction = USBDirectionTypeIn
+ } else {
+ m.Direction = USBDirectionTypeOut
+ }
+
+ m.DeviceAddress = data[11]
+ m.BusID = binary.LittleEndian.Uint16(data[12:14])
+
+ if uint(data[14]) == 0 {
+ m.Setup = true
+ }
+
+ if uint(data[15]) == 0 {
+ m.Data = true
+ }
+
+ m.TimestampSec = int64(binary.LittleEndian.Uint64(data[16:24]))
+ m.TimestampUsec = int32(binary.LittleEndian.Uint32(data[24:28]))
+ m.Status = int32(binary.LittleEndian.Uint32(data[28:32]))
+ m.UrbLength = binary.LittleEndian.Uint32(data[32:36])
+ m.UrbDataLength = binary.LittleEndian.Uint32(data[36:40])
+
+ m.Contents = data[:40]
+ m.Payload = data[40:]
+
+ if m.Setup {
+ m.Payload = data[40:]
+ } else if m.Data {
+ m.Payload = data[uint32(len(data))-m.UrbDataLength:]
+ }
+
+ // if 64 bit, dissect_linux_usb_pseudo_header_ext
+ if false {
+ m.UrbInterval = binary.LittleEndian.Uint32(data[40:44])
+ m.UrbStartFrame = binary.LittleEndian.Uint32(data[44:48])
+ m.UrbDataLength = binary.LittleEndian.Uint32(data[48:52])
+ m.IsoNumDesc = binary.LittleEndian.Uint32(data[52:56])
+ m.Contents = data[:56]
+ m.Payload = data[56:]
+ }
+
+ // crc5 or crc16
+ // eop (end of packet)
+
+ return nil
+}
+
+type USBRequestBlockSetup struct {
+ BaseLayer
+ RequestType uint8
+ Request USBRequestBlockSetupRequest
+ Value uint16
+ Index uint16
+ Length uint16
+}
+
+func (u *USBRequestBlockSetup) LayerType() gopacket.LayerType { return LayerTypeUSBRequestBlockSetup }
+
+func (m *USBRequestBlockSetup) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypePayload
+}
+
+func (m *USBRequestBlockSetup) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ m.RequestType = data[0]
+ m.Request = USBRequestBlockSetupRequest(data[1])
+ m.Value = binary.LittleEndian.Uint16(data[2:4])
+ m.Index = binary.LittleEndian.Uint16(data[4:6])
+ m.Length = binary.LittleEndian.Uint16(data[6:8])
+ m.Contents = data[:8]
+ m.Payload = data[8:]
+ return nil
+}
+
+func decodeUSBRequestBlockSetup(data []byte, p gopacket.PacketBuilder) error {
+ d := &USBRequestBlockSetup{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+type USBControl struct {
+ BaseLayer
+}
+
+func (u *USBControl) LayerType() gopacket.LayerType { return LayerTypeUSBControl }
+
+func (m *USBControl) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypePayload
+}
+
+func (m *USBControl) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ m.Contents = data
+ return nil
+}
+
+func decodeUSBControl(data []byte, p gopacket.PacketBuilder) error {
+ d := &USBControl{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+type USBInterrupt struct {
+ BaseLayer
+}
+
+func (u *USBInterrupt) LayerType() gopacket.LayerType { return LayerTypeUSBInterrupt }
+
+func (m *USBInterrupt) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypePayload
+}
+
+func (m *USBInterrupt) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ m.Contents = data
+ return nil
+}
+
+func decodeUSBInterrupt(data []byte, p gopacket.PacketBuilder) error {
+ d := &USBInterrupt{}
+ return decodingLayerDecoder(d, data, p)
+}
+
+type USBBulk struct {
+ BaseLayer
+}
+
+func (u *USBBulk) LayerType() gopacket.LayerType { return LayerTypeUSBBulk }
+
+func (m *USBBulk) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypePayload
+}
+
+func (m *USBBulk) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ m.Contents = data
+ return nil
+}
+
+func decodeUSBBulk(data []byte, p gopacket.PacketBuilder) error {
+ d := &USBBulk{}
+ return decodingLayerDecoder(d, data, p)
+}
diff --git a/vendor/github.com/google/gopacket/layers/usb_test.go b/vendor/github.com/google/gopacket/layers/usb_test.go
new file mode 100644
index 0000000..35e9c70
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/usb_test.go
@@ -0,0 +1,73 @@
+// Copyright 2014, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ _ "fmt"
+ "github.com/google/gopacket"
+ "reflect"
+ "testing"
+)
+
+// Generator python layers/test_creator.py --link_type USB --name USB dongle.pcap
+// http://wiki.wireshark.org/SampleCaptures#Sample_Captures
+
+// testPacketUSB0 is the packet:
+// 02:41:04.689546 INTERRUPT COMPLETE to 2:1:1
+// 0x0000: 0038 4a3b 0088 ffff 4301 8101 0200 2d00 .8J;....C.....-.
+// 0x0010: c0d3 5b50 0000 0000 8a85 0a00 0000 0000 ..[P............
+// 0x0020: 0100 0000 0100 0000 0000 0000 0000 0000 ................
+// 0x0030: 8000 0000 0000 0000 0002 0000 0000 0000 ................
+// 0x0040: 04 .
+var testPacketUSB0 = []byte{
+ 0x00, 0x38, 0x4a, 0x3b, 0x00, 0x88, 0xff, 0xff, 0x43, 0x01, 0x81, 0x01, 0x02, 0x00, 0x2d, 0x00,
+ 0xc0, 0xd3, 0x5b, 0x50, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x85, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04,
+}
+
+func TestPacketUSB0(t *testing.T) {
+ p := gopacket.NewPacket(testPacketUSB0, LinkTypeLinuxUSB, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeUSB, LayerTypeUSBInterrupt}, t)
+
+ if got, ok := p.Layer(LayerTypeUSB).(*USB); ok {
+ want := &USB{
+ BaseLayer: BaseLayer{
+ Contents: []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},
+ Payload: []uint8{0x4},
+ },
+ ID: 0xffff88003b4a3800,
+ EventType: USBEventTypeComplete,
+ TransferType: USBTransportTypeInterrupt,
+ Direction: 0x1,
+ EndpointNumber: 0x1,
+ DeviceAddress: 0x1,
+ BusID: 0x2,
+ TimestampSec: 1348195264,
+ TimestampUsec: 689546,
+ Setup: false,
+ Data: true,
+ Status: 0,
+ UrbLength: 0x1,
+ UrbDataLength: 0x1,
+ }
+
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("USB packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want)
+ }
+ }
+
+}
+func BenchmarkDecodePacketUSB0(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketUSB0, LinkTypeLinuxUSB, gopacket.NoCopy)
+ }
+}
diff --git a/vendor/github.com/google/gopacket/layers/vrrp.go b/vendor/github.com/google/gopacket/layers/vrrp.go
new file mode 100644
index 0000000..ffaafe6
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/vrrp.go
@@ -0,0 +1,156 @@
+// Copyright 2016 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "errors"
+ "net"
+
+ "github.com/google/gopacket"
+)
+
+/*
+ This layer provides decoding for Virtual Router Redundancy Protocol (VRRP) v2.
+ https://tools.ietf.org/html/rfc3768#section-5
+ 0 1 2 3
+ 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
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ |Version| Type | Virtual Rtr ID| Priority | Count IP Addrs|
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Auth Type | Adver Int | Checksum |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | IP Address (1) |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | . |
+ | . |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | IP Address (n) |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Authentication Data (1) |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Authentication Data (2) |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+*/
+
+type VRRPv2Type uint8
+type VRRPv2AuthType uint8
+
+const (
+ VRRPv2Advertisement VRRPv2Type = 0x01 // router advertisement
+)
+
+// String conversions for VRRP message types
+func (v VRRPv2Type) String() string {
+ switch v {
+ case VRRPv2Advertisement:
+ return "VRRPv2 Advertisement"
+ default:
+ return ""
+ }
+}
+
+const (
+ VRRPv2AuthNoAuth VRRPv2AuthType = 0x00 // No Authentication
+ VRRPv2AuthReserved1 VRRPv2AuthType = 0x01 // Reserved field 1
+ VRRPv2AuthReserved2 VRRPv2AuthType = 0x02 // Reserved field 2
+)
+
+func (v VRRPv2AuthType) String() string {
+ switch v {
+ case VRRPv2AuthNoAuth:
+ return "No Authentication"
+ case VRRPv2AuthReserved1:
+ return "Reserved"
+ case VRRPv2AuthReserved2:
+ return "Reserved"
+ default:
+ return ""
+ }
+}
+
+// VRRPv2 represents an VRRP v2 message.
+type VRRPv2 struct {
+ BaseLayer
+ Version uint8 // The version field specifies the VRRP protocol version of this packet (v2)
+ Type VRRPv2Type // The type field specifies the type of this VRRP packet. The only type defined in v2 is ADVERTISEMENT
+ VirtualRtrID uint8 // identifies the virtual router this packet is reporting status for
+ Priority uint8 // specifies the sending VRRP router's priority for the virtual router (100 = default)
+ CountIPAddr uint8 // The number of IP addresses contained in this VRRP advertisement.
+ AuthType VRRPv2AuthType // identifies the authentication method being utilized
+ AdverInt uint8 // The Advertisement interval indicates the time interval (in seconds) between ADVERTISEMENTS. The default is 1 second
+ Checksum uint16 // used to detect data corruption in the VRRP message.
+ IPAddress []net.IP // one or more IP addresses associated with the virtual router. Specified in the CountIPAddr field.
+}
+
+// LayerType returns LayerTypeVRRP for VRRP v2 message.
+func (v *VRRPv2) LayerType() gopacket.LayerType { return LayerTypeVRRP }
+
+func (v *VRRPv2) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+
+ v.BaseLayer = BaseLayer{Contents: data[:len(data)]}
+ v.Version = data[0] >> 4 // high nibble == VRRP version. We're expecting v2
+
+ v.Type = VRRPv2Type(data[0] & 0x0F) // low nibble == VRRP type. Expecting 1 (advertisement)
+ if v.Type != 1 {
+ // rfc3768: A packet with unknown type MUST be discarded.
+ return errors.New("Unrecognized VRRPv2 type field.")
+ }
+
+ v.VirtualRtrID = data[1]
+ v.Priority = data[2]
+
+ v.CountIPAddr = data[3]
+ if v.CountIPAddr < 1 {
+ return errors.New("VRRPv2 number of IP addresses is not valid.")
+ }
+
+ v.AuthType = VRRPv2AuthType(data[4])
+ v.AdverInt = uint8(data[5])
+ v.Checksum = binary.BigEndian.Uint16(data[6:8])
+
+ // populate the IPAddress field. The number of addresses is specified in the v.CountIPAddr field
+ // offset references the starting byte containing the list of ip addresses
+ offset := 8
+ for i := uint8(0); i < v.CountIPAddr; i++ {
+ v.IPAddress = append(v.IPAddress, data[offset:offset+4])
+ offset += 4
+ }
+
+ // any trailing packets here may be authentication data and *should* be ignored in v2 as per RFC
+ //
+ // 5.3.10. Authentication Data
+ //
+ // The authentication string is currently only used to maintain
+ // backwards compatibility with RFC 2338. It SHOULD be set to zero on
+ // transmission and ignored on reception.
+ return nil
+}
+
+// CanDecode specifies the layer type in which we are attempting to unwrap.
+func (v *VRRPv2) CanDecode() gopacket.LayerClass {
+ return LayerTypeVRRP
+}
+
+// NextLayerType specifies the next layer that should be decoded. VRRP does not contain any further payload, so we set to 0
+func (v *VRRPv2) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypeZero
+}
+
+// The VRRP packet does not include payload data. Setting byte slice to nil
+func (v *VRRPv2) Payload() []byte {
+ return nil
+}
+
+// decodeVRRP will parse VRRP v2
+func decodeVRRP(data []byte, p gopacket.PacketBuilder) error {
+ if len(data) < 8 {
+ return errors.New("Not a valid VRRP packet. Packet length is too small.")
+ }
+ v := &VRRPv2{}
+ return decodingLayerDecoder(v, data, p)
+}
diff --git a/vendor/github.com/google/gopacket/layers/vrrp_test.go b/vendor/github.com/google/gopacket/layers/vrrp_test.go
new file mode 100644
index 0000000..bc6b7e4
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/vrrp_test.go
@@ -0,0 +1,55 @@
+// Copyright 2016 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+package layers
+
+import (
+ "github.com/google/gopacket"
+ "testing"
+)
+
+// vrrpPacketPriority100 is the packet:
+// 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
+// 0x0000: 0100 5e00 0012 0000 5e00 0101 0800 45c0 ..^.....^.....E.
+// 0x0010: 0028 0000 0000 ff70 19cd c0a8 001e e000 .(.....p........
+// 0x0020: 0012 2101 6401 0001 ba52 c0a8 0001 0000 ..!.d....R......
+// 0x0030: 0000 0000 0000 0000 0000 0000 ............
+var vrrpPacketPriority100 = []byte{
+ 0x01, 0x00, 0x5e, 0x00, 0x00, 0x12, 0x00, 0x00, 0x5e, 0x00, 0x01, 0x01, 0x08, 0x00, 0x45, 0xc0,
+ 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0xff, 0x70, 0x19, 0xcd, 0xc0, 0xa8, 0x00, 0x1e, 0xe0, 0x00,
+ 0x00, 0x12, 0x21, 0x01, 0x64, 0x01, 0x00, 0x01, 0xba, 0x52, 0xc0, 0xa8, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestVRRPPacketPacket0(t *testing.T) {
+ p := gopacket.NewPacket(vrrpPacketPriority100, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeVRRP}, t)
+
+ // Version=2 Type=VRRPv2 Advertisement VirtualRtrID=1 Priority=100
+ vrrp := p.Layer(LayerTypeVRRP).(*VRRPv2)
+ if vrrp.Version != 2 {
+ t.Fatalf("Unable to decode VRRPv2 version. Received %d, expected %d", vrrp.Version, 2)
+ }
+
+ if vrrp.Type != 1 {
+ t.Fatalf("Unable to decode VRRPv2 type. Received %d, expected %d", vrrp.Type, 1)
+ }
+
+ if vrrp.Priority != 100 {
+ t.Fatalf("Unable to decode VRRPv2 priority. Received %d, expected %d", vrrp.Priority, 100)
+ }
+
+ if vrrp.Checksum != 47698 {
+ t.Fatalf("Unable to decode VRRPv2 checksum. Received %d, expected %d", vrrp.Checksum, 47698)
+ }
+}
+func BenchmarkDecodeVRRPPacket0(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(vrrpPacketPriority100, LayerTypeEthernet, gopacket.NoCopy)
+ }
+}
diff --git a/vendor/github.com/google/gopacket/layers/vxlan.go b/vendor/github.com/google/gopacket/layers/vxlan.go
new file mode 100644
index 0000000..08f1ecb
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/vxlan.go
@@ -0,0 +1,94 @@
+// Copyright 2016 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "encoding/binary"
+ "fmt"
+ "github.com/google/gopacket"
+)
+
+// VXLAN is specifed in RFC 7348 https://tools.ietf.org/html/rfc7348
+// G, D, A, Group Policy ID from https://tools.ietf.org/html/draft-smith-vxlan-group-policy-00
+// 0 1 2 3
+// 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
+// 0 8 16 24 32
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |G|R|R|R|I|R|R|R|R|D|R|R|A|R|R|R| Group Policy ID |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | 24 bit VXLAN Network Identifier | Reserved |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+// VXLAN is a VXLAN packet header
+type VXLAN struct {
+ BaseLayer
+ ValidIDFlag bool // 'I' bit per RFC 7348
+ VNI uint32 // 'VXLAN Network Identifier' 24 bits per RFC 7348
+ GBPExtension bool // 'G' bit per Group Policy https://tools.ietf.org/html/draft-smith-vxlan-group-policy-00
+ GBPDontLearn bool // 'D' bit per Group Policy
+ GBPApplied bool // 'A' bit per Group Policy
+ GBPGroupPolicyID uint16 // 'Group Policy ID' 16 bits per Group Policy
+}
+
+// LayerType returns LayerTypeVXLAN
+func (vx *VXLAN) LayerType() gopacket.LayerType { return LayerTypeVXLAN }
+
+func decodeVXLAN(data []byte, p gopacket.PacketBuilder) error {
+ vx := &VXLAN{}
+
+ // VNI is a 24bit number, Uint32 requires 32 bits
+ var buf [4]byte
+ copy(buf[1:], data[4:7])
+
+ // RFC 7348 https://tools.ietf.org/html/rfc7348
+ vx.ValidIDFlag = data[0]&0x08 > 0 // 'I' bit per RFC7348
+ vx.VNI = binary.BigEndian.Uint32(buf[:]) // VXLAN Network Identifier per RFC7348
+
+ // Group Based Policy https://tools.ietf.org/html/draft-smith-vxlan-group-policy-00
+ vx.GBPExtension = data[0]&0x80 > 0 // 'G' bit per the group policy draft
+ vx.GBPDontLearn = data[1]&0x40 > 0 // 'D' bit - the egress VTEP MUST NOT learn the source address of the encapsulated frame.
+ vx.GBPApplied = data[1]&0x80 > 0 // 'A' bit - indicates that the group policy has already been applied to this packet.
+ vx.GBPGroupPolicyID = binary.BigEndian.Uint16(data[2:4]) // Policy ID as per the group policy draft
+
+ // Layer information
+ const vxlanLength = 8
+ vx.Contents = data[:vxlanLength]
+ vx.Payload = data[vxlanLength:]
+
+ p.AddLayer(vx)
+ return p.NextDecoder(LinkTypeEthernet)
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (vx *VXLAN) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ bytes, err := b.PrependBytes(8)
+ if err != nil {
+ return err
+ }
+
+ if vx.ValidIDFlag {
+ bytes[0] |= 0x08
+ }
+ if vx.GBPExtension {
+ bytes[0] |= 0x80
+ }
+ if vx.GBPDontLearn {
+ bytes[1] |= 0x40
+ }
+ if vx.GBPApplied {
+ bytes[1] |= 0x80
+ }
+
+ binary.BigEndian.PutUint16(bytes[2:4], vx.GBPGroupPolicyID)
+ if vx.VNI >= 1<<24 {
+ return fmt.Errorf("Virtual Network Identifier = %x exceeds max for 24-bit uint", vx.VNI)
+ }
+ binary.BigEndian.PutUint32(bytes[4:8], vx.VNI<<8)
+ return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/vxlan_test.go b/vendor/github.com/google/gopacket/layers/vxlan_test.go
new file mode 100644
index 0000000..a02d934
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layers/vxlan_test.go
@@ -0,0 +1,108 @@
+// Copyright 2016 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+ "github.com/google/gopacket"
+ "reflect"
+ "testing"
+)
+
+// VXLAN is specifed in RFC 7348
+// 0 1 2 3
+// 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
+// 0 8 16 24 32
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |G|R|R|R|I|R|R|R|R|D|R|R|A|R|R|R| Group Policy ID |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | 24 bit VXLAN Network Identifier | Reserved |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+// Ethernet[IP[UDP[VXLAN[Ethernet[IP[ICMP]]]]]]
+
+// testPacketVXLAN
+// 0000 00 16 3e 08 71 cf 36 dc 85 1e b3 40 08 00 45 00 ..>.q.6....@..E.
+// 0010 00 86 d2 c0 40 00 40 11 51 52 c0 a8 cb 01 c0 a8 ....@.@.QR......
+// 0020 ca 01 b0 5d 12 b5 00 72 00 00 08 00 00 00 00 00 ...]...r........
+// 0030 00 00 00 30 88 01 00 02 00 16 3e 37 f6 04 08 00 ...0......>7....
+// 0040 45 00 00 54 00 00 40 00 40 01 23 4f c0 a8 cb 03 E..T..@.@.#O....
+// 0050 c0 a8 cb 05 08 00 f6 f2 05 0c 00 01 fc e2 97 51 ...............Q
+// 0060 00 00 00 00 a6 f8 02 00 00 00 00 00 10 11 12 13 ................
+// 0070 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 ............ !"#
+// 0080 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 $%&'()*+,-./0123
+// 0090 34 35 36 37 4567 ./01234567
+var testPacketVXLAN = []byte{
+ 0x00, 0x16, 0x3e, 0x08, 0x71, 0xcf, 0x36, 0xdc, 0x85, 0x1e, 0xb3, 0x40, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0x86, 0xd2, 0xc0, 0x40, 0x00, 0x40, 0x11, 0x51, 0x52, 0xc0, 0xa8, 0xcb, 0x01, 0xc0, 0xa8,
+ 0xca, 0x01, 0xb0, 0x5d, 0x12, 0xb5, 0x00, 0x72, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0x00, 0x00, 0x30, 0x88, 0x01, 0x00, 0x02, 0x00, 0x16, 0x3e, 0x37, 0xf6, 0x04, 0x08, 0x00,
+ 0x45, 0x00, 0x00, 0x54, 0x00, 0x00, 0x40, 0x00, 0x40, 0x01, 0x23, 0x4f, 0xc0, 0xa8, 0xcb, 0x03,
+ 0xc0, 0xa8, 0xcb, 0x05, 0x08, 0x00, 0xf6, 0xf2, 0x05, 0x0c, 0x00, 0x01, 0xfc, 0xe2, 0x97, 0x51,
+ 0x00, 0x00, 0x00, 0x00, 0xa6, 0xf8, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x12, 0x13,
+ 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23,
+ 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33,
+ 0x34, 0x35, 0x36, 0x37,
+}
+
+func TestPacketVXLAN(t *testing.T) {
+ p := gopacket.NewPacket(testPacketVXLAN, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeVXLAN, LayerTypeEthernet, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)
+ if got, ok := p.Layer(LayerTypeVXLAN).(*VXLAN); ok {
+ want := &VXLAN{
+ BaseLayer: BaseLayer{
+ Contents: []byte{0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00},
+ Payload: []byte{0x00, 0x30, 0x88, 0x01, 0x00, 0x02, 0x00, 0x16, 0x3e, 0x37, 0xf6, 0x04, 0x08, 0x00,
+ 0x45, 0x00, 0x00, 0x54, 0x00, 0x00, 0x40, 0x00, 0x40, 0x01, 0x23, 0x4f, 0xc0, 0xa8, 0xcb, 0x03,
+ 0xc0, 0xa8, 0xcb, 0x05, 0x08, 0x00, 0xf6, 0xf2, 0x05, 0x0c, 0x00, 0x01, 0xfc, 0xe2, 0x97, 0x51,
+ 0x00, 0x00, 0x00, 0x00, 0xa6, 0xf8, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x12, 0x13,
+ 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23,
+ 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33,
+ 0x34, 0x35, 0x36, 0x37},
+ },
+ ValidIDFlag: true,
+ VNI: 255,
+ GBPExtension: false,
+ GBPApplied: false,
+ GBPDontLearn: false,
+ GBPGroupPolicyID: 0,
+ }
+ if !reflect.DeepEqual(want, got) {
+ t.Errorf("VXLAN layer mismatch, \nwant %#v\ngot %#v\n", want, got)
+ }
+ }
+}
+
+func BenchmarkDecodePacketVXLAN(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketVXLAN, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+func TestIsomorphicPacketVXLAN(t *testing.T) {
+ vx := &VXLAN{
+ ValidIDFlag: true,
+ VNI: 255,
+ GBPExtension: true,
+ GBPApplied: true,
+ GBPDontLearn: true,
+ GBPGroupPolicyID: 777,
+ }
+
+ b := gopacket.NewSerializeBuffer()
+ vx.SerializeTo(b, gopacket.SerializeOptions{})
+
+ p := gopacket.NewPacket(b.Bytes(), gopacket.DecodeFunc(decodeVXLAN), gopacket.Default)
+ vxTranslated := p.Layer(LayerTypeVXLAN).(*VXLAN)
+ vxTranslated.BaseLayer = BaseLayer{}
+
+ if !reflect.DeepEqual(vx, vxTranslated) {
+ t.Errorf("VXLAN isomorph mismatch, \nwant %#v\ngot %#v\n", vx, vxTranslated)
+ }
+}
diff --git a/vendor/github.com/google/gopacket/layertype.go b/vendor/github.com/google/gopacket/layertype.go
new file mode 100644
index 0000000..3abfee1
--- /dev/null
+++ b/vendor/github.com/google/gopacket/layertype.go
@@ -0,0 +1,111 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package gopacket
+
+import (
+ "fmt"
+ "strconv"
+)
+
+// LayerType is a unique identifier for each type of layer. This enumeration
+// does not match with any externally available numbering scheme... it's solely
+// usable/useful within this library as a means for requesting layer types
+// (see Packet.Layer) and determining which types of layers have been decoded.
+//
+// New LayerTypes may be created by calling gopacket.RegisterLayerType.
+type LayerType int64
+
+// LayerTypeMetadata contains metadata associated with each LayerType.
+type LayerTypeMetadata struct {
+ // Name is the string returned by each layer type's String method.
+ Name string
+ // Decoder is the decoder to use when the layer type is passed in as a
+ // Decoder.
+ Decoder Decoder
+}
+
+type layerTypeMetadata struct {
+ inUse bool
+ LayerTypeMetadata
+}
+
+// DecodersByLayerName maps layer names to decoders for those layers.
+// This allows users to specify decoders by name to a program and have that
+// program pick the correct decoder accordingly.
+var DecodersByLayerName = map[string]Decoder{}
+
+const maxLayerType = 2000
+
+var ltMeta [maxLayerType]layerTypeMetadata
+var ltMetaMap = map[LayerType]layerTypeMetadata{}
+
+// RegisterLayerType creates a new layer type and registers it globally.
+// The number passed in must be unique, or a runtime panic will occur. Numbers
+// 0-999 are reserved for the gopacket library. Numbers 1000-1999 should be
+// used for common application-specific types, and are very fast. Any other
+// number (negative or >= 2000) may be used for uncommon application-specific
+// types, and are somewhat slower (they require a map lookup over an array
+// index).
+func RegisterLayerType(num int, meta LayerTypeMetadata) LayerType {
+ if 0 <= num && num < maxLayerType {
+ if ltMeta[num].inUse {
+ panic("Layer type already exists")
+ }
+ } else {
+ if ltMetaMap[LayerType(num)].inUse {
+ panic("Layer type already exists")
+ }
+ }
+ return OverrideLayerType(num, meta)
+}
+
+// OverrideLayerType acts like RegisterLayerType, except that if the layer type
+// has already been registered, it overrides the metadata with the passed-in
+// metadata intead of panicing.
+func OverrideLayerType(num int, meta LayerTypeMetadata) LayerType {
+ if 0 <= num && num < maxLayerType {
+ ltMeta[num] = layerTypeMetadata{
+ inUse: true,
+ LayerTypeMetadata: meta,
+ }
+ } else {
+ ltMetaMap[LayerType(num)] = layerTypeMetadata{
+ inUse: true,
+ LayerTypeMetadata: meta,
+ }
+ }
+ DecodersByLayerName[meta.Name] = meta.Decoder
+ return LayerType(num)
+}
+
+// Decode decodes the given data using the decoder registered with the layer
+// type.
+func (t LayerType) Decode(data []byte, c PacketBuilder) error {
+ var d Decoder
+ if 0 <= int(t) && int(t) < maxLayerType {
+ d = ltMeta[int(t)].Decoder
+ } else {
+ d = ltMetaMap[t].Decoder
+ }
+ if d != nil {
+ return d.Decode(data, c)
+ }
+ return fmt.Errorf("Layer type %v has no associated decoder", t)
+}
+
+// String returns the string associated with this layer type.
+func (t LayerType) String() (s string) {
+ if 0 <= int(t) && int(t) < maxLayerType {
+ s = ltMeta[int(t)].Name
+ } else {
+ s = ltMetaMap[t].Name
+ }
+ if s == "" {
+ s = strconv.Itoa(int(t))
+ }
+ return
+}
diff --git a/vendor/github.com/google/gopacket/macs/benchmark_test.go b/vendor/github.com/google/gopacket/macs/benchmark_test.go
new file mode 100644
index 0000000..33af5c2
--- /dev/null
+++ b/vendor/github.com/google/gopacket/macs/benchmark_test.go
@@ -0,0 +1,18 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package macs
+
+import (
+ "testing"
+)
+
+func BenchmarkCheckEthernetPrefix(b *testing.B) {
+ key := [3]byte{5, 5, 5}
+ for i := 0; i < b.N; i++ {
+ _ = ValidMACPrefixMap[key]
+ }
+}
diff --git a/vendor/github.com/google/gopacket/macs/doc.go b/vendor/github.com/google/gopacket/macs/doc.go
new file mode 100644
index 0000000..c0d32a8
--- /dev/null
+++ b/vendor/github.com/google/gopacket/macs/doc.go
@@ -0,0 +1,12 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// Package macs provides an in-memory mapping of all valid Ethernet MAC address
+// prefixes to their associated organization.
+//
+// The ValidMACPrefixMap map maps 3-byte prefixes to organization strings. It
+// can be updated using 'go run gen.go' in this directory.
+package macs
diff --git a/vendor/github.com/google/gopacket/macs/gen.go b/vendor/github.com/google/gopacket/macs/gen.go
new file mode 100644
index 0000000..ccfcc34
--- /dev/null
+++ b/vendor/github.com/google/gopacket/macs/gen.go
@@ -0,0 +1,98 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build ignore
+
+// This binary pulls the list of known MAC
+// prefixes from IEEE and writes them out to a go file which is compiled
+// into gopacket. It should be run as follows:
+//
+// go run gen.go | gofmt > valid_mac_prefixes.go
+package main
+
+import (
+ "bufio"
+ "bytes"
+ "encoding/hex"
+ "flag"
+ "fmt"
+ "io"
+ "net/http"
+ "os"
+ "regexp"
+ "sort"
+ "time"
+)
+
+const header = `// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package macs
+
+// Created by gen.go, don't edit manually
+// Generated at %s
+// Fetched from %q
+
+// ValidMACPrefixMap maps a valid MAC address prefix to the name of the
+// organization that owns the rights to use it. We map it to a hidden
+// variable so it won't show up in godoc, since it's a very large map.
+var ValidMACPrefixMap = validMACPrefixMap
+var validMACPrefixMap = map[[3]byte]string{
+`
+
+var url = flag.String("url", "http://standards.ieee.org/develop/regauth/oui/oui.txt", "URL to fetch MACs from")
+
+type mac struct {
+ prefix [3]byte
+ company string
+}
+
+type macs []mac
+
+func (m macs) Len() int { return len(m) }
+func (m macs) Less(i, j int) bool { return bytes.Compare(m[i].prefix[:], m[j].prefix[:]) < 0 }
+func (m macs) Swap(i, j int) { m[i], m[j] = m[j], m[i] }
+
+func main() {
+ fmt.Fprintf(os.Stderr, "Fetching MACs from %q\n", *url)
+ resp, err := http.Get(*url)
+ if err != nil {
+ panic(err)
+ }
+ defer resp.Body.Close()
+ buffered := bufio.NewReader(resp.Body)
+ finder := regexp.MustCompile(`^\s*([0-9A-F]{6})\s+\(base 16\)\s+(.*\S)`)
+ got := macs{}
+ for {
+ line, err := buffered.ReadString('\n')
+ if err == io.EOF {
+ break
+ } else if err != nil {
+ panic(err)
+ }
+ if matches := finder.FindStringSubmatch(line); matches != nil {
+ var prefix [3]byte
+ hex.Decode(prefix[:], []byte(matches[1]))
+ company := matches[2]
+ if company == "" {
+ company = "PRIVATE"
+ }
+ fmt.Fprint(os.Stderr, "*")
+ got = append(got, mac{prefix: prefix, company: company})
+ }
+ }
+ fmt.Fprintln(os.Stderr, "\nSorting macs")
+ sort.Sort(got)
+ fmt.Fprintln(os.Stderr, "Starting write to standard output")
+ fmt.Printf(header, time.Now(), *url)
+ for _, m := range got {
+ fmt.Printf("\t[3]byte{%d, %d, %d}: %q,\n", m.prefix[0], m.prefix[1], m.prefix[2], m.company)
+ }
+ fmt.Println("}")
+}
diff --git a/vendor/github.com/google/gopacket/macs/valid_mac_prefixes.go b/vendor/github.com/google/gopacket/macs/valid_mac_prefixes.go
new file mode 100644
index 0000000..0a93cad
--- /dev/null
+++ b/vendor/github.com/google/gopacket/macs/valid_mac_prefixes.go
@@ -0,0 +1,23946 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package macs
+
+// Created by gen.go, don't edit manually
+// Generated at 2017-09-19 13:06:19.654271144 -0600 MDT
+// Fetched from "http://standards.ieee.org/develop/regauth/oui/oui.txt"
+
+// ValidMACPrefixMap maps a valid MAC address prefix to the name of the
+// organization that owns the rights to use it. We map it to a hidden
+// variable so it won't show up in godoc, since it's a very large map.
+var ValidMACPrefixMap = validMACPrefixMap
+var validMACPrefixMap = map[[3]byte]string{
+ [3]byte{0, 0, 0}: "XEROX CORPORATION",
+ [3]byte{0, 0, 1}: "XEROX CORPORATION",
+ [3]byte{0, 0, 2}: "XEROX CORPORATION",
+ [3]byte{0, 0, 3}: "XEROX CORPORATION",
+ [3]byte{0, 0, 4}: "XEROX CORPORATION",
+ [3]byte{0, 0, 5}: "XEROX CORPORATION",
+ [3]byte{0, 0, 6}: "XEROX CORPORATION",
+ [3]byte{0, 0, 7}: "XEROX CORPORATION",
+ [3]byte{0, 0, 8}: "XEROX CORPORATION",
+ [3]byte{0, 0, 9}: "XEROX CORPORATION",
+ [3]byte{0, 0, 10}: "OMRON TATEISI ELECTRONICS CO.",
+ [3]byte{0, 0, 11}: "MATRIX CORPORATION",
+ [3]byte{0, 0, 12}: "Cisco Systems, Inc",
+ [3]byte{0, 0, 13}: "FIBRONICS LTD.",
+ [3]byte{0, 0, 14}: "FUJITSU LIMITED",
+ [3]byte{0, 0, 15}: "NEXT, INC.",
+ [3]byte{0, 0, 16}: "SYTEK INC.",
+ [3]byte{0, 0, 17}: "NORMEREL SYSTEMES",
+ [3]byte{0, 0, 18}: "INFORMATION TECHNOLOGY LIMITED",
+ [3]byte{0, 0, 19}: "CAMEX",
+ [3]byte{0, 0, 20}: "NETRONIX",
+ [3]byte{0, 0, 21}: "DATAPOINT CORPORATION",
+ [3]byte{0, 0, 22}: "DU PONT PIXEL SYSTEMS .",
+ [3]byte{0, 0, 23}: "Oracle",
+ [3]byte{0, 0, 24}: "WEBSTER COMPUTER CORPORATION",
+ [3]byte{0, 0, 25}: "APPLIED DYNAMICS INTERNATIONAL",
+ [3]byte{0, 0, 26}: "ADVANCED MICRO DEVICES",
+ [3]byte{0, 0, 27}: "Novell, Inc.",
+ [3]byte{0, 0, 28}: "BELL TECHNOLOGIES",
+ [3]byte{0, 0, 29}: "Cabletron Systems, Inc.",
+ [3]byte{0, 0, 30}: "TELSIST INDUSTRIA ELECTRONICA",
+ [3]byte{0, 0, 31}: "Telco Systems, Inc.",
+ [3]byte{0, 0, 32}: "DATAINDUSTRIER DIAB AB",
+ [3]byte{0, 0, 33}: "SUREMAN COMP. & COMMUN. CORP.",
+ [3]byte{0, 0, 34}: "VISUAL TECHNOLOGY INC.",
+ [3]byte{0, 0, 35}: "ABB INDUSTRIAL SYSTEMS AB",
+ [3]byte{0, 0, 36}: "CONNECT AS",
+ [3]byte{0, 0, 37}: "RAMTEK CORP.",
+ [3]byte{0, 0, 38}: "SHA-KEN CO., LTD.",
+ [3]byte{0, 0, 39}: "JAPAN RADIO COMPANY",
+ [3]byte{0, 0, 40}: "PRODIGY SYSTEMS CORPORATION",
+ [3]byte{0, 0, 41}: "IMC NETWORKS CORP.",
+ [3]byte{0, 0, 42}: "TRW - SEDD/INP",
+ [3]byte{0, 0, 43}: "CRISP AUTOMATION, INC",
+ [3]byte{0, 0, 44}: "AUTOTOTE LIMITED",
+ [3]byte{0, 0, 45}: "CHROMATICS INC",
+ [3]byte{0, 0, 46}: "SOCIETE EVIRA",
+ [3]byte{0, 0, 47}: "TIMEPLEX INC.",
+ [3]byte{0, 0, 48}: "VG LABORATORY SYSTEMS LTD",
+ [3]byte{0, 0, 49}: "QPSX COMMUNICATIONS, LTD.",
+ [3]byte{0, 0, 50}: "Marconi plc",
+ [3]byte{0, 0, 51}: "EGAN MACHINERY COMPANY",
+ [3]byte{0, 0, 52}: "NETWORK RESOURCES CORPORATION",
+ [3]byte{0, 0, 53}: "SPECTRAGRAPHICS CORPORATION",
+ [3]byte{0, 0, 54}: "ATARI CORPORATION",
+ [3]byte{0, 0, 55}: "OXFORD METRICS LIMITED",
+ [3]byte{0, 0, 56}: "CSS LABS",
+ [3]byte{0, 0, 57}: "TOSHIBA CORPORATION",
+ [3]byte{0, 0, 58}: "CHYRON CORPORATION",
+ [3]byte{0, 0, 59}: "i Controls, Inc.",
+ [3]byte{0, 0, 60}: "AUSPEX SYSTEMS INC.",
+ [3]byte{0, 0, 61}: "UNISYS",
+ [3]byte{0, 0, 62}: "SIMPACT",
+ [3]byte{0, 0, 63}: "SYNTREX, INC.",
+ [3]byte{0, 0, 64}: "APPLICON, INC.",
+ [3]byte{0, 0, 65}: "ICE CORPORATION",
+ [3]byte{0, 0, 66}: "METIER MANAGEMENT SYSTEMS LTD.",
+ [3]byte{0, 0, 67}: "MICRO TECHNOLOGY",
+ [3]byte{0, 0, 68}: "CASTELLE CORPORATION",
+ [3]byte{0, 0, 69}: "FORD AEROSPACE & COMM. CORP.",
+ [3]byte{0, 0, 70}: "OLIVETTI NORTH AMERICA",
+ [3]byte{0, 0, 71}: "NICOLET INSTRUMENTS CORP.",
+ [3]byte{0, 0, 72}: "Seiko Epson Corporation",
+ [3]byte{0, 0, 73}: "APRICOT COMPUTERS, LTD",
+ [3]byte{0, 0, 74}: "ADC CODENOLL TECHNOLOGY CORP.",
+ [3]byte{0, 0, 75}: "ICL DATA OY",
+ [3]byte{0, 0, 76}: "NEC CORPORATION",
+ [3]byte{0, 0, 77}: "DCI CORPORATION",
+ [3]byte{0, 0, 78}: "AMPEX CORPORATION",
+ [3]byte{0, 0, 79}: "LOGICRAFT, INC.",
+ [3]byte{0, 0, 80}: "RADISYS CORPORATION",
+ [3]byte{0, 0, 81}: "HOB ELECTRONIC GMBH & CO. KG",
+ [3]byte{0, 0, 82}: "Intrusion.com, Inc.",
+ [3]byte{0, 0, 83}: "COMPUCORP",
+ [3]byte{0, 0, 84}: "Schneider Electric",
+ [3]byte{0, 0, 85}: "COMMISSARIAT A L`ENERGIE ATOM.",
+ [3]byte{0, 0, 86}: "DR. B. STRUCK",
+ [3]byte{0, 0, 87}: "SCITEX CORPORATION LTD.",
+ [3]byte{0, 0, 88}: "RACORE COMPUTER PRODUCTS INC.",
+ [3]byte{0, 0, 89}: "Hellige GMBH",
+ [3]byte{0, 0, 90}: "SysKonnect GmbH",
+ [3]byte{0, 0, 91}: "ELTEC ELEKTRONIK AG",
+ [3]byte{0, 0, 92}: "TELEMATICS INTERNATIONAL INC.",
+ [3]byte{0, 0, 93}: "CS TELECOM",
+ [3]byte{0, 0, 94}: "ICANN, IANA Department",
+ [3]byte{0, 0, 95}: "Sumitomo Electric Industries,Ltd",
+ [3]byte{0, 0, 96}: "KONTRON ELEKTRONIK GMBH",
+ [3]byte{0, 0, 97}: "GATEWAY COMMUNICATIONS",
+ [3]byte{0, 0, 98}: "BULL HN INFORMATION SYSTEMS",
+ [3]byte{0, 0, 99}: "BARCO CONTROL ROOMS GMBH",
+ [3]byte{0, 0, 100}: "Yokogawa Digital Computer Corporation",
+ [3]byte{0, 0, 101}: "Network General Corporation",
+ [3]byte{0, 0, 102}: "TALARIS SYSTEMS, INC.",
+ [3]byte{0, 0, 103}: "SOFT * RITE, INC.",
+ [3]byte{0, 0, 104}: "ROSEMOUNT CONTROLS",
+ [3]byte{0, 0, 105}: "CONCORD COMMUNICATIONS INC",
+ [3]byte{0, 0, 106}: "COMPUTER CONSOLES INC.",
+ [3]byte{0, 0, 107}: "SILICON GRAPHICS INC./MIPS",
+ [3]byte{0, 0, 108}: "Private",
+ [3]byte{0, 0, 109}: "CRAY COMMUNICATIONS, LTD.",
+ [3]byte{0, 0, 110}: "Artisoft Inc.",
+ [3]byte{0, 0, 111}: "Madge Ltd.",
+ [3]byte{0, 0, 112}: "HCL LIMITED",
+ [3]byte{0, 0, 113}: "ADRA SYSTEMS INC.",
+ [3]byte{0, 0, 114}: "MINIWARE TECHNOLOGY",
+ [3]byte{0, 0, 115}: "SIECOR CORPORATION",
+ [3]byte{0, 0, 116}: "RICOH COMPANY LTD.",
+ [3]byte{0, 0, 117}: "Nortel Networks",
+ [3]byte{0, 0, 118}: "ABEKAS VIDEO SYSTEM",
+ [3]byte{0, 0, 119}: "INTERPHASE CORPORATION",
+ [3]byte{0, 0, 120}: "LABTAM LIMITED",
+ [3]byte{0, 0, 121}: "NETWORTH INCORPORATED",
+ [3]byte{0, 0, 122}: "DANA COMPUTER INC.",
+ [3]byte{0, 0, 123}: "RESEARCH MACHINES",
+ [3]byte{0, 0, 124}: "AMPERE INCORPORATED",
+ [3]byte{0, 0, 125}: "Oracle Corporation",
+ [3]byte{0, 0, 126}: "CLUSTRIX CORPORATION",
+ [3]byte{0, 0, 127}: "LINOTYPE-HELL AG",
+ [3]byte{0, 0, 128}: "CRAY COMMUNICATIONS A/S",
+ [3]byte{0, 0, 129}: "Bay Networks",
+ [3]byte{0, 0, 130}: "LECTRA SYSTEMES SA",
+ [3]byte{0, 0, 131}: "TADPOLE TECHNOLOGY PLC",
+ [3]byte{0, 0, 132}: "SUPERNET",
+ [3]byte{0, 0, 133}: "CANON INC.",
+ [3]byte{0, 0, 134}: "MEGAHERTZ CORPORATION",
+ [3]byte{0, 0, 135}: "HITACHI, LTD.",
+ [3]byte{0, 0, 136}: "Brocade Communications Systems, Inc.",
+ [3]byte{0, 0, 137}: "CAYMAN SYSTEMS INC.",
+ [3]byte{0, 0, 138}: "DATAHOUSE INFORMATION SYSTEMS",
+ [3]byte{0, 0, 139}: "INFOTRON",
+ [3]byte{0, 0, 140}: "Alloy Computer Products (Australia) Pty Ltd",
+ [3]byte{0, 0, 141}: "Cryptek Inc.",
+ [3]byte{0, 0, 142}: "SOLBOURNE COMPUTER, INC.",
+ [3]byte{0, 0, 143}: "Raytheon",
+ [3]byte{0, 0, 144}: "MICROCOM",
+ [3]byte{0, 0, 145}: "ANRITSU CORPORATION",
+ [3]byte{0, 0, 146}: "COGENT DATA TECHNOLOGIES",
+ [3]byte{0, 0, 147}: "PROTEON INC.",
+ [3]byte{0, 0, 148}: "ASANTE TECHNOLOGIES",
+ [3]byte{0, 0, 149}: "SONY TEKTRONIX CORP.",
+ [3]byte{0, 0, 150}: "MARCONI ELECTRONICS LTD.",
+ [3]byte{0, 0, 151}: "Dell EMC",
+ [3]byte{0, 0, 152}: "CROSSCOMM CORPORATION",
+ [3]byte{0, 0, 153}: "MTX, INC.",
+ [3]byte{0, 0, 154}: "RC COMPUTER A/S",
+ [3]byte{0, 0, 155}: "INFORMATION INTERNATIONAL, INC",
+ [3]byte{0, 0, 156}: "ROLM MIL-SPEC COMPUTERS",
+ [3]byte{0, 0, 157}: "LOCUS COMPUTING CORPORATION",
+ [3]byte{0, 0, 158}: "MARLI S.A.",
+ [3]byte{0, 0, 159}: "AMERISTAR TECHNOLOGIES INC.",
+ [3]byte{0, 0, 160}: "SANYO Electric Co., Ltd.",
+ [3]byte{0, 0, 161}: "MARQUETTE ELECTRIC CO.",
+ [3]byte{0, 0, 162}: "Bay Networks",
+ [3]byte{0, 0, 163}: "NETWORK APPLICATION TECHNOLOGY",
+ [3]byte{0, 0, 164}: "ACORN COMPUTERS LIMITED",
+ [3]byte{0, 0, 165}: "Tattile SRL",
+ [3]byte{0, 0, 166}: "NETWORK GENERAL CORPORATION",
+ [3]byte{0, 0, 167}: "NETWORK COMPUTING DEVICES INC.",
+ [3]byte{0, 0, 168}: "STRATUS COMPUTER INC.",
+ [3]byte{0, 0, 169}: "NETWORK SYSTEMS CORP.",
+ [3]byte{0, 0, 170}: "XEROX CORPORATION",
+ [3]byte{0, 0, 171}: "LOGIC MODELING CORPORATION",
+ [3]byte{0, 0, 172}: "CONWARE COMPUTER CONSULTING",
+ [3]byte{0, 0, 173}: "BRUKER INSTRUMENTS INC.",
+ [3]byte{0, 0, 174}: "DASSAULT ELECTRONIQUE",
+ [3]byte{0, 0, 175}: "Canberra Industries, Inc.",
+ [3]byte{0, 0, 176}: "RND-RAD NETWORK DEVICES",
+ [3]byte{0, 0, 177}: "Alpha Micro",
+ [3]byte{0, 0, 178}: "TELEVIDEO SYSTEMS, INC.",
+ [3]byte{0, 0, 179}: "CIMLINC INCORPORATED",
+ [3]byte{0, 0, 180}: "Edimax Technology Co. Ltd.",
+ [3]byte{0, 0, 181}: "DATABILITY SOFTWARE SYS. INC.",
+ [3]byte{0, 0, 182}: "MICRO-MATIC RESEARCH",
+ [3]byte{0, 0, 183}: "DOVE COMPUTER CORPORATION",
+ [3]byte{0, 0, 184}: "SEIKOSHA CO., LTD.",
+ [3]byte{0, 0, 185}: "MCDONNELL DOUGLAS COMPUTER SYS",
+ [3]byte{0, 0, 186}: "SIIG, INC.",
+ [3]byte{0, 0, 187}: "TRI-DATA",
+ [3]byte{0, 0, 188}: "Rockwell Automation",
+ [3]byte{0, 0, 189}: "MITSUBISHI CABLE COMPANY",
+ [3]byte{0, 0, 190}: "THE NTI GROUP",
+ [3]byte{0, 0, 191}: "SYMMETRIC COMPUTER SYSTEMS",
+ [3]byte{0, 0, 192}: "WESTERN DIGITAL CORPORATION",
+ [3]byte{0, 0, 193}: "Madge Ltd.",
+ [3]byte{0, 0, 194}: "INFORMATION PRESENTATION TECH.",
+ [3]byte{0, 0, 195}: "HARRIS CORP COMPUTER SYS DIV",
+ [3]byte{0, 0, 196}: "WATERS DIV. OF MILLIPORE",
+ [3]byte{0, 0, 197}: "ARRIS Group, Inc.",
+ [3]byte{0, 0, 198}: "EON SYSTEMS",
+ [3]byte{0, 0, 199}: "ARIX CORPORATION",
+ [3]byte{0, 0, 200}: "ALTOS COMPUTER SYSTEMS",
+ [3]byte{0, 0, 201}: "Emulex Corporation",
+ [3]byte{0, 0, 202}: "ARRIS Group, Inc.",
+ [3]byte{0, 0, 203}: "COMPU-SHACK ELECTRONIC GMBH",
+ [3]byte{0, 0, 204}: "DENSAN CO., LTD.",
+ [3]byte{0, 0, 205}: "Allied Telesis Labs Ltd",
+ [3]byte{0, 0, 206}: "MEGADATA CORP.",
+ [3]byte{0, 0, 207}: "HAYES MICROCOMPUTER PRODUCTS",
+ [3]byte{0, 0, 208}: "DEVELCON ELECTRONICS LTD.",
+ [3]byte{0, 0, 209}: "ADAPTEC INCORPORATED",
+ [3]byte{0, 0, 210}: "SBE, INC.",
+ [3]byte{0, 0, 211}: "WANG LABORATORIES INC.",
+ [3]byte{0, 0, 212}: "PURE DATA LTD.",
+ [3]byte{0, 0, 213}: "MICROGNOSIS INTERNATIONAL",
+ [3]byte{0, 0, 214}: "PUNCH LINE HOLDING",
+ [3]byte{0, 0, 215}: "DARTMOUTH COLLEGE",
+ [3]byte{0, 0, 216}: "Novell, Inc.",
+ [3]byte{0, 0, 217}: "NIPPON TELEGRAPH & TELEPHONE",
+ [3]byte{0, 0, 218}: "ATEX",
+ [3]byte{0, 0, 219}: "British Telecommunications plc",
+ [3]byte{0, 0, 220}: "HAYES MICROCOMPUTER PRODUCTS",
+ [3]byte{0, 0, 221}: "TCL INCORPORATED",
+ [3]byte{0, 0, 222}: "CETIA",
+ [3]byte{0, 0, 223}: "BELL & HOWELL PUB SYS DIV",
+ [3]byte{0, 0, 224}: "QUADRAM CORP.",
+ [3]byte{0, 0, 225}: "GRID SYSTEMS",
+ [3]byte{0, 0, 226}: "ACER TECHNOLOGIES CORP.",
+ [3]byte{0, 0, 227}: "INTEGRATED MICRO PRODUCTS LTD",
+ [3]byte{0, 0, 228}: "IN2 GROUPE INTERTECHNIQUE",
+ [3]byte{0, 0, 229}: "SIGMEX LTD.",
+ [3]byte{0, 0, 230}: "APTOR PRODUITS DE COMM INDUST",
+ [3]byte{0, 0, 231}: "Star Gate Technologies",
+ [3]byte{0, 0, 232}: "ACCTON TECHNOLOGY CORP.",
+ [3]byte{0, 0, 233}: "ISICAD, INC.",
+ [3]byte{0, 0, 234}: "UPNOD AB",
+ [3]byte{0, 0, 235}: "MATSUSHITA COMM. IND. CO. LTD.",
+ [3]byte{0, 0, 236}: "MICROPROCESS",
+ [3]byte{0, 0, 237}: "APRIL",
+ [3]byte{0, 0, 238}: "NETWORK DESIGNERS, LTD.",
+ [3]byte{0, 0, 239}: "KTI",
+ [3]byte{0, 0, 240}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 0, 241}: "MAGNA COMPUTER CORPORATION",
+ [3]byte{0, 0, 242}: "SPIDER COMMUNICATIONS",
+ [3]byte{0, 0, 243}: "GANDALF DATA LIMITED",
+ [3]byte{0, 0, 244}: "Allied Telesis, Inc.",
+ [3]byte{0, 0, 245}: "DIAMOND SALES LIMITED",
+ [3]byte{0, 0, 246}: "APPLIED MICROSYSTEMS CORP.",
+ [3]byte{0, 0, 247}: "YOUTH KEEP ENTERPRISE CO LTD",
+ [3]byte{0, 0, 248}: "DIGITAL EQUIPMENT CORPORATION",
+ [3]byte{0, 0, 249}: "QUOTRON SYSTEMS INC.",
+ [3]byte{0, 0, 250}: "MICROSAGE COMPUTER SYSTEMS INC",
+ [3]byte{0, 0, 251}: "RECHNER ZUR KOMMUNIKATION",
+ [3]byte{0, 0, 252}: "MEIKO",
+ [3]byte{0, 0, 253}: "HIGH LEVEL HARDWARE",
+ [3]byte{0, 0, 254}: "Annapolis Micro Systems, Inc.",
+ [3]byte{0, 0, 255}: "CAMTEC ELECTRONICS LTD.",
+ [3]byte{0, 1, 0}: "EQUIP'TRANS",
+ [3]byte{0, 1, 1}: "Private",
+ [3]byte{0, 1, 2}: "3COM CORPORATION",
+ [3]byte{0, 1, 3}: "3COM CORPORATION",
+ [3]byte{0, 1, 4}: "DVICO Co., Ltd.",
+ [3]byte{0, 1, 5}: "Beckhoff Automation GmbH",
+ [3]byte{0, 1, 6}: "Tews Datentechnik GmbH",
+ [3]byte{0, 1, 7}: "Leiser GmbH",
+ [3]byte{0, 1, 8}: "AVLAB Technology, Inc.",
+ [3]byte{0, 1, 9}: "Nagano Japan Radio Co., Ltd.",
+ [3]byte{0, 1, 10}: "CIS TECHNOLOGY INC.",
+ [3]byte{0, 1, 11}: "Space CyberLink, Inc.",
+ [3]byte{0, 1, 12}: "System Talks Inc.",
+ [3]byte{0, 1, 13}: "Teledyne DALSA Inc.",
+ [3]byte{0, 1, 14}: "Bri-Link Technologies Co., Ltd",
+ [3]byte{0, 1, 15}: "Brocade Communications Systems, Inc.",
+ [3]byte{0, 1, 16}: "Gotham Networks",
+ [3]byte{0, 1, 17}: "iDigm Inc.",
+ [3]byte{0, 1, 18}: "Shark Multimedia Inc.",
+ [3]byte{0, 1, 19}: "OLYMPUS CORPORATION",
+ [3]byte{0, 1, 20}: "KANDA TSUSHIN KOGYO CO., LTD.",
+ [3]byte{0, 1, 21}: "EXTRATECH CORPORATION",
+ [3]byte{0, 1, 22}: "Netspect Technologies, Inc.",
+ [3]byte{0, 1, 23}: "Canal +",
+ [3]byte{0, 1, 24}: "EZ Digital Co., Ltd.",
+ [3]byte{0, 1, 25}: "RTUnet (Australia)",
+ [3]byte{0, 1, 26}: "Hoffmann und Burmeister GbR",
+ [3]byte{0, 1, 27}: "Unizone Technologies, Inc.",
+ [3]byte{0, 1, 28}: "Universal Talkware Corporation",
+ [3]byte{0, 1, 29}: "Centillium Communications",
+ [3]byte{0, 1, 30}: "Precidia Technologies, Inc.",
+ [3]byte{0, 1, 31}: "RC Networks, Inc.",
+ [3]byte{0, 1, 32}: "OSCILLOQUARTZ S.A.",
+ [3]byte{0, 1, 33}: "Watchguard Technologies, Inc.",
+ [3]byte{0, 1, 34}: "Trend Communications, Ltd.",
+ [3]byte{0, 1, 35}: "Schneider Electric Japan Holdings Ltd.",
+ [3]byte{0, 1, 36}: "Acer Incorporated",
+ [3]byte{0, 1, 37}: "YAESU MUSEN CO., LTD.",
+ [3]byte{0, 1, 38}: "PAC Labs",
+ [3]byte{0, 1, 39}: "OPEN Networks Pty Ltd",
+ [3]byte{0, 1, 40}: "EnjoyWeb, Inc.",
+ [3]byte{0, 1, 41}: "DFI Inc.",
+ [3]byte{0, 1, 42}: "Telematica Sistems Inteligente",
+ [3]byte{0, 1, 43}: "TELENET Co., Ltd.",
+ [3]byte{0, 1, 44}: "Aravox Technologies, Inc.",
+ [3]byte{0, 1, 45}: "Komodo Technology",
+ [3]byte{0, 1, 46}: "PC Partner Ltd.",
+ [3]byte{0, 1, 47}: "Twinhead International Corp",
+ [3]byte{0, 1, 48}: "Extreme Networks, Inc.",
+ [3]byte{0, 1, 49}: "Bosch Security Systems, Inc.",
+ [3]byte{0, 1, 50}: "Dranetz - BMI",
+ [3]byte{0, 1, 51}: "KYOWA Electronic Instruments C",
+ [3]byte{0, 1, 52}: "Selectron Systems AG",
+ [3]byte{0, 1, 53}: "KDC Corp.",
+ [3]byte{0, 1, 54}: "CyberTAN Technology Inc.",
+ [3]byte{0, 1, 55}: "IT Farm Corporation",
+ [3]byte{0, 1, 56}: "XAVi Technologies Corp.",
+ [3]byte{0, 1, 57}: "Point Multimedia Systems",
+ [3]byte{0, 1, 58}: "SHELCAD COMMUNICATIONS, LTD.",
+ [3]byte{0, 1, 59}: "BNA SYSTEMS",
+ [3]byte{0, 1, 60}: "TIW SYSTEMS",
+ [3]byte{0, 1, 61}: "RiscStation Ltd.",
+ [3]byte{0, 1, 62}: "Ascom Tateco AB",
+ [3]byte{0, 1, 63}: "Neighbor World Co., Ltd.",
+ [3]byte{0, 1, 64}: "Sendtek Corporation",
+ [3]byte{0, 1, 65}: "CABLE PRINT",
+ [3]byte{0, 1, 66}: "Cisco Systems, Inc",
+ [3]byte{0, 1, 67}: "Cisco Systems, Inc",
+ [3]byte{0, 1, 68}: "Dell EMC",
+ [3]byte{0, 1, 69}: "WINSYSTEMS, INC.",
+ [3]byte{0, 1, 70}: "Tesco Controls, Inc.",
+ [3]byte{0, 1, 71}: "Zhone Technologies",
+ [3]byte{0, 1, 72}: "X-traWeb Inc.",
+ [3]byte{0, 1, 73}: "T.D.T. Transfer Data Test GmbH",
+ [3]byte{0, 1, 74}: "Sony Corporation",
+ [3]byte{0, 1, 75}: "Ennovate Networks, Inc.",
+ [3]byte{0, 1, 76}: "Berkeley Process Control",
+ [3]byte{0, 1, 77}: "Shin Kin Enterprises Co., Ltd",
+ [3]byte{0, 1, 78}: "WIN Enterprises, Inc.",
+ [3]byte{0, 1, 79}: "Adtran Inc",
+ [3]byte{0, 1, 80}: "GILAT COMMUNICATIONS, LTD.",
+ [3]byte{0, 1, 81}: "Ensemble Communications",
+ [3]byte{0, 1, 82}: "CHROMATEK INC.",
+ [3]byte{0, 1, 83}: "ARCHTEK TELECOM CORPORATION",
+ [3]byte{0, 1, 84}: "G3M Corporation",
+ [3]byte{0, 1, 85}: "Promise Technology, Inc.",
+ [3]byte{0, 1, 86}: "FIREWIREDIRECT.COM, INC.",
+ [3]byte{0, 1, 87}: "SYSWAVE CO., LTD",
+ [3]byte{0, 1, 88}: "Electro Industries/Gauge Tech",
+ [3]byte{0, 1, 89}: "S1 Corporation",
+ [3]byte{0, 1, 90}: "Digital Video Broadcasting",
+ [3]byte{0, 1, 91}: "ITALTEL S.p.A/RF-UP-I",
+ [3]byte{0, 1, 92}: "CADANT INC.",
+ [3]byte{0, 1, 93}: "Oracle Corporation",
+ [3]byte{0, 1, 94}: "BEST TECHNOLOGY CO., LTD.",
+ [3]byte{0, 1, 95}: "DIGITAL DESIGN GmbH",
+ [3]byte{0, 1, 96}: "ELMEX Co., LTD.",
+ [3]byte{0, 1, 97}: "Meta Machine Technology",
+ [3]byte{0, 1, 98}: "Cygnet Technologies, Inc.",
+ [3]byte{0, 1, 99}: "Cisco Systems, Inc",
+ [3]byte{0, 1, 100}: "Cisco Systems, Inc",
+ [3]byte{0, 1, 101}: "AirSwitch Corporation",
+ [3]byte{0, 1, 102}: "TC GROUP A/S",
+ [3]byte{0, 1, 103}: "HIOKI E.E. CORPORATION",
+ [3]byte{0, 1, 104}: "VITANA CORPORATION",
+ [3]byte{0, 1, 105}: "Celestix Networks Pte Ltd.",
+ [3]byte{0, 1, 106}: "ALITEC",
+ [3]byte{0, 1, 107}: "LightChip, Inc.",
+ [3]byte{0, 1, 108}: "FOXCONN",
+ [3]byte{0, 1, 109}: "CarrierComm Inc.",
+ [3]byte{0, 1, 110}: "Conklin Corporation",
+ [3]byte{0, 1, 111}: "Inkel Corp.",
+ [3]byte{0, 1, 112}: "ESE Embedded System Engineer'g",
+ [3]byte{0, 1, 113}: "Allied Data Technologies",
+ [3]byte{0, 1, 114}: "TechnoLand Co., LTD.",
+ [3]byte{0, 1, 115}: "AMCC",
+ [3]byte{0, 1, 116}: "CyberOptics Corporation",
+ [3]byte{0, 1, 117}: "Radiant Communications Corp.",
+ [3]byte{0, 1, 118}: "Orient Silver Enterprises",
+ [3]byte{0, 1, 119}: "EDSL",
+ [3]byte{0, 1, 120}: "MARGI Systems, Inc.",
+ [3]byte{0, 1, 121}: "WIRELESS TECHNOLOGY, INC.",
+ [3]byte{0, 1, 122}: "Chengdu Maipu Electric Industrial Co., Ltd.",
+ [3]byte{0, 1, 123}: "Heidelberger Druckmaschinen AG",
+ [3]byte{0, 1, 124}: "AG-E GmbH",
+ [3]byte{0, 1, 125}: "ThermoQuest",
+ [3]byte{0, 1, 126}: "ADTEK System Science Co., Ltd.",
+ [3]byte{0, 1, 127}: "Experience Music Project",
+ [3]byte{0, 1, 128}: "AOpen, Inc.",
+ [3]byte{0, 1, 129}: "Nortel Networks",
+ [3]byte{0, 1, 130}: "DICA TECHNOLOGIES AG",
+ [3]byte{0, 1, 131}: "ANITE TELECOMS",
+ [3]byte{0, 1, 132}: "SIEB & MEYER AG",
+ [3]byte{0, 1, 133}: "Hitachi Aloka Medical, Ltd.",
+ [3]byte{0, 1, 134}: "Uwe Disch",
+ [3]byte{0, 1, 135}: "I2SE GmbH",
+ [3]byte{0, 1, 136}: "LXCO Technologies ag",
+ [3]byte{0, 1, 137}: "Refraction Technology, Inc.",
+ [3]byte{0, 1, 138}: "ROI COMPUTER AG",
+ [3]byte{0, 1, 139}: "NetLinks Co., Ltd.",
+ [3]byte{0, 1, 140}: "Mega Vision",
+ [3]byte{0, 1, 141}: "AudeSi Technologies",
+ [3]byte{0, 1, 142}: "Logitec Corporation",
+ [3]byte{0, 1, 143}: "Kenetec, Inc.",
+ [3]byte{0, 1, 144}: "SMK-M",
+ [3]byte{0, 1, 145}: "SYRED Data Systems",
+ [3]byte{0, 1, 146}: "Texas Digital Systems",
+ [3]byte{0, 1, 147}: "Hanbyul Telecom Co., Ltd.",
+ [3]byte{0, 1, 148}: "Capital Equipment Corporation",
+ [3]byte{0, 1, 149}: "Sena Technologies, Inc.",
+ [3]byte{0, 1, 150}: "Cisco Systems, Inc",
+ [3]byte{0, 1, 151}: "Cisco Systems, Inc",
+ [3]byte{0, 1, 152}: "Darim Vision",
+ [3]byte{0, 1, 153}: "HeiSei Electronics",
+ [3]byte{0, 1, 154}: "LEUNIG GmbH",
+ [3]byte{0, 1, 155}: "Kyoto Microcomputer Co., Ltd.",
+ [3]byte{0, 1, 156}: "JDS Uniphase Inc.",
+ [3]byte{0, 1, 157}: "E-Control Systems, Inc.",
+ [3]byte{0, 1, 158}: "ESS Technology, Inc.",
+ [3]byte{0, 1, 159}: "ReadyNet",
+ [3]byte{0, 1, 160}: "Infinilink Corporation",
+ [3]byte{0, 1, 161}: "Mag-Tek, Inc.",
+ [3]byte{0, 1, 162}: "Logical Co., Ltd.",
+ [3]byte{0, 1, 163}: "GENESYS LOGIC, INC.",
+ [3]byte{0, 1, 164}: "Microlink Corporation",
+ [3]byte{0, 1, 165}: "Nextcomm, Inc.",
+ [3]byte{0, 1, 166}: "Scientific-Atlanta Arcodan A/S",
+ [3]byte{0, 1, 167}: "UNEX TECHNOLOGY CORPORATION",
+ [3]byte{0, 1, 168}: "Welltech Computer Co., Ltd.",
+ [3]byte{0, 1, 169}: "BMW AG",
+ [3]byte{0, 1, 170}: "Airspan Communications, Ltd.",
+ [3]byte{0, 1, 171}: "Main Street Networks",
+ [3]byte{0, 1, 172}: "Sitara Networks, Inc.",
+ [3]byte{0, 1, 173}: "Coach Master International d.b.a. CMI Worldwide, Inc.",
+ [3]byte{0, 1, 174}: "Trex Enterprises",
+ [3]byte{0, 1, 175}: "Artesyn Embedded Technologies",
+ [3]byte{0, 1, 176}: "Fulltek Technology Co., Ltd.",
+ [3]byte{0, 1, 177}: "General Bandwidth",
+ [3]byte{0, 1, 178}: "Digital Processing Systems, Inc.",
+ [3]byte{0, 1, 179}: "Precision Electronic Manufacturing",
+ [3]byte{0, 1, 180}: "Wayport, Inc.",
+ [3]byte{0, 1, 181}: "Turin Networks, Inc.",
+ [3]byte{0, 1, 182}: "SAEJIN T&M Co., Ltd.",
+ [3]byte{0, 1, 183}: "Centos, Inc.",
+ [3]byte{0, 1, 184}: "Netsensity, Inc.",
+ [3]byte{0, 1, 185}: "SKF Condition Monitoring",
+ [3]byte{0, 1, 186}: "IC-Net, Inc.",
+ [3]byte{0, 1, 187}: "Frequentis",
+ [3]byte{0, 1, 188}: "Brains Corporation",
+ [3]byte{0, 1, 189}: "Peterson Electro-Musical Products, Inc.",
+ [3]byte{0, 1, 190}: "Gigalink Co., Ltd.",
+ [3]byte{0, 1, 191}: "Teleforce Co., Ltd.",
+ [3]byte{0, 1, 192}: "CompuLab, Ltd.",
+ [3]byte{0, 1, 193}: "Vitesse Semiconductor Corporation",
+ [3]byte{0, 1, 194}: "ARK Research Corp.",
+ [3]byte{0, 1, 195}: "Acromag, Inc.",
+ [3]byte{0, 1, 196}: "NeoWave, Inc.",
+ [3]byte{0, 1, 197}: "Simpler Networks",
+ [3]byte{0, 1, 198}: "Quarry Technologies",
+ [3]byte{0, 1, 199}: "Cisco Systems, Inc",
+ [3]byte{0, 1, 200}: "THOMAS CONRAD CORP.",
+ [3]byte{0, 1, 200}: "CONRAD CORP.",
+ [3]byte{0, 1, 201}: "Cisco Systems, Inc",
+ [3]byte{0, 1, 202}: "Geocast Network Systems, Inc.",
+ [3]byte{0, 1, 203}: "EVR",
+ [3]byte{0, 1, 204}: "Japan Total Design Communication Co., Ltd.",
+ [3]byte{0, 1, 205}: "ARtem",
+ [3]byte{0, 1, 206}: "Custom Micro Products, Ltd.",
+ [3]byte{0, 1, 207}: "Alpha Data Parallel Systems, Ltd.",
+ [3]byte{0, 1, 208}: "VitalPoint, Inc.",
+ [3]byte{0, 1, 209}: "CoNet Communications, Inc.",
+ [3]byte{0, 1, 210}: "inXtron, Inc.",
+ [3]byte{0, 1, 211}: "PAXCOMM, Inc.",
+ [3]byte{0, 1, 212}: "Leisure Time, Inc.",
+ [3]byte{0, 1, 213}: "HAEDONG INFO & COMM CO., LTD",
+ [3]byte{0, 1, 214}: "manroland AG",
+ [3]byte{0, 1, 215}: "F5 Networks, Inc.",
+ [3]byte{0, 1, 216}: "Teltronics, Inc.",
+ [3]byte{0, 1, 217}: "Sigma, Inc.",
+ [3]byte{0, 1, 218}: "WINCOMM Corporation",
+ [3]byte{0, 1, 219}: "Freecom Technologies GmbH",
+ [3]byte{0, 1, 220}: "Activetelco",
+ [3]byte{0, 1, 221}: "Avail Networks",
+ [3]byte{0, 1, 222}: "Trango Systems, Inc.",
+ [3]byte{0, 1, 223}: "ISDN Communications, Ltd.",
+ [3]byte{0, 1, 224}: "Fast Systems, Inc.",
+ [3]byte{0, 1, 225}: "Kinpo Electronics, Inc.",
+ [3]byte{0, 1, 226}: "Ando Electric Corporation",
+ [3]byte{0, 1, 227}: "Siemens AG",
+ [3]byte{0, 1, 228}: "Sitera, Inc.",
+ [3]byte{0, 1, 229}: "Supernet, Inc.",
+ [3]byte{0, 1, 230}: "Hewlett Packard",
+ [3]byte{0, 1, 231}: "Hewlett Packard",
+ [3]byte{0, 1, 232}: "Force10 Networks, Inc.",
+ [3]byte{0, 1, 233}: "Litton Marine Systems B.V.",
+ [3]byte{0, 1, 234}: "Cirilium Corp.",
+ [3]byte{0, 1, 235}: "C-COM Corporation",
+ [3]byte{0, 1, 236}: "Ericsson Group",
+ [3]byte{0, 1, 237}: "SETA Corp.",
+ [3]byte{0, 1, 238}: "Comtrol Europe, Ltd.",
+ [3]byte{0, 1, 239}: "Camtel Technology Corp.",
+ [3]byte{0, 1, 240}: "Tridium, Inc.",
+ [3]byte{0, 1, 241}: "Innovative Concepts, Inc.",
+ [3]byte{0, 1, 242}: "Mark of the Unicorn, Inc.",
+ [3]byte{0, 1, 243}: "QPS, Inc.",
+ [3]byte{0, 1, 244}: "Enterasys",
+ [3]byte{0, 1, 245}: "ERIM S.A.",
+ [3]byte{0, 1, 246}: "Association of Musical Electronics Industry",
+ [3]byte{0, 1, 247}: "Image Display Systems, Inc.",
+ [3]byte{0, 1, 248}: "TEXIO TECHNOLOGY CORPORATION",
+ [3]byte{0, 1, 249}: "TeraGlobal Communications Corp.",
+ [3]byte{0, 1, 250}: "HOROSCAS",
+ [3]byte{0, 1, 251}: "DoTop Technology, Inc.",
+ [3]byte{0, 1, 252}: "Keyence Corporation",
+ [3]byte{0, 1, 253}: "Digital Voice Systems, Inc.",
+ [3]byte{0, 1, 254}: "DIGITAL EQUIPMENT CORPORATION",
+ [3]byte{0, 1, 255}: "Data Direct Networks, Inc.",
+ [3]byte{0, 2, 0}: "Net & Sys Co., Ltd.",
+ [3]byte{0, 2, 1}: "IFM Electronic gmbh",
+ [3]byte{0, 2, 2}: "Amino Communications, Ltd.",
+ [3]byte{0, 2, 3}: "Woonsang Telecom, Inc.",
+ [3]byte{0, 2, 4}: "Bodmann Industries Elektronik GmbH",
+ [3]byte{0, 2, 5}: "Hitachi Denshi, Ltd.",
+ [3]byte{0, 2, 6}: "Telital R&D Denmark A/S",
+ [3]byte{0, 2, 7}: "VisionGlobal Network Corp.",
+ [3]byte{0, 2, 8}: "Unify Networks, Inc.",
+ [3]byte{0, 2, 9}: "Shenzhen SED Information Technology Co., Ltd.",
+ [3]byte{0, 2, 10}: "Gefran Spa",
+ [3]byte{0, 2, 11}: "Native Networks, Inc.",
+ [3]byte{0, 2, 12}: "Metro-Optix",
+ [3]byte{0, 2, 13}: "Micronpc.com",
+ [3]byte{0, 2, 14}: "ECI Telecom Ltd.",
+ [3]byte{0, 2, 15}: "AATR",
+ [3]byte{0, 2, 16}: "Fenecom",
+ [3]byte{0, 2, 17}: "Nature Worldwide Technology Corp.",
+ [3]byte{0, 2, 18}: "SierraCom",
+ [3]byte{0, 2, 19}: "S.D.E.L.",
+ [3]byte{0, 2, 20}: "DTVRO",
+ [3]byte{0, 2, 21}: "Cotas Computer Technology A/B",
+ [3]byte{0, 2, 22}: "Cisco Systems, Inc",
+ [3]byte{0, 2, 23}: "Cisco Systems, Inc",
+ [3]byte{0, 2, 24}: "Advanced Scientific Corp",
+ [3]byte{0, 2, 25}: "Paralon Technologies",
+ [3]byte{0, 2, 26}: "Zuma Networks",
+ [3]byte{0, 2, 27}: "Kollmorgen-Servotronix",
+ [3]byte{0, 2, 28}: "Network Elements, Inc.",
+ [3]byte{0, 2, 29}: "Data General Communication Ltd.",
+ [3]byte{0, 2, 30}: "SIMTEL S.R.L.",
+ [3]byte{0, 2, 31}: "Aculab PLC",
+ [3]byte{0, 2, 32}: "CANON FINETECH INC.",
+ [3]byte{0, 2, 33}: "DSP Application, Ltd.",
+ [3]byte{0, 2, 34}: "Chromisys, Inc.",
+ [3]byte{0, 2, 35}: "ClickTV",
+ [3]byte{0, 2, 36}: "C-COR",
+ [3]byte{0, 2, 37}: "One Stop Systems",
+ [3]byte{0, 2, 38}: "XESystems, Inc.",
+ [3]byte{0, 2, 39}: "ESD Electronic System Design GmbH",
+ [3]byte{0, 2, 40}: "Necsom, Ltd.",
+ [3]byte{0, 2, 41}: "Adtec Corporation",
+ [3]byte{0, 2, 42}: "Asound Electronic",
+ [3]byte{0, 2, 43}: "SAXA, Inc.",
+ [3]byte{0, 2, 44}: "ABB Bomem, Inc.",
+ [3]byte{0, 2, 45}: "Agere Systems",
+ [3]byte{0, 2, 46}: "TEAC Corp. R& D",
+ [3]byte{0, 2, 47}: "P-Cube, Ltd.",
+ [3]byte{0, 2, 48}: "Intersoft Electronics",
+ [3]byte{0, 2, 49}: "Ingersoll-Rand",
+ [3]byte{0, 2, 50}: "Avision, Inc.",
+ [3]byte{0, 2, 51}: "Mantra Communications, Inc.",
+ [3]byte{0, 2, 52}: "Imperial Technology, Inc.",
+ [3]byte{0, 2, 53}: "Paragon Networks International",
+ [3]byte{0, 2, 54}: "INIT GmbH",
+ [3]byte{0, 2, 55}: "Cosmo Research Corp.",
+ [3]byte{0, 2, 56}: "Serome Technology, Inc.",
+ [3]byte{0, 2, 57}: "Visicom",
+ [3]byte{0, 2, 58}: "ZSK Stickmaschinen GmbH",
+ [3]byte{0, 2, 59}: "Ericsson",
+ [3]byte{0, 2, 60}: "Creative Technology, Ltd.",
+ [3]byte{0, 2, 61}: "Cisco Systems, Inc",
+ [3]byte{0, 2, 62}: "Selta Telematica S.p.a",
+ [3]byte{0, 2, 63}: "COMPAL ELECTRONICS, INC.",
+ [3]byte{0, 2, 64}: "Seedek Co., Ltd.",
+ [3]byte{0, 2, 65}: "Amer.com",
+ [3]byte{0, 2, 66}: "Videoframe Systems",
+ [3]byte{0, 2, 67}: "Raysis Co., Ltd.",
+ [3]byte{0, 2, 68}: "SURECOM Technology Co.",
+ [3]byte{0, 2, 69}: "Lampus Co, Ltd.",
+ [3]byte{0, 2, 70}: "All-Win Tech Co., Ltd.",
+ [3]byte{0, 2, 71}: "Great Dragon Information Technology (Group) Co., Ltd.",
+ [3]byte{0, 2, 72}: "Pilz GmbH & Co.",
+ [3]byte{0, 2, 73}: "Aviv Infocom Co, Ltd.",
+ [3]byte{0, 2, 74}: "Cisco Systems, Inc",
+ [3]byte{0, 2, 75}: "Cisco Systems, Inc",
+ [3]byte{0, 2, 76}: "SiByte, Inc.",
+ [3]byte{0, 2, 77}: "Mannesman Dematic Colby Pty. Ltd.",
+ [3]byte{0, 2, 78}: "Datacard Group",
+ [3]byte{0, 2, 79}: "IPM Datacom S.R.L.",
+ [3]byte{0, 2, 80}: "Geyser Networks, Inc.",
+ [3]byte{0, 2, 81}: "Soma Networks, Inc.",
+ [3]byte{0, 2, 82}: "Carrier Corporation",
+ [3]byte{0, 2, 83}: "Televideo, Inc.",
+ [3]byte{0, 2, 84}: "WorldGate",
+ [3]byte{0, 2, 85}: "IBM Corp",
+ [3]byte{0, 2, 86}: "Alpha Processor, Inc.",
+ [3]byte{0, 2, 87}: "Microcom Corp.",
+ [3]byte{0, 2, 88}: "Flying Packets Communications",
+ [3]byte{0, 2, 89}: "Tsann Kuen China (Shanghai)Enterprise Co., Ltd. IT Group",
+ [3]byte{0, 2, 90}: "Catena Networks",
+ [3]byte{0, 2, 91}: "Cambridge Silicon Radio",
+ [3]byte{0, 2, 92}: "SCI Systems (Kunshan) Co., Ltd.",
+ [3]byte{0, 2, 93}: "Calix Networks",
+ [3]byte{0, 2, 94}: "High Technology Ltd",
+ [3]byte{0, 2, 95}: "Nortel Networks",
+ [3]byte{0, 2, 96}: "Accordion Networks, Inc.",
+ [3]byte{0, 2, 97}: "Tilgin AB",
+ [3]byte{0, 2, 98}: "Soyo Group Soyo Com Tech Co., Ltd",
+ [3]byte{0, 2, 99}: "UPS Manufacturing SRL",
+ [3]byte{0, 2, 100}: "AudioRamp.com",
+ [3]byte{0, 2, 101}: "Virditech Co. Ltd.",
+ [3]byte{0, 2, 102}: "Thermalogic Corporation",
+ [3]byte{0, 2, 103}: "NODE RUNNER, INC.",
+ [3]byte{0, 2, 104}: "Harris Government Communications",
+ [3]byte{0, 2, 105}: "Nadatel Co., Ltd",
+ [3]byte{0, 2, 106}: "Cocess Telecom Co., Ltd.",
+ [3]byte{0, 2, 107}: "BCM Computers Co., Ltd.",
+ [3]byte{0, 2, 108}: "Philips CFT",
+ [3]byte{0, 2, 109}: "Adept Telecom",
+ [3]byte{0, 2, 110}: "NeGeN Access, Inc.",
+ [3]byte{0, 2, 111}: "Senao International Co., Ltd.",
+ [3]byte{0, 2, 112}: "Crewave Co., Ltd.",
+ [3]byte{0, 2, 113}: "Zhone Technologies",
+ [3]byte{0, 2, 114}: "CC&C Technologies, Inc.",
+ [3]byte{0, 2, 115}: "Coriolis Networks",
+ [3]byte{0, 2, 116}: "Tommy Technologies Corp.",
+ [3]byte{0, 2, 117}: "SMART Technologies, Inc.",
+ [3]byte{0, 2, 118}: "Primax Electronics Ltd.",
+ [3]byte{0, 2, 119}: "Cash Systemes Industrie",
+ [3]byte{0, 2, 120}: "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+ [3]byte{0, 2, 121}: "Control Applications, Ltd.",
+ [3]byte{0, 2, 122}: "IOI Technology Corporation",
+ [3]byte{0, 2, 123}: "Amplify Net, Inc.",
+ [3]byte{0, 2, 124}: "Trilithic, Inc.",
+ [3]byte{0, 2, 125}: "Cisco Systems, Inc",
+ [3]byte{0, 2, 126}: "Cisco Systems, Inc",
+ [3]byte{0, 2, 127}: "ask-technologies.com",
+ [3]byte{0, 2, 128}: "Mu Net, Inc.",
+ [3]byte{0, 2, 129}: "Madge Ltd.",
+ [3]byte{0, 2, 130}: "ViaClix, Inc.",
+ [3]byte{0, 2, 131}: "Spectrum Controls, Inc.",
+ [3]byte{0, 2, 132}: "AREVA T&D",
+ [3]byte{0, 2, 133}: "Riverstone Networks",
+ [3]byte{0, 2, 134}: "Occam Networks",
+ [3]byte{0, 2, 135}: "Adapcom",
+ [3]byte{0, 2, 136}: "GLOBAL VILLAGE COMMUNICATION",
+ [3]byte{0, 2, 137}: "DNE Technologies",
+ [3]byte{0, 2, 138}: "Ambit Microsystems Corporation",
+ [3]byte{0, 2, 139}: "VDSL Systems OY",
+ [3]byte{0, 2, 140}: "Micrel-Synergy Semiconductor",
+ [3]byte{0, 2, 141}: "Movita Technologies, Inc.",
+ [3]byte{0, 2, 142}: "Rapid 5 Networks, Inc.",
+ [3]byte{0, 2, 143}: "Globetek, Inc.",
+ [3]byte{0, 2, 144}: "Woorigisool, Inc.",
+ [3]byte{0, 2, 145}: "Open Network Co., Ltd.",
+ [3]byte{0, 2, 146}: "Logic Innovations, Inc.",
+ [3]byte{0, 2, 147}: "Solid Data Systems",
+ [3]byte{0, 2, 148}: "Tokyo Sokushin Co., Ltd.",
+ [3]byte{0, 2, 149}: "IP.Access Limited",
+ [3]byte{0, 2, 150}: "Lectron Co,. Ltd.",
+ [3]byte{0, 2, 151}: "C-COR.net",
+ [3]byte{0, 2, 152}: "Broadframe Corporation",
+ [3]byte{0, 2, 153}: "Apex, Inc.",
+ [3]byte{0, 2, 154}: "Storage Apps",
+ [3]byte{0, 2, 155}: "Kreatel Communications AB",
+ [3]byte{0, 2, 156}: "3COM",
+ [3]byte{0, 2, 157}: "Merix Corp.",
+ [3]byte{0, 2, 158}: "Information Equipment Co., Ltd.",
+ [3]byte{0, 2, 159}: "L-3 Communication Aviation Recorders",
+ [3]byte{0, 2, 160}: "Flatstack Ltd.",
+ [3]byte{0, 2, 161}: "World Wide Packets",
+ [3]byte{0, 2, 162}: "Hilscher GmbH",
+ [3]byte{0, 2, 163}: "ABB Switzerland Ltd, Power Systems",
+ [3]byte{0, 2, 164}: "AddPac Technology Co., Ltd.",
+ [3]byte{0, 2, 165}: "Hewlett Packard",
+ [3]byte{0, 2, 166}: "Effinet Systems Co., Ltd.",
+ [3]byte{0, 2, 167}: "Vivace Networks",
+ [3]byte{0, 2, 168}: "Air Link Technology",
+ [3]byte{0, 2, 169}: "RACOM, s.r.o.",
+ [3]byte{0, 2, 170}: "PLcom Co., Ltd.",
+ [3]byte{0, 2, 171}: "CTC Union Technologies Co., Ltd.",
+ [3]byte{0, 2, 172}: "3PAR data",
+ [3]byte{0, 2, 173}: "HOYA Corporation",
+ [3]byte{0, 2, 174}: "Scannex Electronics Ltd.",
+ [3]byte{0, 2, 175}: "TeleCruz Technology, Inc.",
+ [3]byte{0, 2, 176}: "Hokubu Communication & Industrial Co., Ltd.",
+ [3]byte{0, 2, 177}: "Anritsu, Ltd.",
+ [3]byte{0, 2, 178}: "Cablevision",
+ [3]byte{0, 2, 179}: "Intel Corporation",
+ [3]byte{0, 2, 180}: "DAPHNE",
+ [3]byte{0, 2, 181}: "Avnet, Inc.",
+ [3]byte{0, 2, 182}: "Acrosser Technology Co., Ltd.",
+ [3]byte{0, 2, 183}: "Watanabe Electric Industry Co., Ltd.",
+ [3]byte{0, 2, 184}: "WHI KONSULT AB",
+ [3]byte{0, 2, 185}: "Cisco Systems, Inc",
+ [3]byte{0, 2, 186}: "Cisco Systems, Inc",
+ [3]byte{0, 2, 187}: "Continuous Computing Corp",
+ [3]byte{0, 2, 188}: "LVL 7 Systems, Inc.",
+ [3]byte{0, 2, 189}: "Bionet Co., Ltd.",
+ [3]byte{0, 2, 190}: "Totsu Engineering, Inc.",
+ [3]byte{0, 2, 191}: "dotRocket, Inc.",
+ [3]byte{0, 2, 192}: "Bencent Tzeng Industry Co., Ltd.",
+ [3]byte{0, 2, 193}: "Innovative Electronic Designs, Inc.",
+ [3]byte{0, 2, 194}: "Net Vision Telecom",
+ [3]byte{0, 2, 195}: "Arelnet Ltd.",
+ [3]byte{0, 2, 196}: "Vector International BVBA",
+ [3]byte{0, 2, 197}: "Evertz Microsystems Ltd.",
+ [3]byte{0, 2, 198}: "Data Track Technology PLC",
+ [3]byte{0, 2, 199}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{0, 2, 200}: "Technocom Communications Technology (pte) Ltd",
+ [3]byte{0, 2, 201}: "Mellanox Technologies, Inc.",
+ [3]byte{0, 2, 202}: "EndPoints, Inc.",
+ [3]byte{0, 2, 203}: "TriState Ltd.",
+ [3]byte{0, 2, 204}: "M.C.C.I",
+ [3]byte{0, 2, 205}: "TeleDream, Inc.",
+ [3]byte{0, 2, 206}: "FoxJet, Inc.",
+ [3]byte{0, 2, 207}: "ZyGate Communications, Inc.",
+ [3]byte{0, 2, 208}: "Comdial Corporation",
+ [3]byte{0, 2, 209}: "Vivotek, Inc.",
+ [3]byte{0, 2, 210}: "Workstation AG",
+ [3]byte{0, 2, 211}: "NetBotz, Inc.",
+ [3]byte{0, 2, 212}: "PDA Peripherals, Inc.",
+ [3]byte{0, 2, 213}: "ACR",
+ [3]byte{0, 2, 214}: "NICE Systems",
+ [3]byte{0, 2, 215}: "EMPEG Ltd",
+ [3]byte{0, 2, 216}: "BRECIS Communications Corporation",
+ [3]byte{0, 2, 217}: "Reliable Controls",
+ [3]byte{0, 2, 218}: "ExiO Communications, Inc.",
+ [3]byte{0, 2, 219}: "NETSEC",
+ [3]byte{0, 2, 220}: "Fujitsu General Limited",
+ [3]byte{0, 2, 221}: "Bromax Communications, Ltd.",
+ [3]byte{0, 2, 222}: "Astrodesign, Inc.",
+ [3]byte{0, 2, 223}: "Net Com Systems, Inc.",
+ [3]byte{0, 2, 224}: "ETAS GmbH",
+ [3]byte{0, 2, 225}: "Integrated Network Corporation",
+ [3]byte{0, 2, 226}: "NDC Infared Engineering",
+ [3]byte{0, 2, 227}: "LITE-ON Communications, Inc.",
+ [3]byte{0, 2, 228}: "JC HYUN Systems, Inc.",
+ [3]byte{0, 2, 229}: "Timeware Ltd.",
+ [3]byte{0, 2, 230}: "Gould Instrument Systems, Inc.",
+ [3]byte{0, 2, 231}: "CAB GmbH & Co KG",
+ [3]byte{0, 2, 232}: "E.D.&A.",
+ [3]byte{0, 2, 233}: "CS Systemes De Securite - C3S",
+ [3]byte{0, 2, 234}: "Focus Enhancements",
+ [3]byte{0, 2, 235}: "Pico Communications",
+ [3]byte{0, 2, 236}: "Maschoff Design Engineering",
+ [3]byte{0, 2, 237}: "DXO Telecom Co., Ltd.",
+ [3]byte{0, 2, 238}: "Nokia Danmark A/S",
+ [3]byte{0, 2, 239}: "CCC Network Systems Group Ltd.",
+ [3]byte{0, 2, 240}: "AME Optimedia Technology Co., Ltd.",
+ [3]byte{0, 2, 241}: "Pinetron Co., Ltd.",
+ [3]byte{0, 2, 242}: "eDevice, Inc.",
+ [3]byte{0, 2, 243}: "Media Serve Co., Ltd.",
+ [3]byte{0, 2, 244}: "PCTEL, Inc.",
+ [3]byte{0, 2, 245}: "VIVE Synergies, Inc.",
+ [3]byte{0, 2, 246}: "Equipe Communications",
+ [3]byte{0, 2, 247}: "ARM",
+ [3]byte{0, 2, 248}: "SEAKR Engineering, Inc.",
+ [3]byte{0, 2, 249}: "MIMOS Berhad",
+ [3]byte{0, 2, 250}: "DX Antenna Co., Ltd.",
+ [3]byte{0, 2, 251}: "Baumuller Aulugen-Systemtechnik GmbH",
+ [3]byte{0, 2, 252}: "Cisco Systems, Inc",
+ [3]byte{0, 2, 253}: "Cisco Systems, Inc",
+ [3]byte{0, 2, 254}: "Viditec, Inc.",
+ [3]byte{0, 2, 255}: "Handan BroadInfoCom",
+ [3]byte{0, 3, 0}: "Barracuda Networks, Inc.",
+ [3]byte{0, 3, 1}: "EXFO",
+ [3]byte{0, 3, 2}: "Charles Industries, Ltd.",
+ [3]byte{0, 3, 3}: "JAMA Electronics Co., Ltd.",
+ [3]byte{0, 3, 4}: "Pacific Broadband Communications",
+ [3]byte{0, 3, 5}: "MSC Vertriebs GmbH",
+ [3]byte{0, 3, 6}: "Fusion In Tech Co., Ltd.",
+ [3]byte{0, 3, 7}: "Secure Works, Inc.",
+ [3]byte{0, 3, 8}: "AM Communications, Inc.",
+ [3]byte{0, 3, 9}: "Texcel Technology PLC",
+ [3]byte{0, 3, 10}: "Argus Technologies",
+ [3]byte{0, 3, 11}: "Hunter Technology, Inc.",
+ [3]byte{0, 3, 12}: "Telesoft Technologies Ltd.",
+ [3]byte{0, 3, 13}: "Uniwill Computer Corp.",
+ [3]byte{0, 3, 14}: "Core Communications Co., Ltd.",
+ [3]byte{0, 3, 15}: "Digital China (Shanghai) Networks Ltd.",
+ [3]byte{0, 3, 16}: "E-Globaledge Corporation",
+ [3]byte{0, 3, 17}: "Micro Technology Co., Ltd.",
+ [3]byte{0, 3, 18}: "TR-Systemtechnik GmbH",
+ [3]byte{0, 3, 19}: "Access Media SPA",
+ [3]byte{0, 3, 20}: "Teleware Network Systems",
+ [3]byte{0, 3, 21}: "Cidco Incorporated",
+ [3]byte{0, 3, 22}: "Nobell Communications, Inc.",
+ [3]byte{0, 3, 23}: "Merlin Systems, Inc.",
+ [3]byte{0, 3, 24}: "Cyras Systems, Inc.",
+ [3]byte{0, 3, 25}: "Infineon AG",
+ [3]byte{0, 3, 26}: "Beijing Broad Telecom Ltd., China",
+ [3]byte{0, 3, 27}: "Cellvision Systems, Inc.",
+ [3]byte{0, 3, 28}: "Svenska Hardvarufabriken AB",
+ [3]byte{0, 3, 29}: "Taiwan Commate Computer, Inc.",
+ [3]byte{0, 3, 30}: "Optranet, Inc.",
+ [3]byte{0, 3, 31}: "Condev Ltd.",
+ [3]byte{0, 3, 32}: "Xpeed, Inc.",
+ [3]byte{0, 3, 33}: "Reco Research Co., Ltd.",
+ [3]byte{0, 3, 34}: "IDIS Co., Ltd.",
+ [3]byte{0, 3, 35}: "Cornet Technology, Inc.",
+ [3]byte{0, 3, 36}: "SANYO Consumer Electronics Co., Ltd.",
+ [3]byte{0, 3, 37}: "Arima Computer Corp.",
+ [3]byte{0, 3, 38}: "Iwasaki Information Systems Co., Ltd.",
+ [3]byte{0, 3, 39}: "ACT'L",
+ [3]byte{0, 3, 40}: "Mace Group, Inc.",
+ [3]byte{0, 3, 41}: "F3, Inc.",
+ [3]byte{0, 3, 42}: "UniData Communication Systems, Inc.",
+ [3]byte{0, 3, 43}: "GAI Datenfunksysteme GmbH",
+ [3]byte{0, 3, 44}: "ABB Switzerland Ltd",
+ [3]byte{0, 3, 45}: "IBASE Technology, Inc.",
+ [3]byte{0, 3, 46}: "Scope Information Management, Ltd.",
+ [3]byte{0, 3, 47}: "Global Sun Technology, Inc.",
+ [3]byte{0, 3, 48}: "Imagenics, Co., Ltd.",
+ [3]byte{0, 3, 49}: "Cisco Systems, Inc",
+ [3]byte{0, 3, 50}: "Cisco Systems, Inc",
+ [3]byte{0, 3, 51}: "Digitel Co., Ltd.",
+ [3]byte{0, 3, 52}: "Newport Electronics",
+ [3]byte{0, 3, 53}: "Mirae Technology",
+ [3]byte{0, 3, 54}: "Zetes Technologies",
+ [3]byte{0, 3, 55}: "Vaone, Inc.",
+ [3]byte{0, 3, 56}: "Oak Technology",
+ [3]byte{0, 3, 57}: "Eurologic Systems, Ltd.",
+ [3]byte{0, 3, 58}: "Silicon Wave, Inc.",
+ [3]byte{0, 3, 59}: "TAMI Tech Co., Ltd.",
+ [3]byte{0, 3, 60}: "Daiden Co., Ltd.",
+ [3]byte{0, 3, 61}: "ILSHin Lab",
+ [3]byte{0, 3, 62}: "Tateyama System Laboratory Co., Ltd.",
+ [3]byte{0, 3, 63}: "BigBand Networks, Ltd.",
+ [3]byte{0, 3, 64}: "Floware Wireless Systems, Ltd.",
+ [3]byte{0, 3, 65}: "Axon Digital Design",
+ [3]byte{0, 3, 66}: "Nortel Networks",
+ [3]byte{0, 3, 67}: "Martin Professional A/S",
+ [3]byte{0, 3, 68}: "Tietech.Co., Ltd.",
+ [3]byte{0, 3, 69}: "Routrek Networks Corporation",
+ [3]byte{0, 3, 70}: "Hitachi Kokusai Electric, Inc.",
+ [3]byte{0, 3, 71}: "Intel Corporation",
+ [3]byte{0, 3, 72}: "Norscan Instruments, Ltd.",
+ [3]byte{0, 3, 73}: "Vidicode Datacommunicatie B.V.",
+ [3]byte{0, 3, 74}: "RIAS Corporation",
+ [3]byte{0, 3, 75}: "Nortel Networks",
+ [3]byte{0, 3, 76}: "Shanghai DigiVision Technology Co., Ltd.",
+ [3]byte{0, 3, 77}: "Chiaro Networks, Ltd.",
+ [3]byte{0, 3, 78}: "Pos Data Company, Ltd.",
+ [3]byte{0, 3, 79}: "Sur-Gard Security",
+ [3]byte{0, 3, 80}: "BTICINO SPA",
+ [3]byte{0, 3, 81}: "Diebold, Inc.",
+ [3]byte{0, 3, 82}: "Colubris Networks",
+ [3]byte{0, 3, 83}: "Mitac, Inc.",
+ [3]byte{0, 3, 84}: "Fiber Logic Communications",
+ [3]byte{0, 3, 85}: "TeraBeam Internet Systems",
+ [3]byte{0, 3, 86}: "Wincor Nixdorf International GmbH",
+ [3]byte{0, 3, 87}: "Intervoice-Brite, Inc.",
+ [3]byte{0, 3, 88}: "Hanyang Digitech Co.Ltd",
+ [3]byte{0, 3, 89}: "DigitalSis",
+ [3]byte{0, 3, 90}: "Photron Limited",
+ [3]byte{0, 3, 91}: "BridgeWave Communications",
+ [3]byte{0, 3, 92}: "Saint Song Corp.",
+ [3]byte{0, 3, 93}: "Bosung Hi-Net Co., Ltd.",
+ [3]byte{0, 3, 94}: "Metropolitan Area Networks, Inc.",
+ [3]byte{0, 3, 95}: "Prüftechnik Condition Monitoring GmbH & Co. KG",
+ [3]byte{0, 3, 96}: "PAC Interactive Technology, Inc.",
+ [3]byte{0, 3, 97}: "Widcomm, Inc.",
+ [3]byte{0, 3, 98}: "Vodtel Communications, Inc.",
+ [3]byte{0, 3, 99}: "Miraesys Co., Ltd.",
+ [3]byte{0, 3, 100}: "Scenix Semiconductor, Inc.",
+ [3]byte{0, 3, 101}: "Kira Information & Communications, Ltd.",
+ [3]byte{0, 3, 102}: "ASM Pacific Technology",
+ [3]byte{0, 3, 103}: "Jasmine Networks, Inc.",
+ [3]byte{0, 3, 104}: "Embedone Co., Ltd.",
+ [3]byte{0, 3, 105}: "Nippon Antenna Co., Ltd.",
+ [3]byte{0, 3, 106}: "Mainnet, Ltd.",
+ [3]byte{0, 3, 107}: "Cisco Systems, Inc",
+ [3]byte{0, 3, 108}: "Cisco Systems, Inc",
+ [3]byte{0, 3, 109}: "Runtop, Inc.",
+ [3]byte{0, 3, 110}: "Nicon Systems (Pty) Limited",
+ [3]byte{0, 3, 111}: "Telsey SPA",
+ [3]byte{0, 3, 112}: "NXTV, Inc.",
+ [3]byte{0, 3, 113}: "Acomz Networks Corp.",
+ [3]byte{0, 3, 114}: "ULAN",
+ [3]byte{0, 3, 115}: "Aselsan A.S",
+ [3]byte{0, 3, 116}: "Control Microsystems",
+ [3]byte{0, 3, 117}: "NetMedia, Inc.",
+ [3]byte{0, 3, 118}: "Graphtec Technology, Inc.",
+ [3]byte{0, 3, 119}: "Gigabit Wireless",
+ [3]byte{0, 3, 120}: "HUMAX Co., Ltd.",
+ [3]byte{0, 3, 121}: "Proscend Communications, Inc.",
+ [3]byte{0, 3, 122}: "Taiyo Yuden Co., Ltd.",
+ [3]byte{0, 3, 123}: "IDEC IZUMI Corporation",
+ [3]byte{0, 3, 124}: "Coax Media",
+ [3]byte{0, 3, 125}: "Stellcom",
+ [3]byte{0, 3, 126}: "PORTech Communications, Inc.",
+ [3]byte{0, 3, 127}: "Atheros Communications, Inc.",
+ [3]byte{0, 3, 128}: "SSH Communications Security Corp.",
+ [3]byte{0, 3, 129}: "Ingenico International",
+ [3]byte{0, 3, 130}: "A-One Co., Ltd.",
+ [3]byte{0, 3, 131}: "Metera Networks, Inc.",
+ [3]byte{0, 3, 132}: "AETA",
+ [3]byte{0, 3, 133}: "Actelis Networks, Inc.",
+ [3]byte{0, 3, 134}: "Ho Net, Inc.",
+ [3]byte{0, 3, 135}: "Blaze Network Products",
+ [3]byte{0, 3, 136}: "Fastfame Technology Co., Ltd.",
+ [3]byte{0, 3, 137}: "PLANTRONICS, INC.",
+ [3]byte{0, 3, 138}: "America Online, Inc.",
+ [3]byte{0, 3, 139}: "PLUS-ONE I&T, Inc.",
+ [3]byte{0, 3, 140}: "Total Impact",
+ [3]byte{0, 3, 141}: "PCS Revenue Control Systems, Inc.",
+ [3]byte{0, 3, 142}: "Atoga Systems, Inc.",
+ [3]byte{0, 3, 143}: "Weinschel Corporation",
+ [3]byte{0, 3, 144}: "Digital Video Communications, Inc.",
+ [3]byte{0, 3, 145}: "Advanced Digital Broadcast, Ltd.",
+ [3]byte{0, 3, 146}: "Hyundai Teletek Co., Ltd.",
+ [3]byte{0, 3, 147}: "Apple, Inc.",
+ [3]byte{0, 3, 148}: "Connect One",
+ [3]byte{0, 3, 149}: "California Amplifier",
+ [3]byte{0, 3, 150}: "EZ Cast Co., Ltd.",
+ [3]byte{0, 3, 151}: "Watchfront Limited",
+ [3]byte{0, 3, 152}: "WISI",
+ [3]byte{0, 3, 153}: "Dongju Informations & Communications Co., Ltd.",
+ [3]byte{0, 3, 154}: "SiConnect",
+ [3]byte{0, 3, 155}: "NetChip Technology, Inc.",
+ [3]byte{0, 3, 156}: "OptiMight Communications, Inc.",
+ [3]byte{0, 3, 157}: "Qisda Corporation",
+ [3]byte{0, 3, 158}: "Tera System Co., Ltd.",
+ [3]byte{0, 3, 159}: "Cisco Systems, Inc",
+ [3]byte{0, 3, 160}: "Cisco Systems, Inc",
+ [3]byte{0, 3, 161}: "HIPER Information & Communication, Inc.",
+ [3]byte{0, 3, 162}: "Catapult Communications",
+ [3]byte{0, 3, 163}: "MAVIX, Ltd.",
+ [3]byte{0, 3, 164}: "Imation Corp.",
+ [3]byte{0, 3, 165}: "Medea Corporation",
+ [3]byte{0, 3, 166}: "Traxit Technology, Inc.",
+ [3]byte{0, 3, 167}: "Unixtar Technology, Inc.",
+ [3]byte{0, 3, 168}: "IDOT Computers, Inc.",
+ [3]byte{0, 3, 169}: "AXCENT Media AG",
+ [3]byte{0, 3, 170}: "Watlow",
+ [3]byte{0, 3, 171}: "Bridge Information Systems",
+ [3]byte{0, 3, 172}: "Fronius Schweissmaschinen",
+ [3]byte{0, 3, 173}: "Emerson Energy Systems AB",
+ [3]byte{0, 3, 174}: "Allied Advanced Manufacturing Pte, Ltd.",
+ [3]byte{0, 3, 175}: "Paragea Communications",
+ [3]byte{0, 3, 176}: "Xsense Technology Corp.",
+ [3]byte{0, 3, 177}: "Hospira Inc.",
+ [3]byte{0, 3, 178}: "Radware",
+ [3]byte{0, 3, 179}: "IA Link Systems Co., Ltd.",
+ [3]byte{0, 3, 180}: "Macrotek International Corp.",
+ [3]byte{0, 3, 181}: "Entra Technology Co.",
+ [3]byte{0, 3, 182}: "QSI Corporation",
+ [3]byte{0, 3, 183}: "ZACCESS Systems",
+ [3]byte{0, 3, 184}: "NetKit Solutions, LLC",
+ [3]byte{0, 3, 185}: "Hualong Telecom Co., Ltd.",
+ [3]byte{0, 3, 186}: "Oracle Corporation",
+ [3]byte{0, 3, 187}: "Signal Communications Limited",
+ [3]byte{0, 3, 188}: "COT GmbH",
+ [3]byte{0, 3, 189}: "OmniCluster Technologies, Inc.",
+ [3]byte{0, 3, 190}: "Netility",
+ [3]byte{0, 3, 191}: "Centerpoint Broadband Technologies, Inc.",
+ [3]byte{0, 3, 192}: "RFTNC Co., Ltd.",
+ [3]byte{0, 3, 193}: "Packet Dynamics Ltd",
+ [3]byte{0, 3, 194}: "Solphone K.K.",
+ [3]byte{0, 3, 195}: "Micronik Multimedia",
+ [3]byte{0, 3, 196}: "Tomra Systems ASA",
+ [3]byte{0, 3, 197}: "Mobotix AG",
+ [3]byte{0, 3, 198}: "ICUE Systems, Inc.",
+ [3]byte{0, 3, 199}: "hopf Elektronik GmbH",
+ [3]byte{0, 3, 200}: "CML Emergency Services",
+ [3]byte{0, 3, 201}: "TECOM Co., Ltd.",
+ [3]byte{0, 3, 202}: "MTS Systems Corp.",
+ [3]byte{0, 3, 203}: "Nippon Systems Development Co., Ltd.",
+ [3]byte{0, 3, 204}: "Momentum Computer, Inc.",
+ [3]byte{0, 3, 205}: "Clovertech, Inc.",
+ [3]byte{0, 3, 206}: "ETEN Technologies, Inc.",
+ [3]byte{0, 3, 207}: "Muxcom, Inc.",
+ [3]byte{0, 3, 208}: "KOANKEISO Co., Ltd.",
+ [3]byte{0, 3, 209}: "Takaya Corporation",
+ [3]byte{0, 3, 210}: "Crossbeam Systems, Inc.",
+ [3]byte{0, 3, 211}: "Internet Energy Systems, Inc.",
+ [3]byte{0, 3, 212}: "Alloptic, Inc.",
+ [3]byte{0, 3, 213}: "Advanced Communications Co., Ltd.",
+ [3]byte{0, 3, 214}: "RADVision, Ltd.",
+ [3]byte{0, 3, 215}: "NextNet Wireless, Inc.",
+ [3]byte{0, 3, 216}: "iMPath Networks, Inc.",
+ [3]byte{0, 3, 217}: "Secheron SA",
+ [3]byte{0, 3, 218}: "Takamisawa Cybernetics Co., Ltd.",
+ [3]byte{0, 3, 219}: "Apogee Electronics Corp.",
+ [3]byte{0, 3, 220}: "Lexar Media, Inc.",
+ [3]byte{0, 3, 221}: "Comark Interactive Solutions",
+ [3]byte{0, 3, 222}: "OTC Wireless",
+ [3]byte{0, 3, 223}: "Desana Systems",
+ [3]byte{0, 3, 224}: "ARRIS Group, Inc.",
+ [3]byte{0, 3, 225}: "Winmate Communication, Inc.",
+ [3]byte{0, 3, 226}: "Comspace Corporation",
+ [3]byte{0, 3, 227}: "Cisco Systems, Inc",
+ [3]byte{0, 3, 228}: "Cisco Systems, Inc",
+ [3]byte{0, 3, 229}: "Hermstedt SG",
+ [3]byte{0, 3, 230}: "Entone, Inc.",
+ [3]byte{0, 3, 231}: "Logostek Co. Ltd.",
+ [3]byte{0, 3, 232}: "Wavelength Digital Limited",
+ [3]byte{0, 3, 233}: "Akara Canada, Inc.",
+ [3]byte{0, 3, 234}: "Mega System Technologies, Inc.",
+ [3]byte{0, 3, 235}: "Atrica",
+ [3]byte{0, 3, 236}: "ICG Research, Inc.",
+ [3]byte{0, 3, 237}: "Shinkawa Electric Co., Ltd.",
+ [3]byte{0, 3, 238}: "MKNet Corporation",
+ [3]byte{0, 3, 239}: "Oneline AG",
+ [3]byte{0, 3, 240}: "Redfern Broadband Networks",
+ [3]byte{0, 3, 241}: "Cicada Semiconductor, Inc.",
+ [3]byte{0, 3, 242}: "Seneca Networks",
+ [3]byte{0, 3, 243}: "Dazzle Multimedia, Inc.",
+ [3]byte{0, 3, 244}: "NetBurner",
+ [3]byte{0, 3, 245}: "Chip2Chip",
+ [3]byte{0, 3, 246}: "Allegro Networks, Inc.",
+ [3]byte{0, 3, 247}: "Plast-Control GmbH",
+ [3]byte{0, 3, 248}: "SanCastle Technologies, Inc.",
+ [3]byte{0, 3, 249}: "Pleiades Communications, Inc.",
+ [3]byte{0, 3, 250}: "TiMetra Networks",
+ [3]byte{0, 3, 251}: "ENEGATE Co.,Ltd.",
+ [3]byte{0, 3, 252}: "Intertex Data AB",
+ [3]byte{0, 3, 253}: "Cisco Systems, Inc",
+ [3]byte{0, 3, 254}: "Cisco Systems, Inc",
+ [3]byte{0, 3, 255}: "Microsoft Corporation",
+ [3]byte{0, 4, 0}: "LEXMARK INTERNATIONAL, INC.",
+ [3]byte{0, 4, 1}: "Osaki Electric Co., Ltd.",
+ [3]byte{0, 4, 2}: "Nexsan Technologies, Ltd.",
+ [3]byte{0, 4, 3}: "Nexsi Corporation",
+ [3]byte{0, 4, 4}: "Makino Milling Machine Co., Ltd.",
+ [3]byte{0, 4, 5}: "ACN Technologies",
+ [3]byte{0, 4, 6}: "Fa. Metabox AG",
+ [3]byte{0, 4, 7}: "Topcon Positioning Systems, Inc.",
+ [3]byte{0, 4, 8}: "Sanko Electronics Co., Ltd.",
+ [3]byte{0, 4, 9}: "Cratos Networks",
+ [3]byte{0, 4, 10}: "Sage Systems",
+ [3]byte{0, 4, 11}: "3COM EUROPE LTD.",
+ [3]byte{0, 4, 12}: "Kanno Works, Ltd.",
+ [3]byte{0, 4, 13}: "Avaya Inc",
+ [3]byte{0, 4, 14}: "AVM GmbH",
+ [3]byte{0, 4, 15}: "Asus Network Technologies, Inc.",
+ [3]byte{0, 4, 16}: "Spinnaker Networks, Inc.",
+ [3]byte{0, 4, 17}: "Inkra Networks, Inc.",
+ [3]byte{0, 4, 18}: "WaveSmith Networks, Inc.",
+ [3]byte{0, 4, 19}: "SNOM Technology AG",
+ [3]byte{0, 4, 20}: "Umezawa Musen Denki Co., Ltd.",
+ [3]byte{0, 4, 21}: "Rasteme Systems Co., Ltd.",
+ [3]byte{0, 4, 22}: "Parks S/A Comunicacoes Digitais",
+ [3]byte{0, 4, 23}: "ELAU AG",
+ [3]byte{0, 4, 24}: "Teltronic S.A.U.",
+ [3]byte{0, 4, 25}: "Fibercycle Networks, Inc.",
+ [3]byte{0, 4, 26}: "Ines Test and Measurement GmbH & CoKG",
+ [3]byte{0, 4, 27}: "Bridgeworks Ltd.",
+ [3]byte{0, 4, 28}: "ipDialog, Inc.",
+ [3]byte{0, 4, 29}: "Corega of America",
+ [3]byte{0, 4, 30}: "Shikoku Instrumentation Co., Ltd.",
+ [3]byte{0, 4, 31}: "Sony Interactive Entertainment Inc.",
+ [3]byte{0, 4, 32}: "Slim Devices, Inc.",
+ [3]byte{0, 4, 33}: "Ocular Networks",
+ [3]byte{0, 4, 34}: "Studio Technologies, Inc",
+ [3]byte{0, 4, 35}: "Intel Corporation",
+ [3]byte{0, 4, 36}: "TMC s.r.l.",
+ [3]byte{0, 4, 37}: "Atmel Corporation",
+ [3]byte{0, 4, 38}: "Autosys",
+ [3]byte{0, 4, 39}: "Cisco Systems, Inc",
+ [3]byte{0, 4, 40}: "Cisco Systems, Inc",
+ [3]byte{0, 4, 41}: "Pixord Corporation",
+ [3]byte{0, 4, 42}: "Wireless Networks, Inc.",
+ [3]byte{0, 4, 43}: "IT Access Co., Ltd.",
+ [3]byte{0, 4, 44}: "Minet, Inc.",
+ [3]byte{0, 4, 45}: "Sarian Systems, Ltd.",
+ [3]byte{0, 4, 46}: "Netous Technologies, Ltd.",
+ [3]byte{0, 4, 47}: "International Communications Products, Inc.",
+ [3]byte{0, 4, 48}: "Netgem",
+ [3]byte{0, 4, 49}: "GlobalStreams, Inc.",
+ [3]byte{0, 4, 50}: "Voyetra Turtle Beach, Inc.",
+ [3]byte{0, 4, 51}: "Cyberboard A/S",
+ [3]byte{0, 4, 52}: "Accelent Systems, Inc.",
+ [3]byte{0, 4, 53}: "InfiNet LLC",
+ [3]byte{0, 4, 54}: "ELANsat Technologies, Inc.",
+ [3]byte{0, 4, 55}: "Powin Information Technology, Inc.",
+ [3]byte{0, 4, 56}: "Nortel Networks",
+ [3]byte{0, 4, 57}: "Rosco Entertainment Technology, Inc.",
+ [3]byte{0, 4, 58}: "Intelligent Telecommunications, Inc.",
+ [3]byte{0, 4, 59}: "Lava Computer Mfg., Inc.",
+ [3]byte{0, 4, 60}: "SONOS Co., Ltd.",
+ [3]byte{0, 4, 61}: "INDEL AG",
+ [3]byte{0, 4, 62}: "Telencomm",
+ [3]byte{0, 4, 63}: "ESTeem Wireless Modems, Inc",
+ [3]byte{0, 4, 64}: "cyberPIXIE, Inc.",
+ [3]byte{0, 4, 65}: "Half Dome Systems, Inc.",
+ [3]byte{0, 4, 66}: "NACT",
+ [3]byte{0, 4, 67}: "Agilent Technologies, Inc.",
+ [3]byte{0, 4, 68}: "Western Multiplex Corporation",
+ [3]byte{0, 4, 69}: "LMS Skalar Instruments GmbH",
+ [3]byte{0, 4, 70}: "CYZENTECH Co., Ltd.",
+ [3]byte{0, 4, 71}: "Acrowave Systems Co., Ltd.",
+ [3]byte{0, 4, 72}: "Polaroid Corporation",
+ [3]byte{0, 4, 73}: "Mapletree Networks",
+ [3]byte{0, 4, 74}: "iPolicy Networks, Inc.",
+ [3]byte{0, 4, 75}: "NVIDIA",
+ [3]byte{0, 4, 76}: "JENOPTIK",
+ [3]byte{0, 4, 77}: "Cisco Systems, Inc",
+ [3]byte{0, 4, 78}: "Cisco Systems, Inc",
+ [3]byte{0, 4, 79}: "Schubert System Elektronik Gmbh",
+ [3]byte{0, 4, 80}: "DMD Computers SRL",
+ [3]byte{0, 4, 81}: "Medrad, Inc.",
+ [3]byte{0, 4, 82}: "RocketLogix, Inc.",
+ [3]byte{0, 4, 83}: "YottaYotta, Inc.",
+ [3]byte{0, 4, 84}: "Quadriga UK",
+ [3]byte{0, 4, 85}: "ANTARA.net",
+ [3]byte{0, 4, 86}: "Cambium Networks Limited",
+ [3]byte{0, 4, 87}: "Universal Access Technology, Inc.",
+ [3]byte{0, 4, 88}: "Fusion X Co., Ltd.",
+ [3]byte{0, 4, 89}: "Veristar Corporation",
+ [3]byte{0, 4, 90}: "The Linksys Group, Inc.",
+ [3]byte{0, 4, 91}: "Techsan Electronics Co., Ltd.",
+ [3]byte{0, 4, 92}: "Mobiwave Pte Ltd",
+ [3]byte{0, 4, 93}: "BEKA Elektronik",
+ [3]byte{0, 4, 94}: "PolyTrax Information Technology AG",
+ [3]byte{0, 4, 95}: "Avalue Technology, Inc.",
+ [3]byte{0, 4, 96}: "Knilink Technology, Inc.",
+ [3]byte{0, 4, 97}: "EPOX Computer Co., Ltd.",
+ [3]byte{0, 4, 98}: "DAKOS Data & Communication Co., Ltd.",
+ [3]byte{0, 4, 99}: "Bosch Security Systems",
+ [3]byte{0, 4, 100}: "Pulse-Link Inc",
+ [3]byte{0, 4, 101}: "i.s.t isdn-support technik GmbH",
+ [3]byte{0, 4, 102}: "ARMITEL Co.",
+ [3]byte{0, 4, 103}: "Wuhan Research Institute of MII",
+ [3]byte{0, 4, 104}: "Vivity, Inc.",
+ [3]byte{0, 4, 105}: "Innocom, Inc.",
+ [3]byte{0, 4, 106}: "Navini Networks",
+ [3]byte{0, 4, 107}: "Palm Wireless, Inc.",
+ [3]byte{0, 4, 108}: "Cyber Technology Co., Ltd.",
+ [3]byte{0, 4, 109}: "Cisco Systems, Inc",
+ [3]byte{0, 4, 110}: "Cisco Systems, Inc",
+ [3]byte{0, 4, 111}: "Digitel S/A Industria Eletronica",
+ [3]byte{0, 4, 112}: "ipUnplugged AB",
+ [3]byte{0, 4, 113}: "IPrad",
+ [3]byte{0, 4, 114}: "Telelynx, Inc.",
+ [3]byte{0, 4, 115}: "Photonex Corporation",
+ [3]byte{0, 4, 116}: "LEGRAND",
+ [3]byte{0, 4, 117}: "3 Com Corporation",
+ [3]byte{0, 4, 118}: "3 Com Corporation",
+ [3]byte{0, 4, 119}: "Scalant Systems, Inc.",
+ [3]byte{0, 4, 120}: "G. Star Technology Corporation",
+ [3]byte{0, 4, 121}: "Radius Co., Ltd.",
+ [3]byte{0, 4, 122}: "AXXESSIT ASA",
+ [3]byte{0, 4, 123}: "Schlumberger",
+ [3]byte{0, 4, 124}: "Skidata AG",
+ [3]byte{0, 4, 125}: "Pelco",
+ [3]byte{0, 4, 126}: "Siqura B.V.",
+ [3]byte{0, 4, 127}: "Chr. Mayr GmbH & Co. KG",
+ [3]byte{0, 4, 128}: "Brocade Communications Systems, Inc.",
+ [3]byte{0, 4, 129}: "Econolite Control Products, Inc.",
+ [3]byte{0, 4, 130}: "Medialogic Corp.",
+ [3]byte{0, 4, 131}: "Deltron Technology, Inc.",
+ [3]byte{0, 4, 132}: "Amann GmbH",
+ [3]byte{0, 4, 133}: "PicoLight",
+ [3]byte{0, 4, 134}: "ITTC, University of Kansas",
+ [3]byte{0, 4, 135}: "Cogency Semiconductor, Inc.",
+ [3]byte{0, 4, 136}: "Eurotherm Controls",
+ [3]byte{0, 4, 137}: "YAFO Networks, Inc.",
+ [3]byte{0, 4, 138}: "Temia Vertriebs GmbH",
+ [3]byte{0, 4, 139}: "Poscon Corporation",
+ [3]byte{0, 4, 140}: "Nayna Networks, Inc.",
+ [3]byte{0, 4, 141}: "Teo Technologies, Inc",
+ [3]byte{0, 4, 142}: "Ohm Tech Labs, Inc.",
+ [3]byte{0, 4, 143}: "TD Systems Corporation",
+ [3]byte{0, 4, 144}: "Optical Access",
+ [3]byte{0, 4, 145}: "Technovision, Inc.",
+ [3]byte{0, 4, 146}: "Hive Internet, Ltd.",
+ [3]byte{0, 4, 147}: "Tsinghua Unisplendour Co., Ltd.",
+ [3]byte{0, 4, 148}: "Breezecom, Ltd.",
+ [3]byte{0, 4, 149}: "Tejas Networks India Limited",
+ [3]byte{0, 4, 150}: "Extreme Networks, Inc.",
+ [3]byte{0, 4, 151}: "MacroSystem Digital Video AG",
+ [3]byte{0, 4, 152}: "Mahi Networks",
+ [3]byte{0, 4, 153}: "Chino Corporation",
+ [3]byte{0, 4, 154}: "Cisco Systems, Inc",
+ [3]byte{0, 4, 155}: "Cisco Systems, Inc",
+ [3]byte{0, 4, 156}: "Surgient Networks, Inc.",
+ [3]byte{0, 4, 157}: "Ipanema Technologies",
+ [3]byte{0, 4, 158}: "Wirelink Co., Ltd.",
+ [3]byte{0, 4, 159}: "Freescale Semiconductor",
+ [3]byte{0, 4, 160}: "Verity Instruments, Inc.",
+ [3]byte{0, 4, 161}: "Pathway Connectivity",
+ [3]byte{0, 4, 162}: "L.S.I. Japan Co., Ltd.",
+ [3]byte{0, 4, 163}: "Microchip Technology Inc.",
+ [3]byte{0, 4, 164}: "NetEnabled, Inc.",
+ [3]byte{0, 4, 165}: "Barco Projection Systems NV",
+ [3]byte{0, 4, 166}: "SAF Tehnika Ltd.",
+ [3]byte{0, 4, 167}: "FabiaTech Corporation",
+ [3]byte{0, 4, 168}: "Broadmax Technologies, Inc.",
+ [3]byte{0, 4, 169}: "SandStream Technologies, Inc.",
+ [3]byte{0, 4, 170}: "Jetstream Communications",
+ [3]byte{0, 4, 171}: "Comverse Network Systems, Inc.",
+ [3]byte{0, 4, 172}: "IBM Corp",
+ [3]byte{0, 4, 173}: "Malibu Networks",
+ [3]byte{0, 4, 174}: "Sullair Corporation",
+ [3]byte{0, 4, 175}: "Digital Fountain, Inc.",
+ [3]byte{0, 4, 176}: "ELESIGN Co., Ltd.",
+ [3]byte{0, 4, 177}: "Signal Technology, Inc.",
+ [3]byte{0, 4, 178}: "ESSEGI SRL",
+ [3]byte{0, 4, 179}: "Videotek, Inc.",
+ [3]byte{0, 4, 180}: "CIAC",
+ [3]byte{0, 4, 181}: "Equitrac Corporation",
+ [3]byte{0, 4, 182}: "Stratex Networks, Inc.",
+ [3]byte{0, 4, 183}: "AMB i.t. Holding",
+ [3]byte{0, 4, 184}: "Kumahira Co., Ltd.",
+ [3]byte{0, 4, 185}: "S.I. Soubou, Inc.",
+ [3]byte{0, 4, 186}: "KDD Media Will Corporation",
+ [3]byte{0, 4, 187}: "Bardac Corporation",
+ [3]byte{0, 4, 188}: "Giantec, Inc.",
+ [3]byte{0, 4, 189}: "ARRIS Group, Inc.",
+ [3]byte{0, 4, 190}: "OptXCon, Inc.",
+ [3]byte{0, 4, 191}: "VersaLogic Corp.",
+ [3]byte{0, 4, 192}: "Cisco Systems, Inc",
+ [3]byte{0, 4, 193}: "Cisco Systems, Inc",
+ [3]byte{0, 4, 194}: "Magnipix, Inc.",
+ [3]byte{0, 4, 195}: "CASTOR Informatique",
+ [3]byte{0, 4, 196}: "Allen & Heath Limited",
+ [3]byte{0, 4, 197}: "ASE Technologies, USA",
+ [3]byte{0, 4, 198}: "YAMAHA MOTOR CO.,LTD",
+ [3]byte{0, 4, 199}: "NetMount",
+ [3]byte{0, 4, 200}: "LIBA Maschinenfabrik GmbH",
+ [3]byte{0, 4, 201}: "Micro Electron Co., Ltd.",
+ [3]byte{0, 4, 202}: "FreeMs Corp.",
+ [3]byte{0, 4, 203}: "Tdsoft Communication, Ltd.",
+ [3]byte{0, 4, 204}: "Peek Traffic B.V.",
+ [3]byte{0, 4, 205}: "Extenway Solutions Inc",
+ [3]byte{0, 4, 206}: "Patria Ailon",
+ [3]byte{0, 4, 207}: "Seagate Technology",
+ [3]byte{0, 4, 208}: "Softlink s.r.o.",
+ [3]byte{0, 4, 209}: "Drew Technologies, Inc.",
+ [3]byte{0, 4, 210}: "Adcon Telemetry GmbH",
+ [3]byte{0, 4, 211}: "Toyokeiki Co., Ltd.",
+ [3]byte{0, 4, 212}: "Proview Electronics Co., Ltd.",
+ [3]byte{0, 4, 213}: "Hitachi Information & Communication Engineering, Ltd.",
+ [3]byte{0, 4, 214}: "Takagi Industrial Co., Ltd.",
+ [3]byte{0, 4, 215}: "Omitec Instrumentation Ltd.",
+ [3]byte{0, 4, 216}: "IPWireless, Inc.",
+ [3]byte{0, 4, 217}: "Titan Electronics, Inc.",
+ [3]byte{0, 4, 218}: "Relax Technology, Inc.",
+ [3]byte{0, 4, 219}: "Tellus Group Corp.",
+ [3]byte{0, 4, 220}: "Nortel Networks",
+ [3]byte{0, 4, 221}: "Cisco Systems, Inc",
+ [3]byte{0, 4, 222}: "Cisco Systems, Inc",
+ [3]byte{0, 4, 223}: "Teracom Telematica Ltda.",
+ [3]byte{0, 4, 224}: "Procket Networks",
+ [3]byte{0, 4, 225}: "Infinior Microsystems",
+ [3]byte{0, 4, 226}: "SMC Networks, Inc.",
+ [3]byte{0, 4, 227}: "Accton Technology Corp",
+ [3]byte{0, 4, 228}: "Daeryung Ind., Inc.",
+ [3]byte{0, 4, 229}: "Glonet Systems, Inc.",
+ [3]byte{0, 4, 230}: "Banyan Network Private Limited",
+ [3]byte{0, 4, 231}: "Lightpointe Communications, Inc",
+ [3]byte{0, 4, 232}: "IER, Inc.",
+ [3]byte{0, 4, 233}: "Infiniswitch Corporation",
+ [3]byte{0, 4, 234}: "Hewlett Packard",
+ [3]byte{0, 4, 235}: "Paxonet Communications, Inc.",
+ [3]byte{0, 4, 236}: "Memobox SA",
+ [3]byte{0, 4, 237}: "Billion Electric Co., Ltd.",
+ [3]byte{0, 4, 238}: "Lincoln Electric Company",
+ [3]byte{0, 4, 239}: "Polestar Corp.",
+ [3]byte{0, 4, 240}: "International Computers, Ltd",
+ [3]byte{0, 4, 241}: "WhereNet",
+ [3]byte{0, 4, 242}: "Polycom",
+ [3]byte{0, 4, 243}: "FS FORTH-SYSTEME GmbH",
+ [3]byte{0, 4, 244}: "Infinite Electronics Inc.",
+ [3]byte{0, 4, 245}: "SnowShore Networks, Inc.",
+ [3]byte{0, 4, 246}: "Amphus",
+ [3]byte{0, 4, 247}: "Omega Band, Inc.",
+ [3]byte{0, 4, 248}: "QUALICABLE TV Industria E Com., Ltda",
+ [3]byte{0, 4, 249}: "Xtera Communications, Inc.",
+ [3]byte{0, 4, 250}: "NBS Technologies Inc.",
+ [3]byte{0, 4, 251}: "Commtech, Inc.",
+ [3]byte{0, 4, 252}: "Stratus Computer (DE), Inc.",
+ [3]byte{0, 4, 253}: "Japan Control Engineering Co., Ltd.",
+ [3]byte{0, 4, 254}: "Pelago Networks",
+ [3]byte{0, 4, 255}: "Acronet Co., Ltd.",
+ [3]byte{0, 5, 0}: "Cisco Systems, Inc",
+ [3]byte{0, 5, 1}: "Cisco Systems, Inc",
+ [3]byte{0, 5, 2}: "Apple, Inc.",
+ [3]byte{0, 5, 3}: "ICONAG",
+ [3]byte{0, 5, 4}: "Naray Information & Communication Enterprise",
+ [3]byte{0, 5, 5}: "Systems Integration Solutions, Inc.",
+ [3]byte{0, 5, 6}: "Reddo Networks AB",
+ [3]byte{0, 5, 7}: "Fine Appliance Corp.",
+ [3]byte{0, 5, 8}: "Inetcam, Inc.",
+ [3]byte{0, 5, 9}: "AVOC Nishimura Ltd.",
+ [3]byte{0, 5, 10}: "ICS Spa",
+ [3]byte{0, 5, 11}: "SICOM Systems, Inc.",
+ [3]byte{0, 5, 12}: "Network Photonics, Inc.",
+ [3]byte{0, 5, 13}: "Midstream Technologies, Inc.",
+ [3]byte{0, 5, 14}: "3ware, Inc.",
+ [3]byte{0, 5, 15}: "Tanaka S/S Ltd.",
+ [3]byte{0, 5, 16}: "Infinite Shanghai Communication Terminals Ltd.",
+ [3]byte{0, 5, 17}: "Complementary Technologies Ltd",
+ [3]byte{0, 5, 18}: "Zebra Technologies Inc",
+ [3]byte{0, 5, 19}: "VTLinx Multimedia Systems, Inc.",
+ [3]byte{0, 5, 20}: "KDT Systems Co., Ltd.",
+ [3]byte{0, 5, 21}: "Nuark Co., Ltd.",
+ [3]byte{0, 5, 22}: "SMART Modular Technologies",
+ [3]byte{0, 5, 23}: "Shellcomm, Inc.",
+ [3]byte{0, 5, 24}: "Jupiters Technology",
+ [3]byte{0, 5, 25}: "Siemens Building Technologies AG,",
+ [3]byte{0, 5, 26}: "3COM EUROPE LTD.",
+ [3]byte{0, 5, 27}: "Magic Control Technology Corporation",
+ [3]byte{0, 5, 28}: "Xnet Technology Corp.",
+ [3]byte{0, 5, 29}: "Airocon, Inc.",
+ [3]byte{0, 5, 30}: "Brocade Communications Systems, Inc.",
+ [3]byte{0, 5, 31}: "Taijin Media Co., Ltd.",
+ [3]byte{0, 5, 32}: "Smartronix, Inc.",
+ [3]byte{0, 5, 33}: "Control Microsystems",
+ [3]byte{0, 5, 34}: "LEA*D Corporation, Inc.",
+ [3]byte{0, 5, 35}: "AVL List GmbH",
+ [3]byte{0, 5, 36}: "BTL System (HK) Limited",
+ [3]byte{0, 5, 37}: "Puretek Industrial Co., Ltd.",
+ [3]byte{0, 5, 38}: "IPAS GmbH",
+ [3]byte{0, 5, 39}: "SJ Tek Co. Ltd",
+ [3]byte{0, 5, 40}: "New Focus, Inc.",
+ [3]byte{0, 5, 41}: "Shanghai Broadan Communication Technology Co., Ltd",
+ [3]byte{0, 5, 42}: "Ikegami Tsushinki Co., Ltd.",
+ [3]byte{0, 5, 43}: "HORIBA, Ltd.",
+ [3]byte{0, 5, 44}: "Supreme Magic Corporation",
+ [3]byte{0, 5, 45}: "Zoltrix International Limited",
+ [3]byte{0, 5, 46}: "Cinta Networks",
+ [3]byte{0, 5, 47}: "Leviton Network Solutions",
+ [3]byte{0, 5, 48}: "Andiamo Systems, Inc.",
+ [3]byte{0, 5, 49}: "Cisco Systems, Inc",
+ [3]byte{0, 5, 50}: "Cisco Systems, Inc",
+ [3]byte{0, 5, 51}: "Brocade Communications Systems, Inc.",
+ [3]byte{0, 5, 52}: "Northstar Engineering Ltd.",
+ [3]byte{0, 5, 53}: "Chip PC Ltd.",
+ [3]byte{0, 5, 54}: "Danam Communications, Inc.",
+ [3]byte{0, 5, 55}: "Nets Technology Co., Ltd.",
+ [3]byte{0, 5, 56}: "Merilus, Inc.",
+ [3]byte{0, 5, 57}: "A Brand New World in Sweden AB",
+ [3]byte{0, 5, 58}: "Willowglen Services Pte Ltd",
+ [3]byte{0, 5, 59}: "Harbour Networks Ltd., Co. Beijing",
+ [3]byte{0, 5, 60}: "XIRCOM",
+ [3]byte{0, 5, 61}: "Agere Systems",
+ [3]byte{0, 5, 62}: "KID Systeme GmbH",
+ [3]byte{0, 5, 63}: "VisionTek, Inc.",
+ [3]byte{0, 5, 64}: "FAST Corporation",
+ [3]byte{0, 5, 65}: "Advanced Systems Co., Ltd.",
+ [3]byte{0, 5, 66}: "Otari, Inc.",
+ [3]byte{0, 5, 67}: "IQ Wireless GmbH",
+ [3]byte{0, 5, 68}: "Valley Technologies, Inc.",
+ [3]byte{0, 5, 69}: "Internet Photonics",
+ [3]byte{0, 5, 70}: "KDDI Network & Solultions Inc.",
+ [3]byte{0, 5, 71}: "Starent Networks",
+ [3]byte{0, 5, 72}: "Disco Corporation",
+ [3]byte{0, 5, 73}: "Salira Optical Network Systems",
+ [3]byte{0, 5, 74}: "Ario Data Networks, Inc.",
+ [3]byte{0, 5, 75}: "Eaton Automation AG",
+ [3]byte{0, 5, 76}: "RF Innovations Pty Ltd",
+ [3]byte{0, 5, 77}: "Brans Technologies, Inc.",
+ [3]byte{0, 5, 78}: "Philips",
+ [3]byte{0, 5, 79}: "Garmin International",
+ [3]byte{0, 5, 80}: "Vcomms Connect Limited",
+ [3]byte{0, 5, 81}: "F & S Elektronik Systeme GmbH",
+ [3]byte{0, 5, 82}: "Xycotec Computer GmbH",
+ [3]byte{0, 5, 83}: "DVC Company, Inc.",
+ [3]byte{0, 5, 84}: "Rangestar Wireless",
+ [3]byte{0, 5, 85}: "Japan Cash Machine Co., Ltd.",
+ [3]byte{0, 5, 86}: "360 Systems",
+ [3]byte{0, 5, 87}: "Agile TV Corporation",
+ [3]byte{0, 5, 88}: "Synchronous, Inc.",
+ [3]byte{0, 5, 89}: "Intracom S.A.",
+ [3]byte{0, 5, 90}: "Power Dsine Ltd.",
+ [3]byte{0, 5, 91}: "Charles Industries, Ltd.",
+ [3]byte{0, 5, 92}: "Kowa Company, Ltd.",
+ [3]byte{0, 5, 93}: "D-LINK SYSTEMS, INC.",
+ [3]byte{0, 5, 94}: "Cisco Systems, Inc",
+ [3]byte{0, 5, 95}: "Cisco Systems, Inc",
+ [3]byte{0, 5, 96}: "LEADER COMM.CO., LTD",
+ [3]byte{0, 5, 97}: "nac Image Technology, Inc.",
+ [3]byte{0, 5, 98}: "Digital View Limited",
+ [3]byte{0, 5, 99}: "J-Works, Inc.",
+ [3]byte{0, 5, 100}: "Tsinghua Bitway Co., Ltd.",
+ [3]byte{0, 5, 101}: "Tailyn Communication Company Ltd.",
+ [3]byte{0, 5, 102}: "Secui.com Corporation",
+ [3]byte{0, 5, 103}: "Etymonic Design, Inc.",
+ [3]byte{0, 5, 104}: "Piltofish Networks AB",
+ [3]byte{0, 5, 105}: "VMware, Inc.",
+ [3]byte{0, 5, 106}: "Heuft Systemtechnik GmbH",
+ [3]byte{0, 5, 107}: "C.P. Technology Co., Ltd.",
+ [3]byte{0, 5, 108}: "Hung Chang Co., Ltd.",
+ [3]byte{0, 5, 109}: "Pacific Corporation",
+ [3]byte{0, 5, 110}: "National Enhance Technology, Inc.",
+ [3]byte{0, 5, 111}: "Innomedia Technologies Pvt. Ltd.",
+ [3]byte{0, 5, 112}: "Baydel Ltd.",
+ [3]byte{0, 5, 113}: "Seiwa Electronics Co.",
+ [3]byte{0, 5, 114}: "Deonet Co., Ltd.",
+ [3]byte{0, 5, 115}: "Cisco Systems, Inc",
+ [3]byte{0, 5, 116}: "Cisco Systems, Inc",
+ [3]byte{0, 5, 117}: "CDS-Electronics BV",
+ [3]byte{0, 5, 118}: "NSM Technology Ltd.",
+ [3]byte{0, 5, 119}: "SM Information & Communication",
+ [3]byte{0, 5, 120}: "Private",
+ [3]byte{0, 5, 121}: "Universal Control Solution Corp.",
+ [3]byte{0, 5, 122}: "Overture Networks",
+ [3]byte{0, 5, 123}: "Chung Nam Electronic Co., Ltd.",
+ [3]byte{0, 5, 124}: "RCO Security AB",
+ [3]byte{0, 5, 125}: "Sun Communications, Inc.",
+ [3]byte{0, 5, 126}: "Eckelmann Steuerungstechnik GmbH",
+ [3]byte{0, 5, 127}: "Acqis Technology",
+ [3]byte{0, 5, 128}: "FibroLAN Ltd.",
+ [3]byte{0, 5, 129}: "Snell",
+ [3]byte{0, 5, 130}: "ClearCube Technology",
+ [3]byte{0, 5, 131}: "ImageCom Limited",
+ [3]byte{0, 5, 132}: "AbsoluteValue Systems, Inc.",
+ [3]byte{0, 5, 133}: "Juniper Networks",
+ [3]byte{0, 5, 134}: "Lucent Technologies",
+ [3]byte{0, 5, 135}: "Locus, Incorporated",
+ [3]byte{0, 5, 136}: "Sensoria Corp.",
+ [3]byte{0, 5, 137}: "National Datacomputer",
+ [3]byte{0, 5, 138}: "Netcom Co., Ltd.",
+ [3]byte{0, 5, 139}: "IPmental, Inc.",
+ [3]byte{0, 5, 140}: "Opentech Inc.",
+ [3]byte{0, 5, 141}: "Lynx Photonic Networks, Inc.",
+ [3]byte{0, 5, 142}: "Flextronics International GmbH & Co. Nfg. KG",
+ [3]byte{0, 5, 143}: "CLCsoft co.",
+ [3]byte{0, 5, 144}: "Swissvoice Ltd.",
+ [3]byte{0, 5, 145}: "Active Silicon Ltd",
+ [3]byte{0, 5, 146}: "Pultek Corp.",
+ [3]byte{0, 5, 147}: "Grammar Engine Inc.",
+ [3]byte{0, 5, 148}: "HMS Industrial Networks",
+ [3]byte{0, 5, 149}: "Alesis Corporation",
+ [3]byte{0, 5, 150}: "Genotech Co., Ltd.",
+ [3]byte{0, 5, 151}: "Eagle Traffic Control Systems",
+ [3]byte{0, 5, 152}: "CRONOS S.r.l.",
+ [3]byte{0, 5, 153}: "DRS Test and Energy Management or DRS-TEM",
+ [3]byte{0, 5, 154}: "Cisco Systems, Inc",
+ [3]byte{0, 5, 155}: "Cisco Systems, Inc",
+ [3]byte{0, 5, 156}: "Kleinknecht GmbH, Ing. Büro",
+ [3]byte{0, 5, 157}: "Daniel Computing Systems, Inc.",
+ [3]byte{0, 5, 158}: "Zinwell Corporation",
+ [3]byte{0, 5, 159}: "Yotta Networks, Inc.",
+ [3]byte{0, 5, 160}: "MOBILINE Kft.",
+ [3]byte{0, 5, 161}: "Zenocom",
+ [3]byte{0, 5, 162}: "CELOX Networks",
+ [3]byte{0, 5, 163}: "QEI, Inc.",
+ [3]byte{0, 5, 164}: "Lucid Voice Ltd.",
+ [3]byte{0, 5, 165}: "KOTT",
+ [3]byte{0, 5, 166}: "Extron Electronics",
+ [3]byte{0, 5, 167}: "HYPERCHIP Inc.",
+ [3]byte{0, 5, 168}: "WYLE ELECTRONICS",
+ [3]byte{0, 5, 169}: "Princeton Networks, Inc.",
+ [3]byte{0, 5, 170}: "Moore Industries International Inc.",
+ [3]byte{0, 5, 171}: "Cyber Fone, Inc.",
+ [3]byte{0, 5, 172}: "Northern Digital, Inc.",
+ [3]byte{0, 5, 173}: "Topspin Communications, Inc.",
+ [3]byte{0, 5, 174}: "Mediaport USA",
+ [3]byte{0, 5, 175}: "InnoScan Computing A/S",
+ [3]byte{0, 5, 176}: "Korea Computer Technology Co., Ltd.",
+ [3]byte{0, 5, 177}: "ASB Technology BV",
+ [3]byte{0, 5, 178}: "Medison Co., Ltd.",
+ [3]byte{0, 5, 179}: "Asahi-Engineering Co., Ltd.",
+ [3]byte{0, 5, 180}: "Aceex Corporation",
+ [3]byte{0, 5, 181}: "Broadcom Technologies",
+ [3]byte{0, 5, 182}: "INSYS Microelectronics GmbH",
+ [3]byte{0, 5, 183}: "Arbor Technology Corp.",
+ [3]byte{0, 5, 184}: "Electronic Design Associates, Inc.",
+ [3]byte{0, 5, 185}: "Airvana, Inc.",
+ [3]byte{0, 5, 186}: "Area Netwoeks, Inc.",
+ [3]byte{0, 5, 187}: "Myspace AB",
+ [3]byte{0, 5, 188}: "Resource Data Management Ltd",
+ [3]byte{0, 5, 189}: "ROAX BV",
+ [3]byte{0, 5, 190}: "Kongsberg Seatex AS",
+ [3]byte{0, 5, 191}: "JustEzy Technology, Inc.",
+ [3]byte{0, 5, 192}: "Digital Network Alacarte Co., Ltd.",
+ [3]byte{0, 5, 193}: "A-Kyung Motion, Inc.",
+ [3]byte{0, 5, 194}: "Soronti, Inc.",
+ [3]byte{0, 5, 195}: "Pacific Instruments, Inc.",
+ [3]byte{0, 5, 196}: "Telect, Inc.",
+ [3]byte{0, 5, 197}: "Flaga HF",
+ [3]byte{0, 5, 198}: "Triz Communications",
+ [3]byte{0, 5, 199}: "I/F-COM A/S",
+ [3]byte{0, 5, 200}: "VERYTECH",
+ [3]byte{0, 5, 201}: "LG Innotek Co., Ltd.",
+ [3]byte{0, 5, 202}: "Hitron Technology, Inc.",
+ [3]byte{0, 5, 203}: "ROIS Technologies, Inc.",
+ [3]byte{0, 5, 204}: "Sumtel Communications, Inc.",
+ [3]byte{0, 5, 205}: "D&M Holdings Inc.",
+ [3]byte{0, 5, 206}: "Prolink Microsystems Corporation",
+ [3]byte{0, 5, 207}: "Thunder River Technologies, Inc.",
+ [3]byte{0, 5, 208}: "Solinet Systems",
+ [3]byte{0, 5, 209}: "Metavector Technologies",
+ [3]byte{0, 5, 210}: "DAP Technologies",
+ [3]byte{0, 5, 211}: "eProduction Solutions, Inc.",
+ [3]byte{0, 5, 212}: "FutureSmart Networks, Inc.",
+ [3]byte{0, 5, 213}: "Speedcom Wireless",
+ [3]byte{0, 5, 214}: "L-3 Linkabit",
+ [3]byte{0, 5, 215}: "Vista Imaging, Inc.",
+ [3]byte{0, 5, 216}: "Arescom, Inc.",
+ [3]byte{0, 5, 217}: "Techno Valley, Inc.",
+ [3]byte{0, 5, 218}: "Apex Automationstechnik",
+ [3]byte{0, 5, 219}: "PSI Nentec GmbH",
+ [3]byte{0, 5, 220}: "Cisco Systems, Inc",
+ [3]byte{0, 5, 221}: "Cisco Systems, Inc",
+ [3]byte{0, 5, 222}: "Gi Fone Korea, Inc.",
+ [3]byte{0, 5, 223}: "Electronic Innovation, Inc.",
+ [3]byte{0, 5, 224}: "Empirix Corp.",
+ [3]byte{0, 5, 225}: "Trellis Photonics, Ltd.",
+ [3]byte{0, 5, 226}: "Creativ Network Technologies",
+ [3]byte{0, 5, 227}: "LightSand Communications, Inc.",
+ [3]byte{0, 5, 228}: "Red Lion Controls Inc.",
+ [3]byte{0, 5, 229}: "Renishaw PLC",
+ [3]byte{0, 5, 230}: "Egenera, Inc.",
+ [3]byte{0, 5, 231}: "Netrake an AudioCodes Company",
+ [3]byte{0, 5, 232}: "TurboWave, Inc.",
+ [3]byte{0, 5, 233}: "Unicess Network, Inc.",
+ [3]byte{0, 5, 234}: "Rednix",
+ [3]byte{0, 5, 235}: "Blue Ridge Networks, Inc.",
+ [3]byte{0, 5, 236}: "Mosaic Systems Inc.",
+ [3]byte{0, 5, 237}: "Technikum Joanneum GmbH",
+ [3]byte{0, 5, 238}: "Vanderbilt International (SWE) AB",
+ [3]byte{0, 5, 239}: "ADOIR Digital Technology",
+ [3]byte{0, 5, 240}: "SATEC",
+ [3]byte{0, 5, 241}: "Vrcom, Inc.",
+ [3]byte{0, 5, 242}: "Power R, Inc.",
+ [3]byte{0, 5, 243}: "Webyn",
+ [3]byte{0, 5, 244}: "System Base Co., Ltd.",
+ [3]byte{0, 5, 245}: "Geospace Technologies",
+ [3]byte{0, 5, 246}: "Young Chang Co. Ltd.",
+ [3]byte{0, 5, 247}: "Analog Devices, Inc.",
+ [3]byte{0, 5, 248}: "Real Time Access, Inc.",
+ [3]byte{0, 5, 249}: "TOA Corporation",
+ [3]byte{0, 5, 250}: "IPOptical, Inc.",
+ [3]byte{0, 5, 251}: "ShareGate, Inc.",
+ [3]byte{0, 5, 252}: "Schenck Pegasus Corp.",
+ [3]byte{0, 5, 253}: "PacketLight Networks Ltd.",
+ [3]byte{0, 5, 254}: "Traficon N.V.",
+ [3]byte{0, 5, 255}: "SNS Solutions, Inc.",
+ [3]byte{0, 6, 0}: "Toshiba Teli Corporation",
+ [3]byte{0, 6, 1}: "Otanikeiki Co., Ltd.",
+ [3]byte{0, 6, 2}: "Cirkitech Electronics Co.",
+ [3]byte{0, 6, 3}: "Baker Hughes Inc.",
+ [3]byte{0, 6, 4}: "@Track Communications, Inc.",
+ [3]byte{0, 6, 5}: "Inncom International, Inc.",
+ [3]byte{0, 6, 6}: "RapidWAN, Inc.",
+ [3]byte{0, 6, 7}: "Omni Directional Control Technology Inc.",
+ [3]byte{0, 6, 8}: "At-Sky SAS",
+ [3]byte{0, 6, 9}: "Crossport Systems",
+ [3]byte{0, 6, 10}: "Blue2space",
+ [3]byte{0, 6, 11}: "Artesyn Embedded Technologies",
+ [3]byte{0, 6, 12}: "Melco Industries, Inc.",
+ [3]byte{0, 6, 13}: "Wave7 Optics",
+ [3]byte{0, 6, 14}: "IGYS Systems, Inc.",
+ [3]byte{0, 6, 15}: "Narad Networks Inc",
+ [3]byte{0, 6, 16}: "Abeona Networks Inc",
+ [3]byte{0, 6, 17}: "Zeus Wireless, Inc.",
+ [3]byte{0, 6, 18}: "Accusys, Inc.",
+ [3]byte{0, 6, 19}: "Kawasaki Microelectronics Incorporated",
+ [3]byte{0, 6, 20}: "Prism Holdings",
+ [3]byte{0, 6, 21}: "Kimoto Electric Co., Ltd.",
+ [3]byte{0, 6, 22}: "Tel Net Co., Ltd.",
+ [3]byte{0, 6, 23}: "Redswitch Inc.",
+ [3]byte{0, 6, 24}: "DigiPower Manufacturing Inc.",
+ [3]byte{0, 6, 25}: "Connection Technology Systems",
+ [3]byte{0, 6, 26}: "Zetari Inc.",
+ [3]byte{0, 6, 27}: "Notebook Development Lab. Lenovo Japan Ltd.",
+ [3]byte{0, 6, 28}: "Hoshino Metal Industries, Ltd.",
+ [3]byte{0, 6, 29}: "MIP Telecom, Inc.",
+ [3]byte{0, 6, 30}: "Maxan Systems",
+ [3]byte{0, 6, 31}: "Vision Components GmbH",
+ [3]byte{0, 6, 32}: "Serial System Ltd.",
+ [3]byte{0, 6, 33}: "Hinox, Co., Ltd.",
+ [3]byte{0, 6, 34}: "Chung Fu Chen Yeh Enterprise Corp.",
+ [3]byte{0, 6, 35}: "MGE UPS Systems France",
+ [3]byte{0, 6, 36}: "Gentner Communications Corp.",
+ [3]byte{0, 6, 37}: "The Linksys Group, Inc.",
+ [3]byte{0, 6, 38}: "MWE GmbH",
+ [3]byte{0, 6, 39}: "Uniwide Technologies, Inc.",
+ [3]byte{0, 6, 40}: "Cisco Systems, Inc",
+ [3]byte{0, 6, 41}: "IBM Corp",
+ [3]byte{0, 6, 42}: "Cisco Systems, Inc",
+ [3]byte{0, 6, 43}: "INTRASERVER TECHNOLOGY",
+ [3]byte{0, 6, 44}: "Bivio Networks",
+ [3]byte{0, 6, 45}: "TouchStar Technologies, L.L.C.",
+ [3]byte{0, 6, 46}: "Aristos Logic Corp.",
+ [3]byte{0, 6, 47}: "Pivotech Systems Inc.",
+ [3]byte{0, 6, 48}: "Adtranz Sweden",
+ [3]byte{0, 6, 49}: "Calix Inc.",
+ [3]byte{0, 6, 50}: "Mesco Engineering GmbH",
+ [3]byte{0, 6, 51}: "Cross Match Technologies GmbH",
+ [3]byte{0, 6, 52}: "GTE Airfone Inc.",
+ [3]byte{0, 6, 53}: "PacketAir Networks, Inc.",
+ [3]byte{0, 6, 54}: "Jedai Broadband Networks",
+ [3]byte{0, 6, 55}: "Toptrend-Meta Information (ShenZhen) Inc.",
+ [3]byte{0, 6, 56}: "Sungjin C&C Co., Ltd.",
+ [3]byte{0, 6, 57}: "Newtec",
+ [3]byte{0, 6, 58}: "Dura Micro, Inc.",
+ [3]byte{0, 6, 59}: "Arcturus Networks Inc.",
+ [3]byte{0, 6, 60}: "Intrinsyc Software International Inc.",
+ [3]byte{0, 6, 61}: "Microwave Data Systems Inc.",
+ [3]byte{0, 6, 62}: "Opthos Inc.",
+ [3]byte{0, 6, 63}: "Everex Communications Inc.",
+ [3]byte{0, 6, 64}: "White Rock Networks",
+ [3]byte{0, 6, 65}: "ITCN",
+ [3]byte{0, 6, 66}: "Genetel Systems Inc.",
+ [3]byte{0, 6, 67}: "SONO Computer Co., Ltd.",
+ [3]byte{0, 6, 68}: "neix,Inc",
+ [3]byte{0, 6, 69}: "Meisei Electric Co. Ltd.",
+ [3]byte{0, 6, 70}: "ShenZhen XunBao Network Technology Co Ltd",
+ [3]byte{0, 6, 71}: "Etrali S.A.",
+ [3]byte{0, 6, 72}: "Seedsware, Inc.",
+ [3]byte{0, 6, 73}: "3M Deutschland GmbH",
+ [3]byte{0, 6, 74}: "Honeywell Co., Ltd. (KOREA)",
+ [3]byte{0, 6, 75}: "Alexon Co., Ltd.",
+ [3]byte{0, 6, 76}: "Invicta Networks, Inc.",
+ [3]byte{0, 6, 77}: "Sencore",
+ [3]byte{0, 6, 78}: "Broad Net Technology Inc.",
+ [3]byte{0, 6, 79}: "PRO-NETS Technology Corporation",
+ [3]byte{0, 6, 80}: "Tiburon Networks, Inc.",
+ [3]byte{0, 6, 81}: "Aspen Networks Inc.",
+ [3]byte{0, 6, 82}: "Cisco Systems, Inc",
+ [3]byte{0, 6, 83}: "Cisco Systems, Inc",
+ [3]byte{0, 6, 84}: "Winpresa Building Automation Technologies GmbH",
+ [3]byte{0, 6, 85}: "Yipee, Inc.",
+ [3]byte{0, 6, 86}: "Tactel AB",
+ [3]byte{0, 6, 87}: "Market Central, Inc.",
+ [3]byte{0, 6, 88}: "Helmut Fischer GmbH Institut für Elektronik und Messtechnik",
+ [3]byte{0, 6, 89}: "EAL (Apeldoorn) B.V.",
+ [3]byte{0, 6, 90}: "Strix Systems",
+ [3]byte{0, 6, 91}: "Dell Inc.",
+ [3]byte{0, 6, 92}: "Malachite Technologies, Inc.",
+ [3]byte{0, 6, 93}: "Heidelberg Web Systems",
+ [3]byte{0, 6, 94}: "Photuris, Inc.",
+ [3]byte{0, 6, 95}: "ECI Telecom Ltd.",
+ [3]byte{0, 6, 96}: "NADEX Co., Ltd.",
+ [3]byte{0, 6, 97}: "NIA Home Technologies Corp.",
+ [3]byte{0, 6, 98}: "MBM Technology Ltd.",
+ [3]byte{0, 6, 99}: "Human Technology Co., Ltd.",
+ [3]byte{0, 6, 100}: "Fostex Corporation",
+ [3]byte{0, 6, 101}: "Sunny Giken, Inc.",
+ [3]byte{0, 6, 102}: "Roving Networks",
+ [3]byte{0, 6, 103}: "Tripp Lite",
+ [3]byte{0, 6, 104}: "Vicon Industries Inc.",
+ [3]byte{0, 6, 105}: "Datasound Laboratories Ltd",
+ [3]byte{0, 6, 106}: "InfiniCon Systems, Inc.",
+ [3]byte{0, 6, 107}: "Sysmex Corporation",
+ [3]byte{0, 6, 108}: "Robinson Corporation",
+ [3]byte{0, 6, 109}: "Compuprint S.P.A.",
+ [3]byte{0, 6, 110}: "Delta Electronics, Inc.",
+ [3]byte{0, 6, 111}: "Korea Data Systems",
+ [3]byte{0, 6, 112}: "Upponetti Oy",
+ [3]byte{0, 6, 113}: "Softing AG",
+ [3]byte{0, 6, 114}: "Netezza",
+ [3]byte{0, 6, 115}: "TKH Security Solutions USA",
+ [3]byte{0, 6, 116}: "Spectrum Control, Inc.",
+ [3]byte{0, 6, 117}: "Banderacom, Inc.",
+ [3]byte{0, 6, 118}: "Novra Technologies Inc.",
+ [3]byte{0, 6, 119}: "SICK AG",
+ [3]byte{0, 6, 120}: "D&M Holdings Inc.",
+ [3]byte{0, 6, 121}: "Konami Corporation",
+ [3]byte{0, 6, 122}: "JMP Systems",
+ [3]byte{0, 6, 123}: "Toplink C&C Corporation",
+ [3]byte{0, 6, 124}: "Cisco Systems, Inc",
+ [3]byte{0, 6, 125}: "Takasago Ltd.",
+ [3]byte{0, 6, 126}: "WinCom Systems, Inc.",
+ [3]byte{0, 6, 127}: "Digeo, Inc.",
+ [3]byte{0, 6, 128}: "Card Access, Inc.",
+ [3]byte{0, 6, 129}: "Goepel Electronic GmbH",
+ [3]byte{0, 6, 130}: "Convedia",
+ [3]byte{0, 6, 131}: "Bravara Communications, Inc.",
+ [3]byte{0, 6, 132}: "Biacore AB",
+ [3]byte{0, 6, 133}: "NetNearU Corporation",
+ [3]byte{0, 6, 134}: "ZARDCOM Co., Ltd.",
+ [3]byte{0, 6, 135}: "Omnitron Systems Technology, Inc.",
+ [3]byte{0, 6, 136}: "Telways Communication Co., Ltd.",
+ [3]byte{0, 6, 137}: "yLez Technologies Pte Ltd",
+ [3]byte{0, 6, 138}: "NeuronNet Co. Ltd. R&D Center",
+ [3]byte{0, 6, 139}: "AirRunner Technologies, Inc.",
+ [3]byte{0, 6, 140}: "3COM CORPORATION",
+ [3]byte{0, 6, 141}: "SEPATON, Inc.",
+ [3]byte{0, 6, 142}: "HID Corporation",
+ [3]byte{0, 6, 143}: "Telemonitor, Inc.",
+ [3]byte{0, 6, 144}: "Euracom Communication GmbH",
+ [3]byte{0, 6, 145}: "PT Inovacao",
+ [3]byte{0, 6, 146}: "Intruvert Networks, Inc.",
+ [3]byte{0, 6, 147}: "Flexus Computer Technology, Inc.",
+ [3]byte{0, 6, 148}: "Mobillian Corporation",
+ [3]byte{0, 6, 149}: "Ensure Technologies, Inc.",
+ [3]byte{0, 6, 150}: "Advent Networks",
+ [3]byte{0, 6, 151}: "R & D Center",
+ [3]byte{0, 6, 152}: "egnite GmbH",
+ [3]byte{0, 6, 153}: "Vida Design Co.",
+ [3]byte{0, 6, 154}: "e & Tel",
+ [3]byte{0, 6, 155}: "AVT Audio Video Technologies GmbH",
+ [3]byte{0, 6, 156}: "Transmode Systems AB",
+ [3]byte{0, 6, 157}: "Petards Ltd",
+ [3]byte{0, 6, 158}: "UNIQA, Inc.",
+ [3]byte{0, 6, 159}: "Kuokoa Networks",
+ [3]byte{0, 6, 160}: "Mx Imaging",
+ [3]byte{0, 6, 161}: "Celsian Technologies, Inc.",
+ [3]byte{0, 6, 162}: "Microtune, Inc.",
+ [3]byte{0, 6, 163}: "Bitran Corporation",
+ [3]byte{0, 6, 164}: "INNOWELL Corp.",
+ [3]byte{0, 6, 165}: "PINON Corp.",
+ [3]byte{0, 6, 166}: "Artistic Licence Engineering Ltd",
+ [3]byte{0, 6, 167}: "Primarion",
+ [3]byte{0, 6, 168}: "KC Technology, Inc.",
+ [3]byte{0, 6, 169}: "Universal Instruments Corp.",
+ [3]byte{0, 6, 170}: "VT Miltope",
+ [3]byte{0, 6, 171}: "W-Link Systems, Inc.",
+ [3]byte{0, 6, 172}: "Intersoft Co.",
+ [3]byte{0, 6, 173}: "KB Electronics Ltd.",
+ [3]byte{0, 6, 174}: "Himachal Futuristic Communications Ltd",
+ [3]byte{0, 6, 175}: "Xalted Networks",
+ [3]byte{0, 6, 176}: "Comtech EF Data Corp.",
+ [3]byte{0, 6, 177}: "Sonicwall",
+ [3]byte{0, 6, 178}: "Linxtek Co.",
+ [3]byte{0, 6, 179}: "Diagraph Corporation",
+ [3]byte{0, 6, 180}: "Vorne Industries, Inc.",
+ [3]byte{0, 6, 181}: "Source Photonics, Inc.",
+ [3]byte{0, 6, 182}: "Nir-Or Israel Ltd.",
+ [3]byte{0, 6, 183}: "TELEM GmbH",
+ [3]byte{0, 6, 184}: "Bandspeed Pty Ltd",
+ [3]byte{0, 6, 185}: "A5TEK Corp.",
+ [3]byte{0, 6, 186}: "Westwave Communications",
+ [3]byte{0, 6, 187}: "ATI Technologies Inc.",
+ [3]byte{0, 6, 188}: "Macrolink, Inc.",
+ [3]byte{0, 6, 189}: "BNTECHNOLOGY Co., Ltd.",
+ [3]byte{0, 6, 190}: "Baumer Optronic GmbH",
+ [3]byte{0, 6, 191}: "Accella Technologies Co., Ltd.",
+ [3]byte{0, 6, 192}: "United Internetworks, Inc.",
+ [3]byte{0, 6, 193}: "Cisco Systems, Inc",
+ [3]byte{0, 6, 194}: "Smartmatic Corporation",
+ [3]byte{0, 6, 195}: "Schindler Elevator Ltd.",
+ [3]byte{0, 6, 196}: "Piolink Inc.",
+ [3]byte{0, 6, 197}: "INNOVI Technologies Limited",
+ [3]byte{0, 6, 198}: "lesswire AG",
+ [3]byte{0, 6, 199}: "RFNET Technologies Pte Ltd (S)",
+ [3]byte{0, 6, 200}: "Sumitomo Metal Micro Devices, Inc.",
+ [3]byte{0, 6, 201}: "Technical Marketing Research, Inc.",
+ [3]byte{0, 6, 202}: "American Computer & Digital Components, Inc. (ACDC)",
+ [3]byte{0, 6, 203}: "Jotron Electronics A/S",
+ [3]byte{0, 6, 204}: "JMI Electronics Co., Ltd.",
+ [3]byte{0, 6, 205}: "Leaf Imaging Ltd.",
+ [3]byte{0, 6, 206}: "DATENO",
+ [3]byte{0, 6, 207}: "Thales Avionics In-Flight Systems, LLC",
+ [3]byte{0, 6, 208}: "Elgar Electronics Corp.",
+ [3]byte{0, 6, 209}: "Tahoe Networks, Inc.",
+ [3]byte{0, 6, 210}: "Tundra Semiconductor Corp.",
+ [3]byte{0, 6, 211}: "Alpha Telecom, Inc. U.S.A.",
+ [3]byte{0, 6, 212}: "Interactive Objects, Inc.",
+ [3]byte{0, 6, 213}: "Diamond Systems Corp.",
+ [3]byte{0, 6, 214}: "Cisco Systems, Inc",
+ [3]byte{0, 6, 215}: "Cisco Systems, Inc",
+ [3]byte{0, 6, 216}: "Maple Optical Systems",
+ [3]byte{0, 6, 217}: "IPM-Net S.p.A.",
+ [3]byte{0, 6, 218}: "ITRAN Communications Ltd.",
+ [3]byte{0, 6, 219}: "ICHIPS Co., Ltd.",
+ [3]byte{0, 6, 220}: "Syabas Technology (Amquest)",
+ [3]byte{0, 6, 221}: "AT & T Laboratories - Cambridge Ltd",
+ [3]byte{0, 6, 222}: "Flash Technology",
+ [3]byte{0, 6, 223}: "AIDONIC Corporation",
+ [3]byte{0, 6, 224}: "MAT Co., Ltd.",
+ [3]byte{0, 6, 225}: "Techno Trade s.a",
+ [3]byte{0, 6, 226}: "Ceemax Technology Co., Ltd.",
+ [3]byte{0, 6, 227}: "Quantitative Imaging Corporation",
+ [3]byte{0, 6, 228}: "Citel Technologies Ltd.",
+ [3]byte{0, 6, 229}: "Fujian Newland Computer Ltd. Co.",
+ [3]byte{0, 6, 230}: "DongYang Telecom Co., Ltd.",
+ [3]byte{0, 6, 231}: "Bit Blitz Communications Inc.",
+ [3]byte{0, 6, 232}: "Optical Network Testing, Inc.",
+ [3]byte{0, 6, 233}: "Intime Corp.",
+ [3]byte{0, 6, 234}: "ELZET80 Mikrocomputer GmbH&Co. KG",
+ [3]byte{0, 6, 235}: "Global Data",
+ [3]byte{0, 6, 236}: "Harris Corporation",
+ [3]byte{0, 6, 237}: "Inara Networks",
+ [3]byte{0, 6, 238}: "Shenyang Neu-era Information & Technology Stock Co., Ltd",
+ [3]byte{0, 6, 239}: "Maxxan Systems, Inc.",
+ [3]byte{0, 6, 240}: "Digeo, Inc.",
+ [3]byte{0, 6, 241}: "Optillion",
+ [3]byte{0, 6, 242}: "Platys Communications",
+ [3]byte{0, 6, 243}: "AcceLight Networks",
+ [3]byte{0, 6, 244}: "Prime Electronics & Satellitics Inc.",
+ [3]byte{0, 6, 245}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{0, 6, 246}: "Cisco Systems, Inc",
+ [3]byte{0, 6, 247}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{0, 6, 248}: "The Boeing Company",
+ [3]byte{0, 6, 249}: "Mitsui Zosen Systems Research Inc.",
+ [3]byte{0, 6, 250}: "IP SQUARE Co, Ltd.",
+ [3]byte{0, 6, 251}: "Hitachi Printing Solutions, Ltd.",
+ [3]byte{0, 6, 252}: "Fnet Co., Ltd.",
+ [3]byte{0, 6, 253}: "Comjet Information Systems Corp.",
+ [3]byte{0, 6, 254}: "Ambrado, Inc",
+ [3]byte{0, 6, 255}: "Sheba Systems Co., Ltd.",
+ [3]byte{0, 7, 0}: "Zettamedia Korea",
+ [3]byte{0, 7, 1}: "RACAL-DATACOM",
+ [3]byte{0, 7, 2}: "Varian Medical Systems",
+ [3]byte{0, 7, 3}: "CSEE Transport",
+ [3]byte{0, 7, 4}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{0, 7, 5}: "Endress & Hauser GmbH & Co",
+ [3]byte{0, 7, 6}: "Sanritz Corporation",
+ [3]byte{0, 7, 7}: "Interalia Inc.",
+ [3]byte{0, 7, 8}: "Bitrage Inc.",
+ [3]byte{0, 7, 9}: "Westerstrand Urfabrik AB",
+ [3]byte{0, 7, 10}: "Unicom Automation Co., Ltd.",
+ [3]byte{0, 7, 11}: "Novabase SGPS, SA",
+ [3]byte{0, 7, 12}: "SVA-Intrusion.com Co. Ltd.",
+ [3]byte{0, 7, 13}: "Cisco Systems, Inc",
+ [3]byte{0, 7, 14}: "Cisco Systems, Inc",
+ [3]byte{0, 7, 15}: "Fujant, Inc.",
+ [3]byte{0, 7, 16}: "Adax, Inc.",
+ [3]byte{0, 7, 17}: "Acterna",
+ [3]byte{0, 7, 18}: "JAL Information Technology",
+ [3]byte{0, 7, 19}: "IP One, Inc.",
+ [3]byte{0, 7, 20}: "Brightcom",
+ [3]byte{0, 7, 21}: "General Research of Electronics, Inc.",
+ [3]byte{0, 7, 22}: "J & S Marine Ltd.",
+ [3]byte{0, 7, 23}: "Wieland Electric GmbH",
+ [3]byte{0, 7, 24}: "iCanTek Co., Ltd.",
+ [3]byte{0, 7, 25}: "Mobiis Co., Ltd.",
+ [3]byte{0, 7, 26}: "Finedigital Inc.",
+ [3]byte{0, 7, 27}: "CDVI Americas Ltd",
+ [3]byte{0, 7, 28}: "AT&T",
+ [3]byte{0, 7, 29}: "Satelsa Sistemas Y Aplicaciones De Telecomunicaciones, S.A.",
+ [3]byte{0, 7, 30}: "Tri-M Engineering / Nupak Dev. Corp.",
+ [3]byte{0, 7, 31}: "European Systems Integration",
+ [3]byte{0, 7, 32}: "Trutzschler GmbH & Co. KG",
+ [3]byte{0, 7, 33}: "Formac Elektronik GmbH",
+ [3]byte{0, 7, 34}: "The Nielsen Company",
+ [3]byte{0, 7, 35}: "ELCON Systemtechnik GmbH",
+ [3]byte{0, 7, 36}: "Telemax Co., Ltd.",
+ [3]byte{0, 7, 37}: "Bematech International Corp.",
+ [3]byte{0, 7, 38}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+ [3]byte{0, 7, 39}: "Zi Corporation (HK) Ltd.",
+ [3]byte{0, 7, 40}: "Neo Telecom",
+ [3]byte{0, 7, 41}: "Kistler Instrumente AG",
+ [3]byte{0, 7, 42}: "Innovance Networks",
+ [3]byte{0, 7, 43}: "Jung Myung Telecom Co., Ltd.",
+ [3]byte{0, 7, 44}: "Fabricom",
+ [3]byte{0, 7, 45}: "CNSystems",
+ [3]byte{0, 7, 46}: "North Node AB",
+ [3]byte{0, 7, 47}: "Intransa, Inc.",
+ [3]byte{0, 7, 48}: "Hutchison OPTEL Telecom Technology Co., Ltd.",
+ [3]byte{0, 7, 49}: "Ophir-Spiricon LLC",
+ [3]byte{0, 7, 50}: "AAEON Technology Inc.",
+ [3]byte{0, 7, 51}: "DANCONTROL Engineering",
+ [3]byte{0, 7, 52}: "ONStor, Inc.",
+ [3]byte{0, 7, 53}: "Flarion Technologies, Inc.",
+ [3]byte{0, 7, 54}: "Data Video Technologies Co., Ltd.",
+ [3]byte{0, 7, 55}: "Soriya Co. Ltd.",
+ [3]byte{0, 7, 56}: "Young Technology Co., Ltd.",
+ [3]byte{0, 7, 57}: "Scotty Group Austria Gmbh",
+ [3]byte{0, 7, 58}: "Inventel Systemes",
+ [3]byte{0, 7, 59}: "Tenovis GmbH & Co KG",
+ [3]byte{0, 7, 60}: "Telecom Design",
+ [3]byte{0, 7, 61}: "Nanjing Postel Telecommunications Co., Ltd.",
+ [3]byte{0, 7, 62}: "China Great-Wall Computer Shenzhen Co., Ltd.",
+ [3]byte{0, 7, 63}: "Woojyun Systec Co., Ltd.",
+ [3]byte{0, 7, 64}: "BUFFALO.INC",
+ [3]byte{0, 7, 65}: "Sierra Automated Systems",
+ [3]byte{0, 7, 66}: "Ormazabal",
+ [3]byte{0, 7, 67}: "Chelsio Communications",
+ [3]byte{0, 7, 68}: "Unico, Inc.",
+ [3]byte{0, 7, 69}: "Radlan Computer Communications Ltd.",
+ [3]byte{0, 7, 70}: "TURCK, Inc.",
+ [3]byte{0, 7, 71}: "Mecalc",
+ [3]byte{0, 7, 72}: "The Imaging Source Europe",
+ [3]byte{0, 7, 73}: "CENiX Inc.",
+ [3]byte{0, 7, 74}: "Carl Valentin GmbH",
+ [3]byte{0, 7, 75}: "Daihen Corporation",
+ [3]byte{0, 7, 76}: "Beicom Inc.",
+ [3]byte{0, 7, 77}: "Zebra Technologies Corp.",
+ [3]byte{0, 7, 78}: "IPFRONT Inc",
+ [3]byte{0, 7, 79}: "Cisco Systems, Inc",
+ [3]byte{0, 7, 80}: "Cisco Systems, Inc",
+ [3]byte{0, 7, 81}: "m-u-t AG",
+ [3]byte{0, 7, 82}: "Rhythm Watch Co., Ltd.",
+ [3]byte{0, 7, 83}: "Beijing Qxcomm Technology Co., Ltd.",
+ [3]byte{0, 7, 84}: "Xyterra Computing, Inc.",
+ [3]byte{0, 7, 85}: "Lafon",
+ [3]byte{0, 7, 86}: "Juyoung Telecom",
+ [3]byte{0, 7, 87}: "Topcall International AG",
+ [3]byte{0, 7, 88}: "Dragonwave",
+ [3]byte{0, 7, 89}: "Boris Manufacturing Corp.",
+ [3]byte{0, 7, 90}: "Air Products and Chemicals, Inc.",
+ [3]byte{0, 7, 91}: "Gibson Guitars",
+ [3]byte{0, 7, 92}: "Eastman Kodak Company",
+ [3]byte{0, 7, 93}: "Celleritas Inc.",
+ [3]byte{0, 7, 94}: "Ametek Power Instruments",
+ [3]byte{0, 7, 95}: "VCS Video Communication Systems AG",
+ [3]byte{0, 7, 96}: "TOMIS Information & Telecom Corp.",
+ [3]byte{0, 7, 97}: "29530",
+ [3]byte{0, 7, 98}: "Group Sense Limited",
+ [3]byte{0, 7, 99}: "Sunniwell Cyber Tech. Co., Ltd.",
+ [3]byte{0, 7, 100}: "YoungWoo Telecom Co. Ltd.",
+ [3]byte{0, 7, 101}: "Jade Quantum Technologies, Inc.",
+ [3]byte{0, 7, 102}: "Chou Chin Industrial Co., Ltd.",
+ [3]byte{0, 7, 103}: "Yuxing Electronics Company Limited",
+ [3]byte{0, 7, 104}: "Danfoss A/S",
+ [3]byte{0, 7, 105}: "Italiana Macchi SpA",
+ [3]byte{0, 7, 106}: "NEXTEYE Co., Ltd.",
+ [3]byte{0, 7, 107}: "Stralfors AB",
+ [3]byte{0, 7, 108}: "Daehanet, Inc.",
+ [3]byte{0, 7, 109}: "Flexlight Networks",
+ [3]byte{0, 7, 110}: "Sinetica Corporation Limited",
+ [3]byte{0, 7, 111}: "Synoptics Limited",
+ [3]byte{0, 7, 112}: "Ubiquoss Inc",
+ [3]byte{0, 7, 113}: "Embedded System Corporation",
+ [3]byte{0, 7, 114}: "Alcatel-Lucent Shanghai Bell Co., Ltd",
+ [3]byte{0, 7, 115}: "Ascom Powerline Communications Ltd.",
+ [3]byte{0, 7, 116}: "GuangZhou Thinker Technology Co. Ltd.",
+ [3]byte{0, 7, 117}: "Valence Semiconductor, Inc.",
+ [3]byte{0, 7, 118}: "Federal APD",
+ [3]byte{0, 7, 119}: "Motah Ltd.",
+ [3]byte{0, 7, 120}: "GERSTEL GmbH & Co. KG",
+ [3]byte{0, 7, 121}: "Sungil Telecom Co., Ltd.",
+ [3]byte{0, 7, 122}: "Infoware System Co., Ltd.",
+ [3]byte{0, 7, 123}: "Millimetrix Broadband Networks",
+ [3]byte{0, 7, 124}: "Westermo Teleindustri AB",
+ [3]byte{0, 7, 125}: "Cisco Systems, Inc",
+ [3]byte{0, 7, 126}: "Elrest GmbH",
+ [3]byte{0, 7, 127}: "J Communications Co., Ltd.",
+ [3]byte{0, 7, 128}: "Bluegiga Technologies OY",
+ [3]byte{0, 7, 129}: "Itron Inc.",
+ [3]byte{0, 7, 130}: "Oracle Corporation",
+ [3]byte{0, 7, 131}: "SynCom Network, Inc.",
+ [3]byte{0, 7, 132}: "Cisco Systems, Inc",
+ [3]byte{0, 7, 133}: "Cisco Systems, Inc",
+ [3]byte{0, 7, 134}: "Wireless Networks Inc.",
+ [3]byte{0, 7, 135}: "Idea System Co., Ltd.",
+ [3]byte{0, 7, 136}: "Clipcomm, Inc.",
+ [3]byte{0, 7, 137}: "DONGWON SYSTEMS",
+ [3]byte{0, 7, 138}: "Mentor Data System Inc.",
+ [3]byte{0, 7, 139}: "Wegener Communications, Inc.",
+ [3]byte{0, 7, 140}: "Elektronikspecialisten i Borlange AB",
+ [3]byte{0, 7, 141}: "NetEngines Ltd.",
+ [3]byte{0, 7, 142}: "Garz & Friche GmbH",
+ [3]byte{0, 7, 143}: "Emkay Innovative Products",
+ [3]byte{0, 7, 144}: "Tri-M Technologies (s) Limited",
+ [3]byte{0, 7, 145}: "International Data Communications, Inc.",
+ [3]byte{0, 7, 146}: "Sütron Electronic GmbH",
+ [3]byte{0, 7, 147}: "Shin Satellite Public Company Limited",
+ [3]byte{0, 7, 148}: "Simple Devices, Inc.",
+ [3]byte{0, 7, 149}: "Elitegroup Computer Systems Co.,Ltd.",
+ [3]byte{0, 7, 150}: "LSI Systems, Inc.",
+ [3]byte{0, 7, 151}: "Netpower Co., Ltd.",
+ [3]byte{0, 7, 152}: "Selea SRL",
+ [3]byte{0, 7, 153}: "Tipping Point Technologies, Inc.",
+ [3]byte{0, 7, 154}: "Verint Systems Inc",
+ [3]byte{0, 7, 155}: "Aurora Networks",
+ [3]byte{0, 7, 156}: "Golden Electronics Technology Co., Ltd.",
+ [3]byte{0, 7, 157}: "Musashi Co., Ltd.",
+ [3]byte{0, 7, 158}: "Ilinx Co., Ltd.",
+ [3]byte{0, 7, 159}: "Action Digital Inc.",
+ [3]byte{0, 7, 160}: "e-Watch Inc.",
+ [3]byte{0, 7, 161}: "VIASYS Healthcare GmbH",
+ [3]byte{0, 7, 162}: "Opteon Corporation",
+ [3]byte{0, 7, 163}: "Ositis Software, Inc.",
+ [3]byte{0, 7, 164}: "GN Netcom Ltd.",
+ [3]byte{0, 7, 165}: "Y.D.K Co. Ltd.",
+ [3]byte{0, 7, 166}: "Leviton Manufacturing Co., Inc.",
+ [3]byte{0, 7, 167}: "A-Z Inc.",
+ [3]byte{0, 7, 168}: "Haier Group Technologies Ltd.",
+ [3]byte{0, 7, 169}: "Novasonics",
+ [3]byte{0, 7, 170}: "Quantum Data Inc.",
+ [3]byte{0, 7, 171}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 7, 172}: "Eolring",
+ [3]byte{0, 7, 173}: "Pentacon GmbH Foto-und Feinwerktechnik",
+ [3]byte{0, 7, 174}: "Britestream Networks, Inc.",
+ [3]byte{0, 7, 175}: "Red Lion Controls, LP",
+ [3]byte{0, 7, 176}: "Office Details, Inc.",
+ [3]byte{0, 7, 177}: "Equator Technologies",
+ [3]byte{0, 7, 178}: "Transaccess S.A.",
+ [3]byte{0, 7, 179}: "Cisco Systems, Inc",
+ [3]byte{0, 7, 180}: "Cisco Systems, Inc",
+ [3]byte{0, 7, 181}: "Any One Wireless Ltd.",
+ [3]byte{0, 7, 182}: "Telecom Technology Ltd.",
+ [3]byte{0, 7, 183}: "Samurai Ind. Prods Eletronicos Ltda",
+ [3]byte{0, 7, 184}: "Corvalent Corporation",
+ [3]byte{0, 7, 185}: "Ginganet Corporation",
+ [3]byte{0, 7, 186}: "UTStarcom Inc",
+ [3]byte{0, 7, 187}: "Candera Inc.",
+ [3]byte{0, 7, 188}: "Identix Inc.",
+ [3]byte{0, 7, 189}: "Radionet Ltd.",
+ [3]byte{0, 7, 190}: "DataLogic SpA",
+ [3]byte{0, 7, 191}: "Armillaire Technologies, Inc.",
+ [3]byte{0, 7, 192}: "NetZerver Inc.",
+ [3]byte{0, 7, 193}: "Overture Networks, Inc.",
+ [3]byte{0, 7, 194}: "Netsys Telecom",
+ [3]byte{0, 7, 195}: "Thomson",
+ [3]byte{0, 7, 196}: "JEAN Co. Ltd.",
+ [3]byte{0, 7, 197}: "Gcom, Inc.",
+ [3]byte{0, 7, 198}: "VDS Vosskuhler GmbH",
+ [3]byte{0, 7, 199}: "Synectics Systems Limited",
+ [3]byte{0, 7, 200}: "Brain21, Inc.",
+ [3]byte{0, 7, 201}: "Technol Seven Co., Ltd.",
+ [3]byte{0, 7, 202}: "Creatix Polymedia Ges Fur Kommunikaitonssysteme",
+ [3]byte{0, 7, 203}: "FREEBOX SAS",
+ [3]byte{0, 7, 204}: "Kaba Benzing GmbH",
+ [3]byte{0, 7, 205}: "Kumoh Electronic Co, Ltd",
+ [3]byte{0, 7, 206}: "Cabletime Limited",
+ [3]byte{0, 7, 207}: "Anoto AB",
+ [3]byte{0, 7, 208}: "Automat Engenharia de Automação Ltda.",
+ [3]byte{0, 7, 209}: "Spectrum Signal Processing Inc.",
+ [3]byte{0, 7, 210}: "Logopak Systeme GmbH & Co. KG",
+ [3]byte{0, 7, 211}: "SPGPrints B.V.",
+ [3]byte{0, 7, 212}: "Zhejiang Yutong Network Communication Co Ltd.",
+ [3]byte{0, 7, 213}: "3e Technologies Int;., Inc.",
+ [3]byte{0, 7, 214}: "Commil Ltd.",
+ [3]byte{0, 7, 215}: "Caporis Networks AG",
+ [3]byte{0, 7, 216}: "Hitron Technologies. Inc",
+ [3]byte{0, 7, 217}: "Splicecom",
+ [3]byte{0, 7, 218}: "Neuro Telecom Co., Ltd.",
+ [3]byte{0, 7, 219}: "Kirana Networks, Inc.",
+ [3]byte{0, 7, 220}: "Atek Co, Ltd.",
+ [3]byte{0, 7, 221}: "Cradle Technologies",
+ [3]byte{0, 7, 222}: "eCopilt AB",
+ [3]byte{0, 7, 223}: "Vbrick Systems Inc.",
+ [3]byte{0, 7, 224}: "Palm Inc.",
+ [3]byte{0, 7, 225}: "WIS Communications Co. Ltd.",
+ [3]byte{0, 7, 226}: "Bitworks, Inc.",
+ [3]byte{0, 7, 227}: "Navcom Technology, Inc.",
+ [3]byte{0, 7, 228}: "SoftRadio Co., Ltd.",
+ [3]byte{0, 7, 229}: "Coup Corporation",
+ [3]byte{0, 7, 230}: "edgeflow Canada Inc.",
+ [3]byte{0, 7, 231}: "FreeWave Technologies",
+ [3]byte{0, 7, 232}: "EdgeWave",
+ [3]byte{0, 7, 233}: "Intel Corporation",
+ [3]byte{0, 7, 234}: "Massana, Inc.",
+ [3]byte{0, 7, 235}: "Cisco Systems, Inc",
+ [3]byte{0, 7, 236}: "Cisco Systems, Inc",
+ [3]byte{0, 7, 237}: "Altera Corporation",
+ [3]byte{0, 7, 238}: "telco Informationssysteme GmbH",
+ [3]byte{0, 7, 239}: "Lockheed Martin Tactical Systems",
+ [3]byte{0, 7, 240}: "LogiSync LLC",
+ [3]byte{0, 7, 241}: "TeraBurst Networks Inc.",
+ [3]byte{0, 7, 242}: "IOA Corporation",
+ [3]byte{0, 7, 243}: "Thinkengine Networks",
+ [3]byte{0, 7, 244}: "Eletex Co., Ltd.",
+ [3]byte{0, 7, 245}: "Bridgeco Co AG",
+ [3]byte{0, 7, 246}: "Qqest Software Systems",
+ [3]byte{0, 7, 247}: "Galtronics",
+ [3]byte{0, 7, 248}: "ITDevices, Inc.",
+ [3]byte{0, 7, 249}: "Sensaphone",
+ [3]byte{0, 7, 250}: "ITT Co., Ltd.",
+ [3]byte{0, 7, 251}: "Giga Stream UMTS Technologies GmbH",
+ [3]byte{0, 7, 252}: "Adept Systems Inc.",
+ [3]byte{0, 7, 253}: "LANergy Ltd.",
+ [3]byte{0, 7, 254}: "Rigaku Corporation",
+ [3]byte{0, 7, 255}: "Gluon Networks",
+ [3]byte{0, 8, 0}: "MULTITECH SYSTEMS, INC.",
+ [3]byte{0, 8, 1}: "HighSpeed Surfing Inc.",
+ [3]byte{0, 8, 2}: "Hewlett Packard",
+ [3]byte{0, 8, 3}: "Cos Tron",
+ [3]byte{0, 8, 4}: "ICA Inc.",
+ [3]byte{0, 8, 5}: "Techno-Holon Corporation",
+ [3]byte{0, 8, 6}: "Raonet Systems, Inc.",
+ [3]byte{0, 8, 7}: "Access Devices Limited",
+ [3]byte{0, 8, 8}: "PPT Vision, Inc.",
+ [3]byte{0, 8, 9}: "Systemonic AG",
+ [3]byte{0, 8, 10}: "Espera-Werke GmbH",
+ [3]byte{0, 8, 11}: "Birka BPA Informationssystem AB",
+ [3]byte{0, 8, 12}: "VDA Elettronica spa",
+ [3]byte{0, 8, 13}: "Toshiba",
+ [3]byte{0, 8, 14}: "ARRIS Group, Inc.",
+ [3]byte{0, 8, 15}: "Proximion Fiber Optics AB",
+ [3]byte{0, 8, 16}: "Key Technology, Inc.",
+ [3]byte{0, 8, 17}: "VOIX Corporation",
+ [3]byte{0, 8, 18}: "GM-2 Corporation",
+ [3]byte{0, 8, 19}: "Diskbank, Inc.",
+ [3]byte{0, 8, 20}: "TIL Technologies",
+ [3]byte{0, 8, 21}: "CATS Co., Ltd.",
+ [3]byte{0, 8, 22}: "Bluelon ApS",
+ [3]byte{0, 8, 23}: "EmergeCore Networks LLC",
+ [3]byte{0, 8, 24}: "Pixelworks, Inc.",
+ [3]byte{0, 8, 25}: "Banksys",
+ [3]byte{0, 8, 26}: "Sanrad Intelligence Storage Communications (2000) Ltd.",
+ [3]byte{0, 8, 27}: "Windigo Systems",
+ [3]byte{0, 8, 28}: "@pos.com",
+ [3]byte{0, 8, 29}: "Ipsil, Incorporated",
+ [3]byte{0, 8, 30}: "Repeatit AB",
+ [3]byte{0, 8, 31}: "Pou Yuen Tech Corp. Ltd.",
+ [3]byte{0, 8, 32}: "Cisco Systems, Inc",
+ [3]byte{0, 8, 33}: "Cisco Systems, Inc",
+ [3]byte{0, 8, 34}: "InPro Comm",
+ [3]byte{0, 8, 35}: "Texa Corp.",
+ [3]byte{0, 8, 36}: "Nuance Document Imaging",
+ [3]byte{0, 8, 37}: "Acme Packet",
+ [3]byte{0, 8, 38}: "Colorado Med Tech",
+ [3]byte{0, 8, 39}: "ADB Broadband Italia",
+ [3]byte{0, 8, 40}: "Koei Engineering Ltd.",
+ [3]byte{0, 8, 41}: "Aval Nagasaki Corporation",
+ [3]byte{0, 8, 42}: "Powerwallz Network Security",
+ [3]byte{0, 8, 43}: "Wooksung Electronics, Inc.",
+ [3]byte{0, 8, 44}: "Homag AG",
+ [3]byte{0, 8, 45}: "Indus Teqsite Private Limited",
+ [3]byte{0, 8, 46}: "Multitone Electronics PLC",
+ [3]byte{0, 8, 47}: "Cisco Systems, Inc",
+ [3]byte{0, 8, 48}: "Cisco Systems, Inc",
+ [3]byte{0, 8, 49}: "Cisco Systems, Inc",
+ [3]byte{0, 8, 50}: "Cisco Systems, Inc",
+ [3]byte{0, 8, 78}: "DivergeNet, Inc.",
+ [3]byte{0, 8, 79}: "Qualstar Corporation",
+ [3]byte{0, 8, 80}: "Arizona Instrument Corp.",
+ [3]byte{0, 8, 81}: "Canadian Bank Note Company, Ltd.",
+ [3]byte{0, 8, 82}: "Davolink Co. Inc.",
+ [3]byte{0, 8, 83}: "Schleicher GmbH & Co. Relaiswerke KG",
+ [3]byte{0, 8, 84}: "Netronix, Inc.",
+ [3]byte{0, 8, 85}: "NASA-Goddard Space Flight Center",
+ [3]byte{0, 8, 86}: "Gamatronic Electronic Industries Ltd.",
+ [3]byte{0, 8, 87}: "Polaris Networks, Inc.",
+ [3]byte{0, 8, 88}: "Novatechnology Inc.",
+ [3]byte{0, 8, 89}: "ShenZhen Unitone Electronics Co., Ltd.",
+ [3]byte{0, 8, 90}: "IntiGate Inc.",
+ [3]byte{0, 8, 91}: "Hanbit Electronics Co., Ltd.",
+ [3]byte{0, 8, 92}: "Shanghai Dare Technologies Co. Ltd.",
+ [3]byte{0, 8, 93}: "Aastra",
+ [3]byte{0, 8, 94}: "PCO AG",
+ [3]byte{0, 8, 95}: "Picanol N.V.",
+ [3]byte{0, 8, 96}: "LodgeNet Entertainment Corp.",
+ [3]byte{0, 8, 97}: "SoftEnergy Co., Ltd.",
+ [3]byte{0, 8, 98}: "NEC Eluminant Technologies, Inc.",
+ [3]byte{0, 8, 99}: "Entrisphere Inc.",
+ [3]byte{0, 8, 100}: "Fasy S.p.A.",
+ [3]byte{0, 8, 101}: "JASCOM CO., LTD",
+ [3]byte{0, 8, 102}: "DSX Access Systems, Inc.",
+ [3]byte{0, 8, 103}: "Uptime Devices",
+ [3]byte{0, 8, 104}: "PurOptix",
+ [3]byte{0, 8, 105}: "Command-e Technology Co.,Ltd.",
+ [3]byte{0, 8, 106}: "Securiton Gmbh",
+ [3]byte{0, 8, 107}: "MIPSYS",
+ [3]byte{0, 8, 108}: "Plasmon LMS",
+ [3]byte{0, 8, 109}: "Missouri FreeNet",
+ [3]byte{0, 8, 110}: "Hyglo AB",
+ [3]byte{0, 8, 111}: "Resources Computer Network Ltd.",
+ [3]byte{0, 8, 112}: "Rasvia Systems, Inc.",
+ [3]byte{0, 8, 113}: "NORTHDATA Co., Ltd.",
+ [3]byte{0, 8, 114}: "Sorenson Communications",
+ [3]byte{0, 8, 115}: "DapTechnology B.V.",
+ [3]byte{0, 8, 116}: "Dell Inc.",
+ [3]byte{0, 8, 117}: "Acorp Electronics Corp.",
+ [3]byte{0, 8, 118}: "SDSystem",
+ [3]byte{0, 8, 119}: "Liebert-Hiross Spa",
+ [3]byte{0, 8, 120}: "Benchmark Storage Innovations",
+ [3]byte{0, 8, 121}: "CEM Corporation",
+ [3]byte{0, 8, 122}: "Wipotec GmbH",
+ [3]byte{0, 8, 123}: "RTX Telecom A/S",
+ [3]byte{0, 8, 124}: "Cisco Systems, Inc",
+ [3]byte{0, 8, 125}: "Cisco Systems, Inc",
+ [3]byte{0, 8, 126}: "Bon Electro-Telecom Inc.",
+ [3]byte{0, 8, 127}: "SPAUN electronic GmbH & Co. KG",
+ [3]byte{0, 8, 128}: "BroadTel Canada Communications inc.",
+ [3]byte{0, 8, 129}: "DIGITAL HANDS CO.,LTD.",
+ [3]byte{0, 8, 130}: "SIGMA CORPORATION",
+ [3]byte{0, 8, 131}: "Hewlett Packard",
+ [3]byte{0, 8, 132}: "Index Braille AB",
+ [3]byte{0, 8, 133}: "EMS Dr. Thomas Wünsche",
+ [3]byte{0, 8, 134}: "Hansung Teliann, Inc.",
+ [3]byte{0, 8, 135}: "Maschinenfabrik Reinhausen GmbH",
+ [3]byte{0, 8, 136}: "OULLIM Information Technology Inc,.",
+ [3]byte{0, 8, 137}: "Echostar Technologies Corp",
+ [3]byte{0, 8, 138}: "Minds@Work",
+ [3]byte{0, 8, 139}: "Tropic Networks Inc.",
+ [3]byte{0, 8, 140}: "Quanta Network Systems Inc.",
+ [3]byte{0, 8, 141}: "Sigma-Links Inc.",
+ [3]byte{0, 8, 142}: "Nihon Computer Co., Ltd.",
+ [3]byte{0, 8, 143}: "ADVANCED DIGITAL TECHNOLOGY",
+ [3]byte{0, 8, 144}: "AVILINKS SA",
+ [3]byte{0, 8, 145}: "Lyan Inc.",
+ [3]byte{0, 8, 146}: "EM Solutions",
+ [3]byte{0, 8, 147}: "LE INFORMATION COMMUNICATION INC.",
+ [3]byte{0, 8, 148}: "InnoVISION Multimedia Ltd.",
+ [3]byte{0, 8, 149}: "DIRC Technologie GmbH & Co.KG",
+ [3]byte{0, 8, 150}: "Printronix, Inc.",
+ [3]byte{0, 8, 151}: "Quake Technologies",
+ [3]byte{0, 8, 152}: "Gigabit Optics Corporation",
+ [3]byte{0, 8, 153}: "Netbind, Inc.",
+ [3]byte{0, 8, 154}: "Alcatel Microelectronics",
+ [3]byte{0, 8, 155}: "ICP Electronics Inc.",
+ [3]byte{0, 8, 156}: "Elecs Industry Co., Ltd.",
+ [3]byte{0, 8, 157}: "UHD-Elektronik",
+ [3]byte{0, 8, 158}: "Beijing Enter-Net co.LTD",
+ [3]byte{0, 8, 159}: "EFM Networks",
+ [3]byte{0, 8, 160}: "Stotz Feinmesstechnik GmbH",
+ [3]byte{0, 8, 161}: "CNet Technology Inc.",
+ [3]byte{0, 8, 162}: "ADI Engineering, Inc.",
+ [3]byte{0, 8, 163}: "Cisco Systems, Inc",
+ [3]byte{0, 8, 164}: "Cisco Systems, Inc",
+ [3]byte{0, 8, 165}: "Peninsula Systems Inc.",
+ [3]byte{0, 8, 166}: "Multiware & Image Co., Ltd.",
+ [3]byte{0, 8, 167}: "iLogic Inc.",
+ [3]byte{0, 8, 168}: "Systec Co., Ltd.",
+ [3]byte{0, 8, 169}: "SangSang Technology, Inc.",
+ [3]byte{0, 8, 170}: "KARAM",
+ [3]byte{0, 8, 171}: "EnerLinx.com, Inc.",
+ [3]byte{0, 8, 172}: "Eltromat GmbH",
+ [3]byte{0, 8, 173}: "Toyo-Linx Co., Ltd.",
+ [3]byte{0, 8, 174}: "PacketFront Network Products AB",
+ [3]byte{0, 8, 175}: "Novatec Corporation",
+ [3]byte{0, 8, 176}: "BKtel communications GmbH",
+ [3]byte{0, 8, 177}: "ProQuent Systems",
+ [3]byte{0, 8, 178}: "SHENZHEN COMPASS TECHNOLOGY DEVELOPMENT CO.,LTD",
+ [3]byte{0, 8, 179}: "Fastwel",
+ [3]byte{0, 8, 180}: "SYSPOL",
+ [3]byte{0, 8, 181}: "TAI GUEN ENTERPRISE CO., LTD",
+ [3]byte{0, 8, 182}: "RouteFree, Inc.",
+ [3]byte{0, 8, 183}: "HIT Incorporated",
+ [3]byte{0, 8, 184}: "E.F. Johnson",
+ [3]byte{0, 8, 185}: "Kaonmedia CO., LTD.",
+ [3]byte{0, 8, 186}: "Erskine Systems Ltd",
+ [3]byte{0, 8, 187}: "NetExcell",
+ [3]byte{0, 8, 188}: "Ilevo AB",
+ [3]byte{0, 8, 189}: "TEPG-US",
+ [3]byte{0, 8, 190}: "XENPAK MSA Group",
+ [3]byte{0, 8, 191}: "Aptus Elektronik AB",
+ [3]byte{0, 8, 192}: "ASA SYSTEMS",
+ [3]byte{0, 8, 193}: "Avistar Communications Corporation",
+ [3]byte{0, 8, 194}: "Cisco Systems, Inc",
+ [3]byte{0, 8, 195}: "Contex A/S",
+ [3]byte{0, 8, 196}: "Hikari Co.,Ltd.",
+ [3]byte{0, 8, 197}: "Liontech Co., Ltd.",
+ [3]byte{0, 8, 198}: "Philips Consumer Communications",
+ [3]byte{0, 8, 199}: "Hewlett Packard",
+ [3]byte{0, 8, 200}: "Soneticom, Inc.",
+ [3]byte{0, 8, 201}: "TechniSat Digital GmbH Daun",
+ [3]byte{0, 8, 202}: "TwinHan Technology Co.,Ltd",
+ [3]byte{0, 8, 203}: "Zeta Broadband Inc.",
+ [3]byte{0, 8, 204}: "Remotec, Inc.",
+ [3]byte{0, 8, 205}: "With-Net Inc",
+ [3]byte{0, 8, 206}: "IPMobileNet Inc.",
+ [3]byte{0, 8, 207}: "Nippon Koei Power Systems Co., Ltd.",
+ [3]byte{0, 8, 208}: "Musashi Engineering Co., LTD.",
+ [3]byte{0, 8, 209}: "KAREL INC.",
+ [3]byte{0, 8, 210}: "ZOOM Networks Inc.",
+ [3]byte{0, 8, 211}: "Hercules Technologies S.A.S.",
+ [3]byte{0, 8, 212}: "IneoQuest Technologies, Inc",
+ [3]byte{0, 8, 213}: "Vanguard Networks Solutions, LLC",
+ [3]byte{0, 8, 214}: "HASSNET Inc.",
+ [3]byte{0, 8, 215}: "HOW CORPORATION",
+ [3]byte{0, 8, 216}: "Dowkey Microwave",
+ [3]byte{0, 8, 217}: "Mitadenshi Co.,LTD",
+ [3]byte{0, 8, 218}: "SofaWare Technologies Ltd.",
+ [3]byte{0, 8, 219}: "Corrigent Systems",
+ [3]byte{0, 8, 220}: "Wiznet",
+ [3]byte{0, 8, 221}: "Telena Communications, Inc.",
+ [3]byte{0, 8, 222}: "3UP Systems",
+ [3]byte{0, 8, 223}: "Alistel Inc.",
+ [3]byte{0, 8, 224}: "ATO Technology Ltd.",
+ [3]byte{0, 8, 225}: "Barix AG",
+ [3]byte{0, 8, 226}: "Cisco Systems, Inc",
+ [3]byte{0, 8, 227}: "Cisco Systems, Inc",
+ [3]byte{0, 8, 228}: "Envenergy Inc",
+ [3]byte{0, 8, 229}: "IDK Corporation",
+ [3]byte{0, 8, 230}: "Littlefeet",
+ [3]byte{0, 8, 231}: "SHI ControlSystems,Ltd.",
+ [3]byte{0, 8, 232}: "Excel Master Ltd.",
+ [3]byte{0, 8, 233}: "NextGig",
+ [3]byte{0, 8, 234}: "Motion Control Engineering, Inc",
+ [3]byte{0, 8, 235}: "ROMWin Co.,Ltd.",
+ [3]byte{0, 8, 236}: "Optical Zonu Corporation",
+ [3]byte{0, 8, 237}: "ST&T Instrument Corp.",
+ [3]byte{0, 8, 238}: "Logic Product Development",
+ [3]byte{0, 8, 239}: "DIBAL,S.A.",
+ [3]byte{0, 8, 240}: "Next Generation Systems, Inc.",
+ [3]byte{0, 8, 241}: "Voltaire",
+ [3]byte{0, 8, 242}: "C&S Technology",
+ [3]byte{0, 8, 243}: "WANY",
+ [3]byte{0, 8, 244}: "Bluetake Technology Co., Ltd.",
+ [3]byte{0, 8, 245}: "YESTECHNOLOGY Co.,Ltd.",
+ [3]byte{0, 8, 246}: "Sumitomo Electric Industries,Ltd",
+ [3]byte{0, 8, 247}: "Hitachi Ltd, Semiconductor & Integrated Circuits Gr",
+ [3]byte{0, 8, 248}: "UTC CCS",
+ [3]byte{0, 8, 249}: "Artesyn Embedded Technologies",
+ [3]byte{0, 8, 250}: "KEB Automation KG",
+ [3]byte{0, 8, 251}: "SonoSite, Inc.",
+ [3]byte{0, 8, 252}: "Gigaphoton Inc.",
+ [3]byte{0, 8, 253}: "BlueKorea Co., Ltd.",
+ [3]byte{0, 8, 254}: "UNIK C&C Co.,Ltd.",
+ [3]byte{0, 8, 255}: "Trilogy Communications Ltd",
+ [3]byte{0, 9, 0}: "TMT",
+ [3]byte{0, 9, 1}: "Shenzhen Shixuntong Information & Technoligy Co",
+ [3]byte{0, 9, 2}: "Redline Communications Inc.",
+ [3]byte{0, 9, 3}: "Panasas, Inc",
+ [3]byte{0, 9, 4}: "MONDIAL electronic",
+ [3]byte{0, 9, 5}: "iTEC Technologies Ltd.",
+ [3]byte{0, 9, 6}: "Esteem Networks",
+ [3]byte{0, 9, 7}: "Chrysalis Development",
+ [3]byte{0, 9, 8}: "VTech Technology Corp.",
+ [3]byte{0, 9, 9}: "Telenor Connect A/S",
+ [3]byte{0, 9, 10}: "SnedFar Technology Co., Ltd.",
+ [3]byte{0, 9, 11}: "MTL Instruments PLC",
+ [3]byte{0, 9, 12}: "Mayekawa Mfg. Co. Ltd.",
+ [3]byte{0, 9, 13}: "LEADER ELECTRONICS CORP.",
+ [3]byte{0, 9, 14}: "Helix Technology Inc.",
+ [3]byte{0, 9, 15}: "Fortinet Inc.",
+ [3]byte{0, 9, 16}: "Simple Access Inc.",
+ [3]byte{0, 9, 17}: "Cisco Systems, Inc",
+ [3]byte{0, 9, 18}: "Cisco Systems, Inc",
+ [3]byte{0, 9, 19}: "SystemK Corporation",
+ [3]byte{0, 9, 20}: "COMPUTROLS INC.",
+ [3]byte{0, 9, 21}: "CAS Corp.",
+ [3]byte{0, 9, 22}: "Listman Home Technologies, Inc.",
+ [3]byte{0, 9, 23}: "WEM Technology Inc",
+ [3]byte{0, 9, 24}: "SAMSUNG TECHWIN CO.,LTD",
+ [3]byte{0, 9, 25}: "MDS Gateways",
+ [3]byte{0, 9, 26}: "Macat Optics & Electronics Co., Ltd.",
+ [3]byte{0, 9, 27}: "Digital Generation Inc.",
+ [3]byte{0, 9, 28}: "CacheVision, Inc",
+ [3]byte{0, 9, 29}: "Proteam Computer Corporation",
+ [3]byte{0, 9, 30}: "Firstech Technology Corp.",
+ [3]byte{0, 9, 31}: "A&D Co., Ltd.",
+ [3]byte{0, 9, 32}: "EpoX COMPUTER CO.,LTD.",
+ [3]byte{0, 9, 33}: "Planmeca Oy",
+ [3]byte{0, 9, 34}: "TST Biometrics GmbH",
+ [3]byte{0, 9, 35}: "Heaman System Co., Ltd",
+ [3]byte{0, 9, 36}: "Telebau GmbH",
+ [3]byte{0, 9, 37}: "VSN Systemen BV",
+ [3]byte{0, 9, 38}: "YODA COMMUNICATIONS, INC.",
+ [3]byte{0, 9, 39}: "TOYOKEIKI CO.,LTD.",
+ [3]byte{0, 9, 40}: "Telecore",
+ [3]byte{0, 9, 41}: "Sanyo Industries (UK) Limited",
+ [3]byte{0, 9, 42}: "MYTECS Co.,Ltd.",
+ [3]byte{0, 9, 43}: "iQstor Networks, Inc.",
+ [3]byte{0, 9, 44}: "Hitpoint Inc.",
+ [3]byte{0, 9, 45}: "HTC Corporation",
+ [3]byte{0, 9, 46}: "B&Tech System Inc.",
+ [3]byte{0, 9, 47}: "Akom Technology Corporation",
+ [3]byte{0, 9, 48}: "AeroConcierge Inc.",
+ [3]byte{0, 9, 49}: "Future Internet, Inc.",
+ [3]byte{0, 9, 50}: "Omnilux",
+ [3]byte{0, 9, 51}: "Ophit Co.Ltd.",
+ [3]byte{0, 9, 52}: "Dream-Multimedia-Tv GmbH",
+ [3]byte{0, 9, 53}: "Sandvine Incorporated",
+ [3]byte{0, 9, 54}: "Ipetronik GmbH & Co. KG",
+ [3]byte{0, 9, 55}: "Inventec Appliance Corp",
+ [3]byte{0, 9, 56}: "Allot Communications",
+ [3]byte{0, 9, 57}: "ShibaSoku Co.,Ltd.",
+ [3]byte{0, 9, 58}: "Molex",
+ [3]byte{0, 9, 59}: "HYUNDAI NETWORKS INC.",
+ [3]byte{0, 9, 60}: "Jacques Technologies P/L",
+ [3]byte{0, 9, 61}: "Newisys,Inc.",
+ [3]byte{0, 9, 62}: "C&I Technologies",
+ [3]byte{0, 9, 63}: "Double-Win Enterpirse CO., LTD",
+ [3]byte{0, 9, 64}: "AGFEO GmbH & Co. KG",
+ [3]byte{0, 9, 65}: "Allied Telesis R&D Center K.K.",
+ [3]byte{0, 9, 66}: "Wireless Technologies, Inc",
+ [3]byte{0, 9, 67}: "Cisco Systems, Inc",
+ [3]byte{0, 9, 68}: "Cisco Systems, Inc",
+ [3]byte{0, 9, 69}: "Palmmicro Communications Inc",
+ [3]byte{0, 9, 70}: "Cluster Labs GmbH",
+ [3]byte{0, 9, 71}: "Aztek, Inc.",
+ [3]byte{0, 9, 72}: "Vista Control Systems, Corp.",
+ [3]byte{0, 9, 73}: "Glyph Technologies Inc.",
+ [3]byte{0, 9, 74}: "Homenet Communications",
+ [3]byte{0, 9, 75}: "FillFactory NV",
+ [3]byte{0, 9, 76}: "Communication Weaver Co.,Ltd.",
+ [3]byte{0, 9, 77}: "Braintree Communications Pty Ltd",
+ [3]byte{0, 9, 78}: "BARTECH SYSTEMS INTERNATIONAL, INC",
+ [3]byte{0, 9, 79}: "elmegt GmbH & Co. KG",
+ [3]byte{0, 9, 80}: "Independent Storage Corporation",
+ [3]byte{0, 9, 81}: "Apogee Imaging Systems",
+ [3]byte{0, 9, 82}: "Auerswald GmbH & Co. KG",
+ [3]byte{0, 9, 83}: "Linkage System Integration Co.Ltd.",
+ [3]byte{0, 9, 84}: "AMiT spol. s. r. o.",
+ [3]byte{0, 9, 85}: "Young Generation International Corp.",
+ [3]byte{0, 9, 86}: "Network Systems Group, Ltd. (NSG)",
+ [3]byte{0, 9, 87}: "Supercaller, Inc.",
+ [3]byte{0, 9, 88}: "INTELNET S.A.",
+ [3]byte{0, 9, 89}: "Sitecsoft",
+ [3]byte{0, 9, 90}: "RACEWOOD TECHNOLOGY",
+ [3]byte{0, 9, 91}: "NETGEAR",
+ [3]byte{0, 9, 92}: "Philips Medical Systems - Cardiac and Monitoring Systems (CM",
+ [3]byte{0, 9, 93}: "Dialogue Technology Corp.",
+ [3]byte{0, 9, 94}: "Masstech Group Inc.",
+ [3]byte{0, 9, 95}: "Telebyte, Inc.",
+ [3]byte{0, 9, 96}: "YOZAN Inc.",
+ [3]byte{0, 9, 97}: "Switchgear and Instrumentation Ltd",
+ [3]byte{0, 9, 98}: "Sonitor Technologies AS",
+ [3]byte{0, 9, 99}: "Dominion Lasercom Inc.",
+ [3]byte{0, 9, 100}: "Hi-Techniques, Inc.",
+ [3]byte{0, 9, 101}: "HyunJu Computer Co., Ltd.",
+ [3]byte{0, 9, 102}: "TRIMBLE EUROPE BV",
+ [3]byte{0, 9, 103}: "Tachyon, Inc",
+ [3]byte{0, 9, 104}: "TECHNOVENTURE, INC.",
+ [3]byte{0, 9, 105}: "Meret Optical Communications",
+ [3]byte{0, 9, 106}: "Cloverleaf Communications Inc.",
+ [3]byte{0, 9, 107}: "IBM Corp",
+ [3]byte{0, 9, 108}: "Imedia Semiconductor Corp.",
+ [3]byte{0, 9, 109}: "Powernet Technologies Corp.",
+ [3]byte{0, 9, 110}: "GIANT ELECTRONICS LTD.",
+ [3]byte{0, 9, 111}: "Beijing Zhongqing Elegant Tech. Corp.,Limited",
+ [3]byte{0, 9, 112}: "Vibration Research Corporation",
+ [3]byte{0, 9, 113}: "Time Management, Inc.",
+ [3]byte{0, 9, 114}: "Securebase,Inc",
+ [3]byte{0, 9, 115}: "Lenten Technology Co., Ltd.",
+ [3]byte{0, 9, 116}: "Innopia Technologies, Inc.",
+ [3]byte{0, 9, 117}: "fSONA Communications Corporation",
+ [3]byte{0, 9, 118}: "Datasoft ISDN Systems GmbH",
+ [3]byte{0, 9, 119}: "Brunner Elektronik AG",
+ [3]byte{0, 9, 120}: "AIJI System Co., Ltd.",
+ [3]byte{0, 9, 121}: "Advanced Television Systems Committee, Inc.",
+ [3]byte{0, 9, 122}: "Louis Design Labs.",
+ [3]byte{0, 9, 123}: "Cisco Systems, Inc",
+ [3]byte{0, 9, 124}: "Cisco Systems, Inc",
+ [3]byte{0, 9, 125}: "SecWell Networks Oy",
+ [3]byte{0, 9, 126}: "IMI TECHNOLOGY CO., LTD",
+ [3]byte{0, 9, 127}: "Vsecure 2000 LTD.",
+ [3]byte{0, 9, 128}: "Power Zenith Inc.",
+ [3]byte{0, 9, 129}: "Newport Networks",
+ [3]byte{0, 9, 130}: "Loewe Opta GmbH",
+ [3]byte{0, 9, 131}: "GlobalTop Technology, Inc.",
+ [3]byte{0, 9, 132}: "MyCasa Network Inc.",
+ [3]byte{0, 9, 133}: "Auto Telecom Company",
+ [3]byte{0, 9, 134}: "Metalink LTD.",
+ [3]byte{0, 9, 135}: "NISHI NIPPON ELECTRIC WIRE & CABLE CO.,LTD.",
+ [3]byte{0, 9, 136}: "Nudian Electron Co., Ltd.",
+ [3]byte{0, 9, 137}: "VividLogic Inc.",
+ [3]byte{0, 9, 138}: "EqualLogic Inc",
+ [3]byte{0, 9, 139}: "Entropic Communications, Inc.",
+ [3]byte{0, 9, 140}: "Option Wireless Sweden",
+ [3]byte{0, 9, 141}: "Velocity Semiconductor",
+ [3]byte{0, 9, 142}: "ipcas GmbH",
+ [3]byte{0, 9, 143}: "Cetacean Networks",
+ [3]byte{0, 9, 144}: "ACKSYS Communications & systems",
+ [3]byte{0, 9, 145}: "GE Fanuc Automation Manufacturing, Inc.",
+ [3]byte{0, 9, 146}: "InterEpoch Technology,INC.",
+ [3]byte{0, 9, 147}: "Visteon Corporation",
+ [3]byte{0, 9, 148}: "Cronyx Engineering",
+ [3]byte{0, 9, 149}: "Castle Technology Ltd",
+ [3]byte{0, 9, 150}: "RDI",
+ [3]byte{0, 9, 151}: "Nortel Networks",
+ [3]byte{0, 9, 152}: "Capinfo Company Limited",
+ [3]byte{0, 9, 153}: "CP GEORGES RENAULT",
+ [3]byte{0, 9, 154}: "ELMO COMPANY, LIMITED",
+ [3]byte{0, 9, 155}: "Western Telematic Inc.",
+ [3]byte{0, 9, 156}: "Naval Research Laboratory",
+ [3]byte{0, 9, 157}: "Haliplex Communications",
+ [3]byte{0, 9, 158}: "Testech, Inc.",
+ [3]byte{0, 9, 159}: "VIDEX INC.",
+ [3]byte{0, 9, 160}: "Microtechno Corporation",
+ [3]byte{0, 9, 161}: "Telewise Communications, Inc.",
+ [3]byte{0, 9, 162}: "Interface Co., Ltd.",
+ [3]byte{0, 9, 163}: "Leadfly Techologies Corp. Ltd.",
+ [3]byte{0, 9, 164}: "HARTEC Corporation",
+ [3]byte{0, 9, 165}: "HANSUNG ELETRONIC INDUSTRIES DEVELOPMENT CO., LTD",
+ [3]byte{0, 9, 166}: "Ignis Optics, Inc.",
+ [3]byte{0, 9, 167}: "Bang & Olufsen A/S",
+ [3]byte{0, 9, 168}: "Eastmode Pte Ltd",
+ [3]byte{0, 9, 169}: "Ikanos Communications",
+ [3]byte{0, 9, 170}: "Data Comm for Business, Inc.",
+ [3]byte{0, 9, 171}: "Netcontrol Oy",
+ [3]byte{0, 9, 172}: "LANVOICE",
+ [3]byte{0, 9, 173}: "HYUNDAI SYSCOMM, INC.",
+ [3]byte{0, 9, 174}: "OKANO ELECTRIC CO.,LTD",
+ [3]byte{0, 9, 175}: "e-generis",
+ [3]byte{0, 9, 176}: "Onkyo Corporation",
+ [3]byte{0, 9, 177}: "Kanematsu Electronics, Ltd.",
+ [3]byte{0, 9, 178}: "L&F Inc.",
+ [3]byte{0, 9, 179}: "MCM Systems Ltd",
+ [3]byte{0, 9, 180}: "KISAN TELECOM CO., LTD.",
+ [3]byte{0, 9, 181}: "3J Tech. Co., Ltd.",
+ [3]byte{0, 9, 182}: "Cisco Systems, Inc",
+ [3]byte{0, 9, 183}: "Cisco Systems, Inc",
+ [3]byte{0, 9, 184}: "Entise Systems",
+ [3]byte{0, 9, 185}: "Action Imaging Solutions",
+ [3]byte{0, 9, 186}: "MAKU Informationstechik GmbH",
+ [3]byte{0, 9, 187}: "MathStar, Inc.",
+ [3]byte{0, 9, 188}: "Utility, Inc",
+ [3]byte{0, 9, 189}: "Epygi Technologies, Ltd.",
+ [3]byte{0, 9, 190}: "Mamiya-OP Co.,Ltd.",
+ [3]byte{0, 9, 191}: "Nintendo Co., Ltd.",
+ [3]byte{0, 9, 192}: "6WIND",
+ [3]byte{0, 9, 193}: "PROCES-DATA A/S",
+ [3]byte{0, 9, 194}: "Onity, Inc.",
+ [3]byte{0, 9, 195}: "NETAS",
+ [3]byte{0, 9, 196}: "Medicore Co., Ltd",
+ [3]byte{0, 9, 197}: "KINGENE Technology Corporation",
+ [3]byte{0, 9, 198}: "Visionics Corporation",
+ [3]byte{0, 9, 199}: "Movistec",
+ [3]byte{0, 9, 200}: "SINAGAWA TSUSHIN KEISOU SERVICE",
+ [3]byte{0, 9, 201}: "BlueWINC Co., Ltd.",
+ [3]byte{0, 9, 202}: "iMaxNetworks(Shenzhen)Limited.",
+ [3]byte{0, 9, 203}: "HBrain",
+ [3]byte{0, 9, 204}: "Moog GmbH",
+ [3]byte{0, 9, 205}: "HUDSON SOFT CO.,LTD.",
+ [3]byte{0, 9, 206}: "SpaceBridge Semiconductor Corp.",
+ [3]byte{0, 9, 207}: "iAd GmbH",
+ [3]byte{0, 9, 208}: "Solacom Technologies Inc.",
+ [3]byte{0, 9, 209}: "SERANOA NETWORKS INC",
+ [3]byte{0, 9, 210}: "Mai Logic Inc.",
+ [3]byte{0, 9, 211}: "Western DataCom Co., Inc.",
+ [3]byte{0, 9, 212}: "Transtech Networks",
+ [3]byte{0, 9, 213}: "Signal Communication, Inc.",
+ [3]byte{0, 9, 214}: "KNC One GmbH",
+ [3]byte{0, 9, 215}: "DC Security Products",
+ [3]byte{0, 9, 216}: "Fält Communications AB",
+ [3]byte{0, 9, 217}: "Neoscale Systems, Inc",
+ [3]byte{0, 9, 218}: "Control Module Inc.",
+ [3]byte{0, 9, 219}: "eSpace",
+ [3]byte{0, 9, 220}: "Galaxis Technology AG",
+ [3]byte{0, 9, 221}: "Mavin Technology Inc.",
+ [3]byte{0, 9, 222}: "Samjin Information & Communications Co., Ltd.",
+ [3]byte{0, 9, 223}: "Vestel Komunikasyon Sanayi ve Ticaret A.S.",
+ [3]byte{0, 9, 224}: "XEMICS S.A.",
+ [3]byte{0, 9, 225}: "Gemtek Technology Co., Ltd.",
+ [3]byte{0, 9, 226}: "Sinbon Electronics Co., Ltd.",
+ [3]byte{0, 9, 227}: "Angel Iglesias S.A.",
+ [3]byte{0, 9, 228}: "K Tech Infosystem Inc.",
+ [3]byte{0, 9, 229}: "Hottinger Baldwin Messtechnik GmbH",
+ [3]byte{0, 9, 230}: "Cyber Switching Inc.",
+ [3]byte{0, 9, 231}: "ADC Techonology",
+ [3]byte{0, 9, 232}: "Cisco Systems, Inc",
+ [3]byte{0, 9, 233}: "Cisco Systems, Inc",
+ [3]byte{0, 9, 234}: "YEM Inc.",
+ [3]byte{0, 9, 235}: "HuMANDATA LTD.",
+ [3]byte{0, 9, 236}: "Daktronics, Inc.",
+ [3]byte{0, 9, 237}: "CipherOptics",
+ [3]byte{0, 9, 238}: "MEIKYO ELECTRIC CO.,LTD",
+ [3]byte{0, 9, 239}: "Vocera Communications",
+ [3]byte{0, 9, 240}: "Shimizu Technology Inc.",
+ [3]byte{0, 9, 241}: "Yamaki Electric Corporation",
+ [3]byte{0, 9, 242}: "Cohu, Inc., Electronics Division",
+ [3]byte{0, 9, 243}: "WELL Communication Corp.",
+ [3]byte{0, 9, 244}: "Alcon Laboratories, Inc.",
+ [3]byte{0, 9, 245}: "Emerson Network Power Co.,Ltd",
+ [3]byte{0, 9, 246}: "Shenzhen Eastern Digital Tech Ltd.",
+ [3]byte{0, 9, 247}: "SED, a division of Calian",
+ [3]byte{0, 9, 248}: "UNIMO TECHNOLOGY CO., LTD.",
+ [3]byte{0, 9, 249}: "ART JAPAN CO., LTD.",
+ [3]byte{0, 9, 251}: "Philips Patient Monitoring",
+ [3]byte{0, 9, 252}: "IPFLEX Inc.",
+ [3]byte{0, 9, 253}: "Ubinetics Limited",
+ [3]byte{0, 9, 254}: "Daisy Technologies, Inc.",
+ [3]byte{0, 9, 255}: "X.net 2000 GmbH",
+ [3]byte{0, 10, 0}: "Mediatek Corp.",
+ [3]byte{0, 10, 1}: "SOHOware, Inc.",
+ [3]byte{0, 10, 2}: "ANNSO CO., LTD.",
+ [3]byte{0, 10, 3}: "ENDESA SERVICIOS, S.L.",
+ [3]byte{0, 10, 4}: "3Com Ltd",
+ [3]byte{0, 10, 5}: "Widax Corp.",
+ [3]byte{0, 10, 6}: "Teledex LLC",
+ [3]byte{0, 10, 7}: "WebWayOne Ltd",
+ [3]byte{0, 10, 8}: "Alpine Electronics, Inc.",
+ [3]byte{0, 10, 9}: "TaraCom Integrated Products, Inc.",
+ [3]byte{0, 10, 10}: "SUNIX Co., Ltd.",
+ [3]byte{0, 10, 11}: "Sealevel Systems, Inc.",
+ [3]byte{0, 10, 12}: "Scientific Research Corporation",
+ [3]byte{0, 10, 13}: "FCI Deutschland GmbH",
+ [3]byte{0, 10, 14}: "Invivo Research Inc.",
+ [3]byte{0, 10, 15}: "Ilryung Telesys, Inc",
+ [3]byte{0, 10, 16}: "FAST media integrations AG",
+ [3]byte{0, 10, 17}: "ExPet Technologies, Inc",
+ [3]byte{0, 10, 18}: "Azylex Technology, Inc",
+ [3]byte{0, 10, 19}: "Honeywell Video Systems",
+ [3]byte{0, 10, 20}: "TECO a.s.",
+ [3]byte{0, 10, 21}: "Silicon Data, Inc",
+ [3]byte{0, 10, 22}: "Lassen Research",
+ [3]byte{0, 10, 23}: "NESTAR COMMUNICATIONS, INC",
+ [3]byte{0, 10, 24}: "Vichel Inc.",
+ [3]byte{0, 10, 25}: "Valere Power, Inc.",
+ [3]byte{0, 10, 26}: "Imerge Ltd",
+ [3]byte{0, 10, 27}: "Stream Labs",
+ [3]byte{0, 10, 28}: "Bridge Information Co., Ltd.",
+ [3]byte{0, 10, 29}: "Optical Communications Products Inc.",
+ [3]byte{0, 10, 30}: "Red-M Products Limited",
+ [3]byte{0, 10, 31}: "ART WARE Telecommunication Co., Ltd.",
+ [3]byte{0, 10, 32}: "SVA Networks, Inc.",
+ [3]byte{0, 10, 33}: "Integra Telecom Co. Ltd",
+ [3]byte{0, 10, 34}: "Amperion Inc",
+ [3]byte{0, 10, 35}: "Parama Networks Inc",
+ [3]byte{0, 10, 36}: "Octave Communications",
+ [3]byte{0, 10, 37}: "CERAGON NETWORKS",
+ [3]byte{0, 10, 38}: "CEIA S.p.A.",
+ [3]byte{0, 10, 39}: "Apple, Inc.",
+ [3]byte{0, 10, 40}: "Motorola",
+ [3]byte{0, 10, 41}: "Pan Dacom Networking AG",
+ [3]byte{0, 10, 42}: "QSI Systems Inc.",
+ [3]byte{0, 10, 43}: "Etherstuff",
+ [3]byte{0, 10, 44}: "Active Tchnology Corporation",
+ [3]byte{0, 10, 45}: "Cabot Communications Limited",
+ [3]byte{0, 10, 46}: "MAPLE NETWORKS CO., LTD",
+ [3]byte{0, 10, 47}: "Artnix Inc.",
+ [3]byte{0, 10, 48}: "Visteon Corporation",
+ [3]byte{0, 10, 49}: "HCV Consulting",
+ [3]byte{0, 10, 50}: "Xsido Corporation",
+ [3]byte{0, 10, 51}: "Emulex Corporation",
+ [3]byte{0, 10, 52}: "Identicard Systems Incorporated",
+ [3]byte{0, 10, 53}: "Xilinx",
+ [3]byte{0, 10, 54}: "Synelec Telecom Multimedia",
+ [3]byte{0, 10, 55}: "Procera Networks, Inc.",
+ [3]byte{0, 10, 56}: "Apani Networks",
+ [3]byte{0, 10, 57}: "LoPA Information Technology",
+ [3]byte{0, 10, 58}: "J-THREE INTERNATIONAL Holding Co., Ltd.",
+ [3]byte{0, 10, 59}: "GCT Semiconductor, Inc",
+ [3]byte{0, 10, 60}: "Enerpoint Ltd.",
+ [3]byte{0, 10, 61}: "Elo Sistemas Eletronicos S.A.",
+ [3]byte{0, 10, 62}: "EADS Telecom",
+ [3]byte{0, 10, 63}: "Data East Corporation",
+ [3]byte{0, 10, 64}: "Crown Audio -- Harmanm International",
+ [3]byte{0, 10, 65}: "Cisco Systems, Inc",
+ [3]byte{0, 10, 66}: "Cisco Systems, Inc",
+ [3]byte{0, 10, 67}: "Chunghwa Telecom Co., Ltd.",
+ [3]byte{0, 10, 68}: "Avery Dennison Deutschland GmbH",
+ [3]byte{0, 10, 69}: "Audio-Technica Corp.",
+ [3]byte{0, 10, 70}: "ARO WELDING TECHNOLOGIES SAS",
+ [3]byte{0, 10, 71}: "Allied Vision Technologies",
+ [3]byte{0, 10, 72}: "Albatron Technology",
+ [3]byte{0, 10, 73}: "F5 Networks, Inc.",
+ [3]byte{0, 10, 74}: "Targa Systems Ltd.",
+ [3]byte{0, 10, 75}: "DataPower Technology, Inc.",
+ [3]byte{0, 10, 76}: "Molecular Devices Corporation",
+ [3]byte{0, 10, 77}: "Noritz Corporation",
+ [3]byte{0, 10, 78}: "UNITEK Electronics INC.",
+ [3]byte{0, 10, 79}: "Brain Boxes Limited",
+ [3]byte{0, 10, 80}: "REMOTEK CORPORATION",
+ [3]byte{0, 10, 81}: "GyroSignal Technology Co., Ltd.",
+ [3]byte{0, 10, 82}: "AsiaRF Ltd.",
+ [3]byte{0, 10, 83}: "Intronics, Incorporated",
+ [3]byte{0, 10, 84}: "Laguna Hills, Inc.",
+ [3]byte{0, 10, 85}: "MARKEM Corporation",
+ [3]byte{0, 10, 86}: "HITACHI Maxell Ltd.",
+ [3]byte{0, 10, 87}: "Hewlett Packard",
+ [3]byte{0, 10, 88}: "Freyer & Siegel Elektronik GmbH & Co. KG",
+ [3]byte{0, 10, 89}: "HW server",
+ [3]byte{0, 10, 90}: "GreenNET Technologies Co.,Ltd.",
+ [3]byte{0, 10, 91}: "Power-One as",
+ [3]byte{0, 10, 92}: "Carel s.p.a.",
+ [3]byte{0, 10, 93}: "FingerTec Worldwide Sdn Bhd",
+ [3]byte{0, 10, 94}: "3COM Corporation",
+ [3]byte{0, 10, 95}: "almedio inc.",
+ [3]byte{0, 10, 96}: "Autostar Technology Pte Ltd",
+ [3]byte{0, 10, 97}: "Cellinx Systems Inc.",
+ [3]byte{0, 10, 98}: "Crinis Networks, Inc.",
+ [3]byte{0, 10, 99}: "DHD GmbH",
+ [3]byte{0, 10, 100}: "Eracom Technologies",
+ [3]byte{0, 10, 101}: "GentechMedia.co.,ltd.",
+ [3]byte{0, 10, 102}: "MITSUBISHI ELECTRIC SYSTEM & SERVICE CO.,LTD.",
+ [3]byte{0, 10, 103}: "OngCorp",
+ [3]byte{0, 10, 104}: "Solarflare Communications Inc",
+ [3]byte{0, 10, 105}: "SUNNY bell Technology Co., Ltd.",
+ [3]byte{0, 10, 106}: "SVM Microwaves s.r.o.",
+ [3]byte{0, 10, 107}: "Tadiran Telecom Business Systems LTD",
+ [3]byte{0, 10, 108}: "Walchem Corporation",
+ [3]byte{0, 10, 109}: "EKS Elektronikservice GmbH",
+ [3]byte{0, 10, 110}: "Harmonic, Inc",
+ [3]byte{0, 10, 111}: "ZyFLEX Technologies Inc",
+ [3]byte{0, 10, 112}: "MPLS Forum",
+ [3]byte{0, 10, 113}: "Avrio Technologies, Inc",
+ [3]byte{0, 10, 114}: "STEC, INC.",
+ [3]byte{0, 10, 115}: "Scientific Atlanta",
+ [3]byte{0, 10, 116}: "Manticom Networks Inc.",
+ [3]byte{0, 10, 117}: "Caterpillar, Inc",
+ [3]byte{0, 10, 118}: "Beida Jade Bird Huaguang Technology Co.,Ltd",
+ [3]byte{0, 10, 119}: "Bluewire Technologies LLC",
+ [3]byte{0, 10, 120}: "OLITEC",
+ [3]byte{0, 10, 121}: "corega K.K",
+ [3]byte{0, 10, 122}: "Kyoritsu Electric Co., Ltd.",
+ [3]byte{0, 10, 123}: "Cornelius Consult",
+ [3]byte{0, 10, 124}: "Tecton Ltd",
+ [3]byte{0, 10, 125}: "Valo, Inc.",
+ [3]byte{0, 10, 126}: "The Advantage Group",
+ [3]byte{0, 10, 127}: "Teradon Industries, Inc",
+ [3]byte{0, 10, 128}: "Telkonet Inc.",
+ [3]byte{0, 10, 129}: "TEIMA Audiotex S.L.",
+ [3]byte{0, 10, 130}: "TATSUTA SYSTEM ELECTRONICS CO.,LTD.",
+ [3]byte{0, 10, 131}: "SALTO SYSTEMS S.L.",
+ [3]byte{0, 10, 132}: "Rainsun Enterprise Co., Ltd.",
+ [3]byte{0, 10, 133}: "PLAT'C2,Inc",
+ [3]byte{0, 10, 134}: "Lenze",
+ [3]byte{0, 10, 135}: "Integrated Micromachines Inc.",
+ [3]byte{0, 10, 136}: "InCypher S.A.",
+ [3]byte{0, 10, 137}: "Creval Systems, Inc.",
+ [3]byte{0, 10, 138}: "Cisco Systems, Inc",
+ [3]byte{0, 10, 139}: "Cisco Systems, Inc",
+ [3]byte{0, 10, 140}: "Guardware Systems Ltd.",
+ [3]byte{0, 10, 141}: "EUROTHERM LIMITED",
+ [3]byte{0, 10, 142}: "Invacom Ltd",
+ [3]byte{0, 10, 143}: "Aska International Inc.",
+ [3]byte{0, 10, 144}: "Bayside Interactive, Inc.",
+ [3]byte{0, 10, 145}: "HemoCue AB",
+ [3]byte{0, 10, 146}: "Presonus Corporation",
+ [3]byte{0, 10, 147}: "W2 Networks, Inc.",
+ [3]byte{0, 10, 148}: "ShangHai cellink CO., LTD",
+ [3]byte{0, 10, 149}: "Apple, Inc.",
+ [3]byte{0, 10, 150}: "MEWTEL TECHNOLOGY INC.",
+ [3]byte{0, 10, 151}: "SONICblue, Inc.",
+ [3]byte{0, 10, 152}: "M+F Gwinner GmbH & Co",
+ [3]byte{0, 10, 153}: "Calamp Wireless Networks Inc",
+ [3]byte{0, 10, 154}: "Aiptek International Inc",
+ [3]byte{0, 10, 155}: "TB Group Inc",
+ [3]byte{0, 10, 156}: "Server Technology, Inc.",
+ [3]byte{0, 10, 157}: "King Young Technology Co. Ltd.",
+ [3]byte{0, 10, 158}: "BroadWeb Corportation",
+ [3]byte{0, 10, 159}: "Pannaway Technologies, Inc.",
+ [3]byte{0, 10, 160}: "Cedar Point Communications",
+ [3]byte{0, 10, 161}: "V V S Limited",
+ [3]byte{0, 10, 162}: "SYSTEK INC.",
+ [3]byte{0, 10, 163}: "SHIMAFUJI ELECTRIC CO.,LTD.",
+ [3]byte{0, 10, 164}: "SHANGHAI SURVEILLANCE TECHNOLOGY CO,LTD",
+ [3]byte{0, 10, 165}: "MAXLINK INDUSTRIES LIMITED",
+ [3]byte{0, 10, 166}: "Hochiki Corporation",
+ [3]byte{0, 10, 167}: "FEI Electron Optics",
+ [3]byte{0, 10, 168}: "ePipe Pty. Ltd.",
+ [3]byte{0, 10, 169}: "Brooks Automation GmbH",
+ [3]byte{0, 10, 170}: "AltiGen Communications Inc.",
+ [3]byte{0, 10, 171}: "Toyota Technical Development Corporation",
+ [3]byte{0, 10, 172}: "TerraTec Electronic GmbH",
+ [3]byte{0, 10, 173}: "Stargames Corporation",
+ [3]byte{0, 10, 174}: "Rosemount Process Analytical",
+ [3]byte{0, 10, 175}: "Pipal Systems",
+ [3]byte{0, 10, 176}: "LOYTEC electronics GmbH",
+ [3]byte{0, 10, 177}: "GENETEC Corporation",
+ [3]byte{0, 10, 178}: "Fresnel Wireless Systems",
+ [3]byte{0, 10, 179}: "Fa. GIRA",
+ [3]byte{0, 10, 180}: "ETIC Telecommunications",
+ [3]byte{0, 10, 181}: "Digital Electronic Network",
+ [3]byte{0, 10, 182}: "COMPUNETIX, INC",
+ [3]byte{0, 10, 183}: "Cisco Systems, Inc",
+ [3]byte{0, 10, 184}: "Cisco Systems, Inc",
+ [3]byte{0, 10, 185}: "Astera Technologies Corp.",
+ [3]byte{0, 10, 186}: "Arcon Technology Limited",
+ [3]byte{0, 10, 187}: "Taiwan Secom Co,. Ltd",
+ [3]byte{0, 10, 188}: "Seabridge Ltd.",
+ [3]byte{0, 10, 189}: "Rupprecht & Patashnick Co.",
+ [3]byte{0, 10, 190}: "OPNET Technologies CO., LTD.",
+ [3]byte{0, 10, 191}: "HIROTA SS",
+ [3]byte{0, 10, 192}: "Fuyoh Video Industry CO., LTD.",
+ [3]byte{0, 10, 193}: "Futuretel",
+ [3]byte{0, 10, 194}: "Wuhan FiberHome Digital Technology Co.,Ltd.",
+ [3]byte{0, 10, 195}: "eM Technics Co., Ltd.",
+ [3]byte{0, 10, 196}: "Daewoo Teletech Co., Ltd",
+ [3]byte{0, 10, 197}: "Color Kinetics",
+ [3]byte{0, 10, 198}: "Overture Networks.",
+ [3]byte{0, 10, 199}: "Unication Group",
+ [3]byte{0, 10, 200}: "ZPSYS CO.,LTD. (Planning&Management)",
+ [3]byte{0, 10, 201}: "Zambeel Inc",
+ [3]byte{0, 10, 202}: "YOKOYAMA SHOKAI CO.,Ltd.",
+ [3]byte{0, 10, 203}: "XPAK MSA Group",
+ [3]byte{0, 10, 204}: "Winnow Networks, Inc.",
+ [3]byte{0, 10, 205}: "Sunrich Technology Limited",
+ [3]byte{0, 10, 206}: "RADIANTECH, INC.",
+ [3]byte{0, 10, 207}: "PROVIDEO Multimedia Co. Ltd.",
+ [3]byte{0, 10, 208}: "Niigata Develoment Center, F.I.T. Co., Ltd.",
+ [3]byte{0, 10, 209}: "MWS",
+ [3]byte{0, 10, 210}: "JEPICO Corporation",
+ [3]byte{0, 10, 211}: "INITECH Co., Ltd",
+ [3]byte{0, 10, 212}: "CoreBell Systems Inc.",
+ [3]byte{0, 10, 213}: "Brainchild Electronic Co., Ltd.",
+ [3]byte{0, 10, 214}: "BeamReach Networks",
+ [3]byte{0, 10, 215}: "Origin ELECTRIC CO.,LTD.",
+ [3]byte{0, 10, 216}: "IPCserv Technology Corp.",
+ [3]byte{0, 10, 217}: "Sony Mobile Communications AB",
+ [3]byte{0, 10, 218}: "Vindicator Technologies",
+ [3]byte{0, 10, 219}: "SkyPilot Network, Inc",
+ [3]byte{0, 10, 220}: "RuggedCom Inc.",
+ [3]byte{0, 10, 221}: "Allworx Corp.",
+ [3]byte{0, 10, 222}: "Happy Communication Co., Ltd.",
+ [3]byte{0, 10, 223}: "Gennum Corporation",
+ [3]byte{0, 10, 224}: "Fujitsu Softek",
+ [3]byte{0, 10, 225}: "EG Technology",
+ [3]byte{0, 10, 226}: "Binatone Electronics International, Ltd",
+ [3]byte{0, 10, 227}: "YANG MEI TECHNOLOGY CO., LTD",
+ [3]byte{0, 10, 228}: "Wistron Corporation",
+ [3]byte{0, 10, 229}: "ScottCare Corporation",
+ [3]byte{0, 10, 230}: "Elitegroup Computer Systems Co.,Ltd.",
+ [3]byte{0, 10, 231}: "ELIOP S.A.",
+ [3]byte{0, 10, 232}: "Cathay Roxus Information Technology Co. LTD",
+ [3]byte{0, 10, 233}: "AirVast Technology Inc.",
+ [3]byte{0, 10, 234}: "ADAM ELEKTRONIK LTD. ŞTI",
+ [3]byte{0, 10, 235}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{0, 10, 236}: "Koatsu Gas Kogyo Co., Ltd.",
+ [3]byte{0, 10, 237}: "HARTING Electronics GmbH",
+ [3]byte{0, 10, 238}: "GCD Hard- & Software GmbH",
+ [3]byte{0, 10, 239}: "OTRUM ASA",
+ [3]byte{0, 10, 240}: "SHIN-OH ELECTRONICS CO., LTD. R&D",
+ [3]byte{0, 10, 241}: "Clarity Design, Inc.",
+ [3]byte{0, 10, 242}: "NeoAxiom Corp.",
+ [3]byte{0, 10, 243}: "Cisco Systems, Inc",
+ [3]byte{0, 10, 244}: "Cisco Systems, Inc",
+ [3]byte{0, 10, 245}: "Airgo Networks, Inc.",
+ [3]byte{0, 10, 246}: "Emerson Climate Technologies Retail Solutions, Inc.",
+ [3]byte{0, 10, 247}: "Broadcom",
+ [3]byte{0, 10, 248}: "American Telecare Inc.",
+ [3]byte{0, 10, 249}: "HiConnect, Inc.",
+ [3]byte{0, 10, 250}: "Traverse Technologies Australia",
+ [3]byte{0, 10, 251}: "Ambri Limited",
+ [3]byte{0, 10, 252}: "Core Tec Communications, LLC",
+ [3]byte{0, 10, 253}: "Kentec Electronics",
+ [3]byte{0, 10, 254}: "NovaPal Ltd",
+ [3]byte{0, 10, 255}: "Kilchherr Elektronik AG",
+ [3]byte{0, 11, 0}: "FUJIAN START COMPUTER EQUIPMENT CO.,LTD",
+ [3]byte{0, 11, 1}: "DAIICHI ELECTRONICS CO., LTD.",
+ [3]byte{0, 11, 2}: "Dallmeier electronic",
+ [3]byte{0, 11, 3}: "Taekwang Industrial Co., Ltd",
+ [3]byte{0, 11, 4}: "Volktek Corporation",
+ [3]byte{0, 11, 5}: "Pacific Broadband Networks",
+ [3]byte{0, 11, 6}: "ARRIS Group, Inc.",
+ [3]byte{0, 11, 7}: "Voxpath Networks",
+ [3]byte{0, 11, 8}: "Pillar Data Systems",
+ [3]byte{0, 11, 9}: "Ifoundry Systems Singapore",
+ [3]byte{0, 11, 10}: "dBm Optics",
+ [3]byte{0, 11, 11}: "Corrent Corporation",
+ [3]byte{0, 11, 12}: "Agile Systems Inc.",
+ [3]byte{0, 11, 13}: "Air2U, Inc.",
+ [3]byte{0, 11, 14}: "Trapeze Networks",
+ [3]byte{0, 11, 15}: "Bosch Rexroth",
+ [3]byte{0, 11, 16}: "11wave Technonlogy Co.,Ltd",
+ [3]byte{0, 11, 17}: "HIMEJI ABC TRADING CO.,LTD.",
+ [3]byte{0, 11, 18}: "NURI Telecom Co., Ltd.",
+ [3]byte{0, 11, 19}: "ZETRON INC",
+ [3]byte{0, 11, 20}: "ViewSonic Corporation",
+ [3]byte{0, 11, 21}: "Platypus Technology",
+ [3]byte{0, 11, 22}: "Communication Machinery Corporation",
+ [3]byte{0, 11, 23}: "MKS Instruments",
+ [3]byte{0, 11, 24}: "Private",
+ [3]byte{0, 11, 25}: "Vernier Networks, Inc.",
+ [3]byte{0, 11, 26}: "Industrial Defender, Inc.",
+ [3]byte{0, 11, 27}: "Systronix, Inc.",
+ [3]byte{0, 11, 28}: "SIBCO bv",
+ [3]byte{0, 11, 29}: "LayerZero Power Systems, Inc.",
+ [3]byte{0, 11, 30}: "KAPPA opto-electronics GmbH",
+ [3]byte{0, 11, 31}: "I CON Computer Co.",
+ [3]byte{0, 11, 32}: "Hirata corporation",
+ [3]byte{0, 11, 33}: "G-Star Communications Inc.",
+ [3]byte{0, 11, 34}: "Environmental Systems and Services",
+ [3]byte{0, 11, 35}: "Siemens Subscriber Networks",
+ [3]byte{0, 11, 36}: "AirLogic",
+ [3]byte{0, 11, 37}: "Aeluros",
+ [3]byte{0, 11, 38}: "Wetek Corporation",
+ [3]byte{0, 11, 39}: "Scion Corporation",
+ [3]byte{0, 11, 40}: "Quatech Inc.",
+ [3]byte{0, 11, 41}: "LS(LG) Industrial Systems co.,Ltd",
+ [3]byte{0, 11, 42}: "HOWTEL Co., Ltd.",
+ [3]byte{0, 11, 43}: "HOSTNET CORPORATION",
+ [3]byte{0, 11, 44}: "Eiki Industrial Co. Ltd.",
+ [3]byte{0, 11, 45}: "Danfoss Inc.",
+ [3]byte{0, 11, 46}: "Cal-Comp Electronics & Communications Company Ltd.",
+ [3]byte{0, 11, 47}: "bplan GmbH",
+ [3]byte{0, 11, 48}: "Beijing Gongye Science & Technology Co.,Ltd",
+ [3]byte{0, 11, 49}: "Yantai ZhiYang Scientific and technology industry CO., LTD",
+ [3]byte{0, 11, 50}: "VORMETRIC, INC.",
+ [3]byte{0, 11, 51}: "Vivato Technologies",
+ [3]byte{0, 11, 52}: "ShangHai Broadband Technologies CO.LTD",
+ [3]byte{0, 11, 53}: "Quad Bit System co., Ltd.",
+ [3]byte{0, 11, 54}: "Productivity Systems, Inc.",
+ [3]byte{0, 11, 55}: "MANUFACTURE DES MONTRES ROLEX SA",
+ [3]byte{0, 11, 56}: "Knürr GmbH",
+ [3]byte{0, 11, 57}: "Keisoku Giken Co.,Ltd.",
+ [3]byte{0, 11, 58}: "QuStream Corporation",
+ [3]byte{0, 11, 59}: "devolo AG",
+ [3]byte{0, 11, 60}: "Cygnal Integrated Products, Inc.",
+ [3]byte{0, 11, 61}: "CONTAL OK Ltd.",
+ [3]byte{0, 11, 62}: "BittWare, Inc",
+ [3]byte{0, 11, 63}: "Anthology Solutions Inc.",
+ [3]byte{0, 11, 64}: "Oclaro",
+ [3]byte{0, 11, 65}: "Ing. Büro Dr. Beutlhauser",
+ [3]byte{0, 11, 66}: "commax Co., Ltd.",
+ [3]byte{0, 11, 67}: "Microscan Systems, Inc.",
+ [3]byte{0, 11, 68}: "Concord IDea Corp.",
+ [3]byte{0, 11, 69}: "Cisco Systems, Inc",
+ [3]byte{0, 11, 70}: "Cisco Systems, Inc",
+ [3]byte{0, 11, 71}: "Advanced Energy",
+ [3]byte{0, 11, 72}: "sofrel",
+ [3]byte{0, 11, 73}: "RF-Link System Inc.",
+ [3]byte{0, 11, 74}: "Visimetrics (UK) Ltd",
+ [3]byte{0, 11, 75}: "VISIOWAVE SA",
+ [3]byte{0, 11, 76}: "Clarion (M) Sdn Bhd",
+ [3]byte{0, 11, 77}: "Emuzed",
+ [3]byte{0, 11, 78}: "VertexRSI, General Dynamics SatCOM Technologies, Inc.",
+ [3]byte{0, 11, 79}: "Verifone",
+ [3]byte{0, 11, 80}: "Oxygnet",
+ [3]byte{0, 11, 81}: "Micetek International Inc.",
+ [3]byte{0, 11, 82}: "JOYMAX ELECTRONICS CO. LTD.",
+ [3]byte{0, 11, 83}: "INITIUM Co., Ltd.",
+ [3]byte{0, 11, 84}: "BiTMICRO Networks, Inc.",
+ [3]byte{0, 11, 85}: "ADInstruments",
+ [3]byte{0, 11, 86}: "Cybernetics",
+ [3]byte{0, 11, 87}: "Silicon Laboratories",
+ [3]byte{0, 11, 88}: "Astronautics C.A LTD",
+ [3]byte{0, 11, 89}: "ScriptPro, LLC",
+ [3]byte{0, 11, 90}: "HyperEdge",
+ [3]byte{0, 11, 91}: "Rincon Research Corporation",
+ [3]byte{0, 11, 92}: "Newtech Co.,Ltd",
+ [3]byte{0, 11, 93}: "FUJITSU LIMITED",
+ [3]byte{0, 11, 94}: "Audio Engineering Society Inc.",
+ [3]byte{0, 11, 95}: "Cisco Systems, Inc",
+ [3]byte{0, 11, 96}: "Cisco Systems, Inc",
+ [3]byte{0, 11, 97}: "Friedrich Lütze GmbH & Co. KG",
+ [3]byte{0, 11, 98}: "ib-mohnen KG",
+ [3]byte{0, 11, 99}: "Kaleidescape",
+ [3]byte{0, 11, 100}: "Kieback & Peter GmbH & Co KG",
+ [3]byte{0, 11, 101}: "Sy.A.C. srl",
+ [3]byte{0, 11, 102}: "Teralink Communications",
+ [3]byte{0, 11, 103}: "Topview Technology Corporation",
+ [3]byte{0, 11, 104}: "Addvalue Communications Pte Ltd",
+ [3]byte{0, 11, 105}: "Franke Finland Oy",
+ [3]byte{0, 11, 106}: "Asiarock Technology Limited",
+ [3]byte{0, 11, 107}: "Wistron Neweb Corporation",
+ [3]byte{0, 11, 108}: "Sychip Inc.",
+ [3]byte{0, 11, 109}: "SOLECTRON JAPAN NAKANIIDA",
+ [3]byte{0, 11, 110}: "Neff Instrument Corp.",
+ [3]byte{0, 11, 111}: "Media Streaming Networks Inc",
+ [3]byte{0, 11, 112}: "Load Technology, Inc.",
+ [3]byte{0, 11, 113}: "Litchfield Communications Inc.",
+ [3]byte{0, 11, 114}: "Lawo AG",
+ [3]byte{0, 11, 115}: "Kodeos Communications",
+ [3]byte{0, 11, 116}: "Kingwave Technology Co., Ltd.",
+ [3]byte{0, 11, 117}: "Iosoft Ltd.",
+ [3]byte{0, 11, 118}: "ET&T Technology Co. Ltd.",
+ [3]byte{0, 11, 119}: "Cogent Systems, Inc.",
+ [3]byte{0, 11, 120}: "TAIFATECH INC.",
+ [3]byte{0, 11, 121}: "X-COM, Inc.",
+ [3]byte{0, 11, 122}: "L-3 Linkabit",
+ [3]byte{0, 11, 123}: "Test-Um Inc.",
+ [3]byte{0, 11, 124}: "Telex Communications",
+ [3]byte{0, 11, 125}: "SOLOMON EXTREME INTERNATIONAL LTD.",
+ [3]byte{0, 11, 126}: "SAGINOMIYA Seisakusho Inc.",
+ [3]byte{0, 11, 127}: "Align Engineering LLC",
+ [3]byte{0, 11, 128}: "Lycium Networks",
+ [3]byte{0, 11, 129}: "Kaparel Corporation",
+ [3]byte{0, 11, 130}: "Grandstream Networks, Inc.",
+ [3]byte{0, 11, 131}: "DATAWATT B.V.",
+ [3]byte{0, 11, 132}: "BODET",
+ [3]byte{0, 11, 133}: "Cisco Systems, Inc",
+ [3]byte{0, 11, 134}: "Aruba Networks",
+ [3]byte{0, 11, 135}: "American Reliance Inc.",
+ [3]byte{0, 11, 136}: "Vidisco ltd.",
+ [3]byte{0, 11, 137}: "Top Global Technology, Ltd.",
+ [3]byte{0, 11, 138}: "MITEQ Inc.",
+ [3]byte{0, 11, 139}: "KERAJET, S.A.",
+ [3]byte{0, 11, 140}: "Flextronics",
+ [3]byte{0, 11, 141}: "Avvio Networks",
+ [3]byte{0, 11, 142}: "Ascent Corporation",
+ [3]byte{0, 11, 143}: "AKITA ELECTRONICS SYSTEMS CO.,LTD.",
+ [3]byte{0, 11, 144}: "ADVA Optical Networking Ltd.",
+ [3]byte{0, 11, 145}: "Aglaia Gesellschaft für Bildverarbeitung und Kommunikation mbH",
+ [3]byte{0, 11, 146}: "Ascom Danmark A/S",
+ [3]byte{0, 11, 147}: "Ritter Elektronik",
+ [3]byte{0, 11, 148}: "Digital Monitoring Products, Inc.",
+ [3]byte{0, 11, 149}: "eBet Gaming Systems Pty Ltd",
+ [3]byte{0, 11, 150}: "Innotrac Diagnostics Oy",
+ [3]byte{0, 11, 151}: "Matsushita Electric Industrial Co.,Ltd.",
+ [3]byte{0, 11, 152}: "NiceTechVision",
+ [3]byte{0, 11, 153}: "SensAble Technologies, Inc.",
+ [3]byte{0, 11, 154}: "Shanghai Ulink Telecom Equipment Co. Ltd.",
+ [3]byte{0, 11, 155}: "Sirius System Co, Ltd.",
+ [3]byte{0, 11, 156}: "TriBeam Technologies, Inc.",
+ [3]byte{0, 11, 157}: "TwinMOS Technologies Inc.",
+ [3]byte{0, 11, 158}: "Yasing Technology Corp.",
+ [3]byte{0, 11, 159}: "Neue ELSA GmbH",
+ [3]byte{0, 11, 160}: "T&L Information Inc.",
+ [3]byte{0, 11, 161}: "Fujikura Solutions Ltd.",
+ [3]byte{0, 11, 162}: "Sumitomo Electric Industries,Ltd",
+ [3]byte{0, 11, 163}: "Siemens AG, I&S",
+ [3]byte{0, 11, 164}: "Shiron Satellite Communications Ltd. (1996)",
+ [3]byte{0, 11, 165}: "Quasar Cipta Mandiri, PT",
+ [3]byte{0, 11, 166}: "Miyakawa Electric Works Ltd.",
+ [3]byte{0, 11, 167}: "Maranti Networks",
+ [3]byte{0, 11, 168}: "HANBACK ELECTRONICS CO., LTD.",
+ [3]byte{0, 11, 169}: "CloudShield Technologies, Inc.",
+ [3]byte{0, 11, 170}: "Aiphone co.,Ltd",
+ [3]byte{0, 11, 171}: "Advantech Technology (CHINA) Co., Ltd.",
+ [3]byte{0, 11, 172}: "3Com Ltd",
+ [3]byte{0, 11, 173}: "PC-PoS Inc.",
+ [3]byte{0, 11, 174}: "Vitals System Inc.",
+ [3]byte{0, 11, 175}: "WOOJU COMMUNICATIONS Co,.Ltd",
+ [3]byte{0, 11, 176}: "Sysnet Telematica srl",
+ [3]byte{0, 11, 177}: "Super Star Technology Co., Ltd.",
+ [3]byte{0, 11, 178}: "SMALLBIG TECHNOLOGY",
+ [3]byte{0, 11, 179}: "RiT technologies Ltd.",
+ [3]byte{0, 11, 180}: "RDC Semiconductor Inc.,",
+ [3]byte{0, 11, 181}: "nStor Technologies, Inc.",
+ [3]byte{0, 11, 182}: "Metalligence Technology Corp.",
+ [3]byte{0, 11, 183}: "Micro Systems Co.,Ltd.",
+ [3]byte{0, 11, 184}: "Kihoku Electronic Co.",
+ [3]byte{0, 11, 185}: "Imsys AB",
+ [3]byte{0, 11, 186}: "Harmonic, Inc",
+ [3]byte{0, 11, 187}: "Etin Systems Co., Ltd",
+ [3]byte{0, 11, 188}: "En Garde Systems, Inc.",
+ [3]byte{0, 11, 189}: "Connexionz Limited",
+ [3]byte{0, 11, 190}: "Cisco Systems, Inc",
+ [3]byte{0, 11, 191}: "Cisco Systems, Inc",
+ [3]byte{0, 11, 192}: "China IWNComm Co., Ltd.",
+ [3]byte{0, 11, 193}: "Bay Microsystems, Inc.",
+ [3]byte{0, 11, 194}: "Corinex Communication Corp.",
+ [3]byte{0, 11, 195}: "Multiplex, Inc.",
+ [3]byte{0, 11, 196}: "BIOTRONIK GmbH & Co",
+ [3]byte{0, 11, 197}: "SMC Networks, Inc.",
+ [3]byte{0, 11, 198}: "ISAC, Inc.",
+ [3]byte{0, 11, 199}: "ICET S.p.A.",
+ [3]byte{0, 11, 200}: "AirFlow Networks",
+ [3]byte{0, 11, 201}: "Electroline Equipment",
+ [3]byte{0, 11, 202}: "DATAVAN TC",
+ [3]byte{0, 11, 203}: "Fagor Automation , S. Coop",
+ [3]byte{0, 11, 204}: "JUSAN, S.A.",
+ [3]byte{0, 11, 205}: "Hewlett Packard",
+ [3]byte{0, 11, 206}: "Free2move AB",
+ [3]byte{0, 11, 207}: "AGFA NDT INC.",
+ [3]byte{0, 11, 208}: "XiMeta Technology Americas Inc.",
+ [3]byte{0, 11, 209}: "Aeronix, Inc.",
+ [3]byte{0, 11, 210}: "Remopro Technology Inc.",
+ [3]byte{0, 11, 211}: "cd3o",
+ [3]byte{0, 11, 212}: "Beijing Wise Technology & Science Development Co.Ltd",
+ [3]byte{0, 11, 213}: "Nvergence, Inc.",
+ [3]byte{0, 11, 214}: "Paxton Access Ltd",
+ [3]byte{0, 11, 215}: "DORMA Time + Access GmbH",
+ [3]byte{0, 11, 216}: "Industrial Scientific Corp.",
+ [3]byte{0, 11, 217}: "General Hydrogen",
+ [3]byte{0, 11, 218}: "EyeCross Co.,Inc.",
+ [3]byte{0, 11, 219}: "Dell Inc.",
+ [3]byte{0, 11, 220}: "AKCP",
+ [3]byte{0, 11, 221}: "TOHOKU RICOH Co., LTD.",
+ [3]byte{0, 11, 222}: "TELDIX GmbH",
+ [3]byte{0, 11, 223}: "Shenzhen RouterD Networks Limited",
+ [3]byte{0, 11, 224}: "SercoNet Ltd.",
+ [3]byte{0, 11, 225}: "Nokia NET Product Operations",
+ [3]byte{0, 11, 226}: "Lumenera Corporation",
+ [3]byte{0, 11, 227}: "Key Stream Co., Ltd.",
+ [3]byte{0, 11, 228}: "Hosiden Corporation",
+ [3]byte{0, 11, 229}: "HIMS International Corporation",
+ [3]byte{0, 11, 230}: "Datel Electronics",
+ [3]byte{0, 11, 231}: "COMFLUX TECHNOLOGY INC.",
+ [3]byte{0, 11, 232}: "AOIP",
+ [3]byte{0, 11, 233}: "Actel Corporation",
+ [3]byte{0, 11, 234}: "Zultys Technologies",
+ [3]byte{0, 11, 235}: "Systegra AG",
+ [3]byte{0, 11, 236}: "NIPPON ELECTRIC INSTRUMENT, INC.",
+ [3]byte{0, 11, 237}: "ELM Inc.",
+ [3]byte{0, 11, 238}: "inc.jet, Incorporated",
+ [3]byte{0, 11, 239}: "Code Corporation",
+ [3]byte{0, 11, 240}: "MoTEX Products Co., Ltd.",
+ [3]byte{0, 11, 241}: "LAP Laser Applikations",
+ [3]byte{0, 11, 242}: "Chih-Kan Technology Co., Ltd.",
+ [3]byte{0, 11, 243}: "BAE SYSTEMS",
+ [3]byte{0, 11, 244}: "Private",
+ [3]byte{0, 11, 245}: "Shanghai Sibo Telecom Technology Co.,Ltd",
+ [3]byte{0, 11, 246}: "Nitgen Co., Ltd",
+ [3]byte{0, 11, 247}: "NIDEK CO.,LTD",
+ [3]byte{0, 11, 248}: "Infinera",
+ [3]byte{0, 11, 249}: "Gemstone Communications, Inc.",
+ [3]byte{0, 11, 250}: "EXEMYS SRL",
+ [3]byte{0, 11, 251}: "D-NET International Corporation",
+ [3]byte{0, 11, 252}: "Cisco Systems, Inc",
+ [3]byte{0, 11, 253}: "Cisco Systems, Inc",
+ [3]byte{0, 11, 254}: "CASTEL Broadband Limited",
+ [3]byte{0, 11, 255}: "Berkeley Camera Engineering",
+ [3]byte{0, 12, 0}: "BEB Industrie-Elektronik AG",
+ [3]byte{0, 12, 1}: "Abatron AG",
+ [3]byte{0, 12, 2}: "ABB Oy",
+ [3]byte{0, 12, 3}: "HDMI Licensing, LLC",
+ [3]byte{0, 12, 4}: "Tecnova",
+ [3]byte{0, 12, 5}: "RPA Reserch Co., Ltd.",
+ [3]byte{0, 12, 6}: "Nixvue Systems Pte Ltd",
+ [3]byte{0, 12, 7}: "Iftest AG",
+ [3]byte{0, 12, 8}: "HUMEX Technologies Corp.",
+ [3]byte{0, 12, 9}: "Hitachi IE Systems Co., Ltd",
+ [3]byte{0, 12, 10}: "Guangdong Province Electronic Technology Research Institute",
+ [3]byte{0, 12, 11}: "Broadbus Technologies",
+ [3]byte{0, 12, 12}: "APPRO TECHNOLOGY INC.",
+ [3]byte{0, 12, 13}: "Communications & Power Industries / Satcom Division",
+ [3]byte{0, 12, 14}: "XtremeSpectrum, Inc.",
+ [3]byte{0, 12, 15}: "Techno-One Co., Ltd",
+ [3]byte{0, 12, 16}: "PNI Corporation",
+ [3]byte{0, 12, 17}: "NIPPON DEMPA CO.,LTD.",
+ [3]byte{0, 12, 18}: "Micro-Optronic-Messtechnik GmbH",
+ [3]byte{0, 12, 19}: "MediaQ",
+ [3]byte{0, 12, 20}: "Diagnostic Instruments, Inc.",
+ [3]byte{0, 12, 21}: "CyberPower Systems, Inc.",
+ [3]byte{0, 12, 22}: "Concorde Microsystems Inc.",
+ [3]byte{0, 12, 23}: "AJA Video Systems Inc",
+ [3]byte{0, 12, 24}: "Zenisu Keisoku Inc.",
+ [3]byte{0, 12, 25}: "Telio Communications GmbH",
+ [3]byte{0, 12, 26}: "Quest Technical Solutions Inc.",
+ [3]byte{0, 12, 27}: "ORACOM Co, Ltd.",
+ [3]byte{0, 12, 28}: "MicroWeb Co., Ltd.",
+ [3]byte{0, 12, 29}: "Mettler & Fuchs AG",
+ [3]byte{0, 12, 30}: "Global Cache",
+ [3]byte{0, 12, 31}: "Glimmerglass Networks",
+ [3]byte{0, 12, 32}: "Fi WIn, Inc.",
+ [3]byte{0, 12, 33}: "Faculty of Science and Technology, Keio University",
+ [3]byte{0, 12, 34}: "Double D Electronics Ltd",
+ [3]byte{0, 12, 35}: "Beijing Lanchuan Tech. Co., Ltd.",
+ [3]byte{0, 12, 36}: "ANATOR",
+ [3]byte{0, 12, 37}: "Allied Telesis Labs, Inc.",
+ [3]byte{0, 12, 38}: "Weintek Labs. Inc.",
+ [3]byte{0, 12, 39}: "Sammy Corporation",
+ [3]byte{0, 12, 40}: "RIFATRON",
+ [3]byte{0, 12, 41}: "VMware, Inc.",
+ [3]byte{0, 12, 42}: "OCTTEL Communication Co., Ltd.",
+ [3]byte{0, 12, 43}: "ELIAS Technology, Inc.",
+ [3]byte{0, 12, 44}: "Enwiser Inc.",
+ [3]byte{0, 12, 45}: "FullWave Technology Co., Ltd.",
+ [3]byte{0, 12, 46}: "Openet information technology(shenzhen) Co., Ltd.",
+ [3]byte{0, 12, 47}: "SeorimTechnology Co.,Ltd.",
+ [3]byte{0, 12, 48}: "Cisco Systems, Inc",
+ [3]byte{0, 12, 49}: "Cisco Systems, Inc",
+ [3]byte{0, 12, 50}: "Avionic Design Development GmbH",
+ [3]byte{0, 12, 51}: "Compucase Enterprise Co. Ltd.",
+ [3]byte{0, 12, 52}: "Vixen Co., Ltd.",
+ [3]byte{0, 12, 53}: "KaVo Dental GmbH & Co. KG",
+ [3]byte{0, 12, 54}: "SHARP TAKAYA ELECTRONICS INDUSTRY CO.,LTD.",
+ [3]byte{0, 12, 55}: "Geomation, Inc.",
+ [3]byte{0, 12, 56}: "TelcoBridges Inc.",
+ [3]byte{0, 12, 57}: "Sentinel Wireless Inc.",
+ [3]byte{0, 12, 58}: "Oxance",
+ [3]byte{0, 12, 59}: "Orion Electric Co., Ltd.",
+ [3]byte{0, 12, 60}: "MediaChorus, Inc.",
+ [3]byte{0, 12, 61}: "Glsystech Co., Ltd.",
+ [3]byte{0, 12, 62}: "Crest Audio",
+ [3]byte{0, 12, 63}: "Cogent Defence & Security Networks,",
+ [3]byte{0, 12, 64}: "Altech Controls",
+ [3]byte{0, 12, 65}: "Cisco-Linksys, LLC",
+ [3]byte{0, 12, 66}: "Routerboard.com",
+ [3]byte{0, 12, 67}: "Ralink Technology, Corp.",
+ [3]byte{0, 12, 68}: "Automated Interfaces, Inc.",
+ [3]byte{0, 12, 69}: "Animation Technologies Inc.",
+ [3]byte{0, 12, 70}: "Allied Telesyn Inc.",
+ [3]byte{0, 12, 71}: "SK Teletech(R&D Planning Team)",
+ [3]byte{0, 12, 72}: "QoStek Corporation",
+ [3]byte{0, 12, 73}: "Dangaard Telecom Denmark A/S",
+ [3]byte{0, 12, 74}: "Cygnus Microsystems (P) Limited",
+ [3]byte{0, 12, 75}: "Cheops Elektronik",
+ [3]byte{0, 12, 76}: "Arcor AG&Co.",
+ [3]byte{0, 12, 77}: "Curtiss-Wright Controls Avionics & Electronics",
+ [3]byte{0, 12, 78}: "Winbest Technology CO,LT",
+ [3]byte{0, 12, 79}: "UDTech Japan Corporation",
+ [3]byte{0, 12, 80}: "Seagate Technology",
+ [3]byte{0, 12, 81}: "Scientific Technologies Inc.",
+ [3]byte{0, 12, 82}: "Roll Systems Inc.",
+ [3]byte{0, 12, 83}: "Private",
+ [3]byte{0, 12, 84}: "Pedestal Networks, Inc",
+ [3]byte{0, 12, 85}: "Microlink Communications Inc.",
+ [3]byte{0, 12, 86}: "Megatel Computer (1986) Corp.",
+ [3]byte{0, 12, 87}: "MACKIE Engineering Services Belgium BVBA",
+ [3]byte{0, 12, 88}: "M&S Systems",
+ [3]byte{0, 12, 89}: "Indyme Electronics, Inc.",
+ [3]byte{0, 12, 90}: "IBSmm Embedded Electronics Consulting",
+ [3]byte{0, 12, 91}: "HANWANG TECHNOLOGY CO.,LTD",
+ [3]byte{0, 12, 92}: "GTN Systems B.V.",
+ [3]byte{0, 12, 93}: "CHIC TECHNOLOGY (CHINA) CORP.",
+ [3]byte{0, 12, 94}: "Calypso Medical",
+ [3]byte{0, 12, 95}: "Avtec, Inc.",
+ [3]byte{0, 12, 96}: "ACM Systems",
+ [3]byte{0, 12, 97}: "AC Tech corporation DBA Advanced Digital",
+ [3]byte{0, 12, 98}: "ABB AB, Cewe-Control",
+ [3]byte{0, 12, 99}: "Zenith Electronics Corporation",
+ [3]byte{0, 12, 100}: "X2 MSA Group",
+ [3]byte{0, 12, 101}: "Sunin Telecom",
+ [3]byte{0, 12, 102}: "Pronto Networks Inc",
+ [3]byte{0, 12, 103}: "OYO ELECTRIC CO.,LTD",
+ [3]byte{0, 12, 104}: "SigmaTel, Inc.",
+ [3]byte{0, 12, 105}: "National Radio Astronomy Observatory",
+ [3]byte{0, 12, 106}: "MBARI",
+ [3]byte{0, 12, 107}: "Kurz Industrie-Elektronik GmbH",
+ [3]byte{0, 12, 108}: "Elgato Systems LLC",
+ [3]byte{0, 12, 109}: "Edwards Ltd.",
+ [3]byte{0, 12, 110}: "ASUSTek COMPUTER INC.",
+ [3]byte{0, 12, 111}: "Amtek system co.,LTD.",
+ [3]byte{0, 12, 112}: "ACC GmbH",
+ [3]byte{0, 12, 113}: "Wybron, Inc",
+ [3]byte{0, 12, 114}: "Tempearl Industrial Co., Ltd.",
+ [3]byte{0, 12, 115}: "TELSON ELECTRONICS CO., LTD",
+ [3]byte{0, 12, 116}: "RIVERTEC CORPORATION",
+ [3]byte{0, 12, 117}: "Oriental integrated electronics. LTD",
+ [3]byte{0, 12, 118}: "MICRO-STAR INTERNATIONAL CO., LTD.",
+ [3]byte{0, 12, 119}: "Life Racing Ltd",
+ [3]byte{0, 12, 120}: "In-Tech Electronics Limited",
+ [3]byte{0, 12, 121}: "Extel Communications P/L",
+ [3]byte{0, 12, 122}: "DaTARIUS Technologies GmbH",
+ [3]byte{0, 12, 123}: "ALPHA PROJECT Co.,Ltd.",
+ [3]byte{0, 12, 124}: "Internet Information Image Inc.",
+ [3]byte{0, 12, 125}: "TEIKOKU ELECTRIC MFG. CO., LTD",
+ [3]byte{0, 12, 126}: "Tellium Incorporated",
+ [3]byte{0, 12, 127}: "synertronixx GmbH",
+ [3]byte{0, 12, 128}: "Opelcomm Inc.",
+ [3]byte{0, 12, 129}: "Schneider Electric (Australia)",
+ [3]byte{0, 12, 130}: "NETWORK TECHNOLOGIES INC",
+ [3]byte{0, 12, 131}: "Logical Solutions",
+ [3]byte{0, 12, 132}: "Eazix, Inc.",
+ [3]byte{0, 12, 133}: "Cisco Systems, Inc",
+ [3]byte{0, 12, 134}: "Cisco Systems, Inc",
+ [3]byte{0, 12, 135}: "AMD",
+ [3]byte{0, 12, 136}: "Apache Micro Peripherals, Inc.",
+ [3]byte{0, 12, 137}: "AC Electric Vehicles, Ltd.",
+ [3]byte{0, 12, 138}: "Bose Corporation",
+ [3]byte{0, 12, 139}: "Connect Tech Inc",
+ [3]byte{0, 12, 140}: "KODICOM CO.,LTD.",
+ [3]byte{0, 12, 141}: "MATRIX VISION GmbH",
+ [3]byte{0, 12, 142}: "Mentor Engineering Inc",
+ [3]byte{0, 12, 143}: "Nergal s.r.l.",
+ [3]byte{0, 12, 144}: "Octasic Inc.",
+ [3]byte{0, 12, 145}: "Riverhead Networks Inc.",
+ [3]byte{0, 12, 146}: "WolfVision Gmbh",
+ [3]byte{0, 12, 147}: "Xeline Co., Ltd.",
+ [3]byte{0, 12, 148}: "United Electronic Industries, Inc. (EUI)",
+ [3]byte{0, 12, 149}: "PrimeNet",
+ [3]byte{0, 12, 150}: "OQO, Inc.",
+ [3]byte{0, 12, 151}: "NV ADB TTV Technologies SA",
+ [3]byte{0, 12, 152}: "LETEK Communications Inc.",
+ [3]byte{0, 12, 153}: "HITEL LINK Co.,Ltd",
+ [3]byte{0, 12, 154}: "Hitech Electronics Corp.",
+ [3]byte{0, 12, 155}: "EE Solutions, Inc",
+ [3]byte{0, 12, 156}: "Chongho information & communications",
+ [3]byte{0, 12, 157}: "UbeeAirWalk, Inc.",
+ [3]byte{0, 12, 158}: "MemoryLink Corp.",
+ [3]byte{0, 12, 159}: "NKE Corporation",
+ [3]byte{0, 12, 160}: "StorCase Technology, Inc.",
+ [3]byte{0, 12, 161}: "SIGMACOM Co., LTD.",
+ [3]byte{0, 12, 162}: "Harmonic Video Network",
+ [3]byte{0, 12, 163}: "Rancho Technology, Inc.",
+ [3]byte{0, 12, 164}: "Prompttec Product Management GmbH",
+ [3]byte{0, 12, 165}: "Naman NZ LTd",
+ [3]byte{0, 12, 166}: "Mintera Corporation",
+ [3]byte{0, 12, 167}: "Metro (Suzhou) Technologies Co., Ltd.",
+ [3]byte{0, 12, 168}: "Garuda Networks Corporation",
+ [3]byte{0, 12, 169}: "Ebtron Inc.",
+ [3]byte{0, 12, 170}: "Cubic Transportation Systems Inc",
+ [3]byte{0, 12, 171}: "Commend International GmbH",
+ [3]byte{0, 12, 172}: "Citizen Watch Co., Ltd.",
+ [3]byte{0, 12, 173}: "BTU International",
+ [3]byte{0, 12, 174}: "Ailocom Oy",
+ [3]byte{0, 12, 175}: "TRI TERM CO.,LTD.",
+ [3]byte{0, 12, 176}: "Star Semiconductor Corporation",
+ [3]byte{0, 12, 177}: "Salland Engineering (Europe) BV",
+ [3]byte{0, 12, 178}: "UNION co., ltd.",
+ [3]byte{0, 12, 179}: "ROUND Co.,Ltd.",
+ [3]byte{0, 12, 180}: "AutoCell Laboratories, Inc.",
+ [3]byte{0, 12, 181}: "Premier Technolgies, Inc",
+ [3]byte{0, 12, 182}: "NANJING SEU MOBILE & INTERNET TECHNOLOGY CO.,LTD",
+ [3]byte{0, 12, 183}: "Nanjing Huazhuo Electronics Co., Ltd.",
+ [3]byte{0, 12, 184}: "MEDION AG",
+ [3]byte{0, 12, 185}: "LEA",
+ [3]byte{0, 12, 186}: "Jamex, Inc.",
+ [3]byte{0, 12, 187}: "ISKRAEMECO",
+ [3]byte{0, 12, 188}: "Iscutum",
+ [3]byte{0, 12, 189}: "Interface Masters, Inc",
+ [3]byte{0, 12, 190}: "Innominate Security Technologies AG",
+ [3]byte{0, 12, 191}: "Holy Stone Ent. Co., Ltd.",
+ [3]byte{0, 12, 192}: "Genera Oy",
+ [3]byte{0, 12, 193}: "Eaton Corporation",
+ [3]byte{0, 12, 194}: "ControlNet (India) Private Limited",
+ [3]byte{0, 12, 195}: "BeWAN systems",
+ [3]byte{0, 12, 196}: "Tiptel AG",
+ [3]byte{0, 12, 197}: "Nextlink Co., Ltd.",
+ [3]byte{0, 12, 198}: "Ka-Ro electronics GmbH",
+ [3]byte{0, 12, 199}: "Intelligent Computer Solutions Inc.",
+ [3]byte{0, 12, 200}: "Xytronix Research & Design, Inc.",
+ [3]byte{0, 12, 201}: "ILWOO DATA & TECHNOLOGY CO.,LTD",
+ [3]byte{0, 12, 202}: "HGST a Western Digital Company",
+ [3]byte{0, 12, 203}: "Design Combus Ltd",
+ [3]byte{0, 12, 204}: "Aeroscout Ltd.",
+ [3]byte{0, 12, 205}: "IEC - TC57",
+ [3]byte{0, 12, 206}: "Cisco Systems, Inc",
+ [3]byte{0, 12, 207}: "Cisco Systems, Inc",
+ [3]byte{0, 12, 208}: "Symetrix",
+ [3]byte{0, 12, 209}: "SFOM Technology Corp.",
+ [3]byte{0, 12, 210}: "Schaffner EMV AG",
+ [3]byte{0, 12, 211}: "Prettl Elektronik Radeberg GmbH",
+ [3]byte{0, 12, 212}: "Positron Public Safety Systems inc.",
+ [3]byte{0, 12, 213}: "Passave Inc.",
+ [3]byte{0, 12, 214}: "PARTNER TECH",
+ [3]byte{0, 12, 215}: "Nallatech Ltd",
+ [3]byte{0, 12, 216}: "M. K. Juchheim GmbH & Co",
+ [3]byte{0, 12, 217}: "Itcare Co., Ltd",
+ [3]byte{0, 12, 218}: "FreeHand Systems, Inc.",
+ [3]byte{0, 12, 219}: "Brocade Communications Systems, Inc.",
+ [3]byte{0, 12, 220}: "BECS Technology, Inc",
+ [3]byte{0, 12, 221}: "AOS technologies AG",
+ [3]byte{0, 12, 222}: "ABB STOTZ-KONTAKT GmbH",
+ [3]byte{0, 12, 223}: "PULNiX America, Inc",
+ [3]byte{0, 12, 224}: "Trek Diagnostics Inc.",
+ [3]byte{0, 12, 225}: "The Open Group",
+ [3]byte{0, 12, 226}: "Rolls-Royce",
+ [3]byte{0, 12, 227}: "Option International N.V.",
+ [3]byte{0, 12, 228}: "NeuroCom International, Inc.",
+ [3]byte{0, 12, 229}: "ARRIS Group, Inc.",
+ [3]byte{0, 12, 230}: "Meru Networks Inc",
+ [3]byte{0, 12, 231}: "MediaTek Inc.",
+ [3]byte{0, 12, 232}: "GuangZhou AnJuBao Co., Ltd",
+ [3]byte{0, 12, 233}: "BLOOMBERG L.P.",
+ [3]byte{0, 12, 234}: "aphona Kommunikationssysteme",
+ [3]byte{0, 12, 235}: "CNMP Networks, Inc.",
+ [3]byte{0, 12, 236}: "Spectracom Corp.",
+ [3]byte{0, 12, 237}: "Real Digital Media",
+ [3]byte{0, 12, 238}: "jp-embedded",
+ [3]byte{0, 12, 239}: "Open Networks Engineering Ltd",
+ [3]byte{0, 12, 240}: "M & N GmbH",
+ [3]byte{0, 12, 241}: "Intel Corporation",
+ [3]byte{0, 12, 242}: "GAMESA Eólica",
+ [3]byte{0, 12, 243}: "CALL IMAGE SA",
+ [3]byte{0, 12, 244}: "AKATSUKI ELECTRIC MFG.CO.,LTD.",
+ [3]byte{0, 12, 245}: "InfoExpress",
+ [3]byte{0, 12, 246}: "Sitecom Europe BV",
+ [3]byte{0, 12, 247}: "Nortel Networks",
+ [3]byte{0, 12, 248}: "Nortel Networks",
+ [3]byte{0, 12, 249}: "Xylem Water Solutions",
+ [3]byte{0, 12, 250}: "Digital Systems Corp",
+ [3]byte{0, 12, 251}: "Korea Network Systems",
+ [3]byte{0, 12, 252}: "S2io Technologies Corp",
+ [3]byte{0, 12, 253}: "Hyundai ImageQuest Co.,Ltd.",
+ [3]byte{0, 12, 254}: "Grand Electronic Co., Ltd",
+ [3]byte{0, 12, 255}: "MRO-TEK LIMITED",
+ [3]byte{0, 13, 0}: "Seaway Networks Inc.",
+ [3]byte{0, 13, 1}: "P&E Microcomputer Systems, Inc.",
+ [3]byte{0, 13, 2}: "NEC Platforms, Ltd.",
+ [3]byte{0, 13, 3}: "Matrics, Inc.",
+ [3]byte{0, 13, 4}: "Foxboro Eckardt Development GmbH",
+ [3]byte{0, 13, 5}: "cybernet manufacturing inc.",
+ [3]byte{0, 13, 6}: "Compulogic Limited",
+ [3]byte{0, 13, 7}: "Calrec Audio Ltd",
+ [3]byte{0, 13, 8}: "AboveCable, Inc.",
+ [3]byte{0, 13, 9}: "Yuehua(Zhuhai) Electronic CO. LTD",
+ [3]byte{0, 13, 10}: "Projectiondesign as",
+ [3]byte{0, 13, 11}: "BUFFALO.INC",
+ [3]byte{0, 13, 12}: "MDI Security Systems",
+ [3]byte{0, 13, 13}: "ITSupported, LLC",
+ [3]byte{0, 13, 14}: "Inqnet Systems, Inc.",
+ [3]byte{0, 13, 15}: "Finlux Ltd",
+ [3]byte{0, 13, 16}: "Embedtronics Oy",
+ [3]byte{0, 13, 17}: "DENTSPLY - Gendex",
+ [3]byte{0, 13, 18}: "AXELL Corporation",
+ [3]byte{0, 13, 19}: "Wilhelm Rutenbeck GmbH&Co.KG",
+ [3]byte{0, 13, 20}: "Vtech Innovation LP dba Advanced American Telephones",
+ [3]byte{0, 13, 21}: "Voipac s.r.o.",
+ [3]byte{0, 13, 22}: "UHS Systems Pty Ltd",
+ [3]byte{0, 13, 23}: "Turbo Networks Co.Ltd",
+ [3]byte{0, 13, 24}: "Mega-Trend Electronics CO., LTD.",
+ [3]byte{0, 13, 25}: "ROBE Show lighting",
+ [3]byte{0, 13, 26}: "Mustek System Inc.",
+ [3]byte{0, 13, 27}: "Kyoto Electronics Manufacturing Co., Ltd.",
+ [3]byte{0, 13, 28}: "Amesys Defense",
+ [3]byte{0, 13, 29}: "HIGH-TEK HARNESS ENT. CO., LTD.",
+ [3]byte{0, 13, 30}: "Control Techniques",
+ [3]byte{0, 13, 31}: "AV Digital",
+ [3]byte{0, 13, 32}: "ASAHIKASEI TECHNOSYSTEM CO.,LTD.",
+ [3]byte{0, 13, 33}: "WISCORE Inc.",
+ [3]byte{0, 13, 34}: "Unitronics LTD",
+ [3]byte{0, 13, 35}: "Smart Solution, Inc",
+ [3]byte{0, 13, 36}: "SENTEC E&E CO., LTD.",
+ [3]byte{0, 13, 37}: "SANDEN CORPORATION",
+ [3]byte{0, 13, 38}: "Primagraphics Limited",
+ [3]byte{0, 13, 39}: "MICROPLEX Printware AG",
+ [3]byte{0, 13, 40}: "Cisco Systems, Inc",
+ [3]byte{0, 13, 41}: "Cisco Systems, Inc",
+ [3]byte{0, 13, 42}: "Scanmatic AS",
+ [3]byte{0, 13, 43}: "Racal Instruments",
+ [3]byte{0, 13, 44}: "Net2Edge Limited",
+ [3]byte{0, 13, 45}: "NCT Deutschland GmbH",
+ [3]byte{0, 13, 46}: "Matsushita Avionics Systems Corporation",
+ [3]byte{0, 13, 47}: "AIN Comm.Tech.Co., LTD",
+ [3]byte{0, 13, 48}: "IceFyre Semiconductor",
+ [3]byte{0, 13, 49}: "Compellent Technologies, Inc.",
+ [3]byte{0, 13, 50}: "DispenseSource, Inc.",
+ [3]byte{0, 13, 51}: "Prediwave Corp.",
+ [3]byte{0, 13, 52}: "Shell International Exploration and Production, Inc.",
+ [3]byte{0, 13, 53}: "PAC International Ltd",
+ [3]byte{0, 13, 54}: "Wu Han Routon Electronic Co., Ltd",
+ [3]byte{0, 13, 55}: "WIPLUG",
+ [3]byte{0, 13, 56}: "NISSIN INC.",
+ [3]byte{0, 13, 57}: "Network Electronics",
+ [3]byte{0, 13, 58}: "Microsoft Corp.",
+ [3]byte{0, 13, 59}: "Microelectronics Technology Inc.",
+ [3]byte{0, 13, 60}: "i.Tech Dynamic Ltd",
+ [3]byte{0, 13, 61}: "Hammerhead Systems, Inc.",
+ [3]byte{0, 13, 62}: "APLUX Communications Ltd.",
+ [3]byte{0, 13, 63}: "VTI Instruments Corporation",
+ [3]byte{0, 13, 64}: "Verint Loronix Video Solutions",
+ [3]byte{0, 13, 65}: "Siemens AG ICM MP UC RD IT KLF1",
+ [3]byte{0, 13, 66}: "Newbest Development Limited",
+ [3]byte{0, 13, 67}: "DRS Tactical Systems Inc.",
+ [3]byte{0, 13, 68}: "Audio BU - Logitech",
+ [3]byte{0, 13, 69}: "Tottori SANYO Electric Co., Ltd.",
+ [3]byte{0, 13, 70}: "Parker SSD Drives",
+ [3]byte{0, 13, 71}: "Collex",
+ [3]byte{0, 13, 72}: "AEWIN Technologies Co., Ltd.",
+ [3]byte{0, 13, 73}: "Triton Systems of Delaware, Inc.",
+ [3]byte{0, 13, 74}: "Steag ETA-Optik",
+ [3]byte{0, 13, 75}: "Roku, Inc.",
+ [3]byte{0, 13, 76}: "Outline Electronics Ltd.",
+ [3]byte{0, 13, 77}: "Ninelanes",
+ [3]byte{0, 13, 78}: "NDR Co.,LTD.",
+ [3]byte{0, 13, 79}: "Kenwood Corporation",
+ [3]byte{0, 13, 80}: "Galazar Networks",
+ [3]byte{0, 13, 81}: "DIVR Systems, Inc.",
+ [3]byte{0, 13, 82}: "Comart system",
+ [3]byte{0, 13, 83}: "Beijing 5w Communication Corp.",
+ [3]byte{0, 13, 84}: "3Com Ltd",
+ [3]byte{0, 13, 85}: "SANYCOM Technology Co.,Ltd",
+ [3]byte{0, 13, 86}: "Dell Inc.",
+ [3]byte{0, 13, 87}: "Fujitsu I-Network Systems Limited.",
+ [3]byte{0, 13, 88}: "Private",
+ [3]byte{0, 13, 89}: "Amity Systems, Inc.",
+ [3]byte{0, 13, 90}: "Tiesse SpA",
+ [3]byte{0, 13, 91}: "Smart Empire Investments Limited",
+ [3]byte{0, 13, 92}: "Robert Bosch GmbH, VT-ATMO",
+ [3]byte{0, 13, 93}: "Raritan Computer, Inc",
+ [3]byte{0, 13, 94}: "NEC Personal Products",
+ [3]byte{0, 13, 95}: "Minds Inc",
+ [3]byte{0, 13, 96}: "IBM Corp",
+ [3]byte{0, 13, 97}: "Giga-Byte Technology Co., Ltd.",
+ [3]byte{0, 13, 98}: "Funkwerk Dabendorf GmbH",
+ [3]byte{0, 13, 99}: "DENT Instruments, Inc.",
+ [3]byte{0, 13, 100}: "COMAG Handels AG",
+ [3]byte{0, 13, 101}: "Cisco Systems, Inc",
+ [3]byte{0, 13, 102}: "Cisco Systems, Inc",
+ [3]byte{0, 13, 103}: "Ericsson",
+ [3]byte{0, 13, 104}: "Vinci Systems, Inc.",
+ [3]byte{0, 13, 105}: "TMT&D Corporation",
+ [3]byte{0, 13, 106}: "Redwood Technologies LTD",
+ [3]byte{0, 13, 107}: "Mita-Teknik A/S",
+ [3]byte{0, 13, 108}: "M-Audio",
+ [3]byte{0, 13, 109}: "K-Tech Devices Corp.",
+ [3]byte{0, 13, 110}: "K-Patents Oy",
+ [3]byte{0, 13, 111}: "Ember Corporation",
+ [3]byte{0, 13, 112}: "Datamax Corporation",
+ [3]byte{0, 13, 113}: "boca systems",
+ [3]byte{0, 13, 114}: "2Wire Inc",
+ [3]byte{0, 13, 115}: "Technical Support, Inc.",
+ [3]byte{0, 13, 116}: "Sand Network Systems, Inc.",
+ [3]byte{0, 13, 117}: "Kobian Pte Ltd - Taiwan Branch",
+ [3]byte{0, 13, 118}: "Hokuto Denshi Co,. Ltd.",
+ [3]byte{0, 13, 119}: "FalconStor Software",
+ [3]byte{0, 13, 120}: "Engineering & Security",
+ [3]byte{0, 13, 121}: "Dynamic Solutions Co,.Ltd.",
+ [3]byte{0, 13, 122}: "DiGATTO Asia Pacific Pte Ltd",
+ [3]byte{0, 13, 123}: "Consensys Computers Inc.",
+ [3]byte{0, 13, 124}: "Codian Ltd",
+ [3]byte{0, 13, 125}: "Afco Systems",
+ [3]byte{0, 13, 126}: "Axiowave Networks, Inc.",
+ [3]byte{0, 13, 127}: "MIDAS COMMUNICATION TECHNOLOGIES PTE LTD ( Foreign Branch)",
+ [3]byte{0, 13, 128}: "Online Development Inc",
+ [3]byte{0, 13, 129}: "Pepperl+Fuchs GmbH",
+ [3]byte{0, 13, 130}: "PHS srl",
+ [3]byte{0, 13, 131}: "Sanmina-SCI Hungary Ltd.",
+ [3]byte{0, 13, 132}: "Makus Inc.",
+ [3]byte{0, 13, 133}: "Tapwave, Inc.",
+ [3]byte{0, 13, 134}: "Huber + Suhner AG",
+ [3]byte{0, 13, 135}: "Elitegroup Computer Systems Co.,Ltd.",
+ [3]byte{0, 13, 136}: "D-Link Corporation",
+ [3]byte{0, 13, 137}: "Bils Technology Inc",
+ [3]byte{0, 13, 138}: "Winners Electronics Co., Ltd.",
+ [3]byte{0, 13, 139}: "T&D Corporation",
+ [3]byte{0, 13, 140}: "Shanghai Wedone Digital Ltd. CO.",
+ [3]byte{0, 13, 141}: "Prosoft Technology, Inc",
+ [3]byte{0, 13, 142}: "Koden Electronics Co., Ltd.",
+ [3]byte{0, 13, 143}: "King Tsushin Kogyo Co., LTD.",
+ [3]byte{0, 13, 144}: "Factum Electronics AB",
+ [3]byte{0, 13, 145}: "Eclipse (HQ Espana) S.L.",
+ [3]byte{0, 13, 146}: "ARIMA Communications Corp.",
+ [3]byte{0, 13, 147}: "Apple, Inc.",
+ [3]byte{0, 13, 148}: "AFAR Communications,Inc",
+ [3]byte{0, 13, 149}: "Opti-cell, Inc.",
+ [3]byte{0, 13, 150}: "Vtera Technology Inc.",
+ [3]byte{0, 13, 151}: "ABB Inc./Tropos",
+ [3]byte{0, 13, 152}: "S.W.A.C. Schmitt-Walter Automation Consult GmbH",
+ [3]byte{0, 13, 153}: "Orbital Sciences Corp.; Launch Systems Group",
+ [3]byte{0, 13, 154}: "INFOTEC LTD",
+ [3]byte{0, 13, 155}: "Heraeus Electro-Nite International N.V.",
+ [3]byte{0, 13, 156}: "Elan GmbH & Co KG",
+ [3]byte{0, 13, 157}: "Hewlett Packard",
+ [3]byte{0, 13, 158}: "TOKUDEN OHIZUMI SEISAKUSYO Co.,Ltd.",
+ [3]byte{0, 13, 159}: "RF Micro Devices",
+ [3]byte{0, 13, 160}: "NEDAP N.V.",
+ [3]byte{0, 13, 161}: "MIRAE ITS Co.,LTD.",
+ [3]byte{0, 13, 162}: "Infrant Technologies, Inc.",
+ [3]byte{0, 13, 163}: "Emerging Technologies Limited",
+ [3]byte{0, 13, 164}: "DOSCH & AMAND SYSTEMS AG",
+ [3]byte{0, 13, 165}: "Fabric7 Systems, Inc",
+ [3]byte{0, 13, 166}: "Universal Switching Corporation",
+ [3]byte{0, 13, 167}: "Private",
+ [3]byte{0, 13, 168}: "Teletronics Technology Corporation",
+ [3]byte{0, 13, 169}: "T.E.A.M. S.L.",
+ [3]byte{0, 13, 170}: "S.A.Tehnology co.,Ltd.",
+ [3]byte{0, 13, 171}: "Parker Hannifin GmbH Electromechanical Division Europe",
+ [3]byte{0, 13, 172}: "Japan CBM Corporation",
+ [3]byte{0, 13, 173}: "Dataprobe, Inc.",
+ [3]byte{0, 13, 174}: "SAMSUNG HEAVY INDUSTRIES CO., LTD.",
+ [3]byte{0, 13, 175}: "Plexus Corp (UK) Ltd",
+ [3]byte{0, 13, 176}: "Olym-tech Co.,Ltd.",
+ [3]byte{0, 13, 177}: "Japan Network Service Co., Ltd.",
+ [3]byte{0, 13, 178}: "Ammasso, Inc.",
+ [3]byte{0, 13, 179}: "SDO Communication Corperation",
+ [3]byte{0, 13, 180}: "NETASQ",
+ [3]byte{0, 13, 181}: "GLOBALSAT TECHNOLOGY CORPORATION",
+ [3]byte{0, 13, 182}: "Broadcom",
+ [3]byte{0, 13, 183}: "SANKO ELECTRIC CO,.LTD",
+ [3]byte{0, 13, 184}: "SCHILLER AG",
+ [3]byte{0, 13, 185}: "PC Engines GmbH",
+ [3]byte{0, 13, 186}: "Océ Document Technologies GmbH",
+ [3]byte{0, 13, 187}: "Nippon Dentsu Co.,Ltd.",
+ [3]byte{0, 13, 188}: "Cisco Systems, Inc",
+ [3]byte{0, 13, 189}: "Cisco Systems, Inc",
+ [3]byte{0, 13, 190}: "Bel Fuse Europe Ltd.,UK",
+ [3]byte{0, 13, 191}: "TekTone Sound & Signal Mfg., Inc.",
+ [3]byte{0, 13, 192}: "Spagat AS",
+ [3]byte{0, 13, 193}: "SafeWeb Inc",
+ [3]byte{0, 13, 194}: "Private",
+ [3]byte{0, 13, 195}: "First Communication, Inc.",
+ [3]byte{0, 13, 196}: "Emcore Corporation",
+ [3]byte{0, 13, 197}: "EchoStar Global B.V.",
+ [3]byte{0, 13, 198}: "DigiRose Technology Co., Ltd.",
+ [3]byte{0, 13, 199}: "COSMIC ENGINEERING INC.",
+ [3]byte{0, 13, 200}: "AirMagnet, Inc",
+ [3]byte{0, 13, 201}: "THALES Elektronik Systeme GmbH",
+ [3]byte{0, 13, 202}: "Tait Electronics",
+ [3]byte{0, 13, 203}: "Petcomkorea Co., Ltd.",
+ [3]byte{0, 13, 204}: "NEOSMART Corp.",
+ [3]byte{0, 13, 205}: "GROUPE TXCOM",
+ [3]byte{0, 13, 206}: "Dynavac Technology Pte Ltd",
+ [3]byte{0, 13, 207}: "Cidra Corp.",
+ [3]byte{0, 13, 208}: "TetraTec Instruments GmbH",
+ [3]byte{0, 13, 209}: "Stryker Corporation",
+ [3]byte{0, 13, 210}: "Simrad Optronics ASA",
+ [3]byte{0, 13, 211}: "SAMWOO Telecommunication Co.,Ltd.",
+ [3]byte{0, 13, 212}: "Symantec Corporation",
+ [3]byte{0, 13, 213}: "O'RITE TECHNOLOGY CO.,LTD",
+ [3]byte{0, 13, 214}: "ITI LTD",
+ [3]byte{0, 13, 215}: "Bright",
+ [3]byte{0, 13, 216}: "BBN",
+ [3]byte{0, 13, 217}: "Anton Paar GmbH",
+ [3]byte{0, 13, 218}: "ALLIED TELESIS K.K.",
+ [3]byte{0, 13, 219}: "AIRWAVE TECHNOLOGIES INC.",
+ [3]byte{0, 13, 220}: "VAC",
+ [3]byte{0, 13, 221}: "Profilo Telra Elektronik Sanayi ve Ticaret. A.Ş",
+ [3]byte{0, 13, 222}: "Joyteck Co., Ltd.",
+ [3]byte{0, 13, 223}: "Japan Image & Network Inc.",
+ [3]byte{0, 13, 224}: "ICPDAS Co.,LTD",
+ [3]byte{0, 13, 225}: "Control Products, Inc.",
+ [3]byte{0, 13, 226}: "CMZ Sistemi Elettronici",
+ [3]byte{0, 13, 227}: "AT Sweden AB",
+ [3]byte{0, 13, 228}: "DIGINICS, Inc.",
+ [3]byte{0, 13, 229}: "Samsung Thales",
+ [3]byte{0, 13, 230}: "YOUNGBO ENGINEERING CO.,LTD",
+ [3]byte{0, 13, 231}: "Snap-on OEM Group",
+ [3]byte{0, 13, 232}: "Nasaco Electronics Pte. Ltd",
+ [3]byte{0, 13, 233}: "Napatech Aps",
+ [3]byte{0, 13, 234}: "Kingtel Telecommunication Corp.",
+ [3]byte{0, 13, 235}: "CompXs Limited",
+ [3]byte{0, 13, 236}: "Cisco Systems, Inc",
+ [3]byte{0, 13, 237}: "Cisco Systems, Inc",
+ [3]byte{0, 13, 238}: "Andrew RF Power Amplifier Group",
+ [3]byte{0, 13, 239}: "Soc. Coop. Bilanciai",
+ [3]byte{0, 13, 240}: "QCOM TECHNOLOGY INC.",
+ [3]byte{0, 13, 241}: "IONIX INC.",
+ [3]byte{0, 13, 242}: "Private",
+ [3]byte{0, 13, 243}: "Asmax Solutions",
+ [3]byte{0, 13, 244}: "Watertek Co.",
+ [3]byte{0, 13, 245}: "Teletronics International Inc.",
+ [3]byte{0, 13, 246}: "Technology Thesaurus Corp.",
+ [3]byte{0, 13, 247}: "Space Dynamics Lab",
+ [3]byte{0, 13, 248}: "ORGA Kartensysteme GmbH",
+ [3]byte{0, 13, 249}: "NDS Limited",
+ [3]byte{0, 13, 250}: "Micro Control Systems Ltd.",
+ [3]byte{0, 13, 251}: "Komax AG",
+ [3]byte{0, 13, 252}: "ITFOR Inc.",
+ [3]byte{0, 13, 253}: "Huges Hi-Tech Inc.,",
+ [3]byte{0, 13, 254}: "Hauppauge Computer Works, Inc.",
+ [3]byte{0, 13, 255}: "CHENMING MOLD INDUSTRY CORP.",
+ [3]byte{0, 14, 0}: "Atrie",
+ [3]byte{0, 14, 1}: "ASIP Technologies Inc.",
+ [3]byte{0, 14, 2}: "Advantech AMT Inc.",
+ [3]byte{0, 14, 3}: "Emulex Corporation",
+ [3]byte{0, 14, 4}: "CMA/Microdialysis AB",
+ [3]byte{0, 14, 5}: "WIRELESS MATRIX CORP.",
+ [3]byte{0, 14, 6}: "Team Simoco Ltd",
+ [3]byte{0, 14, 7}: "Sony Mobile Communications AB",
+ [3]byte{0, 14, 8}: "Cisco-Linksys, LLC",
+ [3]byte{0, 14, 9}: "Shenzhen Coship Software Co.,LTD.",
+ [3]byte{0, 14, 10}: "SAKUMA DESIGN OFFICE",
+ [3]byte{0, 14, 11}: "Netac Technology Co., Ltd.",
+ [3]byte{0, 14, 12}: "Intel Corporation",
+ [3]byte{0, 14, 13}: "Hesch Schröder GmbH",
+ [3]byte{0, 14, 14}: "ESA elettronica S.P.A.",
+ [3]byte{0, 14, 15}: "ERMME",
+ [3]byte{0, 14, 16}: "C-guys, Inc.",
+ [3]byte{0, 14, 17}: "BDT Büro und Datentechnik GmbH & Co.KG",
+ [3]byte{0, 14, 18}: "Adaptive Micro Systems Inc.",
+ [3]byte{0, 14, 19}: "Accu-Sort Systems inc.",
+ [3]byte{0, 14, 20}: "Visionary Solutions, Inc.",
+ [3]byte{0, 14, 21}: "Tadlys LTD",
+ [3]byte{0, 14, 22}: "SouthWing S.L.",
+ [3]byte{0, 14, 23}: "Private",
+ [3]byte{0, 14, 24}: "MyA Technology",
+ [3]byte{0, 14, 25}: "LogicaCMG Pty Ltd",
+ [3]byte{0, 14, 26}: "JPS Communications",
+ [3]byte{0, 14, 27}: "IAV GmbH",
+ [3]byte{0, 14, 28}: "Hach Company",
+ [3]byte{0, 14, 29}: "ARION Technology Inc.",
+ [3]byte{0, 14, 30}: "QLogic Corporation",
+ [3]byte{0, 14, 31}: "TCL Networks Equipment Co., Ltd.",
+ [3]byte{0, 14, 32}: "ACCESS Systems Americas, Inc.",
+ [3]byte{0, 14, 33}: "MTU Friedrichshafen GmbH",
+ [3]byte{0, 14, 34}: "Private",
+ [3]byte{0, 14, 35}: "Incipient, Inc.",
+ [3]byte{0, 14, 36}: "Huwell Technology Inc.",
+ [3]byte{0, 14, 37}: "Hannae Technology Co., Ltd",
+ [3]byte{0, 14, 38}: "Gincom Technology Corp.",
+ [3]byte{0, 14, 39}: "Crere Networks, Inc.",
+ [3]byte{0, 14, 40}: "Dynamic Ratings P/L",
+ [3]byte{0, 14, 41}: "Shester Communications Inc",
+ [3]byte{0, 14, 42}: "Private",
+ [3]byte{0, 14, 43}: "Safari Technologies",
+ [3]byte{0, 14, 44}: "Netcodec co.",
+ [3]byte{0, 14, 45}: "Hyundai Digital Technology Co.,Ltd.",
+ [3]byte{0, 14, 46}: "Edimax Technology Co. Ltd.",
+ [3]byte{0, 14, 47}: "Roche Diagnostics GmbH",
+ [3]byte{0, 14, 48}: "AERAS Networks, Inc.",
+ [3]byte{0, 14, 49}: "Olympus Soft Imaging Solutions GmbH",
+ [3]byte{0, 14, 50}: "Kontron Medical",
+ [3]byte{0, 14, 51}: "Shuko Electronics Co.,Ltd",
+ [3]byte{0, 14, 52}: "NexGen City, LP",
+ [3]byte{0, 14, 53}: "Intel Corporation",
+ [3]byte{0, 14, 54}: "HEINESYS, Inc.",
+ [3]byte{0, 14, 55}: "Harms & Wende GmbH & Co.KG",
+ [3]byte{0, 14, 56}: "Cisco Systems, Inc",
+ [3]byte{0, 14, 57}: "Cisco Systems, Inc",
+ [3]byte{0, 14, 58}: "Cirrus Logic",
+ [3]byte{0, 14, 59}: "Hawking Technologies, Inc.",
+ [3]byte{0, 14, 60}: "Transact Technologies Inc",
+ [3]byte{0, 14, 61}: "Televic N.V.",
+ [3]byte{0, 14, 62}: "Sun Optronics Inc",
+ [3]byte{0, 14, 63}: "Soronti, Inc.",
+ [3]byte{0, 14, 64}: "Nortel Networks",
+ [3]byte{0, 14, 65}: "NIHON MECHATRONICS CO.,LTD.",
+ [3]byte{0, 14, 66}: "Motic Incoporation Ltd.",
+ [3]byte{0, 14, 67}: "G-Tek Electronics Sdn. Bhd.",
+ [3]byte{0, 14, 68}: "Digital 5, Inc.",
+ [3]byte{0, 14, 69}: "Beijing Newtry Electronic Technology Ltd",
+ [3]byte{0, 14, 70}: "Niigata Seimitsu Co.,Ltd.",
+ [3]byte{0, 14, 71}: "NCI System Co.,Ltd.",
+ [3]byte{0, 14, 72}: "Lipman TransAction Solutions",
+ [3]byte{0, 14, 73}: "Forsway Scandinavia AB",
+ [3]byte{0, 14, 74}: "Changchun Huayu WEBPAD Co.,LTD",
+ [3]byte{0, 14, 75}: "atrium c and i",
+ [3]byte{0, 14, 76}: "Bermai Inc.",
+ [3]byte{0, 14, 77}: "Numesa Inc.",
+ [3]byte{0, 14, 78}: "Waveplus Technology Co., Ltd.",
+ [3]byte{0, 14, 79}: "Trajet GmbH",
+ [3]byte{0, 14, 80}: "Thomson Telecom Belgium",
+ [3]byte{0, 14, 81}: "tecna elettronica srl",
+ [3]byte{0, 14, 82}: "Optium Corporation",
+ [3]byte{0, 14, 83}: "AV TECH CORPORATION",
+ [3]byte{0, 14, 84}: "AlphaCell Wireless Ltd.",
+ [3]byte{0, 14, 85}: "AUVITRAN",
+ [3]byte{0, 14, 86}: "4G Systems GmbH & Co. KG",
+ [3]byte{0, 14, 87}: "Iworld Networking, Inc.",
+ [3]byte{0, 14, 88}: "Sonos, Inc.",
+ [3]byte{0, 14, 89}: "Sagemcom Broadband SAS",
+ [3]byte{0, 14, 90}: "TELEFIELD inc.",
+ [3]byte{0, 14, 91}: "ParkerVision - Direct2Data",
+ [3]byte{0, 14, 92}: "ARRIS Group, Inc.",
+ [3]byte{0, 14, 93}: "Triple Play Technologies A/S",
+ [3]byte{0, 14, 94}: "Raisecom Technology",
+ [3]byte{0, 14, 95}: "activ-net GmbH & Co. KG",
+ [3]byte{0, 14, 96}: "360SUN Digital Broadband Corporation",
+ [3]byte{0, 14, 97}: "MICROTROL LIMITED",
+ [3]byte{0, 14, 98}: "Nortel Networks",
+ [3]byte{0, 14, 99}: "Lemke Diagnostics GmbH",
+ [3]byte{0, 14, 100}: "Elphel, Inc",
+ [3]byte{0, 14, 101}: "TransCore",
+ [3]byte{0, 14, 102}: "Hitachi Industry & Control Solutions, Ltd.",
+ [3]byte{0, 14, 103}: "Eltis Microelectronics Ltd.",
+ [3]byte{0, 14, 104}: "E-TOP Network Technology Inc.",
+ [3]byte{0, 14, 105}: "China Electric Power Research Institute",
+ [3]byte{0, 14, 106}: "3Com Ltd",
+ [3]byte{0, 14, 107}: "Janitza electronics GmbH",
+ [3]byte{0, 14, 108}: "Device Drivers Limited",
+ [3]byte{0, 14, 109}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{0, 14, 110}: "MAT S.A. (Mircrelec Advanced Technology)",
+ [3]byte{0, 14, 111}: "IRIS Corporation Berhad",
+ [3]byte{0, 14, 112}: "in2 Networks",
+ [3]byte{0, 14, 113}: "Gemstar Technology Development Ltd.",
+ [3]byte{0, 14, 114}: "CTS electronics",
+ [3]byte{0, 14, 115}: "Tpack A/S",
+ [3]byte{0, 14, 116}: "Solar Telecom. Tech",
+ [3]byte{0, 14, 117}: "New York Air Brake Corp.",
+ [3]byte{0, 14, 118}: "GEMSOC INNOVISION INC.",
+ [3]byte{0, 14, 119}: "Decru, Inc.",
+ [3]byte{0, 14, 120}: "Amtelco",
+ [3]byte{0, 14, 121}: "Ample Communications Inc.",
+ [3]byte{0, 14, 122}: "GemWon Communications Co., Ltd.",
+ [3]byte{0, 14, 123}: "Toshiba",
+ [3]byte{0, 14, 124}: "Televes S.A.",
+ [3]byte{0, 14, 125}: "Electronics Line 3000 Ltd.",
+ [3]byte{0, 14, 126}: "ionSign Oy",
+ [3]byte{0, 14, 127}: "Hewlett Packard",
+ [3]byte{0, 14, 128}: "Thomson Technology Inc",
+ [3]byte{0, 14, 129}: "Devicescape Software, Inc.",
+ [3]byte{0, 14, 130}: "Commtech Wireless",
+ [3]byte{0, 14, 131}: "Cisco Systems, Inc",
+ [3]byte{0, 14, 132}: "Cisco Systems, Inc",
+ [3]byte{0, 14, 133}: "Catalyst Enterprises, Inc.",
+ [3]byte{0, 14, 134}: "Alcatel North America",
+ [3]byte{0, 14, 135}: "adp Gauselmann GmbH",
+ [3]byte{0, 14, 136}: "VIDEOTRON CORP.",
+ [3]byte{0, 14, 137}: "CLEMATIC",
+ [3]byte{0, 14, 138}: "Avara Technologies Pty. Ltd.",
+ [3]byte{0, 14, 139}: "Astarte Technology Co, Ltd.",
+ [3]byte{0, 14, 140}: "Siemens AG A&D ET",
+ [3]byte{0, 14, 141}: "Systems in Progress Holding GmbH",
+ [3]byte{0, 14, 142}: "SparkLAN Communications, Inc.",
+ [3]byte{0, 14, 143}: "Sercomm Corp.",
+ [3]byte{0, 14, 144}: "PONICO CORP.",
+ [3]byte{0, 14, 145}: "Navico Auckland Ltd",
+ [3]byte{0, 14, 146}: "Open Telecom",
+ [3]byte{0, 14, 147}: "Milénio 3 Sistemas Electrónicos, Lda.",
+ [3]byte{0, 14, 148}: "Maas International BV",
+ [3]byte{0, 14, 149}: "Fujiya Denki Seisakusho Co.,Ltd.",
+ [3]byte{0, 14, 150}: "Cubic Defense Applications, Inc.",
+ [3]byte{0, 14, 151}: "Ultracker Technology CO., Inc",
+ [3]byte{0, 14, 152}: "HME Clear-Com LTD.",
+ [3]byte{0, 14, 153}: "Spectrum Digital, Inc",
+ [3]byte{0, 14, 154}: "BOE TECHNOLOGY GROUP CO.,LTD",
+ [3]byte{0, 14, 155}: "Ambit Microsystems Corporation",
+ [3]byte{0, 14, 156}: "Benchmark Electronics",
+ [3]byte{0, 14, 157}: "Tiscali UK Ltd",
+ [3]byte{0, 14, 158}: "Topfield Co., Ltd",
+ [3]byte{0, 14, 159}: "TEMIC SDS GmbH",
+ [3]byte{0, 14, 160}: "NetKlass Technology Inc.",
+ [3]byte{0, 14, 161}: "Formosa Teletek Corporation",
+ [3]byte{0, 14, 162}: "McAfee, Inc",
+ [3]byte{0, 14, 163}: "CNCR-IT CO.,LTD,HangZhou P.R.CHINA",
+ [3]byte{0, 14, 164}: "Certance Inc.",
+ [3]byte{0, 14, 165}: "BLIP Systems",
+ [3]byte{0, 14, 166}: "ASUSTek COMPUTER INC.",
+ [3]byte{0, 14, 167}: "Endace Technology",
+ [3]byte{0, 14, 168}: "United Technologists Europe Limited",
+ [3]byte{0, 14, 169}: "Shanghai Xun Shi Communications Equipment Ltd. Co.",
+ [3]byte{0, 14, 170}: "Scalent Systems, Inc.",
+ [3]byte{0, 14, 171}: "Cray Inc",
+ [3]byte{0, 14, 172}: "MINTRON ENTERPRISE CO., LTD.",
+ [3]byte{0, 14, 173}: "Metanoia Technologies, Inc.",
+ [3]byte{0, 14, 174}: "GAWELL TECHNOLOGIES CORP.",
+ [3]byte{0, 14, 175}: "CASTEL",
+ [3]byte{0, 14, 176}: "Solutions Radio BV",
+ [3]byte{0, 14, 177}: "Newcotech,Ltd",
+ [3]byte{0, 14, 178}: "Micro-Research Finland Oy",
+ [3]byte{0, 14, 179}: "Hewlett Packard",
+ [3]byte{0, 14, 180}: "GUANGZHOU GAOKE COMMUNICATIONS TECHNOLOGY CO.LTD.",
+ [3]byte{0, 14, 181}: "Ecastle Electronics Co., Ltd.",
+ [3]byte{0, 14, 182}: "Riverbed Technology, Inc.",
+ [3]byte{0, 14, 183}: "Knovative, Inc.",
+ [3]byte{0, 14, 184}: "Iiga co.,Ltd",
+ [3]byte{0, 14, 185}: "HASHIMOTO Electronics Industry Co.,Ltd.",
+ [3]byte{0, 14, 186}: "HANMI SEMICONDUCTOR CO., LTD.",
+ [3]byte{0, 14, 187}: "Everbee Networks",
+ [3]byte{0, 14, 188}: "Paragon Fidelity GmbH",
+ [3]byte{0, 14, 189}: "Burdick, a Quinton Compny",
+ [3]byte{0, 14, 190}: "B&B Electronics Manufacturing Co.",
+ [3]byte{0, 14, 191}: "Remsdaq Limited",
+ [3]byte{0, 14, 192}: "Nortel Networks",
+ [3]byte{0, 14, 193}: "MYNAH Technologies",
+ [3]byte{0, 14, 194}: "Lowrance Electronics, Inc.",
+ [3]byte{0, 14, 195}: "Logic Controls, Inc.",
+ [3]byte{0, 14, 196}: "Iskra Transmission d.d.",
+ [3]byte{0, 14, 197}: "Digital Multitools Inc",
+ [3]byte{0, 14, 198}: "ASIX ELECTRONICS CORP.",
+ [3]byte{0, 14, 199}: "Motorola Korea",
+ [3]byte{0, 14, 200}: "Zoran Corporation",
+ [3]byte{0, 14, 201}: "YOKO Technology Corp.",
+ [3]byte{0, 14, 202}: "WTSS Inc",
+ [3]byte{0, 14, 203}: "VineSys Technology",
+ [3]byte{0, 14, 204}: "Tableau, LLC",
+ [3]byte{0, 14, 205}: "SKOV A/S",
+ [3]byte{0, 14, 206}: "S.I.T.T.I. S.p.A.",
+ [3]byte{0, 14, 207}: "PROFIBUS Nutzerorganisation e.V.",
+ [3]byte{0, 14, 208}: "Privaris, Inc.",
+ [3]byte{0, 14, 209}: "Osaka Micro Computer.",
+ [3]byte{0, 14, 210}: "Filtronic plc",
+ [3]byte{0, 14, 211}: "Epicenter, Inc.",
+ [3]byte{0, 14, 212}: "CRESITT INDUSTRIE",
+ [3]byte{0, 14, 213}: "COPAN Systems Inc.",
+ [3]byte{0, 14, 214}: "Cisco Systems, Inc",
+ [3]byte{0, 14, 215}: "Cisco Systems, Inc",
+ [3]byte{0, 14, 216}: "Positron Access Solutions Corp",
+ [3]byte{0, 14, 217}: "Aksys, Ltd.",
+ [3]byte{0, 14, 218}: "C-TECH UNITED CORP.",
+ [3]byte{0, 14, 219}: "XiNCOM Corp.",
+ [3]byte{0, 14, 220}: "Tellion INC.",
+ [3]byte{0, 14, 221}: "SHURE INCORPORATED",
+ [3]byte{0, 14, 222}: "REMEC, Inc.",
+ [3]byte{0, 14, 223}: "PLX Technology",
+ [3]byte{0, 14, 224}: "Mcharge",
+ [3]byte{0, 14, 225}: "ExtremeSpeed Inc.",
+ [3]byte{0, 14, 226}: "Custom Engineering",
+ [3]byte{0, 14, 227}: "Chiyu Technology Co.,Ltd",
+ [3]byte{0, 14, 228}: "BOE TECHNOLOGY GROUP CO.,LTD",
+ [3]byte{0, 14, 229}: "bitWallet, Inc.",
+ [3]byte{0, 14, 230}: "Adimos Systems LTD",
+ [3]byte{0, 14, 231}: "AAC ELECTRONICS CORP.",
+ [3]byte{0, 14, 232}: "Zioncom Electronics (Shenzhen) Ltd.",
+ [3]byte{0, 14, 233}: "WayTech Development, Inc.",
+ [3]byte{0, 14, 234}: "Shadong Luneng Jicheng Electronics,Co.,Ltd",
+ [3]byte{0, 14, 235}: "Sandmartin(zhong shan)Electronics Co.,Ltd",
+ [3]byte{0, 14, 236}: "Orban",
+ [3]byte{0, 14, 237}: "Nokia Danmark A/S",
+ [3]byte{0, 14, 238}: "Muco Industrie BV",
+ [3]byte{0, 14, 239}: "Private",
+ [3]byte{0, 14, 240}: "Festo AG & Co. KG",
+ [3]byte{0, 14, 241}: "EZQUEST INC.",
+ [3]byte{0, 14, 242}: "Infinico Corporation",
+ [3]byte{0, 14, 243}: "Smarthome",
+ [3]byte{0, 14, 244}: "Kasda Networks Inc",
+ [3]byte{0, 14, 245}: "iPAC Technology Co., Ltd.",
+ [3]byte{0, 14, 246}: "E-TEN Information Systems Co., Ltd.",
+ [3]byte{0, 14, 247}: "Vulcan Portals Inc",
+ [3]byte{0, 14, 248}: "SBC ASI",
+ [3]byte{0, 14, 249}: "REA Elektronik GmbH",
+ [3]byte{0, 14, 250}: "Optoway Technology Incorporation",
+ [3]byte{0, 14, 251}: "Macey Enterprises",
+ [3]byte{0, 14, 252}: "JTAG Technologies B.V.",
+ [3]byte{0, 14, 253}: "FUJINON CORPORATION",
+ [3]byte{0, 14, 254}: "EndRun Technologies LLC",
+ [3]byte{0, 14, 255}: "Megasolution,Inc.",
+ [3]byte{0, 15, 0}: "Legra Systems, Inc.",
+ [3]byte{0, 15, 1}: "DIGITALKS INC",
+ [3]byte{0, 15, 2}: "Digicube Technology Co., Ltd",
+ [3]byte{0, 15, 3}: "COM&C CO., LTD",
+ [3]byte{0, 15, 4}: "cim-usa inc",
+ [3]byte{0, 15, 5}: "3B SYSTEM INC.",
+ [3]byte{0, 15, 6}: "Nortel Networks",
+ [3]byte{0, 15, 7}: "Mangrove Systems, Inc.",
+ [3]byte{0, 15, 8}: "Indagon Oy",
+ [3]byte{0, 15, 9}: "Private",
+ [3]byte{0, 15, 10}: "Clear Edge Networks",
+ [3]byte{0, 15, 11}: "Kentima Technologies AB",
+ [3]byte{0, 15, 12}: "SYNCHRONIC ENGINEERING",
+ [3]byte{0, 15, 13}: "Hunt Electronic Co., Ltd.",
+ [3]byte{0, 15, 14}: "WaveSplitter Technologies, Inc.",
+ [3]byte{0, 15, 15}: "Real ID Technology Co., Ltd.",
+ [3]byte{0, 15, 16}: "RDM Corporation",
+ [3]byte{0, 15, 17}: "Prodrive B.V.",
+ [3]byte{0, 15, 18}: "Panasonic Europe Ltd.",
+ [3]byte{0, 15, 19}: "Nisca corporation",
+ [3]byte{0, 15, 20}: "Mindray Co., Ltd.",
+ [3]byte{0, 15, 21}: "Kjaerulff1 A/S",
+ [3]byte{0, 15, 22}: "JAY HOW TECHNOLOGY CO.,",
+ [3]byte{0, 15, 23}: "Insta Elektro GmbH",
+ [3]byte{0, 15, 24}: "Industrial Control Systems",
+ [3]byte{0, 15, 25}: "Boston Scientific",
+ [3]byte{0, 15, 26}: "Gaming Support B.V.",
+ [3]byte{0, 15, 27}: "Ego Systems Inc.",
+ [3]byte{0, 15, 28}: "DigitAll World Co., Ltd",
+ [3]byte{0, 15, 29}: "Cosmo Techs Co., Ltd.",
+ [3]byte{0, 15, 30}: "Chengdu KT Electric Co.of High & New Technology",
+ [3]byte{0, 15, 31}: "Dell Inc.",
+ [3]byte{0, 15, 32}: "Hewlett Packard",
+ [3]byte{0, 15, 33}: "Scientific Atlanta, Inc",
+ [3]byte{0, 15, 34}: "Helius, Inc.",
+ [3]byte{0, 15, 35}: "Cisco Systems, Inc",
+ [3]byte{0, 15, 36}: "Cisco Systems, Inc",
+ [3]byte{0, 15, 37}: "AimValley B.V.",
+ [3]byte{0, 15, 38}: "WorldAccxx LLC",
+ [3]byte{0, 15, 39}: "TEAL Electronics, Inc.",
+ [3]byte{0, 15, 40}: "Itronix Corporation",
+ [3]byte{0, 15, 41}: "Augmentix Corporation",
+ [3]byte{0, 15, 42}: "Cableware Electronics",
+ [3]byte{0, 15, 43}: "GREENBELL SYSTEMS",
+ [3]byte{0, 15, 44}: "Uplogix, Inc.",
+ [3]byte{0, 15, 45}: "CHUNG-HSIN ELECTRIC & MACHINERY MFG.CORP.",
+ [3]byte{0, 15, 46}: "Megapower International Corp.",
+ [3]byte{0, 15, 47}: "W-LINX TECHNOLOGY CO., LTD.",
+ [3]byte{0, 15, 48}: "Raza Microelectronics Inc",
+ [3]byte{0, 15, 49}: "Allied Vision Technologies Canada Inc",
+ [3]byte{0, 15, 50}: "Lootom Telcovideo Network Wuxi Co Ltd",
+ [3]byte{0, 15, 51}: "DUALi Inc.",
+ [3]byte{0, 15, 52}: "Cisco Systems, Inc",
+ [3]byte{0, 15, 53}: "Cisco Systems, Inc",
+ [3]byte{0, 15, 54}: "Accurate Techhnologies, Inc.",
+ [3]byte{0, 15, 55}: "Xambala Incorporated",
+ [3]byte{0, 15, 56}: "Netstar",
+ [3]byte{0, 15, 57}: "IRIS SENSORS",
+ [3]byte{0, 15, 58}: "HISHARP",
+ [3]byte{0, 15, 59}: "Fuji System Machines Co., Ltd.",
+ [3]byte{0, 15, 60}: "Endeleo Limited",
+ [3]byte{0, 15, 61}: "D-Link Corporation",
+ [3]byte{0, 15, 62}: "CardioNet, Inc",
+ [3]byte{0, 15, 63}: "Big Bear Networks",
+ [3]byte{0, 15, 64}: "Optical Internetworking Forum",
+ [3]byte{0, 15, 65}: "Zipher Ltd",
+ [3]byte{0, 15, 66}: "Xalyo Systems",
+ [3]byte{0, 15, 67}: "Wasabi Systems Inc.",
+ [3]byte{0, 15, 68}: "Tivella Inc.",
+ [3]byte{0, 15, 69}: "Stretch, Inc.",
+ [3]byte{0, 15, 70}: "SINAR AG",
+ [3]byte{0, 15, 71}: "ROBOX SPA",
+ [3]byte{0, 15, 72}: "Polypix Inc.",
+ [3]byte{0, 15, 73}: "Northover Solutions Limited",
+ [3]byte{0, 15, 74}: "Kyushu-kyohan co.,ltd",
+ [3]byte{0, 15, 75}: "Oracle Corporation",
+ [3]byte{0, 15, 76}: "Elextech INC",
+ [3]byte{0, 15, 77}: "TalkSwitch",
+ [3]byte{0, 15, 78}: "Cellink",
+ [3]byte{0, 15, 79}: "PCS Systemtechnik GmbH",
+ [3]byte{0, 15, 80}: "StreamScale Limited",
+ [3]byte{0, 15, 81}: "Azul Systems, Inc.",
+ [3]byte{0, 15, 82}: "YORK Refrigeration, Marine & Controls",
+ [3]byte{0, 15, 83}: "Solarflare Communications Inc",
+ [3]byte{0, 15, 84}: "Entrelogic Corporation",
+ [3]byte{0, 15, 85}: "Datawire Communication Networks Inc.",
+ [3]byte{0, 15, 86}: "Continuum Photonics Inc",
+ [3]byte{0, 15, 87}: "CABLELOGIC Co., Ltd.",
+ [3]byte{0, 15, 88}: "Adder Technology Limited",
+ [3]byte{0, 15, 89}: "Phonak AG",
+ [3]byte{0, 15, 90}: "Peribit Networks",
+ [3]byte{0, 15, 91}: "Delta Information Systems, Inc.",
+ [3]byte{0, 15, 92}: "Day One Digital Media Limited",
+ [3]byte{0, 15, 93}: "Genexis BV",
+ [3]byte{0, 15, 94}: "Veo",
+ [3]byte{0, 15, 95}: "Nicety Technologies Inc. (NTS)",
+ [3]byte{0, 15, 96}: "Lifetron Co.,Ltd",
+ [3]byte{0, 15, 97}: "Hewlett Packard",
+ [3]byte{0, 15, 98}: "Alcatel Bell Space N.V.",
+ [3]byte{0, 15, 99}: "Obzerv Technologies",
+ [3]byte{0, 15, 100}: "D&R Electronica Weesp BV",
+ [3]byte{0, 15, 101}: "icube Corp.",
+ [3]byte{0, 15, 102}: "Cisco-Linksys, LLC",
+ [3]byte{0, 15, 103}: "West Instruments",
+ [3]byte{0, 15, 104}: "Vavic Network Technology, Inc.",
+ [3]byte{0, 15, 105}: "SEW Eurodrive GmbH & Co. KG",
+ [3]byte{0, 15, 106}: "Nortel Networks",
+ [3]byte{0, 15, 107}: "GateWare Communications GmbH",
+ [3]byte{0, 15, 108}: "ADDI-DATA GmbH",
+ [3]byte{0, 15, 109}: "Midas Engineering",
+ [3]byte{0, 15, 110}: "BBox",
+ [3]byte{0, 15, 111}: "FTA Communication Technologies",
+ [3]byte{0, 15, 112}: "Wintec Industries, inc.",
+ [3]byte{0, 15, 113}: "Sanmei Electronics Co.,Ltd",
+ [3]byte{0, 15, 114}: "Sandburst",
+ [3]byte{0, 15, 115}: "RS Automation Co., Ltd",
+ [3]byte{0, 15, 116}: "Qamcom Technology AB",
+ [3]byte{0, 15, 117}: "First Silicon Solutions",
+ [3]byte{0, 15, 118}: "Digital Keystone, Inc.",
+ [3]byte{0, 15, 119}: "DENTUM CO.,LTD",
+ [3]byte{0, 15, 120}: "Datacap Systems Inc",
+ [3]byte{0, 15, 121}: "Bluetooth Interest Group Inc.",
+ [3]byte{0, 15, 122}: "BeiJing NuQX Technology CO.,LTD",
+ [3]byte{0, 15, 123}: "Arce Sistemas, S.A.",
+ [3]byte{0, 15, 124}: "ACTi Corporation",
+ [3]byte{0, 15, 125}: "Xirrus",
+ [3]byte{0, 15, 126}: "Ablerex Electronics Co., LTD",
+ [3]byte{0, 15, 127}: "UBSTORAGE Co.,Ltd.",
+ [3]byte{0, 15, 128}: "Trinity Security Systems,Inc.",
+ [3]byte{0, 15, 129}: "PAL Pacific Inc.",
+ [3]byte{0, 15, 130}: "Mortara Instrument, Inc.",
+ [3]byte{0, 15, 131}: "Brainium Technologies Inc.",
+ [3]byte{0, 15, 132}: "Astute Networks, Inc.",
+ [3]byte{0, 15, 133}: "ADDO-Japan Corporation",
+ [3]byte{0, 15, 134}: "BlackBerry RTS",
+ [3]byte{0, 15, 135}: "Maxcess International",
+ [3]byte{0, 15, 136}: "AMETEK, Inc.",
+ [3]byte{0, 15, 137}: "Winnertec System Co., Ltd.",
+ [3]byte{0, 15, 138}: "WideView",
+ [3]byte{0, 15, 139}: "Orion MultiSystems Inc",
+ [3]byte{0, 15, 140}: "Gigawavetech Pte Ltd",
+ [3]byte{0, 15, 141}: "FAST TV-Server AG",
+ [3]byte{0, 15, 142}: "DONGYANG TELECOM CO.,LTD.",
+ [3]byte{0, 15, 143}: "Cisco Systems, Inc",
+ [3]byte{0, 15, 144}: "Cisco Systems, Inc",
+ [3]byte{0, 15, 145}: "Aerotelecom Co.,Ltd.",
+ [3]byte{0, 15, 146}: "Microhard Systems Inc.",
+ [3]byte{0, 15, 147}: "Landis+Gyr Ltd.",
+ [3]byte{0, 15, 148}: "Genexis BV",
+ [3]byte{0, 15, 149}: "ELECOM Co.,LTD Laneed Division",
+ [3]byte{0, 15, 150}: "Telco Systems, Inc.",
+ [3]byte{0, 15, 151}: "Avanex Corporation",
+ [3]byte{0, 15, 152}: "Avamax Co. Ltd.",
+ [3]byte{0, 15, 153}: "APAC opto Electronics Inc.",
+ [3]byte{0, 15, 154}: "Synchrony, Inc.",
+ [3]byte{0, 15, 155}: "Ross Video Limited",
+ [3]byte{0, 15, 156}: "Panduit Corp",
+ [3]byte{0, 15, 157}: "DisplayLink (UK) Ltd",
+ [3]byte{0, 15, 158}: "Murrelektronik GmbH",
+ [3]byte{0, 15, 159}: "ARRIS Group, Inc.",
+ [3]byte{0, 15, 160}: "CANON KOREA BUSINESS SOLUTIONS INC.",
+ [3]byte{0, 15, 161}: "Gigabit Systems Inc.",
+ [3]byte{0, 15, 162}: "2xWireless",
+ [3]byte{0, 15, 163}: "Alpha Networks Inc.",
+ [3]byte{0, 15, 164}: "Sprecher Automation GmbH",
+ [3]byte{0, 15, 165}: "BWA Technology GmbH",
+ [3]byte{0, 15, 166}: "S2 Security Corporation",
+ [3]byte{0, 15, 167}: "Raptor Networks Technology",
+ [3]byte{0, 15, 168}: "Photometrics, Inc.",
+ [3]byte{0, 15, 169}: "PC Fabrik",
+ [3]byte{0, 15, 170}: "Nexus Technologies",
+ [3]byte{0, 15, 171}: "Kyushu Electronics Systems Inc.",
+ [3]byte{0, 15, 172}: "IEEE 802.11",
+ [3]byte{0, 15, 173}: "FMN communications GmbH",
+ [3]byte{0, 15, 174}: "E2O Communications",
+ [3]byte{0, 15, 175}: "Dialog Inc.",
+ [3]byte{0, 15, 176}: "COMPAL ELECTRONICS, INC.",
+ [3]byte{0, 15, 177}: "Cognio Inc.",
+ [3]byte{0, 15, 178}: "Broadband Pacenet (India) Pvt. Ltd.",
+ [3]byte{0, 15, 179}: "Actiontec Electronics, Inc",
+ [3]byte{0, 15, 180}: "Timespace Technology",
+ [3]byte{0, 15, 181}: "NETGEAR",
+ [3]byte{0, 15, 182}: "Europlex Technologies",
+ [3]byte{0, 15, 183}: "Cavium",
+ [3]byte{0, 15, 184}: "CallURL Inc.",
+ [3]byte{0, 15, 185}: "Adaptive Instruments",
+ [3]byte{0, 15, 186}: "Tevebox AB",
+ [3]byte{0, 15, 187}: "Nokia Siemens Networks GmbH & Co. KG.",
+ [3]byte{0, 15, 188}: "Onkey Technologies, Inc.",
+ [3]byte{0, 15, 189}: "MRV Communications (Networks) LTD",
+ [3]byte{0, 15, 190}: "e-w/you Inc.",
+ [3]byte{0, 15, 191}: "DGT Sp. z o.o.",
+ [3]byte{0, 15, 192}: "DELCOMp",
+ [3]byte{0, 15, 193}: "WAVE Corporation",
+ [3]byte{0, 15, 194}: "Uniwell Corporation",
+ [3]byte{0, 15, 195}: "PalmPalm Technology, Inc.",
+ [3]byte{0, 15, 196}: "NST co.,LTD.",
+ [3]byte{0, 15, 197}: "KeyMed Ltd",
+ [3]byte{0, 15, 198}: "Eurocom Industries A/S",
+ [3]byte{0, 15, 199}: "Dionica R&D Ltd.",
+ [3]byte{0, 15, 200}: "Chantry Networks",
+ [3]byte{0, 15, 201}: "Allnet GmbH",
+ [3]byte{0, 15, 202}: "A-JIN TECHLINE CO, LTD",
+ [3]byte{0, 15, 203}: "3Com Ltd",
+ [3]byte{0, 15, 204}: "ARRIS Group, Inc.",
+ [3]byte{0, 15, 205}: "Nortel Networks",
+ [3]byte{0, 15, 206}: "Kikusui Electronics Corp.",
+ [3]byte{0, 15, 207}: "DataWind Research",
+ [3]byte{0, 15, 208}: "ASTRI",
+ [3]byte{0, 15, 209}: "Applied Wireless Identifications Group, Inc.",
+ [3]byte{0, 15, 210}: "EWA Technologies, Inc.",
+ [3]byte{0, 15, 211}: "Digium",
+ [3]byte{0, 15, 212}: "Soundcraft",
+ [3]byte{0, 15, 213}: "Schwechat - RISE",
+ [3]byte{0, 15, 214}: "Sarotech Co., Ltd",
+ [3]byte{0, 15, 215}: "Harman Music Group",
+ [3]byte{0, 15, 216}: "Force, Inc.",
+ [3]byte{0, 15, 217}: "FlexDSL Telecommunications AG",
+ [3]byte{0, 15, 218}: "YAZAKI CORPORATION",
+ [3]byte{0, 15, 219}: "Westell Technologies Inc.",
+ [3]byte{0, 15, 220}: "Ueda Japan Radio Co., Ltd.",
+ [3]byte{0, 15, 221}: "SORDIN AB",
+ [3]byte{0, 15, 222}: "Sony Mobile Communications AB",
+ [3]byte{0, 15, 223}: "SOLOMON Technology Corp.",
+ [3]byte{0, 15, 224}: "NComputing Co.,Ltd.",
+ [3]byte{0, 15, 225}: "ID DIGITAL CORPORATION",
+ [3]byte{0, 15, 226}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{0, 15, 227}: "Damm Cellular Systems A/S",
+ [3]byte{0, 15, 228}: "Pantech Co.,Ltd",
+ [3]byte{0, 15, 229}: "MERCURY SECURITY CORPORATION",
+ [3]byte{0, 15, 230}: "MBTech Systems, Inc.",
+ [3]byte{0, 15, 231}: "Lutron Electronics Co., Inc.",
+ [3]byte{0, 15, 232}: "Lobos, Inc.",
+ [3]byte{0, 15, 233}: "GW TECHNOLOGIES CO.,LTD.",
+ [3]byte{0, 15, 234}: "Giga-Byte Technology Co.,LTD.",
+ [3]byte{0, 15, 235}: "Cylon Controls",
+ [3]byte{0, 15, 236}: "ARKUS Inc.",
+ [3]byte{0, 15, 237}: "Anam Electronics Co., Ltd",
+ [3]byte{0, 15, 238}: "XTec, Incorporated",
+ [3]byte{0, 15, 239}: "Thales e-Transactions GmbH",
+ [3]byte{0, 15, 240}: "Sunray Co. Ltd.",
+ [3]byte{0, 15, 241}: "nex-G Systems Pte.Ltd",
+ [3]byte{0, 15, 242}: "Loud Technologies Inc.",
+ [3]byte{0, 15, 243}: "Jung Myoung Communications&Technology",
+ [3]byte{0, 15, 244}: "Guntermann & Drunck GmbH",
+ [3]byte{0, 15, 245}: "GN&S company",
+ [3]byte{0, 15, 246}: "DARFON LIGHTING CORP",
+ [3]byte{0, 15, 247}: "Cisco Systems, Inc",
+ [3]byte{0, 15, 248}: "Cisco Systems, Inc",
+ [3]byte{0, 15, 249}: "Valcretec, Inc.",
+ [3]byte{0, 15, 250}: "Optinel Systems, Inc.",
+ [3]byte{0, 15, 251}: "Nippon Denso Industry Co., Ltd.",
+ [3]byte{0, 15, 252}: "Merit Li-Lin Ent.",
+ [3]byte{0, 15, 253}: "Glorytek Network Inc.",
+ [3]byte{0, 15, 254}: "G-PRO COMPUTER",
+ [3]byte{0, 15, 255}: "Control4",
+ [3]byte{0, 16, 0}: "CABLE TELEVISION LABORATORIES, INC.",
+ [3]byte{0, 16, 1}: "Citel",
+ [3]byte{0, 16, 2}: "ACTIA",
+ [3]byte{0, 16, 3}: "IMATRON, INC.",
+ [3]byte{0, 16, 4}: "THE BRANTLEY COILE COMPANY,INC",
+ [3]byte{0, 16, 5}: "UEC COMMERCIAL",
+ [3]byte{0, 16, 6}: "Thales Contact Solutions Ltd.",
+ [3]byte{0, 16, 7}: "Cisco Systems, Inc",
+ [3]byte{0, 16, 8}: "VIENNA SYSTEMS CORPORATION",
+ [3]byte{0, 16, 9}: "HORANET",
+ [3]byte{0, 16, 10}: "WILLIAMS COMMUNICATIONS GROUP",
+ [3]byte{0, 16, 11}: "Cisco Systems, Inc",
+ [3]byte{0, 16, 12}: "ITO CO., LTD.",
+ [3]byte{0, 16, 13}: "Cisco Systems, Inc",
+ [3]byte{0, 16, 14}: "MICRO LINEAR COPORATION",
+ [3]byte{0, 16, 15}: "INDUSTRIAL CPU SYSTEMS",
+ [3]byte{0, 16, 16}: "INITIO CORPORATION",
+ [3]byte{0, 16, 17}: "Cisco Systems, Inc",
+ [3]byte{0, 16, 18}: "PROCESSOR SYSTEMS (I) PVT LTD",
+ [3]byte{0, 16, 19}: "Kontron America, Inc.",
+ [3]byte{0, 16, 20}: "Cisco Systems, Inc",
+ [3]byte{0, 16, 21}: "OOmon Inc.",
+ [3]byte{0, 16, 22}: "T.SQWARE",
+ [3]byte{0, 16, 23}: "Bosch Access Systems GmbH",
+ [3]byte{0, 16, 24}: "Broadcom",
+ [3]byte{0, 16, 25}: "SIRONA DENTAL SYSTEMS GmbH & Co. KG",
+ [3]byte{0, 16, 26}: "PictureTel Corp.",
+ [3]byte{0, 16, 27}: "CORNET TECHNOLOGY, INC.",
+ [3]byte{0, 16, 28}: "OHM TECHNOLOGIES INTL, LLC",
+ [3]byte{0, 16, 29}: "WINBOND ELECTRONICS CORP.",
+ [3]byte{0, 16, 30}: "MATSUSHITA ELECTRONIC INSTRUMENTS CORP.",
+ [3]byte{0, 16, 31}: "Cisco Systems, Inc",
+ [3]byte{0, 16, 32}: "Hand Held Products Inc",
+ [3]byte{0, 16, 33}: "ENCANTO NETWORKS, INC.",
+ [3]byte{0, 16, 34}: "SatCom Media Corporation",
+ [3]byte{0, 16, 35}: "Network Equipment Technologies",
+ [3]byte{0, 16, 36}: "NAGOYA ELECTRIC WORKS CO., LTD",
+ [3]byte{0, 16, 37}: "Grayhill, Inc",
+ [3]byte{0, 16, 38}: "ACCELERATED NETWORKS, INC.",
+ [3]byte{0, 16, 39}: "L-3 COMMUNICATIONS EAST",
+ [3]byte{0, 16, 40}: "COMPUTER TECHNICA, INC.",
+ [3]byte{0, 16, 41}: "Cisco Systems, Inc",
+ [3]byte{0, 16, 42}: "ZF MICROSYSTEMS, INC.",
+ [3]byte{0, 16, 43}: "UMAX DATA SYSTEMS, INC.",
+ [3]byte{0, 16, 44}: "Lasat Networks A/S",
+ [3]byte{0, 16, 45}: "HITACHI SOFTWARE ENGINEERING",
+ [3]byte{0, 16, 46}: "NETWORK SYSTEMS & TECHNOLOGIES PVT. LTD.",
+ [3]byte{0, 16, 47}: "Cisco Systems, Inc",
+ [3]byte{0, 16, 48}: "EION Inc.",
+ [3]byte{0, 16, 49}: "OBJECTIVE COMMUNICATIONS, INC.",
+ [3]byte{0, 16, 50}: "ALTA TECHNOLOGY",
+ [3]byte{0, 16, 51}: "ACCESSLAN COMMUNICATIONS, INC.",
+ [3]byte{0, 16, 52}: "GNP Computers",
+ [3]byte{0, 16, 53}: "Elitegroup Computer Systems Co.,Ltd.",
+ [3]byte{0, 16, 54}: "INTER-TEL INTEGRATED SYSTEMS",
+ [3]byte{0, 16, 55}: "CYQ've Technology Co., Ltd.",
+ [3]byte{0, 16, 56}: "MICRO RESEARCH INSTITUTE, INC.",
+ [3]byte{0, 16, 57}: "Vectron Systems AG",
+ [3]byte{0, 16, 58}: "DIAMOND NETWORK TECH",
+ [3]byte{0, 16, 59}: "HIPPI NETWORKING FORUM",
+ [3]byte{0, 16, 60}: "IC ENSEMBLE, INC.",
+ [3]byte{0, 16, 61}: "PHASECOM, LTD.",
+ [3]byte{0, 16, 62}: "NETSCHOOLS CORPORATION",
+ [3]byte{0, 16, 63}: "TOLLGRADE COMMUNICATIONS, INC.",
+ [3]byte{0, 16, 64}: "INTERMEC CORPORATION",
+ [3]byte{0, 16, 65}: "BRISTOL BABCOCK, INC.",
+ [3]byte{0, 16, 66}: "Alacritech, Inc.",
+ [3]byte{0, 16, 67}: "A2 CORPORATION",
+ [3]byte{0, 16, 68}: "InnoLabs Corporation",
+ [3]byte{0, 16, 69}: "Nortel Networks",
+ [3]byte{0, 16, 70}: "ALCORN MCBRIDE INC.",
+ [3]byte{0, 16, 71}: "ECHO ELETRIC CO. LTD.",
+ [3]byte{0, 16, 72}: "HTRC AUTOMATION, INC.",
+ [3]byte{0, 16, 73}: "ShoreTel, Inc",
+ [3]byte{0, 16, 74}: "The Parvus Corporation",
+ [3]byte{0, 16, 75}: "3COM CORPORATION",
+ [3]byte{0, 16, 76}: "Teledyne LeCroy, Inc",
+ [3]byte{0, 16, 77}: "SURTEC INDUSTRIES, INC.",
+ [3]byte{0, 16, 78}: "CEOLOGIC",
+ [3]byte{0, 16, 79}: "Oracle Corporation",
+ [3]byte{0, 16, 80}: "RION CO., LTD.",
+ [3]byte{0, 16, 81}: "CMICRO CORPORATION",
+ [3]byte{0, 16, 82}: "METTLER-TOLEDO (ALBSTADT) GMBH",
+ [3]byte{0, 16, 83}: "COMPUTER TECHNOLOGY CORP.",
+ [3]byte{0, 16, 84}: "Cisco Systems, Inc",
+ [3]byte{0, 16, 85}: "FUJITSU MICROELECTRONICS, INC.",
+ [3]byte{0, 16, 86}: "SODICK CO., LTD.",
+ [3]byte{0, 16, 87}: "Rebel.com, Inc.",
+ [3]byte{0, 16, 88}: "ArrowPoint Communications",
+ [3]byte{0, 16, 89}: "DIABLO RESEARCH CO. LLC",
+ [3]byte{0, 16, 90}: "3COM CORPORATION",
+ [3]byte{0, 16, 91}: "NET INSIGHT AB",
+ [3]byte{0, 16, 92}: "QUANTUM DESIGNS (H.K.) LTD.",
+ [3]byte{0, 16, 93}: "Draeger Medical",
+ [3]byte{0, 16, 94}: "Spirent plc, Service Assurance Broadband",
+ [3]byte{0, 16, 95}: "ZODIAC DATA SYSTEMS",
+ [3]byte{0, 16, 96}: "BILLIONTON SYSTEMS, INC.",
+ [3]byte{0, 16, 97}: "HOSTLINK CORP.",
+ [3]byte{0, 16, 98}: "NX SERVER, ILNC.",
+ [3]byte{0, 16, 99}: "STARGUIDE DIGITAL NETWORKS",
+ [3]byte{0, 16, 100}: "DNPG, LLC",
+ [3]byte{0, 16, 101}: "RADYNE CORPORATION",
+ [3]byte{0, 16, 102}: "ADVANCED CONTROL SYSTEMS, INC.",
+ [3]byte{0, 16, 103}: "Ericsson",
+ [3]byte{0, 16, 104}: "COMOS TELECOM",
+ [3]byte{0, 16, 105}: "HELIOSS COMMUNICATIONS, INC.",
+ [3]byte{0, 16, 106}: "DIGITAL MICROWAVE CORPORATION",
+ [3]byte{0, 16, 107}: "SONUS NETWORKS, INC.",
+ [3]byte{0, 16, 108}: "EDNT GmbH",
+ [3]byte{0, 16, 109}: "Axxcelera Broadband Wireless",
+ [3]byte{0, 16, 110}: "TADIRAN COM. LTD.",
+ [3]byte{0, 16, 111}: "TRENTON TECHNOLOGY INC.",
+ [3]byte{0, 16, 112}: "CARADON TREND LTD.",
+ [3]byte{0, 16, 113}: "ADVANET INC.",
+ [3]byte{0, 16, 114}: "GVN TECHNOLOGIES, INC.",
+ [3]byte{0, 16, 115}: "TECHNOBOX, INC.",
+ [3]byte{0, 16, 116}: "ATEN INTERNATIONAL CO., LTD.",
+ [3]byte{0, 16, 117}: "Segate Technology LLC",
+ [3]byte{0, 16, 118}: "EUREM GmbH",
+ [3]byte{0, 16, 119}: "SAF DRIVE SYSTEMS, LTD.",
+ [3]byte{0, 16, 120}: "NUERA COMMUNICATIONS, INC.",
+ [3]byte{0, 16, 121}: "Cisco Systems, Inc",
+ [3]byte{0, 16, 122}: "AmbiCom, Inc.",
+ [3]byte{0, 16, 123}: "Cisco Systems, Inc",
+ [3]byte{0, 16, 124}: "P-COM, INC.",
+ [3]byte{0, 16, 125}: "AURORA COMMUNICATIONS, LTD.",
+ [3]byte{0, 16, 126}: "BACHMANN ELECTRONIC GmbH",
+ [3]byte{0, 16, 127}: "CRESTRON ELECTRONICS, INC.",
+ [3]byte{0, 16, 128}: "METAWAVE COMMUNICATIONS",
+ [3]byte{0, 16, 129}: "DPS, INC.",
+ [3]byte{0, 16, 130}: "JNA TELECOMMUNICATIONS LIMITED",
+ [3]byte{0, 16, 131}: "Hewlett Packard",
+ [3]byte{0, 16, 132}: "K-BOT COMMUNICATIONS",
+ [3]byte{0, 16, 133}: "POLARIS COMMUNICATIONS, INC.",
+ [3]byte{0, 16, 134}: "ATTO Technology, Inc.",
+ [3]byte{0, 16, 135}: "XSTREAMIS PLC",
+ [3]byte{0, 16, 136}: "AMERICAN NETWORKS INC.",
+ [3]byte{0, 16, 137}: "WebSonic",
+ [3]byte{0, 16, 138}: "TeraLogic, Inc.",
+ [3]byte{0, 16, 139}: "LASERANIMATION SOLLINGER GMBH",
+ [3]byte{0, 16, 140}: "Fujitsu Services Ltd",
+ [3]byte{0, 16, 141}: "Johnson Controls, Inc.",
+ [3]byte{0, 16, 142}: "HUGH SYMONS CONCEPT Technologies Ltd.",
+ [3]byte{0, 16, 143}: "RAPTOR SYSTEMS",
+ [3]byte{0, 16, 144}: "CIMETRICS, INC.",
+ [3]byte{0, 16, 145}: "NO WIRES NEEDED BV",
+ [3]byte{0, 16, 146}: "NETCORE INC.",
+ [3]byte{0, 16, 147}: "CMS COMPUTERS, LTD.",
+ [3]byte{0, 16, 148}: "Performance Analysis Broadband, Spirent plc",
+ [3]byte{0, 16, 149}: "Thomson Inc.",
+ [3]byte{0, 16, 150}: "TRACEWELL SYSTEMS, INC.",
+ [3]byte{0, 16, 151}: "WinNet Metropolitan Communications Systems, Inc.",
+ [3]byte{0, 16, 152}: "STARNET TECHNOLOGIES, INC.",
+ [3]byte{0, 16, 153}: "InnoMedia, Inc.",
+ [3]byte{0, 16, 154}: "NETLINE",
+ [3]byte{0, 16, 155}: "Emulex Corporation",
+ [3]byte{0, 16, 156}: "M-SYSTEM CO., LTD.",
+ [3]byte{0, 16, 157}: "CLARINET SYSTEMS, INC.",
+ [3]byte{0, 16, 158}: "AWARE, INC.",
+ [3]byte{0, 16, 159}: "PAVO, INC.",
+ [3]byte{0, 16, 160}: "INNOVEX TECHNOLOGIES, INC.",
+ [3]byte{0, 16, 161}: "KENDIN SEMICONDUCTOR, INC.",
+ [3]byte{0, 16, 162}: "TNS",
+ [3]byte{0, 16, 163}: "OMNITRONIX, INC.",
+ [3]byte{0, 16, 164}: "XIRCOM",
+ [3]byte{0, 16, 165}: "OXFORD INSTRUMENTS",
+ [3]byte{0, 16, 166}: "Cisco Systems, Inc",
+ [3]byte{0, 16, 167}: "UNEX TECHNOLOGY CORPORATION",
+ [3]byte{0, 16, 168}: "RELIANCE COMPUTER CORP.",
+ [3]byte{0, 16, 169}: "ADHOC TECHNOLOGIES",
+ [3]byte{0, 16, 170}: "MEDIA4, INC.",
+ [3]byte{0, 16, 171}: "KOITO ELECTRIC INDUSTRIES, LTD.",
+ [3]byte{0, 16, 172}: "IMCI TECHNOLOGIES",
+ [3]byte{0, 16, 173}: "SOFTRONICS USB, INC.",
+ [3]byte{0, 16, 174}: "SHINKO ELECTRIC INDUSTRIES CO.",
+ [3]byte{0, 16, 175}: "TAC SYSTEMS, INC.",
+ [3]byte{0, 16, 176}: "MERIDIAN TECHNOLOGY CORP.",
+ [3]byte{0, 16, 177}: "FOR-A CO., LTD.",
+ [3]byte{0, 16, 178}: "COACTIVE AESTHETICS",
+ [3]byte{0, 16, 179}: "NOKIA MULTIMEDIA TERMINALS",
+ [3]byte{0, 16, 180}: "ATMOSPHERE NETWORKS",
+ [3]byte{0, 16, 181}: "Accton Technology Corp",
+ [3]byte{0, 16, 182}: "ENTRATA COMMUNICATIONS CORP.",
+ [3]byte{0, 16, 183}: "COYOTE TECHNOLOGIES, LLC",
+ [3]byte{0, 16, 184}: "ISHIGAKI COMPUTER SYSTEM CO.",
+ [3]byte{0, 16, 185}: "MAXTOR CORP.",
+ [3]byte{0, 16, 186}: "MARTINHO-DAVIS SYSTEMS, INC.",
+ [3]byte{0, 16, 187}: "DATA & INFORMATION TECHNOLOGY",
+ [3]byte{0, 16, 188}: "Aastra Telecom",
+ [3]byte{0, 16, 189}: "THE TELECOMMUNICATION TECHNOLOGY COMMITTEE (TTC)",
+ [3]byte{0, 16, 190}: "MARCH NETWORKS CORPORATION",
+ [3]byte{0, 16, 191}: "InterAir Wireless",
+ [3]byte{0, 16, 192}: "ARMA, Inc.",
+ [3]byte{0, 16, 193}: "OI ELECTRIC CO.,LTD",
+ [3]byte{0, 16, 194}: "WILLNET, INC.",
+ [3]byte{0, 16, 195}: "CSI-CONTROL SYSTEMS",
+ [3]byte{0, 16, 196}: "MEDIA GLOBAL LINKS CO., LTD.",
+ [3]byte{0, 16, 197}: "PROTOCOL TECHNOLOGIES, INC.",
+ [3]byte{0, 16, 198}: "Universal Global Scientific Industrial Co., Ltd.",
+ [3]byte{0, 16, 199}: "DATA TRANSMISSION NETWORK",
+ [3]byte{0, 16, 200}: "COMMUNICATIONS ELECTRONICS SECURITY GROUP",
+ [3]byte{0, 16, 201}: "MITSUBISHI ELECTRONICS LOGISTIC SUPPORT CO.",
+ [3]byte{0, 16, 202}: "Telco Systems, Inc.",
+ [3]byte{0, 16, 203}: "FACIT K.K.",
+ [3]byte{0, 16, 204}: "CLP COMPUTER LOGISTIK PLANUNG GmbH",
+ [3]byte{0, 16, 205}: "INTERFACE CONCEPT",
+ [3]byte{0, 16, 206}: "VOLAMP, LTD.",
+ [3]byte{0, 16, 207}: "FIBERLANE COMMUNICATIONS",
+ [3]byte{0, 16, 208}: "WITCOM, LTD.",
+ [3]byte{0, 16, 209}: "Top Layer Networks, Inc.",
+ [3]byte{0, 16, 210}: "NITTO TSUSHINKI CO., LTD",
+ [3]byte{0, 16, 211}: "GRIPS ELECTRONIC GMBH",
+ [3]byte{0, 16, 212}: "STORAGE COMPUTER CORPORATION",
+ [3]byte{0, 16, 213}: "IMASDE CANARIAS, S.A.",
+ [3]byte{0, 16, 214}: "Exelis",
+ [3]byte{0, 16, 215}: "ARGOSY RESEARCH INC.",
+ [3]byte{0, 16, 216}: "CALISTA",
+ [3]byte{0, 16, 217}: "IBM JAPAN, FUJISAWA MT+D",
+ [3]byte{0, 16, 218}: "Kollmorgen Corp",
+ [3]byte{0, 16, 219}: "Juniper Networks",
+ [3]byte{0, 16, 220}: "MICRO-STAR INTERNATIONAL CO., LTD.",
+ [3]byte{0, 16, 221}: "ENABLE SEMICONDUCTOR, INC.",
+ [3]byte{0, 16, 222}: "INTERNATIONAL DATACASTING CORPORATION",
+ [3]byte{0, 16, 223}: "RISE COMPUTER INC.",
+ [3]byte{0, 16, 224}: "Oracle Corporation",
+ [3]byte{0, 16, 225}: "S.I. TECH, INC.",
+ [3]byte{0, 16, 226}: "ArrayComm, Inc.",
+ [3]byte{0, 16, 227}: "Hewlett Packard",
+ [3]byte{0, 16, 228}: "NSI CORPORATION",
+ [3]byte{0, 16, 229}: "SOLECTRON TEXAS",
+ [3]byte{0, 16, 230}: "APPLIED INTELLIGENT SYSTEMS, INC.",
+ [3]byte{0, 16, 231}: "Breezecom, Ltd.",
+ [3]byte{0, 16, 232}: "TELOCITY, INCORPORATED",
+ [3]byte{0, 16, 233}: "RAIDTEC LTD.",
+ [3]byte{0, 16, 234}: "ADEPT TECHNOLOGY",
+ [3]byte{0, 16, 235}: "SELSIUS SYSTEMS, INC.",
+ [3]byte{0, 16, 236}: "RPCG, LLC",
+ [3]byte{0, 16, 237}: "SUNDANCE TECHNOLOGY, INC.",
+ [3]byte{0, 16, 238}: "CTI PRODUCTS, INC.",
+ [3]byte{0, 16, 239}: "DBTEL INCORPORATED",
+ [3]byte{0, 16, 240}: "RITTAL-WERK RUDOLF LOH GmbH & Co.",
+ [3]byte{0, 16, 241}: "I-O CORPORATION",
+ [3]byte{0, 16, 242}: "ANTEC",
+ [3]byte{0, 16, 243}: "Nexcom International Co., Ltd.",
+ [3]byte{0, 16, 244}: "Vertical Communications",
+ [3]byte{0, 16, 245}: "AMHERST SYSTEMS, INC.",
+ [3]byte{0, 16, 246}: "Cisco Systems, Inc",
+ [3]byte{0, 16, 247}: "IRIICHI TECHNOLOGIES Inc.",
+ [3]byte{0, 16, 248}: "TEXIO TECHNOLOGY CORPORATION",
+ [3]byte{0, 16, 249}: "UNIQUE SYSTEMS, INC.",
+ [3]byte{0, 16, 250}: "Apple, Inc.",
+ [3]byte{0, 16, 251}: "ZIDA TECHNOLOGIES LIMITED",
+ [3]byte{0, 16, 252}: "BROADBAND NETWORKS, INC.",
+ [3]byte{0, 16, 253}: "COCOM A/S",
+ [3]byte{0, 16, 254}: "DIGITAL EQUIPMENT CORPORATION",
+ [3]byte{0, 16, 255}: "Cisco Systems, Inc",
+ [3]byte{0, 17, 0}: "Schneider Electric",
+ [3]byte{0, 17, 1}: "CET Technologies Pte Ltd",
+ [3]byte{0, 17, 2}: "Aurora Multimedia Corp.",
+ [3]byte{0, 17, 3}: "kawamura electric inc.",
+ [3]byte{0, 17, 4}: "TELEXY",
+ [3]byte{0, 17, 5}: "Sunplus Technology Co., Ltd.",
+ [3]byte{0, 17, 6}: "Siemens NV (Belgium)",
+ [3]byte{0, 17, 7}: "RGB Networks Inc.",
+ [3]byte{0, 17, 8}: "Orbital Data Corporation",
+ [3]byte{0, 17, 9}: "Micro-Star International",
+ [3]byte{0, 17, 10}: "Hewlett Packard",
+ [3]byte{0, 17, 11}: "Franklin Technology Systems",
+ [3]byte{0, 17, 12}: "Atmark Techno, Inc.",
+ [3]byte{0, 17, 13}: "SANBlaze Technology, Inc.",
+ [3]byte{0, 17, 14}: "Tsurusaki Sealand Transportation Co. Ltd.",
+ [3]byte{0, 17, 15}: "netplat,Inc.",
+ [3]byte{0, 17, 16}: "Maxanna Technology Co., Ltd.",
+ [3]byte{0, 17, 17}: "Intel Corporation",
+ [3]byte{0, 17, 18}: "Honeywell CMSS",
+ [3]byte{0, 17, 19}: "Fraunhofer FOKUS",
+ [3]byte{0, 17, 20}: "EverFocus Electronics Corp.",
+ [3]byte{0, 17, 21}: "EPIN Technologies, Inc.",
+ [3]byte{0, 17, 22}: "COTEAU VERT CO., LTD.",
+ [3]byte{0, 17, 23}: "CESNET",
+ [3]byte{0, 17, 24}: "BLX IC Design Corp., Ltd.",
+ [3]byte{0, 17, 25}: "Solteras, Inc.",
+ [3]byte{0, 17, 26}: "ARRIS Group, Inc.",
+ [3]byte{0, 17, 27}: "Targa Systems Div L-3 Communications",
+ [3]byte{0, 17, 28}: "Pleora Technologies Inc.",
+ [3]byte{0, 17, 29}: "Hectrix Limited",
+ [3]byte{0, 17, 30}: "EPSG (Ethernet Powerlink Standardization Group)",
+ [3]byte{0, 17, 31}: "Doremi Labs, Inc.",
+ [3]byte{0, 17, 32}: "Cisco Systems, Inc",
+ [3]byte{0, 17, 33}: "Cisco Systems, Inc",
+ [3]byte{0, 17, 34}: "CIMSYS Inc",
+ [3]byte{0, 17, 35}: "Appointech, Inc.",
+ [3]byte{0, 17, 36}: "Apple, Inc.",
+ [3]byte{0, 17, 37}: "IBM Corp",
+ [3]byte{0, 17, 38}: "Venstar Inc.",
+ [3]byte{0, 17, 39}: "TASI, Inc",
+ [3]byte{0, 17, 40}: "Streamit",
+ [3]byte{0, 17, 41}: "Paradise Datacom Ltd.",
+ [3]byte{0, 17, 42}: "Niko NV",
+ [3]byte{0, 17, 43}: "NetModule AG",
+ [3]byte{0, 17, 44}: "IZT GmbH",
+ [3]byte{0, 17, 45}: "iPulse Systems",
+ [3]byte{0, 17, 46}: "CEICOM",
+ [3]byte{0, 17, 47}: "ASUSTek COMPUTER INC.",
+ [3]byte{0, 17, 48}: "Allied Telesis (Hong Kong) Ltd.",
+ [3]byte{0, 17, 49}: "UNATECH. CO.,LTD",
+ [3]byte{0, 17, 50}: "Synology Incorporated",
+ [3]byte{0, 17, 51}: "Siemens Austria SIMEA",
+ [3]byte{0, 17, 52}: "MediaCell, Inc.",
+ [3]byte{0, 17, 53}: "Grandeye Ltd",
+ [3]byte{0, 17, 54}: "Goodrich Sensor Systems",
+ [3]byte{0, 17, 55}: "AICHI ELECTRIC CO., LTD.",
+ [3]byte{0, 17, 56}: "TAISHIN CO., LTD.",
+ [3]byte{0, 17, 57}: "STOEBER ANTRIEBSTECHNIK GmbH + Co. KG.",
+ [3]byte{0, 17, 58}: "SHINBORAM",
+ [3]byte{0, 17, 59}: "Micronet Communications Inc.",
+ [3]byte{0, 17, 60}: "Micronas GmbH",
+ [3]byte{0, 17, 61}: "KN SOLTEC CO.,LTD.",
+ [3]byte{0, 17, 62}: "JL Corporation",
+ [3]byte{0, 17, 63}: "Alcatel DI",
+ [3]byte{0, 17, 64}: "Nanometrics Inc.",
+ [3]byte{0, 17, 65}: "GoodMan Corporation",
+ [3]byte{0, 17, 66}: "e-SMARTCOM INC.",
+ [3]byte{0, 17, 67}: "Dell Inc.",
+ [3]byte{0, 17, 68}: "Assurance Technology Corp",
+ [3]byte{0, 17, 69}: "ValuePoint Networks",
+ [3]byte{0, 17, 70}: "Telecard-Pribor Ltd",
+ [3]byte{0, 17, 71}: "Secom-Industry co.LTD.",
+ [3]byte{0, 17, 72}: "Prolon Control Systems",
+ [3]byte{0, 17, 73}: "Proliphix Inc.",
+ [3]byte{0, 17, 74}: "KAYABA INDUSTRY Co,.Ltd.",
+ [3]byte{0, 17, 75}: "Francotyp-Postalia GmbH",
+ [3]byte{0, 17, 76}: "caffeina applied research ltd.",
+ [3]byte{0, 17, 77}: "Atsumi Electric Co.,LTD.",
+ [3]byte{0, 17, 78}: "690885 Ontario Inc.",
+ [3]byte{0, 17, 79}: "US Digital Television, Inc",
+ [3]byte{0, 17, 80}: "Belkin Corporation",
+ [3]byte{0, 17, 81}: "Mykotronx",
+ [3]byte{0, 17, 82}: "Eidsvoll Electronics AS",
+ [3]byte{0, 17, 83}: "Trident Tek, Inc.",
+ [3]byte{0, 17, 84}: "Webpro Technologies Inc.",
+ [3]byte{0, 17, 85}: "Sevis Systems",
+ [3]byte{0, 17, 86}: "Pharos Systems NZ",
+ [3]byte{0, 17, 87}: "Oki Electric Industry Co., Ltd.",
+ [3]byte{0, 17, 88}: "Nortel Networks",
+ [3]byte{0, 17, 89}: "MATISSE NETWORKS INC",
+ [3]byte{0, 17, 90}: "Ivoclar Vivadent AG",
+ [3]byte{0, 17, 91}: "Elitegroup Computer Systems Co.,Ltd.",
+ [3]byte{0, 17, 92}: "Cisco Systems, Inc",
+ [3]byte{0, 17, 93}: "Cisco Systems, Inc",
+ [3]byte{0, 17, 94}: "ProMinent Dosiertechnik GmbH",
+ [3]byte{0, 17, 95}: "ITX Security Co., Ltd.",
+ [3]byte{0, 17, 96}: "ARTDIO Company Co., LTD",
+ [3]byte{0, 17, 97}: "NetStreams, LLC",
+ [3]byte{0, 17, 98}: "STAR MICRONICS CO.,LTD.",
+ [3]byte{0, 17, 99}: "SYSTEM SPA DEPT. ELECTRONICS",
+ [3]byte{0, 17, 100}: "ACARD Technology Corp.",
+ [3]byte{0, 17, 101}: "ZNYX Networks, Inc.",
+ [3]byte{0, 17, 102}: "Taelim Electronics Co., Ltd.",
+ [3]byte{0, 17, 103}: "Integrated System Solution Corp.",
+ [3]byte{0, 17, 104}: "HomeLogic LLC",
+ [3]byte{0, 17, 105}: "EMS Satcom",
+ [3]byte{0, 17, 106}: "Domo Ltd",
+ [3]byte{0, 17, 107}: "Digital Data Communications Asia Co.,Ltd",
+ [3]byte{0, 17, 108}: "Nanwang Multimedia Inc.,Ltd",
+ [3]byte{0, 17, 109}: "American Time and Signal",
+ [3]byte{0, 17, 110}: "Peplink International Ltd.",
+ [3]byte{0, 17, 111}: "Netforyou Co., LTD.",
+ [3]byte{0, 17, 112}: "GSC SRL",
+ [3]byte{0, 17, 113}: "DEXTER Communications, Inc.",
+ [3]byte{0, 17, 114}: "COTRON CORPORATION",
+ [3]byte{0, 17, 115}: "SMART Storage Systems",
+ [3]byte{0, 17, 116}: "Mojo Networks, Inc.",
+ [3]byte{0, 17, 117}: "Intel Corporation",
+ [3]byte{0, 17, 118}: "Intellambda Systems, Inc.",
+ [3]byte{0, 17, 119}: "Coaxial Networks, Inc.",
+ [3]byte{0, 17, 120}: "Chiron Technology Ltd",
+ [3]byte{0, 17, 121}: "Singular Technology Co. Ltd.",
+ [3]byte{0, 17, 122}: "Singim International Corp.",
+ [3]byte{0, 17, 123}: "Büchi Labortechnik AG",
+ [3]byte{0, 17, 124}: "e-zy.net",
+ [3]byte{0, 17, 125}: "ZMD America, Inc.",
+ [3]byte{0, 17, 126}: "Midmark Corp",
+ [3]byte{0, 17, 127}: "Neotune Information Technology Corporation,.LTD",
+ [3]byte{0, 17, 128}: "ARRIS Group, Inc.",
+ [3]byte{0, 17, 129}: "InterEnergy Co.Ltd,",
+ [3]byte{0, 17, 130}: "IMI Norgren Ltd",
+ [3]byte{0, 17, 131}: "Datalogic ADC, Inc.",
+ [3]byte{0, 17, 132}: "Humo Laboratory,Ltd.",
+ [3]byte{0, 17, 133}: "Hewlett Packard",
+ [3]byte{0, 17, 134}: "Prime Systems, Inc.",
+ [3]byte{0, 17, 135}: "Category Solutions, Inc",
+ [3]byte{0, 17, 136}: "Enterasys",
+ [3]byte{0, 17, 137}: "Aerotech Inc",
+ [3]byte{0, 17, 138}: "Viewtran Technology Limited",
+ [3]byte{0, 17, 139}: "Alcatel-Lucent Enterprise",
+ [3]byte{0, 17, 140}: "Missouri Department of Transportation",
+ [3]byte{0, 17, 141}: "Hanchang System Corp.",
+ [3]byte{0, 17, 142}: "Halytech Mace",
+ [3]byte{0, 17, 143}: "EUTECH INSTRUMENTS PTE. LTD.",
+ [3]byte{0, 17, 144}: "Digital Design Corporation",
+ [3]byte{0, 17, 145}: "CTS-Clima Temperatur Systeme GmbH",
+ [3]byte{0, 17, 146}: "Cisco Systems, Inc",
+ [3]byte{0, 17, 147}: "Cisco Systems, Inc",
+ [3]byte{0, 17, 148}: "Chi Mei Communication Systems, Inc.",
+ [3]byte{0, 17, 149}: "D-Link Corporation",
+ [3]byte{0, 17, 150}: "Actuality Systems, Inc.",
+ [3]byte{0, 17, 151}: "Monitoring Technologies Limited",
+ [3]byte{0, 17, 152}: "Prism Media Products Limited",
+ [3]byte{0, 17, 153}: "2wcom Systems GmbH",
+ [3]byte{0, 17, 154}: "Alkeria srl",
+ [3]byte{0, 17, 155}: "Telesynergy Research Inc.",
+ [3]byte{0, 17, 156}: "EP&T Energy",
+ [3]byte{0, 17, 157}: "Diginfo Technology Corporation",
+ [3]byte{0, 17, 158}: "Solectron Brazil",
+ [3]byte{0, 17, 159}: "Nokia Danmark A/S",
+ [3]byte{0, 17, 160}: "Vtech Engineering Canada Ltd",
+ [3]byte{0, 17, 161}: "VISION NETWARE CO.,LTD",
+ [3]byte{0, 17, 162}: "Manufacturing Technology Inc",
+ [3]byte{0, 17, 163}: "LanReady Technologies Inc.",
+ [3]byte{0, 17, 164}: "JStream Technologies Inc.",
+ [3]byte{0, 17, 165}: "Fortuna Electronic Corp.",
+ [3]byte{0, 17, 166}: "Sypixx Networks",
+ [3]byte{0, 17, 167}: "Infilco Degremont Inc.",
+ [3]byte{0, 17, 168}: "Quest Technologies",
+ [3]byte{0, 17, 169}: "MOIMSTONE Co., LTD",
+ [3]byte{0, 17, 170}: "Uniclass Technology, Co., LTD",
+ [3]byte{0, 17, 171}: "TRUSTABLE TECHNOLOGY CO.,LTD.",
+ [3]byte{0, 17, 172}: "Simtec Electronics",
+ [3]byte{0, 17, 173}: "Shanghai Ruijie Technology",
+ [3]byte{0, 17, 174}: "ARRIS Group, Inc.",
+ [3]byte{0, 17, 175}: "Medialink-i,Inc",
+ [3]byte{0, 17, 176}: "Fortelink Inc.",
+ [3]byte{0, 17, 177}: "BlueExpert Technology Corp.",
+ [3]byte{0, 17, 178}: "2001 Technology Inc.",
+ [3]byte{0, 17, 179}: "YOSHIMIYA CO.,LTD.",
+ [3]byte{0, 17, 180}: "Westermo Teleindustri AB",
+ [3]byte{0, 17, 181}: "Shenzhen Powercom Co.,Ltd",
+ [3]byte{0, 17, 182}: "Open Systems International",
+ [3]byte{0, 17, 183}: "Octalix B.V.",
+ [3]byte{0, 17, 184}: "Liebherr - Elektronik GmbH",
+ [3]byte{0, 17, 185}: "Inner Range Pty. Ltd.",
+ [3]byte{0, 17, 186}: "Elexol Pty Ltd",
+ [3]byte{0, 17, 187}: "Cisco Systems, Inc",
+ [3]byte{0, 17, 188}: "Cisco Systems, Inc",
+ [3]byte{0, 17, 189}: "Bombardier Transportation",
+ [3]byte{0, 17, 190}: "AGP Telecom Co. Ltd",
+ [3]byte{0, 17, 191}: "AESYS S.p.A.",
+ [3]byte{0, 17, 192}: "Aday Technology Inc",
+ [3]byte{0, 17, 193}: "4P MOBILE DATA PROCESSING",
+ [3]byte{0, 17, 194}: "United Fiber Optic Communication",
+ [3]byte{0, 17, 195}: "Transceiving System Technology Corporation",
+ [3]byte{0, 17, 196}: "Terminales de Telecomunicacion Terrestre, S.L.",
+ [3]byte{0, 17, 197}: "TEN Technology",
+ [3]byte{0, 17, 198}: "Seagate Technology",
+ [3]byte{0, 17, 199}: "Raymarine UK Ltd",
+ [3]byte{0, 17, 200}: "Powercom Co., Ltd.",
+ [3]byte{0, 17, 201}: "MTT Corporation",
+ [3]byte{0, 17, 202}: "Long Range Systems, Inc.",
+ [3]byte{0, 17, 203}: "Jacobsons AB",
+ [3]byte{0, 17, 204}: "Guangzhou Jinpeng Group Co.,Ltd.",
+ [3]byte{0, 17, 205}: "Axsun Technologies",
+ [3]byte{0, 17, 206}: "Ubisense Limited",
+ [3]byte{0, 17, 207}: "Thrane & Thrane A/S",
+ [3]byte{0, 17, 208}: "Tandberg Data ASA",
+ [3]byte{0, 17, 209}: "Soft Imaging System GmbH",
+ [3]byte{0, 17, 210}: "Perception Digital Ltd",
+ [3]byte{0, 17, 211}: "NextGenTel Holding ASA",
+ [3]byte{0, 17, 212}: "NetEnrich, Inc",
+ [3]byte{0, 17, 213}: "Hangzhou Sunyard System Engineering Co.,Ltd.",
+ [3]byte{0, 17, 214}: "HandEra, Inc.",
+ [3]byte{0, 17, 215}: "eWerks Inc",
+ [3]byte{0, 17, 216}: "ASUSTek COMPUTER INC.",
+ [3]byte{0, 17, 217}: "TiVo",
+ [3]byte{0, 17, 218}: "Vivaas Technology Inc.",
+ [3]byte{0, 17, 219}: "Land-Cellular Corporation",
+ [3]byte{0, 17, 220}: "Glunz & Jensen",
+ [3]byte{0, 17, 221}: "FROMUS TEC. Co., Ltd.",
+ [3]byte{0, 17, 222}: "EURILOGIC",
+ [3]byte{0, 17, 223}: "Current Energy",
+ [3]byte{0, 17, 224}: "U-MEDIA Communications, Inc.",
+ [3]byte{0, 17, 225}: "Arcelik A.S",
+ [3]byte{0, 17, 226}: "Hua Jung Components Co., Ltd.",
+ [3]byte{0, 17, 227}: "Thomson, Inc.",
+ [3]byte{0, 17, 228}: "Danelec Electronics A/S",
+ [3]byte{0, 17, 229}: "KCodes Corporation",
+ [3]byte{0, 17, 230}: "Scientific Atlanta",
+ [3]byte{0, 17, 231}: "WORLDSAT - Texas de France",
+ [3]byte{0, 17, 232}: "Tixi.Com",
+ [3]byte{0, 17, 233}: "STARNEX CO., LTD.",
+ [3]byte{0, 17, 234}: "IWICS Inc.",
+ [3]byte{0, 17, 235}: "Innovative Integration",
+ [3]byte{0, 17, 236}: "AVIX INC.",
+ [3]byte{0, 17, 237}: "802 Global",
+ [3]byte{0, 17, 238}: "Estari, Inc.",
+ [3]byte{0, 17, 239}: "Conitec Datensysteme GmbH",
+ [3]byte{0, 17, 240}: "Wideful Limited",
+ [3]byte{0, 17, 241}: "QinetiQ Ltd",
+ [3]byte{0, 17, 242}: "Institute of Network Technologies",
+ [3]byte{0, 17, 243}: "NeoMedia Europe AG",
+ [3]byte{0, 17, 244}: "woori-net",
+ [3]byte{0, 17, 245}: "ASKEY COMPUTER CORP",
+ [3]byte{0, 17, 246}: "Asia Pacific Microsystems , Inc.",
+ [3]byte{0, 17, 247}: "Shenzhen Forward Industry Co., Ltd",
+ [3]byte{0, 17, 248}: "AIRAYA Corp",
+ [3]byte{0, 17, 249}: "Nortel Networks",
+ [3]byte{0, 17, 250}: "Rane Corporation",
+ [3]byte{0, 17, 251}: "Heidelberg Engineering GmbH",
+ [3]byte{0, 17, 252}: "HARTING Electronics GmbH",
+ [3]byte{0, 17, 253}: "KORG INC.",
+ [3]byte{0, 17, 254}: "Keiyo System Research, Inc.",
+ [3]byte{0, 17, 255}: "Digitro Tecnologia Ltda",
+ [3]byte{0, 18, 0}: "Cisco Systems, Inc",
+ [3]byte{0, 18, 1}: "Cisco Systems, Inc",
+ [3]byte{0, 18, 2}: "Decrane Aerospace - Audio International Inc.",
+ [3]byte{0, 18, 3}: "ActivNetworks",
+ [3]byte{0, 18, 4}: "u10 Networks, Inc.",
+ [3]byte{0, 18, 5}: "Terrasat Communications, Inc.",
+ [3]byte{0, 18, 6}: "iQuest (NZ) Ltd",
+ [3]byte{0, 18, 7}: "Head Strong International Limited",
+ [3]byte{0, 18, 8}: "Gantner Instruments GmbH",
+ [3]byte{0, 18, 9}: "Fastrax Ltd",
+ [3]byte{0, 18, 10}: "Emerson Climate Technologies GmbH",
+ [3]byte{0, 18, 11}: "Chinasys Technologies Limited",
+ [3]byte{0, 18, 12}: "CE-Infosys Pte Ltd",
+ [3]byte{0, 18, 13}: "Advanced Telecommunication Technologies, Inc.",
+ [3]byte{0, 18, 14}: "AboCom",
+ [3]byte{0, 18, 15}: "IEEE 802.3",
+ [3]byte{0, 18, 16}: "WideRay Corp",
+ [3]byte{0, 18, 17}: "Protechna Herbst GmbH & Co. KG",
+ [3]byte{0, 18, 18}: "PLUS Corporation",
+ [3]byte{0, 18, 19}: "Metrohm AG",
+ [3]byte{0, 18, 20}: "Koenig & Bauer AG",
+ [3]byte{0, 18, 21}: "iStor Networks, Inc.",
+ [3]byte{0, 18, 22}: "ICP Internet Communication Payment AG",
+ [3]byte{0, 18, 23}: "Cisco-Linksys, LLC",
+ [3]byte{0, 18, 24}: "ARUZE Corporation",
+ [3]byte{0, 18, 25}: "General Datacomm LLC",
+ [3]byte{0, 18, 26}: "Techno Soft Systemnics Inc.",
+ [3]byte{0, 18, 27}: "Sound Devices, LLC",
+ [3]byte{0, 18, 28}: "PARROT SA",
+ [3]byte{0, 18, 29}: "Netfabric Corporation",
+ [3]byte{0, 18, 30}: "Juniper Networks",
+ [3]byte{0, 18, 31}: "Harding Instruments",
+ [3]byte{0, 18, 32}: "Cadco Systems",
+ [3]byte{0, 18, 33}: "B.Braun Melsungen AG",
+ [3]byte{0, 18, 34}: "Skardin (UK) Ltd",
+ [3]byte{0, 18, 35}: "Pixim",
+ [3]byte{0, 18, 36}: "NexQL Corporation",
+ [3]byte{0, 18, 37}: "ARRIS Group, Inc.",
+ [3]byte{0, 18, 38}: "Japan Direx Corporation",
+ [3]byte{0, 18, 39}: "Franklin Electric Co., Inc.",
+ [3]byte{0, 18, 40}: "Data Ltd.",
+ [3]byte{0, 18, 41}: "BroadEasy Technologies Co.,Ltd",
+ [3]byte{0, 18, 42}: "VTech Telecommunications Ltd.",
+ [3]byte{0, 18, 43}: "Virbiage Pty Ltd",
+ [3]byte{0, 18, 44}: "Soenen Controls N.V.",
+ [3]byte{0, 18, 45}: "SiNett Corporation",
+ [3]byte{0, 18, 46}: "Signal Technology - AISD",
+ [3]byte{0, 18, 47}: "Sanei Electric Inc.",
+ [3]byte{0, 18, 48}: "Picaso Infocommunication CO., LTD.",
+ [3]byte{0, 18, 49}: "Motion Control Systems, Inc.",
+ [3]byte{0, 18, 50}: "LeWiz Communications Inc.",
+ [3]byte{0, 18, 51}: "JRC TOKKI Co.,Ltd.",
+ [3]byte{0, 18, 52}: "Camille Bauer",
+ [3]byte{0, 18, 53}: "Andrew Corporation",
+ [3]byte{0, 18, 54}: "ConSentry Networks",
+ [3]byte{0, 18, 55}: "Texas Instruments",
+ [3]byte{0, 18, 56}: "SetaBox Technology Co., Ltd.",
+ [3]byte{0, 18, 57}: "S Net Systems Inc.",
+ [3]byte{0, 18, 58}: "Posystech Inc., Co.",
+ [3]byte{0, 18, 59}: "KeRo Systems ApS",
+ [3]byte{0, 18, 60}: "Second Rule LLC",
+ [3]byte{0, 18, 61}: "GES Co, Ltd",
+ [3]byte{0, 18, 62}: "ERUNE technology Co., Ltd.",
+ [3]byte{0, 18, 63}: "Dell Inc.",
+ [3]byte{0, 18, 64}: "AMOI ELECTRONICS CO.,LTD",
+ [3]byte{0, 18, 65}: "a2i marketing center",
+ [3]byte{0, 18, 66}: "Millennial Net",
+ [3]byte{0, 18, 67}: "Cisco Systems, Inc",
+ [3]byte{0, 18, 68}: "Cisco Systems, Inc",
+ [3]byte{0, 18, 69}: "Zellweger Analytics, Inc.",
+ [3]byte{0, 18, 70}: "T.O.M TECHNOLOGY INC..",
+ [3]byte{0, 18, 71}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 18, 72}: "Dell EMC",
+ [3]byte{0, 18, 73}: "Delta Elettronica S.p.A.",
+ [3]byte{0, 18, 74}: "Dedicated Devices, Inc.",
+ [3]byte{0, 18, 75}: "Texas Instruments",
+ [3]byte{0, 18, 76}: "BBWM Corporation",
+ [3]byte{0, 18, 77}: "Inducon BV",
+ [3]byte{0, 18, 78}: "XAC AUTOMATION CORP.",
+ [3]byte{0, 18, 79}: "Pentair Thermal Management",
+ [3]byte{0, 18, 80}: "Tokyo Aircaft Instrument Co., Ltd.",
+ [3]byte{0, 18, 81}: "SILINK",
+ [3]byte{0, 18, 82}: "Citronix, LLC",
+ [3]byte{0, 18, 83}: "AudioDev AB",
+ [3]byte{0, 18, 84}: "Spectra Technologies Holdings Company Ltd",
+ [3]byte{0, 18, 85}: "NetEffect Incorporated",
+ [3]byte{0, 18, 86}: "LG INFORMATION & COMM.",
+ [3]byte{0, 18, 87}: "LeapComm Communication Technologies Inc.",
+ [3]byte{0, 18, 88}: "Activis Polska",
+ [3]byte{0, 18, 89}: "THERMO ELECTRON KARLSRUHE",
+ [3]byte{0, 18, 90}: "Microsoft Corporation",
+ [3]byte{0, 18, 91}: "KAIMEI ELECTRONI",
+ [3]byte{0, 18, 92}: "Green Hills Software, Inc.",
+ [3]byte{0, 18, 93}: "CyberNet Inc.",
+ [3]byte{0, 18, 94}: "CAEN",
+ [3]byte{0, 18, 95}: "AWIND Inc.",
+ [3]byte{0, 18, 96}: "Stanton Magnetics,inc.",
+ [3]byte{0, 18, 97}: "Adaptix, Inc",
+ [3]byte{0, 18, 98}: "Nokia Danmark A/S",
+ [3]byte{0, 18, 99}: "Data Voice Technologies GmbH",
+ [3]byte{0, 18, 100}: "daum electronic gmbh",
+ [3]byte{0, 18, 101}: "Enerdyne Technologies, Inc.",
+ [3]byte{0, 18, 102}: "Swisscom Hospitality Services SA",
+ [3]byte{0, 18, 103}: "Panasonic Corporation",
+ [3]byte{0, 18, 104}: "IPS d.o.o.",
+ [3]byte{0, 18, 105}: "Value Electronics",
+ [3]byte{0, 18, 106}: "OPTOELECTRONICS Co., Ltd.",
+ [3]byte{0, 18, 107}: "Ascalade Communications Limited",
+ [3]byte{0, 18, 108}: "Visonic Technologies 1993 Ltd.",
+ [3]byte{0, 18, 109}: "University of California, Berkeley",
+ [3]byte{0, 18, 110}: "Seidel Elektronik GmbH Nfg.KG",
+ [3]byte{0, 18, 111}: "Rayson Technology Co., Ltd.",
+ [3]byte{0, 18, 112}: "NGES Denro Systems",
+ [3]byte{0, 18, 113}: "Measurement Computing Corp",
+ [3]byte{0, 18, 114}: "Redux Communications Ltd.",
+ [3]byte{0, 18, 115}: "Stoke Inc",
+ [3]byte{0, 18, 116}: "NIT lab",
+ [3]byte{0, 18, 117}: "Sentilla Corporation",
+ [3]byte{0, 18, 118}: "CG Power Systems Ireland Limited",
+ [3]byte{0, 18, 119}: "Korenix Technologies Co., Ltd.",
+ [3]byte{0, 18, 120}: "International Bar Code",
+ [3]byte{0, 18, 121}: "Hewlett Packard",
+ [3]byte{0, 18, 122}: "Sanyu Industry Co.,Ltd.",
+ [3]byte{0, 18, 123}: "VIA Networking Technologies, Inc.",
+ [3]byte{0, 18, 124}: "SWEGON AB",
+ [3]byte{0, 18, 125}: "MobileAria",
+ [3]byte{0, 18, 126}: "Digital Lifestyles Group, Inc.",
+ [3]byte{0, 18, 127}: "Cisco Systems, Inc",
+ [3]byte{0, 18, 128}: "Cisco Systems, Inc",
+ [3]byte{0, 18, 129}: "March Networks S.p.A.",
+ [3]byte{0, 18, 130}: "Qovia",
+ [3]byte{0, 18, 131}: "Nortel Networks",
+ [3]byte{0, 18, 132}: "Lab33 Srl",
+ [3]byte{0, 18, 133}: "Gizmondo Europe Ltd",
+ [3]byte{0, 18, 134}: "ENDEVCO CORP",
+ [3]byte{0, 18, 135}: "Digital Everywhere Unterhaltungselektronik GmbH",
+ [3]byte{0, 18, 136}: "2Wire Inc",
+ [3]byte{0, 18, 137}: "Advance Sterilization Products",
+ [3]byte{0, 18, 138}: "ARRIS Group, Inc.",
+ [3]byte{0, 18, 139}: "Sensory Networks Inc",
+ [3]byte{0, 18, 140}: "Woodward Governor",
+ [3]byte{0, 18, 141}: "STB Datenservice GmbH",
+ [3]byte{0, 18, 142}: "Q-Free ASA",
+ [3]byte{0, 18, 143}: "Montilio",
+ [3]byte{0, 18, 144}: "KYOWA Electric & Machinery Corp.",
+ [3]byte{0, 18, 145}: "KWS Computersysteme GmbH",
+ [3]byte{0, 18, 146}: "Griffin Technology",
+ [3]byte{0, 18, 147}: "GE Energy",
+ [3]byte{0, 18, 148}: "SUMITOMO ELECTRIC DEVICE INNOVATIONS, INC",
+ [3]byte{0, 18, 149}: "Aiware Inc.",
+ [3]byte{0, 18, 150}: "Addlogix",
+ [3]byte{0, 18, 151}: "O2Micro, Inc.",
+ [3]byte{0, 18, 152}: "MICO ELECTRIC(SHENZHEN) LIMITED",
+ [3]byte{0, 18, 153}: "Ktech Telecommunications Inc",
+ [3]byte{0, 18, 154}: "IRT Electronics Pty Ltd",
+ [3]byte{0, 18, 155}: "E2S Electronic Engineering Solutions, S.L.",
+ [3]byte{0, 18, 156}: "Yulinet",
+ [3]byte{0, 18, 157}: "First International Computer do Brasil",
+ [3]byte{0, 18, 158}: "Surf Communications Inc.",
+ [3]byte{0, 18, 159}: "RAE Systems",
+ [3]byte{0, 18, 160}: "NeoMeridian Sdn Bhd",
+ [3]byte{0, 18, 161}: "BluePacket Communications Co., Ltd.",
+ [3]byte{0, 18, 162}: "VITA",
+ [3]byte{0, 18, 163}: "Trust International B.V.",
+ [3]byte{0, 18, 164}: "ThingMagic, LLC",
+ [3]byte{0, 18, 165}: "Stargen, Inc.",
+ [3]byte{0, 18, 166}: "Dolby Australia",
+ [3]byte{0, 18, 167}: "ISR TECHNOLOGIES Inc",
+ [3]byte{0, 18, 168}: "intec GmbH",
+ [3]byte{0, 18, 169}: "3Com Ltd",
+ [3]byte{0, 18, 170}: "IEE, Inc.",
+ [3]byte{0, 18, 171}: "WiLife, Inc.",
+ [3]byte{0, 18, 172}: "ONTIMETEK INC.",
+ [3]byte{0, 18, 173}: "IDS GmbH",
+ [3]byte{0, 18, 174}: "HLS HARD-LINE Solutions Inc.",
+ [3]byte{0, 18, 175}: "ELPRO Technologies",
+ [3]byte{0, 18, 176}: "Efore Oyj (Plc)",
+ [3]byte{0, 18, 177}: "Dai Nippon Printing Co., Ltd",
+ [3]byte{0, 18, 178}: "AVOLITES LTD.",
+ [3]byte{0, 18, 179}: "Advance Wireless Technology Corp.",
+ [3]byte{0, 18, 180}: "Work Microwave GmbH",
+ [3]byte{0, 18, 181}: "Vialta, Inc.",
+ [3]byte{0, 18, 182}: "Santa Barbara Infrared, Inc.",
+ [3]byte{0, 18, 183}: "PTW Freiburg",
+ [3]byte{0, 18, 184}: "G2 Microsystems",
+ [3]byte{0, 18, 185}: "Fusion Digital Technology",
+ [3]byte{0, 18, 186}: "FSI Systems, Inc.",
+ [3]byte{0, 18, 187}: "Telecommunications Industry Association TR-41 Committee",
+ [3]byte{0, 18, 188}: "Echolab LLC",
+ [3]byte{0, 18, 189}: "Avantec Manufacturing Limited",
+ [3]byte{0, 18, 190}: "Astek Corporation",
+ [3]byte{0, 18, 191}: "Arcadyan Technology Corporation",
+ [3]byte{0, 18, 192}: "HotLava Systems, Inc.",
+ [3]byte{0, 18, 193}: "Check Point Software Technologies",
+ [3]byte{0, 18, 194}: "Apex Electronics Factory",
+ [3]byte{0, 18, 195}: "WIT S.A.",
+ [3]byte{0, 18, 196}: "Viseon, Inc.",
+ [3]byte{0, 18, 197}: "V-Show Technology (China) Co.,Ltd",
+ [3]byte{0, 18, 198}: "TGC America, Inc",
+ [3]byte{0, 18, 199}: "SECURAY Technologies Ltd.Co.",
+ [3]byte{0, 18, 200}: "Perfect tech",
+ [3]byte{0, 18, 201}: "ARRIS Group, Inc.",
+ [3]byte{0, 18, 202}: "Mechatronic Brick Aps",
+ [3]byte{0, 18, 203}: "CSS Inc.",
+ [3]byte{0, 18, 204}: "Bitatek CO., LTD",
+ [3]byte{0, 18, 205}: "ASEM SpA",
+ [3]byte{0, 18, 206}: "Advanced Cybernetics Group",
+ [3]byte{0, 18, 207}: "Accton Technology Corp",
+ [3]byte{0, 18, 208}: "Gossen-Metrawatt-GmbH",
+ [3]byte{0, 18, 209}: "Texas Instruments",
+ [3]byte{0, 18, 210}: "Texas Instruments",
+ [3]byte{0, 18, 211}: "Zetta Systems, Inc.",
+ [3]byte{0, 18, 212}: "Princeton Technology, Ltd",
+ [3]byte{0, 18, 213}: "Motion Reality Inc.",
+ [3]byte{0, 18, 214}: "Jiangsu Yitong High-Tech Co.,Ltd",
+ [3]byte{0, 18, 215}: "Invento Networks, Inc.",
+ [3]byte{0, 18, 216}: "International Games System Co., Ltd.",
+ [3]byte{0, 18, 217}: "Cisco Systems, Inc",
+ [3]byte{0, 18, 218}: "Cisco Systems, Inc",
+ [3]byte{0, 18, 219}: "ZIEHL industrie-elektronik GmbH + Co KG",
+ [3]byte{0, 18, 220}: "SunCorp Industrial Limited",
+ [3]byte{0, 18, 221}: "Shengqu Information Technology (Shanghai) Co., Ltd.",
+ [3]byte{0, 18, 222}: "Radio Components Sweden AB",
+ [3]byte{0, 18, 223}: "Novomatic AG",
+ [3]byte{0, 18, 224}: "Codan Limited",
+ [3]byte{0, 18, 225}: "Alliant Networks, Inc",
+ [3]byte{0, 18, 226}: "ALAXALA Networks Corporation",
+ [3]byte{0, 18, 227}: "Agat-RT, Ltd.",
+ [3]byte{0, 18, 228}: "ZIEHL industrie-electronik GmbH + Co KG",
+ [3]byte{0, 18, 229}: "Time America, Inc.",
+ [3]byte{0, 18, 230}: "SPECTEC COMPUTER CO., LTD.",
+ [3]byte{0, 18, 231}: "Projectek Networking Electronics Corp.",
+ [3]byte{0, 18, 232}: "Fraunhofer IMS",
+ [3]byte{0, 18, 233}: "Abbey Systems Ltd",
+ [3]byte{0, 18, 234}: "Trane",
+ [3]byte{0, 18, 235}: "PDH Solutions, LLC",
+ [3]byte{0, 18, 236}: "Movacolor b.v.",
+ [3]byte{0, 18, 237}: "AVG Advanced Technologies",
+ [3]byte{0, 18, 238}: "Sony Mobile Communications AB",
+ [3]byte{0, 18, 239}: "OneAccess SA",
+ [3]byte{0, 18, 240}: "Intel Corporate",
+ [3]byte{0, 18, 241}: "IFOTEC",
+ [3]byte{0, 18, 242}: "Brocade Communications Systems, Inc.",
+ [3]byte{0, 18, 243}: "connectBlue AB",
+ [3]byte{0, 18, 244}: "Belco International Co.,Ltd.",
+ [3]byte{0, 18, 245}: "Imarda New Zealand Limited",
+ [3]byte{0, 18, 246}: "MDK CO.,LTD.",
+ [3]byte{0, 18, 247}: "Xiamen Xinglian Electronics Co., Ltd.",
+ [3]byte{0, 18, 248}: "WNI Resources, LLC",
+ [3]byte{0, 18, 249}: "URYU SEISAKU, LTD.",
+ [3]byte{0, 18, 250}: "THX LTD",
+ [3]byte{0, 18, 251}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 18, 252}: "PLANET System Co.,LTD",
+ [3]byte{0, 18, 253}: "OPTIMUS IC S.A.",
+ [3]byte{0, 18, 254}: "Lenovo Mobile Communication Technology Ltd.",
+ [3]byte{0, 18, 255}: "Lely Industries N.V.",
+ [3]byte{0, 19, 0}: "IT-FACTORY, INC.",
+ [3]byte{0, 19, 1}: "IronGate S.L.",
+ [3]byte{0, 19, 2}: "Intel Corporate",
+ [3]byte{0, 19, 3}: "GateConnect",
+ [3]byte{0, 19, 4}: "Flaircomm Technologies Co. LTD",
+ [3]byte{0, 19, 5}: "Epicom, Inc.",
+ [3]byte{0, 19, 6}: "Always On Wireless",
+ [3]byte{0, 19, 7}: "Paravirtual Corporation",
+ [3]byte{0, 19, 8}: "Nuvera Fuel Cells",
+ [3]byte{0, 19, 9}: "Ocean Broadband Networks",
+ [3]byte{0, 19, 10}: "Nortel Networks",
+ [3]byte{0, 19, 11}: "Mextal B.V.",
+ [3]byte{0, 19, 12}: "HF System Corporation",
+ [3]byte{0, 19, 13}: "GALILEO AVIONICA",
+ [3]byte{0, 19, 14}: "Focusrite Audio Engineering Limited",
+ [3]byte{0, 19, 15}: "EGEMEN Bilgisayar Muh San ve Tic LTD STI",
+ [3]byte{0, 19, 16}: "Cisco-Linksys, LLC",
+ [3]byte{0, 19, 17}: "ARRIS Group, Inc.",
+ [3]byte{0, 19, 18}: "Amedia Networks Inc.",
+ [3]byte{0, 19, 19}: "GuangZhou Post & Telecom Equipment ltd",
+ [3]byte{0, 19, 20}: "Asiamajor Inc.",
+ [3]byte{0, 19, 21}: "Sony Interactive Entertainment Inc.",
+ [3]byte{0, 19, 22}: "L-S-B Broadcast Technologies GmbH",
+ [3]byte{0, 19, 23}: "GN Netcom A/S",
+ [3]byte{0, 19, 24}: "DGSTATION Co., Ltd.",
+ [3]byte{0, 19, 25}: "Cisco Systems, Inc",
+ [3]byte{0, 19, 26}: "Cisco Systems, Inc",
+ [3]byte{0, 19, 27}: "BeCell Innovations Corp.",
+ [3]byte{0, 19, 28}: "LiteTouch, Inc.",
+ [3]byte{0, 19, 29}: "Scanvaegt International A/S",
+ [3]byte{0, 19, 30}: "Peiker acustic GmbH & Co. KG",
+ [3]byte{0, 19, 31}: "NxtPhase T&D, Corp.",
+ [3]byte{0, 19, 32}: "Intel Corporate",
+ [3]byte{0, 19, 33}: "Hewlett Packard",
+ [3]byte{0, 19, 34}: "DAQ Electronics, Inc.",
+ [3]byte{0, 19, 35}: "Cap Co., Ltd.",
+ [3]byte{0, 19, 36}: "Schneider Electric Ultra Terminal",
+ [3]byte{0, 19, 37}: "Cortina Systems Inc",
+ [3]byte{0, 19, 38}: "ECM Systems Ltd",
+ [3]byte{0, 19, 39}: "Data Acquisitions limited",
+ [3]byte{0, 19, 40}: "Westech Korea Inc.,",
+ [3]byte{0, 19, 41}: "VSST Co., LTD",
+ [3]byte{0, 19, 42}: "Sitronics Telecom Solutions",
+ [3]byte{0, 19, 43}: "Phoenix Digital",
+ [3]byte{0, 19, 44}: "MAZ Brandenburg GmbH",
+ [3]byte{0, 19, 45}: "iWise Communications",
+ [3]byte{0, 19, 46}: "ITian Coporation",
+ [3]byte{0, 19, 47}: "Interactek",
+ [3]byte{0, 19, 48}: "EURO PROTECTION SURVEILLANCE",
+ [3]byte{0, 19, 49}: "CellPoint Connect",
+ [3]byte{0, 19, 50}: "Beijing Topsec Network Security Technology Co., Ltd.",
+ [3]byte{0, 19, 51}: "BaudTec Corporation",
+ [3]byte{0, 19, 52}: "Arkados, Inc.",
+ [3]byte{0, 19, 53}: "VS Industry Berhad",
+ [3]byte{0, 19, 54}: "Tianjin 712 Communication Broadcasting co., ltd.",
+ [3]byte{0, 19, 55}: "Orient Power Home Network Ltd.",
+ [3]byte{0, 19, 56}: "FRESENIUS-VIAL",
+ [3]byte{0, 19, 57}: "CCV Deutschland GmbH",
+ [3]byte{0, 19, 58}: "VadaTech Inc.",
+ [3]byte{0, 19, 59}: "Speed Dragon Multimedia Limited",
+ [3]byte{0, 19, 60}: "QUINTRON SYSTEMS INC.",
+ [3]byte{0, 19, 61}: "Micro Memory Curtiss Wright Co",
+ [3]byte{0, 19, 62}: "MetaSwitch",
+ [3]byte{0, 19, 63}: "Eppendorf Instrumente GmbH",
+ [3]byte{0, 19, 64}: "AD.EL s.r.l.",
+ [3]byte{0, 19, 65}: "Shandong New Beiyang Information Technology Co.,Ltd",
+ [3]byte{0, 19, 66}: "Vision Research, Inc.",
+ [3]byte{0, 19, 67}: "Matsushita Electronic Components (Europe) GmbH",
+ [3]byte{0, 19, 68}: "Fargo Electronics Inc.",
+ [3]byte{0, 19, 69}: "Eaton Corporation",
+ [3]byte{0, 19, 70}: "D-Link Corporation",
+ [3]byte{0, 19, 71}: "Red Lion Controls, LP",
+ [3]byte{0, 19, 72}: "Artila Electronics Co., Ltd.",
+ [3]byte{0, 19, 73}: "Zyxel Communications Corporation",
+ [3]byte{0, 19, 74}: "Engim, Inc.",
+ [3]byte{0, 19, 75}: "ToGoldenNet Technology Inc.",
+ [3]byte{0, 19, 76}: "YDT Technology International",
+ [3]byte{0, 19, 77}: "Inepro BV",
+ [3]byte{0, 19, 78}: "Valox Systems, Inc.",
+ [3]byte{0, 19, 79}: "Tranzeo Wireless Technologies Inc.",
+ [3]byte{0, 19, 80}: "Silver Spring Networks, Inc",
+ [3]byte{0, 19, 81}: "Niles Audio Corporation",
+ [3]byte{0, 19, 82}: "Naztec, Inc.",
+ [3]byte{0, 19, 83}: "HYDAC Filtertechnik GMBH",
+ [3]byte{0, 19, 84}: "Zcomax Technologies, Inc.",
+ [3]byte{0, 19, 85}: "TOMEN Cyber-business Solutions, Inc.",
+ [3]byte{0, 19, 86}: "FLIR Radiation Inc",
+ [3]byte{0, 19, 87}: "Soyal Technology Co., Ltd.",
+ [3]byte{0, 19, 88}: "Realm Systems, Inc.",
+ [3]byte{0, 19, 89}: "ProTelevision Technologies A/S",
+ [3]byte{0, 19, 90}: "Project T&E Limited",
+ [3]byte{0, 19, 91}: "PanelLink Cinema, LLC",
+ [3]byte{0, 19, 92}: "OnSite Systems, Inc.",
+ [3]byte{0, 19, 93}: "NTTPC Communications, Inc.",
+ [3]byte{0, 19, 94}: "EAB/RWI/K",
+ [3]byte{0, 19, 95}: "Cisco Systems, Inc",
+ [3]byte{0, 19, 96}: "Cisco Systems, Inc",
+ [3]byte{0, 19, 97}: "Biospace Co., Ltd.",
+ [3]byte{0, 19, 98}: "ShinHeung Precision Co., Ltd.",
+ [3]byte{0, 19, 99}: "Verascape, Inc.",
+ [3]byte{0, 19, 100}: "Paradigm Technology Inc..",
+ [3]byte{0, 19, 101}: "Nortel Networks",
+ [3]byte{0, 19, 102}: "Neturity Technologies Inc.",
+ [3]byte{0, 19, 103}: "Narayon. Co., Ltd.",
+ [3]byte{0, 19, 104}: "Saab Danmark A/S",
+ [3]byte{0, 19, 105}: "Honda Electron Co., LED.",
+ [3]byte{0, 19, 106}: "Hach Lange Sarl",
+ [3]byte{0, 19, 107}: "E-TEC",
+ [3]byte{0, 19, 108}: "TomTom",
+ [3]byte{0, 19, 109}: "Tentaculus AB",
+ [3]byte{0, 19, 110}: "Techmetro Corp.",
+ [3]byte{0, 19, 111}: "PacketMotion, Inc.",
+ [3]byte{0, 19, 112}: "Nokia Danmark A/S",
+ [3]byte{0, 19, 113}: "ARRIS Group, Inc.",
+ [3]byte{0, 19, 114}: "Dell Inc.",
+ [3]byte{0, 19, 115}: "BLwave Electronics Co., Ltd",
+ [3]byte{0, 19, 116}: "Atheros Communications, Inc.",
+ [3]byte{0, 19, 117}: "American Security Products Co.",
+ [3]byte{0, 19, 118}: "Tabor Electronics Ltd.",
+ [3]byte{0, 19, 119}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 19, 120}: "Qsan Technology, Inc.",
+ [3]byte{0, 19, 121}: "PONDER INFORMATION INDUSTRIES LTD.",
+ [3]byte{0, 19, 122}: "Netvox Technology Co., Ltd.",
+ [3]byte{0, 19, 123}: "Movon Corporation",
+ [3]byte{0, 19, 124}: "Kaicom co., Ltd.",
+ [3]byte{0, 19, 125}: "Dynalab, Inc.",
+ [3]byte{0, 19, 126}: "CorEdge Networks, Inc.",
+ [3]byte{0, 19, 127}: "Cisco Systems, Inc",
+ [3]byte{0, 19, 128}: "Cisco Systems, Inc",
+ [3]byte{0, 19, 129}: "CHIPS & Systems, Inc.",
+ [3]byte{0, 19, 130}: "Cetacea Networks Corporation",
+ [3]byte{0, 19, 131}: "Application Technologies and Engineering Research Laboratory",
+ [3]byte{0, 19, 132}: "Advanced Motion Controls",
+ [3]byte{0, 19, 133}: "Add-On Technology Co., LTD.",
+ [3]byte{0, 19, 134}: "ABB Inc./Totalflow",
+ [3]byte{0, 19, 135}: "27M Technologies AB",
+ [3]byte{0, 19, 136}: "WiMedia Alliance",
+ [3]byte{0, 19, 137}: "Redes de Telefonía Móvil S.A.",
+ [3]byte{0, 19, 138}: "QINGDAO GOERTEK ELECTRONICS CO.,LTD.",
+ [3]byte{0, 19, 139}: "Phantom Technologies LLC",
+ [3]byte{0, 19, 140}: "Kumyoung.Co.Ltd",
+ [3]byte{0, 19, 141}: "Kinghold",
+ [3]byte{0, 19, 142}: "FOAB Elektronik AB",
+ [3]byte{0, 19, 143}: "Asiarock Technology Limited",
+ [3]byte{0, 19, 144}: "Termtek Computer Co., Ltd",
+ [3]byte{0, 19, 145}: "OUEN CO.,LTD.",
+ [3]byte{0, 19, 146}: "Ruckus Wireless",
+ [3]byte{0, 19, 147}: "Panta Systems, Inc.",
+ [3]byte{0, 19, 148}: "Infohand Co.,Ltd",
+ [3]byte{0, 19, 149}: "congatec AG",
+ [3]byte{0, 19, 150}: "Acbel Polytech Inc.",
+ [3]byte{0, 19, 151}: "Oracle Corporation",
+ [3]byte{0, 19, 152}: "TrafficSim Co.,Ltd",
+ [3]byte{0, 19, 153}: "STAC Corporation.",
+ [3]byte{0, 19, 154}: "K-ubique ID Corp.",
+ [3]byte{0, 19, 155}: "ioIMAGE Ltd.",
+ [3]byte{0, 19, 156}: "Exavera Technologies, Inc.",
+ [3]byte{0, 19, 157}: "MaxLinear Hispania S.L.U.",
+ [3]byte{0, 19, 158}: "Ciara Technologies Inc.",
+ [3]byte{0, 19, 159}: "Electronics Design Services, Co., Ltd.",
+ [3]byte{0, 19, 160}: "ALGOSYSTEM Co., Ltd.",
+ [3]byte{0, 19, 161}: "Crow Electronic Engeneering",
+ [3]byte{0, 19, 162}: "MaxStream, Inc",
+ [3]byte{0, 19, 163}: "Siemens Com CPE Devices",
+ [3]byte{0, 19, 164}: "KeyEye Communications",
+ [3]byte{0, 19, 165}: "General Solutions, LTD.",
+ [3]byte{0, 19, 166}: "Extricom Ltd",
+ [3]byte{0, 19, 167}: "BATTELLE MEMORIAL INSTITUTE",
+ [3]byte{0, 19, 168}: "Tanisys Technology",
+ [3]byte{0, 19, 169}: "Sony Corporation",
+ [3]byte{0, 19, 170}: "ALS & TEC Ltd.",
+ [3]byte{0, 19, 171}: "Telemotive AG",
+ [3]byte{0, 19, 172}: "Sunmyung Electronics Co., LTD",
+ [3]byte{0, 19, 173}: "Sendo Ltd",
+ [3]byte{0, 19, 174}: "Radiance Technologies, Inc.",
+ [3]byte{0, 19, 175}: "NUMA Technology,Inc.",
+ [3]byte{0, 19, 176}: "Jablotron",
+ [3]byte{0, 19, 177}: "Intelligent Control Systems (Asia) Pte Ltd",
+ [3]byte{0, 19, 178}: "Carallon Limited",
+ [3]byte{0, 19, 179}: "Ecom Communications Technology Co., Ltd.",
+ [3]byte{0, 19, 180}: "Appear TV",
+ [3]byte{0, 19, 181}: "Wavesat",
+ [3]byte{0, 19, 182}: "Sling Media, Inc.",
+ [3]byte{0, 19, 183}: "Scantech ID",
+ [3]byte{0, 19, 184}: "RyCo Electronic Systems Limited",
+ [3]byte{0, 19, 185}: "BM SPA",
+ [3]byte{0, 19, 186}: "ReadyLinks Inc",
+ [3]byte{0, 19, 187}: "Smartvue Corporation",
+ [3]byte{0, 19, 188}: "Artimi Ltd",
+ [3]byte{0, 19, 189}: "HYMATOM SA",
+ [3]byte{0, 19, 190}: "Virtual Conexions",
+ [3]byte{0, 19, 191}: "Media System Planning Corp.",
+ [3]byte{0, 19, 192}: "Trix Tecnologia Ltda.",
+ [3]byte{0, 19, 193}: "Asoka USA Corporation",
+ [3]byte{0, 19, 194}: "WACOM Co.,Ltd",
+ [3]byte{0, 19, 195}: "Cisco Systems, Inc",
+ [3]byte{0, 19, 196}: "Cisco Systems, Inc",
+ [3]byte{0, 19, 197}: "LIGHTRON FIBER-OPTIC DEVICES INC.",
+ [3]byte{0, 19, 198}: "OpenGear, Inc",
+ [3]byte{0, 19, 199}: "IONOS Co.,Ltd.",
+ [3]byte{0, 19, 200}: "ADB Broadband Italia",
+ [3]byte{0, 19, 201}: "Beyond Achieve Enterprises Ltd.",
+ [3]byte{0, 19, 202}: "Pico Digital",
+ [3]byte{0, 19, 203}: "Zenitel Norway AS",
+ [3]byte{0, 19, 204}: "Tall Maple Systems",
+ [3]byte{0, 19, 205}: "MTI co. LTD",
+ [3]byte{0, 19, 206}: "Intel Corporate",
+ [3]byte{0, 19, 207}: "4Access Communications",
+ [3]byte{0, 19, 208}: "t+ Medical Ltd",
+ [3]byte{0, 19, 209}: "KIRK telecom A/S",
+ [3]byte{0, 19, 210}: "PAGE IBERICA, S.A.",
+ [3]byte{0, 19, 211}: "MICRO-STAR INTERNATIONAL CO., LTD.",
+ [3]byte{0, 19, 212}: "ASUSTek COMPUTER INC.",
+ [3]byte{0, 19, 213}: "RuggedCom",
+ [3]byte{0, 19, 214}: "TII NETWORK TECHNOLOGIES, INC.",
+ [3]byte{0, 19, 215}: "SPIDCOM Technologies SA",
+ [3]byte{0, 19, 216}: "Princeton Instruments",
+ [3]byte{0, 19, 217}: "Matrix Product Development, Inc.",
+ [3]byte{0, 19, 218}: "Diskware Co., Ltd",
+ [3]byte{0, 19, 219}: "SHOEI Electric Co.,Ltd",
+ [3]byte{0, 19, 220}: "IBTEK INC.",
+ [3]byte{0, 19, 221}: "Abbott Diagnostics",
+ [3]byte{0, 19, 222}: "Adapt4, LLC",
+ [3]byte{0, 19, 223}: "Ryvor Corp.",
+ [3]byte{0, 19, 224}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{0, 19, 225}: "Iprobe AB",
+ [3]byte{0, 19, 226}: "GeoVision Inc.",
+ [3]byte{0, 19, 227}: "CoVi Technologies, Inc.",
+ [3]byte{0, 19, 228}: "YANGJAE SYSTEMS CORP.",
+ [3]byte{0, 19, 229}: "TENOSYS, INC.",
+ [3]byte{0, 19, 230}: "Technolution",
+ [3]byte{0, 19, 231}: "Halcro",
+ [3]byte{0, 19, 232}: "Intel Corporate",
+ [3]byte{0, 19, 233}: "VeriWave, Inc.",
+ [3]byte{0, 19, 234}: "Kamstrup A/S",
+ [3]byte{0, 19, 235}: "Sysmaster Corporation",
+ [3]byte{0, 19, 236}: "Netsnapper Technologies SARL",
+ [3]byte{0, 19, 237}: "PSIA",
+ [3]byte{0, 19, 238}: "JBX Designs Inc.",
+ [3]byte{0, 19, 239}: "Kingjon Digital Technology Co.,Ltd",
+ [3]byte{0, 19, 240}: "Wavefront Semiconductor",
+ [3]byte{0, 19, 241}: "AMOD Technology Co., Ltd.",
+ [3]byte{0, 19, 242}: "Klas Ltd",
+ [3]byte{0, 19, 243}: "Giga-byte Communications Inc.",
+ [3]byte{0, 19, 244}: "Psitek (Pty) Ltd",
+ [3]byte{0, 19, 245}: "Akimbi Systems",
+ [3]byte{0, 19, 246}: "Cintech",
+ [3]byte{0, 19, 247}: "SMC Networks, Inc.",
+ [3]byte{0, 19, 248}: "Dex Security Solutions",
+ [3]byte{0, 19, 249}: "Cavera Systems",
+ [3]byte{0, 19, 250}: "LifeSize Communications, Inc",
+ [3]byte{0, 19, 251}: "RKC INSTRUMENT INC.",
+ [3]byte{0, 19, 252}: "SiCortex, Inc",
+ [3]byte{0, 19, 253}: "Nokia Danmark A/S",
+ [3]byte{0, 19, 254}: "GRANDTEC ELECTRONIC CORP.",
+ [3]byte{0, 19, 255}: "Dage-MTI of MC, Inc.",
+ [3]byte{0, 20, 0}: "MINERVA KOREA CO., LTD",
+ [3]byte{0, 20, 1}: "Rivertree Networks Corp.",
+ [3]byte{0, 20, 2}: "kk-electronic a/s",
+ [3]byte{0, 20, 3}: "Renasis, LLC",
+ [3]byte{0, 20, 4}: "ARRIS Group, Inc.",
+ [3]byte{0, 20, 5}: "OpenIB, Inc.",
+ [3]byte{0, 20, 6}: "Go Networks",
+ [3]byte{0, 20, 7}: "Sperian Protection Instrumentation",
+ [3]byte{0, 20, 8}: "Eka Systems Inc.",
+ [3]byte{0, 20, 9}: "MAGNETI MARELLI S.E. S.p.A.",
+ [3]byte{0, 20, 10}: "WEPIO Co., Ltd.",
+ [3]byte{0, 20, 11}: "FIRST INTERNATIONAL COMPUTER, INC.",
+ [3]byte{0, 20, 12}: "GKB CCTV CO., LTD.",
+ [3]byte{0, 20, 13}: "Nortel Networks",
+ [3]byte{0, 20, 14}: "Nortel Networks",
+ [3]byte{0, 20, 15}: "Federal State Unitary Enterprise Leningrad R&D Institute of",
+ [3]byte{0, 20, 16}: "Suzhou Keda Technology CO.,Ltd",
+ [3]byte{0, 20, 17}: "Deutschmann Automation GmbH & Co. KG",
+ [3]byte{0, 20, 18}: "S-TEC electronics AG",
+ [3]byte{0, 20, 19}: "Trebing & Himstedt Prozeßautomation GmbH & Co. KG",
+ [3]byte{0, 20, 20}: "Jumpnode Systems LLC.",
+ [3]byte{0, 20, 21}: "Intec Automation inc.",
+ [3]byte{0, 20, 22}: "Scosche Industries, Inc.",
+ [3]byte{0, 20, 23}: "RSE Informations Technologie GmbH",
+ [3]byte{0, 20, 24}: "C4Line",
+ [3]byte{0, 20, 25}: "SIDSA",
+ [3]byte{0, 20, 26}: "DEICY CORPORATION",
+ [3]byte{0, 20, 27}: "Cisco Systems, Inc",
+ [3]byte{0, 20, 28}: "Cisco Systems, Inc",
+ [3]byte{0, 20, 29}: "LTi DRIVES GmbH",
+ [3]byte{0, 20, 30}: "P.A. Semi, Inc.",
+ [3]byte{0, 20, 31}: "SunKwang Electronics Co., Ltd",
+ [3]byte{0, 20, 32}: "G-Links networking company",
+ [3]byte{0, 20, 33}: "Total Wireless Technologies Pte. Ltd.",
+ [3]byte{0, 20, 34}: "Dell Inc.",
+ [3]byte{0, 20, 35}: "J-S Co. NEUROCOM",
+ [3]byte{0, 20, 36}: "Merry Electrics CO., LTD.",
+ [3]byte{0, 20, 37}: "Galactic Computing Corp.",
+ [3]byte{0, 20, 38}: "NL Technology",
+ [3]byte{0, 20, 39}: "JazzMutant",
+ [3]byte{0, 20, 40}: "Vocollect Inc",
+ [3]byte{0, 20, 41}: "V Center Technologies Co., Ltd.",
+ [3]byte{0, 20, 42}: "Elitegroup Computer Systems Co.,Ltd.",
+ [3]byte{0, 20, 43}: "Edata Communication Inc.",
+ [3]byte{0, 20, 44}: "Koncept International, Inc.",
+ [3]byte{0, 20, 45}: "Toradex AG",
+ [3]byte{0, 20, 46}: "77 Elektronika Kft.",
+ [3]byte{0, 20, 47}: "Savvius",
+ [3]byte{0, 20, 48}: "ViPowER, Inc",
+ [3]byte{0, 20, 49}: "PDL Electronics Ltd",
+ [3]byte{0, 20, 50}: "Tarallax Wireless, Inc.",
+ [3]byte{0, 20, 51}: "Empower Technologies(Canada) Inc.",
+ [3]byte{0, 20, 52}: "Keri Systems, Inc",
+ [3]byte{0, 20, 53}: "CityCom Corp.",
+ [3]byte{0, 20, 54}: "Qwerty Elektronik AB",
+ [3]byte{0, 20, 55}: "GSTeletech Co.,Ltd.",
+ [3]byte{0, 20, 56}: "Hewlett Packard Enterprise",
+ [3]byte{0, 20, 57}: "Blonder Tongue Laboratories, Inc",
+ [3]byte{0, 20, 58}: "RAYTALK INTERNATIONAL SRL",
+ [3]byte{0, 20, 59}: "Sensovation AG",
+ [3]byte{0, 20, 60}: "Rheinmetall Canada Inc.",
+ [3]byte{0, 20, 61}: "Aevoe Inc.",
+ [3]byte{0, 20, 62}: "AirLink Communications, Inc.",
+ [3]byte{0, 20, 63}: "Hotway Technology Corporation",
+ [3]byte{0, 20, 64}: "ATOMIC Corporation",
+ [3]byte{0, 20, 65}: "Innovation Sound Technology Co., LTD.",
+ [3]byte{0, 20, 66}: "ATTO CORPORATION",
+ [3]byte{0, 20, 67}: "Consultronics Europe Ltd",
+ [3]byte{0, 20, 68}: "Grundfos Holding",
+ [3]byte{0, 20, 69}: "Telefon-Gradnja d.o.o.",
+ [3]byte{0, 20, 70}: "SuperVision Solutions LLC",
+ [3]byte{0, 20, 71}: "BOAZ Inc.",
+ [3]byte{0, 20, 72}: "Inventec Multimedia & Telecom Corporation",
+ [3]byte{0, 20, 73}: "Sichuan Changhong Electric Ltd.",
+ [3]byte{0, 20, 74}: "Taiwan Thick-Film Ind. Corp.",
+ [3]byte{0, 20, 75}: "Hifn, Inc.",
+ [3]byte{0, 20, 76}: "General Meters Corp.",
+ [3]byte{0, 20, 77}: "Intelligent Systems",
+ [3]byte{0, 20, 78}: "SRISA",
+ [3]byte{0, 20, 79}: "Oracle Corporation",
+ [3]byte{0, 20, 80}: "Heim Systems GmbH",
+ [3]byte{0, 20, 81}: "Apple, Inc.",
+ [3]byte{0, 20, 82}: "CALCULEX,INC.",
+ [3]byte{0, 20, 83}: "ADVANTECH TECHNOLOGIES CO.,LTD",
+ [3]byte{0, 20, 84}: "Symwave",
+ [3]byte{0, 20, 85}: "Coder Electronics Corporation",
+ [3]byte{0, 20, 86}: "Edge Products",
+ [3]byte{0, 20, 87}: "T-VIPS AS",
+ [3]byte{0, 20, 88}: "HS Automatic ApS",
+ [3]byte{0, 20, 89}: "Moram Co., Ltd.",
+ [3]byte{0, 20, 90}: "Neratec Solutions AG",
+ [3]byte{0, 20, 91}: "SeekerNet Inc.",
+ [3]byte{0, 20, 92}: "Intronics B.V.",
+ [3]byte{0, 20, 93}: "WJ Communications, Inc.",
+ [3]byte{0, 20, 94}: "IBM Corp",
+ [3]byte{0, 20, 95}: "ADITEC CO. LTD",
+ [3]byte{0, 20, 96}: "Kyocera Wireless Corp.",
+ [3]byte{0, 20, 97}: "CORONA CORPORATION",
+ [3]byte{0, 20, 98}: "Digiwell Technology, inc",
+ [3]byte{0, 20, 99}: "IDCS N.V.",
+ [3]byte{0, 20, 100}: "Cryptosoft",
+ [3]byte{0, 20, 101}: "Novo Nordisk A/S",
+ [3]byte{0, 20, 102}: "Kleinhenz Elektronik GmbH",
+ [3]byte{0, 20, 103}: "ArrowSpan Inc.",
+ [3]byte{0, 20, 104}: "CelPlan International, Inc.",
+ [3]byte{0, 20, 105}: "Cisco Systems, Inc",
+ [3]byte{0, 20, 106}: "Cisco Systems, Inc",
+ [3]byte{0, 20, 107}: "Anagran, Inc.",
+ [3]byte{0, 20, 108}: "NETGEAR",
+ [3]byte{0, 20, 109}: "RF Technologies",
+ [3]byte{0, 20, 110}: "H. Stoll GmbH & Co. KG",
+ [3]byte{0, 20, 111}: "Kohler Co",
+ [3]byte{0, 20, 112}: "Prokom Software SA",
+ [3]byte{0, 20, 113}: "Eastern Asia Technology Limited",
+ [3]byte{0, 20, 114}: "China Broadband Wireless IP Standard Group",
+ [3]byte{0, 20, 115}: "Bookham Inc",
+ [3]byte{0, 20, 116}: "K40 Electronics",
+ [3]byte{0, 20, 117}: "Wiline Networks, Inc.",
+ [3]byte{0, 20, 118}: "MultiCom Industries Limited",
+ [3]byte{0, 20, 119}: "Nertec Inc.",
+ [3]byte{0, 20, 120}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{0, 20, 121}: "NEC Magnus Communications,Ltd.",
+ [3]byte{0, 20, 122}: "Eubus GmbH",
+ [3]byte{0, 20, 123}: "Iteris, Inc.",
+ [3]byte{0, 20, 124}: "3Com Ltd",
+ [3]byte{0, 20, 125}: "Aeon Digital International",
+ [3]byte{0, 20, 126}: "InnerWireless",
+ [3]byte{0, 20, 127}: "Thomson Telecom Belgium",
+ [3]byte{0, 20, 128}: "Hitachi-LG Data Storage Korea, Inc",
+ [3]byte{0, 20, 129}: "Multilink Inc",
+ [3]byte{0, 20, 130}: "Aurora Networks",
+ [3]byte{0, 20, 131}: "eXS Inc.",
+ [3]byte{0, 20, 132}: "Cermate Technologies Inc.",
+ [3]byte{0, 20, 133}: "Giga-Byte",
+ [3]byte{0, 20, 134}: "Echo Digital Audio Corporation",
+ [3]byte{0, 20, 135}: "American Technology Integrators",
+ [3]byte{0, 20, 136}: "Akorri",
+ [3]byte{0, 20, 137}: "B15402100 - JANDEI, S.L.",
+ [3]byte{0, 20, 138}: "Elin Ebg Traction Gmbh",
+ [3]byte{0, 20, 139}: "Globo Electronic GmbH & Co. KG",
+ [3]byte{0, 20, 140}: "General Dynamics Mission Systems",
+ [3]byte{0, 20, 141}: "Cubic Defense Simulation Systems",
+ [3]byte{0, 20, 142}: "Tele Power Inc.",
+ [3]byte{0, 20, 143}: "Protronic (Far East) Ltd.",
+ [3]byte{0, 20, 144}: "ASP Corporation",
+ [3]byte{0, 20, 145}: "Daniels Electronics Ltd. dbo Codan Rado Communications",
+ [3]byte{0, 20, 146}: "Liteon, Mobile Media Solution SBU",
+ [3]byte{0, 20, 147}: "Systimax Solutions",
+ [3]byte{0, 20, 148}: "ESU AG",
+ [3]byte{0, 20, 149}: "2Wire Inc",
+ [3]byte{0, 20, 150}: "Phonic Corp.",
+ [3]byte{0, 20, 151}: "ZHIYUAN Eletronics co.,ltd.",
+ [3]byte{0, 20, 152}: "Viking Design Technology",
+ [3]byte{0, 20, 153}: "Helicomm Inc",
+ [3]byte{0, 20, 154}: "ARRIS Group, Inc.",
+ [3]byte{0, 20, 155}: "Nokota Communications, LLC",
+ [3]byte{0, 20, 156}: "HF Company",
+ [3]byte{0, 20, 157}: "Sound ID Inc.",
+ [3]byte{0, 20, 158}: "UbONE Co., Ltd",
+ [3]byte{0, 20, 159}: "System and Chips, Inc.",
+ [3]byte{0, 20, 160}: "Accsense, Inc.",
+ [3]byte{0, 20, 161}: "Synchronous Communication Corp",
+ [3]byte{0, 20, 162}: "Core Micro Systems Inc.",
+ [3]byte{0, 20, 163}: "Vitelec BV",
+ [3]byte{0, 20, 164}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{0, 20, 165}: "Gemtek Technology Co., Ltd.",
+ [3]byte{0, 20, 166}: "Teranetics, Inc.",
+ [3]byte{0, 20, 167}: "Nokia Danmark A/S",
+ [3]byte{0, 20, 168}: "Cisco Systems, Inc",
+ [3]byte{0, 20, 169}: "Cisco Systems, Inc",
+ [3]byte{0, 20, 170}: "Ashly Audio, Inc.",
+ [3]byte{0, 20, 171}: "Senhai Electronic Technology Co., Ltd.",
+ [3]byte{0, 20, 172}: "Bountiful WiFi",
+ [3]byte{0, 20, 173}: "Gassner Wiege- und Meßtechnik GmbH",
+ [3]byte{0, 20, 174}: "Wizlogics Co., Ltd.",
+ [3]byte{0, 20, 175}: "Datasym POS Inc.",
+ [3]byte{0, 20, 176}: "Naeil Community",
+ [3]byte{0, 20, 177}: "Axell Wireless Limited",
+ [3]byte{0, 20, 178}: "mCubelogics Corporation",
+ [3]byte{0, 20, 179}: "CoreStar International Corp",
+ [3]byte{0, 20, 180}: "General Dynamics United Kingdom Ltd",
+ [3]byte{0, 20, 181}: "PHYSIOMETRIX,INC",
+ [3]byte{0, 20, 182}: "Enswer Technology Inc.",
+ [3]byte{0, 20, 183}: "AR Infotek Inc.",
+ [3]byte{0, 20, 184}: "Hill-Rom",
+ [3]byte{0, 20, 185}: "MSTAR SEMICONDUCTOR",
+ [3]byte{0, 20, 186}: "Carvers SA de CV",
+ [3]byte{0, 20, 187}: "Open Interface North America",
+ [3]byte{0, 20, 188}: "SYNECTIC TELECOM EXPORTS PVT. LTD.",
+ [3]byte{0, 20, 189}: "incNETWORKS, Inc",
+ [3]byte{0, 20, 190}: "Wink communication technology CO.LTD",
+ [3]byte{0, 20, 191}: "Cisco-Linksys, LLC",
+ [3]byte{0, 20, 192}: "Symstream Technology Group Ltd",
+ [3]byte{0, 20, 193}: "U.S. Robotics Corporation",
+ [3]byte{0, 20, 194}: "Hewlett Packard",
+ [3]byte{0, 20, 195}: "Seagate Technology",
+ [3]byte{0, 20, 196}: "Vitelcom Mobile Technology",
+ [3]byte{0, 20, 197}: "Alive Technologies Pty Ltd",
+ [3]byte{0, 20, 198}: "Quixant Ltd",
+ [3]byte{0, 20, 199}: "Nortel Networks",
+ [3]byte{0, 20, 200}: "Contemporary Research Corp",
+ [3]byte{0, 20, 201}: "Brocade Communications Systems, Inc.",
+ [3]byte{0, 20, 202}: "Key Radio Systems Limited",
+ [3]byte{0, 20, 203}: "LifeSync Corporation",
+ [3]byte{0, 20, 204}: "Zetec, Inc.",
+ [3]byte{0, 20, 205}: "DigitalZone Co., Ltd.",
+ [3]byte{0, 20, 206}: "NF CORPORATION",
+ [3]byte{0, 20, 207}: "INVISIO Communications",
+ [3]byte{0, 20, 208}: "BTI Systems Inc.",
+ [3]byte{0, 20, 209}: "TRENDnet, Inc.",
+ [3]byte{0, 20, 210}: "Kyuden Technosystems Corporation",
+ [3]byte{0, 20, 211}: "SEPSA",
+ [3]byte{0, 20, 212}: "K Technology Corporation",
+ [3]byte{0, 20, 213}: "Datang Telecom Technology CO. , LCD,Optical Communication Br",
+ [3]byte{0, 20, 214}: "Jeongmin Electronics Co.,Ltd.",
+ [3]byte{0, 20, 215}: "Datastore Technology Corp",
+ [3]byte{0, 20, 216}: "bio-logic SA",
+ [3]byte{0, 20, 217}: "IP Fabrics, Inc.",
+ [3]byte{0, 20, 218}: "Huntleigh Healthcare",
+ [3]byte{0, 20, 219}: "Elma Trenew Electronic GmbH",
+ [3]byte{0, 20, 220}: "Communication System Design & Manufacturing (CSDM)",
+ [3]byte{0, 20, 221}: "Covergence Inc.",
+ [3]byte{0, 20, 222}: "Sage Instruments Inc.",
+ [3]byte{0, 20, 223}: "HI-P Tech Corporation",
+ [3]byte{0, 20, 224}: "LET'S Corporation",
+ [3]byte{0, 20, 225}: "Data Display AG",
+ [3]byte{0, 20, 226}: "datacom systems inc.",
+ [3]byte{0, 20, 227}: "mm-lab GmbH",
+ [3]byte{0, 20, 228}: "infinias, LLC",
+ [3]byte{0, 20, 229}: "Alticast",
+ [3]byte{0, 20, 230}: "AIM Infrarotmodule GmbH",
+ [3]byte{0, 20, 231}: "Stolinx,. Inc",
+ [3]byte{0, 20, 232}: "ARRIS Group, Inc.",
+ [3]byte{0, 20, 233}: "Nortech International",
+ [3]byte{0, 20, 234}: "S Digm Inc. (Safe Paradigm Inc.)",
+ [3]byte{0, 20, 235}: "AwarePoint Corporation",
+ [3]byte{0, 20, 236}: "Acro Telecom",
+ [3]byte{0, 20, 237}: "Airak, Inc.",
+ [3]byte{0, 20, 238}: "Western Digital Technologies, Inc.",
+ [3]byte{0, 20, 239}: "TZero Technologies, Inc.",
+ [3]byte{0, 20, 240}: "Business Security OL AB",
+ [3]byte{0, 20, 241}: "Cisco Systems, Inc",
+ [3]byte{0, 20, 242}: "Cisco Systems, Inc",
+ [3]byte{0, 20, 243}: "ViXS Systems Inc",
+ [3]byte{0, 20, 244}: "DekTec Digital Video B.V.",
+ [3]byte{0, 20, 245}: "OSI Security Devices",
+ [3]byte{0, 20, 246}: "Juniper Networks",
+ [3]byte{0, 20, 247}: "CREVIS Co., LTD",
+ [3]byte{0, 20, 248}: "Scientific Atlanta",
+ [3]byte{0, 20, 249}: "Vantage Controls",
+ [3]byte{0, 20, 250}: "AsGa S.A.",
+ [3]byte{0, 20, 251}: "Technical Solutions Inc.",
+ [3]byte{0, 20, 252}: "Extandon, Inc.",
+ [3]byte{0, 20, 253}: "Thecus Technology Corp.",
+ [3]byte{0, 20, 254}: "Artech Electronics",
+ [3]byte{0, 20, 255}: "Precise Automation, Inc.",
+ [3]byte{0, 21, 0}: "Intel Corporate",
+ [3]byte{0, 21, 1}: "LexBox",
+ [3]byte{0, 21, 2}: "BETA tech",
+ [3]byte{0, 21, 3}: "PROFIcomms s.r.o.",
+ [3]byte{0, 21, 4}: "GAME PLUS CO., LTD.",
+ [3]byte{0, 21, 5}: "Actiontec Electronics, Inc",
+ [3]byte{0, 21, 6}: "Neo Photonics",
+ [3]byte{0, 21, 7}: "Renaissance Learning Inc",
+ [3]byte{0, 21, 8}: "Global Target Enterprise Inc",
+ [3]byte{0, 21, 9}: "Plus Technology Co., Ltd",
+ [3]byte{0, 21, 10}: "Sonoa Systems, Inc",
+ [3]byte{0, 21, 11}: "SAGE INFOTECH LTD.",
+ [3]byte{0, 21, 12}: "AVM GmbH",
+ [3]byte{0, 21, 13}: "Hoana Medical, Inc.",
+ [3]byte{0, 21, 14}: "OPENBRAIN TECHNOLOGIES CO., LTD.",
+ [3]byte{0, 21, 15}: "mingjong",
+ [3]byte{0, 21, 16}: "Techsphere Co., Ltd",
+ [3]byte{0, 21, 17}: "Data Center Systems",
+ [3]byte{0, 21, 18}: "Zurich University of Applied Sciences",
+ [3]byte{0, 21, 19}: "EFS sas",
+ [3]byte{0, 21, 20}: "Hu Zhou NAVA Networks&Electronics Ltd.",
+ [3]byte{0, 21, 21}: "Leipold+Co.GmbH",
+ [3]byte{0, 21, 22}: "URIEL SYSTEMS INC.",
+ [3]byte{0, 21, 23}: "Intel Corporate",
+ [3]byte{0, 21, 24}: "Shenzhen 10MOONS Technology Development CO.,Ltd",
+ [3]byte{0, 21, 25}: "StoreAge Networking Technologies",
+ [3]byte{0, 21, 26}: "Hunter Engineering Company",
+ [3]byte{0, 21, 27}: "Isilon Systems Inc.",
+ [3]byte{0, 21, 28}: "LENECO",
+ [3]byte{0, 21, 29}: "M2I CORPORATION",
+ [3]byte{0, 21, 30}: "Ethernet Powerlink Standardization Group (EPSG)",
+ [3]byte{0, 21, 31}: "Multivision Intelligent Surveillance (Hong Kong) Ltd",
+ [3]byte{0, 21, 32}: "Radiocrafts AS",
+ [3]byte{0, 21, 33}: "Horoquartz",
+ [3]byte{0, 21, 34}: "Dea Security",
+ [3]byte{0, 21, 35}: "Meteor Communications Corporation",
+ [3]byte{0, 21, 36}: "Numatics, Inc.",
+ [3]byte{0, 21, 37}: "Chamberlain Access Solutions",
+ [3]byte{0, 21, 38}: "Remote Technologies Inc",
+ [3]byte{0, 21, 39}: "Balboa Instruments",
+ [3]byte{0, 21, 40}: "Beacon Medical Products LLC d.b.a. BeaconMedaes",
+ [3]byte{0, 21, 41}: "N3 Corporation",
+ [3]byte{0, 21, 42}: "Nokia Corporation",
+ [3]byte{0, 21, 43}: "Cisco Systems, Inc",
+ [3]byte{0, 21, 44}: "Cisco Systems, Inc",
+ [3]byte{0, 21, 45}: "TenX Networks, LLC",
+ [3]byte{0, 21, 46}: "PacketHop, Inc.",
+ [3]byte{0, 21, 47}: "ARRIS Group, Inc.",
+ [3]byte{0, 21, 48}: "Dell EMC",
+ [3]byte{0, 21, 49}: "KOCOM",
+ [3]byte{0, 21, 50}: "Consumer Technologies Group, LLC",
+ [3]byte{0, 21, 51}: "NADAM.CO.,LTD",
+ [3]byte{0, 21, 52}: "A Beltrónica-Companhia de Comunicações, Lda",
+ [3]byte{0, 21, 53}: "OTE Spa",
+ [3]byte{0, 21, 54}: "Powertech co.,Ltd",
+ [3]byte{0, 21, 55}: "Ventus Networks",
+ [3]byte{0, 21, 56}: "RFID, Inc.",
+ [3]byte{0, 21, 57}: "Technodrive srl",
+ [3]byte{0, 21, 58}: "Shenzhen Syscan Technology Co.,Ltd.",
+ [3]byte{0, 21, 59}: "EMH metering GmbH & Co. KG",
+ [3]byte{0, 21, 60}: "Kprotech Co., Ltd.",
+ [3]byte{0, 21, 61}: "ELIM PRODUCT CO.",
+ [3]byte{0, 21, 62}: "Q-Matic Sweden AB",
+ [3]byte{0, 21, 63}: "Alcatel Alenia Space Italia",
+ [3]byte{0, 21, 64}: "Nortel Networks",
+ [3]byte{0, 21, 65}: "StrataLight Communications, Inc.",
+ [3]byte{0, 21, 66}: "MICROHARD S.R.L.",
+ [3]byte{0, 21, 67}: "Aberdeen Test Center",
+ [3]byte{0, 21, 68}: "coM.s.a.t. AG",
+ [3]byte{0, 21, 69}: "SEECODE Co., Ltd.",
+ [3]byte{0, 21, 70}: "ITG Worldwide Sdn Bhd",
+ [3]byte{0, 21, 71}: "AiZen Solutions Inc.",
+ [3]byte{0, 21, 72}: "CUBE TECHNOLOGIES",
+ [3]byte{0, 21, 73}: "Dixtal Biomedica Ind. Com. Ltda",
+ [3]byte{0, 21, 74}: "WANSHIH ELECTRONIC CO., LTD",
+ [3]byte{0, 21, 75}: "Wonde Proud Technology Co., Ltd",
+ [3]byte{0, 21, 76}: "Saunders Electronics",
+ [3]byte{0, 21, 77}: "Netronome Systems, Inc.",
+ [3]byte{0, 21, 78}: "IEC",
+ [3]byte{0, 21, 79}: "one RF Technology",
+ [3]byte{0, 21, 80}: "Nits Technology Inc",
+ [3]byte{0, 21, 81}: "RadioPulse Inc.",
+ [3]byte{0, 21, 82}: "Wi-Gear Inc.",
+ [3]byte{0, 21, 83}: "Cytyc Corporation",
+ [3]byte{0, 21, 84}: "Atalum Wireless S.A.",
+ [3]byte{0, 21, 85}: "DFM GmbH",
+ [3]byte{0, 21, 86}: "Sagemcom Broadband SAS",
+ [3]byte{0, 21, 87}: "Olivetti",
+ [3]byte{0, 21, 88}: "FOXCONN",
+ [3]byte{0, 21, 89}: "Securaplane Technologies, Inc.",
+ [3]byte{0, 21, 90}: "DAINIPPON PHARMACEUTICAL CO., LTD.",
+ [3]byte{0, 21, 91}: "Sampo Corporation",
+ [3]byte{0, 21, 92}: "Dresser Wayne",
+ [3]byte{0, 21, 93}: "Microsoft Corporation",
+ [3]byte{0, 21, 94}: "Morgan Stanley",
+ [3]byte{0, 21, 95}: "GreenPeak Technologies",
+ [3]byte{0, 21, 96}: "Hewlett Packard",
+ [3]byte{0, 21, 97}: "JJPlus Corporation",
+ [3]byte{0, 21, 98}: "Cisco Systems, Inc",
+ [3]byte{0, 21, 99}: "Cisco Systems, Inc",
+ [3]byte{0, 21, 100}: "BEHRINGER Spezielle Studiotechnik GmbH",
+ [3]byte{0, 21, 101}: "XIAMEN YEALINK NETWORK TECHNOLOGY CO.,LTD",
+ [3]byte{0, 21, 102}: "A-First Technology Co., Ltd.",
+ [3]byte{0, 21, 103}: "RADWIN Inc.",
+ [3]byte{0, 21, 104}: "Dilithium Networks",
+ [3]byte{0, 21, 105}: "PECO II, Inc.",
+ [3]byte{0, 21, 106}: "DG2L Technologies Pvt. Ltd.",
+ [3]byte{0, 21, 107}: "Perfisans Networks Corp.",
+ [3]byte{0, 21, 108}: "SANE SYSTEM CO., LTD",
+ [3]byte{0, 21, 109}: "Ubiquiti Networks Inc.",
+ [3]byte{0, 21, 110}: "A. W. Communication Systems Ltd",
+ [3]byte{0, 21, 111}: "Xiranet Communications GmbH",
+ [3]byte{0, 21, 112}: "Zebra Technologies Inc",
+ [3]byte{0, 21, 113}: "Nolan Systems",
+ [3]byte{0, 21, 114}: "Red-Lemon",
+ [3]byte{0, 21, 115}: "NewSoft Technology Corporation",
+ [3]byte{0, 21, 116}: "Horizon Semiconductors Ltd.",
+ [3]byte{0, 21, 117}: "Nevis Networks Inc.",
+ [3]byte{0, 21, 118}: "LABiTec - Labor Biomedical Technologies GmbH",
+ [3]byte{0, 21, 119}: "Allied Telesis, Inc.",
+ [3]byte{0, 21, 120}: "Audio / Video Innovations",
+ [3]byte{0, 21, 121}: "Lunatone Industrielle Elektronik GmbH",
+ [3]byte{0, 21, 122}: "Telefin S.p.A.",
+ [3]byte{0, 21, 123}: "Leuze electronic GmbH + Co. KG",
+ [3]byte{0, 21, 124}: "Dave Networks, Inc.",
+ [3]byte{0, 21, 125}: "POSDATA",
+ [3]byte{0, 21, 126}: "Weidmüller Interface GmbH & Co. KG",
+ [3]byte{0, 21, 127}: "ChuanG International Holding CO.,LTD.",
+ [3]byte{0, 21, 128}: "U-WAY CORPORATION",
+ [3]byte{0, 21, 129}: "MAKUS Inc.",
+ [3]byte{0, 21, 130}: "Pulse Eight Limited",
+ [3]byte{0, 21, 131}: "IVT corporation",
+ [3]byte{0, 21, 132}: "Schenck Process GmbH",
+ [3]byte{0, 21, 133}: "Aonvision Technolopy Corp.",
+ [3]byte{0, 21, 134}: "Xiamen Overseas Chinese Electronic Co., Ltd.",
+ [3]byte{0, 21, 135}: "Takenaka Seisakusho Co.,Ltd",
+ [3]byte{0, 21, 136}: "Salutica Allied Solutions Sdn Bhd",
+ [3]byte{0, 21, 137}: "D-MAX Technology Co.,Ltd",
+ [3]byte{0, 21, 138}: "SURECOM Technology Corp.",
+ [3]byte{0, 21, 139}: "Park Air Systems Ltd",
+ [3]byte{0, 21, 140}: "Liab ApS",
+ [3]byte{0, 21, 141}: "Jennic Ltd",
+ [3]byte{0, 21, 142}: "Plustek.INC",
+ [3]byte{0, 21, 143}: "NTT Advanced Technology Corporation",
+ [3]byte{0, 21, 144}: "Hectronic GmbH",
+ [3]byte{0, 21, 145}: "RLW Inc.",
+ [3]byte{0, 21, 146}: "Facom UK Ltd (Melksham)",
+ [3]byte{0, 21, 147}: "U4EA Technologies Inc.",
+ [3]byte{0, 21, 148}: "BIXOLON CO.,LTD",
+ [3]byte{0, 21, 149}: "Quester Tangent Corporation",
+ [3]byte{0, 21, 150}: "ARRIS Group, Inc.",
+ [3]byte{0, 21, 151}: "AETA AUDIO SYSTEMS",
+ [3]byte{0, 21, 152}: "Kolektor group",
+ [3]byte{0, 21, 153}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 21, 154}: "ARRIS Group, Inc.",
+ [3]byte{0, 21, 155}: "Nortel Networks",
+ [3]byte{0, 21, 156}: "B-KYUNG SYSTEM Co.,Ltd.",
+ [3]byte{0, 21, 157}: "Tripp Lite",
+ [3]byte{0, 21, 158}: "Mad Catz Interactive Inc",
+ [3]byte{0, 21, 159}: "Terascala, Inc.",
+ [3]byte{0, 21, 160}: "Nokia Danmark A/S",
+ [3]byte{0, 21, 161}: "ECA-SINTERS",
+ [3]byte{0, 21, 162}: "ARRIS Group, Inc.",
+ [3]byte{0, 21, 163}: "ARRIS Group, Inc.",
+ [3]byte{0, 21, 164}: "ARRIS Group, Inc.",
+ [3]byte{0, 21, 165}: "DCI Co., Ltd.",
+ [3]byte{0, 21, 166}: "Digital Electronics Products Ltd.",
+ [3]byte{0, 21, 167}: "Robatech AG",
+ [3]byte{0, 21, 168}: "ARRIS Group, Inc.",
+ [3]byte{0, 21, 169}: "KWANG WOO I&C CO.,LTD",
+ [3]byte{0, 21, 170}: "Rextechnik International Co.,",
+ [3]byte{0, 21, 171}: "PRO CO SOUND INC",
+ [3]byte{0, 21, 172}: "Capelon AB",
+ [3]byte{0, 21, 173}: "Accedian Networks",
+ [3]byte{0, 21, 174}: "kyung il",
+ [3]byte{0, 21, 175}: "AzureWave Technology Inc.",
+ [3]byte{0, 21, 176}: "AUTOTELENET CO.,LTD",
+ [3]byte{0, 21, 177}: "Ambient Corporation",
+ [3]byte{0, 21, 178}: "Advanced Industrial Computer, Inc.",
+ [3]byte{0, 21, 179}: "Caretech AB",
+ [3]byte{0, 21, 180}: "Polymap Wireless LLC",
+ [3]byte{0, 21, 181}: "CI Network Corp.",
+ [3]byte{0, 21, 182}: "ShinMaywa Industries, Ltd.",
+ [3]byte{0, 21, 183}: "Toshiba",
+ [3]byte{0, 21, 184}: "Tahoe",
+ [3]byte{0, 21, 185}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 21, 186}: "iba AG",
+ [3]byte{0, 21, 187}: "SMA Solar Technology AG",
+ [3]byte{0, 21, 188}: "Develco",
+ [3]byte{0, 21, 189}: "Group 4 Technology Ltd",
+ [3]byte{0, 21, 190}: "Iqua Ltd.",
+ [3]byte{0, 21, 191}: "technicob",
+ [3]byte{0, 21, 192}: "DIGITAL TELEMEDIA CO.,LTD.",
+ [3]byte{0, 21, 193}: "Sony Interactive Entertainment Inc.",
+ [3]byte{0, 21, 194}: "3M Germany",
+ [3]byte{0, 21, 195}: "Ruf Telematik AG",
+ [3]byte{0, 21, 196}: "FLOVEL CO., LTD.",
+ [3]byte{0, 21, 197}: "Dell Inc.",
+ [3]byte{0, 21, 198}: "Cisco Systems, Inc",
+ [3]byte{0, 21, 199}: "Cisco Systems, Inc",
+ [3]byte{0, 21, 200}: "FlexiPanel Ltd",
+ [3]byte{0, 21, 201}: "Gumstix, Inc",
+ [3]byte{0, 21, 202}: "TeraRecon, Inc.",
+ [3]byte{0, 21, 203}: "Surf Communication Solutions Ltd.",
+ [3]byte{0, 21, 204}: "UQUEST, LTD.",
+ [3]byte{0, 21, 205}: "Exartech International Corp.",
+ [3]byte{0, 21, 206}: "ARRIS Group, Inc.",
+ [3]byte{0, 21, 207}: "ARRIS Group, Inc.",
+ [3]byte{0, 21, 208}: "ARRIS Group, Inc.",
+ [3]byte{0, 21, 209}: "ARRIS Group, Inc.",
+ [3]byte{0, 21, 210}: "Xantech Corporation",
+ [3]byte{0, 21, 211}: "Pantech&Curitel Communications, Inc.",
+ [3]byte{0, 21, 212}: "Emitor AB",
+ [3]byte{0, 21, 213}: "NICEVT",
+ [3]byte{0, 21, 214}: "OSLiNK Sp. z o.o.",
+ [3]byte{0, 21, 215}: "Reti Corporation",
+ [3]byte{0, 21, 216}: "Interlink Electronics",
+ [3]byte{0, 21, 217}: "PKC Electronics Oy",
+ [3]byte{0, 21, 218}: "IRITEL A.D.",
+ [3]byte{0, 21, 219}: "Canesta Inc.",
+ [3]byte{0, 21, 220}: "KT&C Co., Ltd.",
+ [3]byte{0, 21, 221}: "IP Control Systems Ltd.",
+ [3]byte{0, 21, 222}: "Nokia Danmark A/S",
+ [3]byte{0, 21, 223}: "Clivet S.p.A.",
+ [3]byte{0, 21, 224}: "Ericsson",
+ [3]byte{0, 21, 225}: "Picochip Ltd",
+ [3]byte{0, 21, 226}: "Dr.Ing. Herbert Knauer GmbH",
+ [3]byte{0, 21, 227}: "Dream Technologies Corporation",
+ [3]byte{0, 21, 228}: "Zimmer Elektromedizin",
+ [3]byte{0, 21, 229}: "Cheertek Inc.",
+ [3]byte{0, 21, 230}: "MOBILE TECHNIKA Inc.",
+ [3]byte{0, 21, 231}: "Quantec Tontechnik",
+ [3]byte{0, 21, 232}: "Nortel Networks",
+ [3]byte{0, 21, 233}: "D-Link Corporation",
+ [3]byte{0, 21, 234}: "Tellumat (Pty) Ltd",
+ [3]byte{0, 21, 235}: "zte corporation",
+ [3]byte{0, 21, 236}: "Boca Devices LLC",
+ [3]byte{0, 21, 237}: "Fulcrum Microsystems, Inc.",
+ [3]byte{0, 21, 238}: "Omnex Control Systems",
+ [3]byte{0, 21, 239}: "NEC TOKIN Corporation",
+ [3]byte{0, 21, 240}: "EGO BV",
+ [3]byte{0, 21, 241}: "KYLINK Communications Corp.",
+ [3]byte{0, 21, 242}: "ASUSTek COMPUTER INC.",
+ [3]byte{0, 21, 243}: "PELTOR AB",
+ [3]byte{0, 21, 244}: "Eventide",
+ [3]byte{0, 21, 245}: "Sustainable Energy Systems",
+ [3]byte{0, 21, 246}: "SCIENCE AND ENGINEERING SERVICES, INC.",
+ [3]byte{0, 21, 247}: "Wintecronics Ltd.",
+ [3]byte{0, 21, 248}: "Kingtronics Industrial Co. Ltd.",
+ [3]byte{0, 21, 249}: "Cisco Systems, Inc",
+ [3]byte{0, 21, 250}: "Cisco Systems, Inc",
+ [3]byte{0, 21, 251}: "setex schermuly textile computer gmbh",
+ [3]byte{0, 21, 252}: "Littelfuse Startco",
+ [3]byte{0, 21, 253}: "Complete Media Systems",
+ [3]byte{0, 21, 254}: "SCHILLING ROBOTICS LLC",
+ [3]byte{0, 21, 255}: "Novatel Wireless Solutions, Inc.",
+ [3]byte{0, 22, 0}: "CelleBrite Mobile Synchronization",
+ [3]byte{0, 22, 1}: "BUFFALO.INC",
+ [3]byte{0, 22, 2}: "CEYON TECHNOLOGY CO.,LTD.",
+ [3]byte{0, 22, 3}: "COOLKSKY Co., LTD",
+ [3]byte{0, 22, 4}: "Sigpro",
+ [3]byte{0, 22, 5}: "YORKVILLE SOUND INC.",
+ [3]byte{0, 22, 6}: "Ideal Industries",
+ [3]byte{0, 22, 7}: "Curves International Inc.",
+ [3]byte{0, 22, 8}: "Sequans Communications",
+ [3]byte{0, 22, 9}: "Unitech electronics co., ltd.",
+ [3]byte{0, 22, 10}: "SWEEX Europe BV",
+ [3]byte{0, 22, 11}: "TVWorks LLC",
+ [3]byte{0, 22, 12}: "LPL DEVELOPMENT S.A. DE C.V",
+ [3]byte{0, 22, 13}: "Be Here Corporation",
+ [3]byte{0, 22, 14}: "Optica Technologies Inc.",
+ [3]byte{0, 22, 15}: "BADGER METER INC",
+ [3]byte{0, 22, 16}: "Carina Technology",
+ [3]byte{0, 22, 17}: "Altecon Srl",
+ [3]byte{0, 22, 18}: "Otsuka Electronics Co., Ltd.",
+ [3]byte{0, 22, 19}: "LibreStream Technologies Inc.",
+ [3]byte{0, 22, 20}: "Picosecond Pulse Labs",
+ [3]byte{0, 22, 21}: "Nittan Company, Limited",
+ [3]byte{0, 22, 22}: "BROWAN COMMUNICATION INC.",
+ [3]byte{0, 22, 23}: "MSI",
+ [3]byte{0, 22, 24}: "HIVION Co., Ltd.",
+ [3]byte{0, 22, 25}: "Lancelan Technologies S.L.",
+ [3]byte{0, 22, 26}: "Dametric AB",
+ [3]byte{0, 22, 27}: "Micronet Corporation",
+ [3]byte{0, 22, 28}: "e:cue",
+ [3]byte{0, 22, 29}: "Innovative Wireless Technologies, Inc.",
+ [3]byte{0, 22, 30}: "Woojinnet",
+ [3]byte{0, 22, 31}: "SUNWAVETEC Co., Ltd.",
+ [3]byte{0, 22, 32}: "Sony Mobile Communications AB",
+ [3]byte{0, 22, 33}: "Colorado Vnet",
+ [3]byte{0, 22, 34}: "BBH SYSTEMS GMBH",
+ [3]byte{0, 22, 35}: "Interval Media",
+ [3]byte{0, 22, 36}: "Teneros, Inc.",
+ [3]byte{0, 22, 37}: "Impinj, Inc.",
+ [3]byte{0, 22, 38}: "ARRIS Group, Inc.",
+ [3]byte{0, 22, 39}: "embedded-logic DESIGN AND MORE GmbH",
+ [3]byte{0, 22, 40}: "Magicard Ltd",
+ [3]byte{0, 22, 41}: "Nivus GmbH",
+ [3]byte{0, 22, 42}: "Antik computers & communications s.r.o.",
+ [3]byte{0, 22, 43}: "Togami Electric Mfg.co.,Ltd.",
+ [3]byte{0, 22, 44}: "Xanboo",
+ [3]byte{0, 22, 45}: "STNet Co., Ltd.",
+ [3]byte{0, 22, 46}: "Space Shuttle Hi-Tech Co., Ltd.",
+ [3]byte{0, 22, 47}: "Geutebrück GmbH",
+ [3]byte{0, 22, 48}: "Vativ Technologies",
+ [3]byte{0, 22, 49}: "Xteam",
+ [3]byte{0, 22, 50}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 22, 51}: "Oxford Diagnostics Ltd.",
+ [3]byte{0, 22, 52}: "Mathtech, Inc.",
+ [3]byte{0, 22, 53}: "Hewlett Packard",
+ [3]byte{0, 22, 54}: "QUANTA COMPUTER INC.",
+ [3]byte{0, 22, 55}: "CITEL SpA",
+ [3]byte{0, 22, 56}: "TECOM Co., Ltd.",
+ [3]byte{0, 22, 57}: "Ubiquam Co., Ltd.",
+ [3]byte{0, 22, 58}: "YVES TECHNOLOGY CO., LTD.",
+ [3]byte{0, 22, 59}: "VertexRSI/General Dynamics",
+ [3]byte{0, 22, 60}: "Rebox B.V.",
+ [3]byte{0, 22, 61}: "Tsinghua Tongfang Legend Silicon Tech. Co., Ltd.",
+ [3]byte{0, 22, 62}: "Xensource, Inc.",
+ [3]byte{0, 22, 63}: "CReTE SYSTEMS Inc.",
+ [3]byte{0, 22, 64}: "Asmobile Communication Inc.",
+ [3]byte{0, 22, 65}: "Universal Global Scientific Industrial Co., Ltd.",
+ [3]byte{0, 22, 66}: "Pangolin",
+ [3]byte{0, 22, 67}: "Sunhillo Corporation",
+ [3]byte{0, 22, 68}: "LITE-ON Technology Corp.",
+ [3]byte{0, 22, 69}: "Power Distribution, Inc.",
+ [3]byte{0, 22, 70}: "Cisco Systems, Inc",
+ [3]byte{0, 22, 71}: "Cisco Systems, Inc",
+ [3]byte{0, 22, 72}: "SSD Company Limited",
+ [3]byte{0, 22, 73}: "SetOne GmbH",
+ [3]byte{0, 22, 74}: "Vibration Technology Limited",
+ [3]byte{0, 22, 75}: "Quorion Data Systems GmbH",
+ [3]byte{0, 22, 76}: "PLANET INT Co., Ltd",
+ [3]byte{0, 22, 77}: "Alcatel-Lucent IPD",
+ [3]byte{0, 22, 78}: "Nokia Danmark A/S",
+ [3]byte{0, 22, 79}: "World Ethnic Broadcastin Inc.",
+ [3]byte{0, 22, 80}: "Kratos EPD",
+ [3]byte{0, 22, 81}: "Exeo Systems",
+ [3]byte{0, 22, 82}: "Hoatech Technologies, Inc.",
+ [3]byte{0, 22, 83}: "LEGO System A/S IE Electronics Division",
+ [3]byte{0, 22, 84}: "Flex-P Industries Sdn. Bhd.",
+ [3]byte{0, 22, 85}: "FUHO TECHNOLOGY Co., LTD",
+ [3]byte{0, 22, 86}: "Nintendo Co., Ltd.",
+ [3]byte{0, 22, 87}: "Aegate Ltd",
+ [3]byte{0, 22, 88}: "Fusiontech Technologies Inc.",
+ [3]byte{0, 22, 89}: "Z.M.P. RADWAG",
+ [3]byte{0, 22, 90}: "Harman Specialty Group",
+ [3]byte{0, 22, 91}: "Grip Audio",
+ [3]byte{0, 22, 92}: "Trackflow Ltd",
+ [3]byte{0, 22, 93}: "AirDefense, Inc.",
+ [3]byte{0, 22, 94}: "Precision I/O",
+ [3]byte{0, 22, 95}: "Fairmount Automation",
+ [3]byte{0, 22, 96}: "Nortel Networks",
+ [3]byte{0, 22, 97}: "Novatium Solutions (P) Ltd",
+ [3]byte{0, 22, 98}: "Liyuh Technology Ltd.",
+ [3]byte{0, 22, 99}: "KBT Mobile",
+ [3]byte{0, 22, 100}: "Prod-El SpA",
+ [3]byte{0, 22, 101}: "Cellon France",
+ [3]byte{0, 22, 102}: "Quantier Communication Inc.",
+ [3]byte{0, 22, 103}: "A-TEC Subsystem INC.",
+ [3]byte{0, 22, 104}: "Eishin Electronics",
+ [3]byte{0, 22, 105}: "MRV Communication (Networks) LTD",
+ [3]byte{0, 22, 106}: "TPS",
+ [3]byte{0, 22, 107}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 22, 108}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 22, 109}: "Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd",
+ [3]byte{0, 22, 110}: "Arbitron Inc.",
+ [3]byte{0, 22, 111}: "Intel Corporate",
+ [3]byte{0, 22, 112}: "SKNET Corporation",
+ [3]byte{0, 22, 113}: "Symphox Information Co.",
+ [3]byte{0, 22, 114}: "Zenway enterprise ltd",
+ [3]byte{0, 22, 115}: "Bury GmbH & Co. KG",
+ [3]byte{0, 22, 116}: "EuroCB (Phils.), Inc.",
+ [3]byte{0, 22, 117}: "ARRIS Group, Inc.",
+ [3]byte{0, 22, 118}: "Intel Corporate",
+ [3]byte{0, 22, 119}: "Bihl + Wiedemann GmbH",
+ [3]byte{0, 22, 120}: "SHENZHEN BAOAN GAOKE ELECTRONICS CO., LTD",
+ [3]byte{0, 22, 121}: "eOn Communications",
+ [3]byte{0, 22, 122}: "Skyworth Overseas Development Ltd.",
+ [3]byte{0, 22, 123}: "Haver&Boecker",
+ [3]byte{0, 22, 124}: "iRex Technologies BV",
+ [3]byte{0, 22, 125}: "Sky-Line Information Co., Ltd.",
+ [3]byte{0, 22, 126}: "DIBOSS.CO.,LTD",
+ [3]byte{0, 22, 127}: "Bluebird Soft Inc.",
+ [3]byte{0, 22, 128}: "Bally Gaming + Systems",
+ [3]byte{0, 22, 129}: "Vector Informatik GmbH",
+ [3]byte{0, 22, 130}: "Pro Dex, Inc",
+ [3]byte{0, 22, 131}: "WEBIO International Co.,.Ltd.",
+ [3]byte{0, 22, 132}: "Donjin Co.,Ltd.",
+ [3]byte{0, 22, 133}: "Elisa Oyj",
+ [3]byte{0, 22, 134}: "Karl Storz Imaging",
+ [3]byte{0, 22, 135}: "Chubb CSC-Vendor AP",
+ [3]byte{0, 22, 136}: "ServerEngines LLC",
+ [3]byte{0, 22, 137}: "Pilkor Electronics Co., Ltd",
+ [3]byte{0, 22, 138}: "id-Confirm Inc",
+ [3]byte{0, 22, 139}: "Paralan Corporation",
+ [3]byte{0, 22, 140}: "DSL Partner AS",
+ [3]byte{0, 22, 141}: "KORWIN CO., Ltd.",
+ [3]byte{0, 22, 142}: "Vimicro corporation",
+ [3]byte{0, 22, 143}: "GN Netcom A/S",
+ [3]byte{0, 22, 144}: "J-TEK INCORPORATION",
+ [3]byte{0, 22, 145}: "Moser-Baer AG",
+ [3]byte{0, 22, 146}: "Scientific-Atlanta, Inc.",
+ [3]byte{0, 22, 147}: "PowerLink Technology Inc.",
+ [3]byte{0, 22, 148}: "Sennheiser Communications A/S",
+ [3]byte{0, 22, 149}: "AVC Technology (International) Limited",
+ [3]byte{0, 22, 150}: "QDI Technology (H.K.) Limited",
+ [3]byte{0, 22, 151}: "NEC Corporation",
+ [3]byte{0, 22, 152}: "T&A Mobile Phones",
+ [3]byte{0, 22, 153}: "Tonic DVB Marketing Ltd",
+ [3]byte{0, 22, 154}: "Quadrics Ltd",
+ [3]byte{0, 22, 155}: "Alstom Transport",
+ [3]byte{0, 22, 156}: "Cisco Systems, Inc",
+ [3]byte{0, 22, 157}: "Cisco Systems, Inc",
+ [3]byte{0, 22, 158}: "TV One Ltd",
+ [3]byte{0, 22, 159}: "Vimtron Electronics Co., Ltd.",
+ [3]byte{0, 22, 160}: "Auto-Maskin",
+ [3]byte{0, 22, 161}: "3Leaf Networks",
+ [3]byte{0, 22, 162}: "CentraLite Systems, Inc.",
+ [3]byte{0, 22, 163}: "Ingeteam Transmission&Distribution, S.A.",
+ [3]byte{0, 22, 164}: "Ezurio Ltd",
+ [3]byte{0, 22, 165}: "Tandberg Storage ASA",
+ [3]byte{0, 22, 166}: "Dovado FZ-LLC",
+ [3]byte{0, 22, 167}: "AWETA G&P",
+ [3]byte{0, 22, 168}: "CWT CO., LTD.",
+ [3]byte{0, 22, 169}: "2EI",
+ [3]byte{0, 22, 170}: "Kei Communication Technology Inc.",
+ [3]byte{0, 22, 171}: "Dansensor A/S",
+ [3]byte{0, 22, 172}: "Toho Technology Corp.",
+ [3]byte{0, 22, 173}: "BT-Links Company Limited",
+ [3]byte{0, 22, 174}: "INVENTEL",
+ [3]byte{0, 22, 175}: "Shenzhen Union Networks Equipment Co.,Ltd.",
+ [3]byte{0, 22, 176}: "VK Corporation",
+ [3]byte{0, 22, 177}: "KBS",
+ [3]byte{0, 22, 178}: "DriveCam Inc",
+ [3]byte{0, 22, 179}: "Photonicbridges (China) Co., Ltd.",
+ [3]byte{0, 22, 180}: "Private",
+ [3]byte{0, 22, 181}: "ARRIS Group, Inc.",
+ [3]byte{0, 22, 182}: "Cisco-Linksys, LLC",
+ [3]byte{0, 22, 183}: "Seoul Commtech",
+ [3]byte{0, 22, 184}: "Sony Mobile Communications AB",
+ [3]byte{0, 22, 185}: "ProCurve Networking by HP",
+ [3]byte{0, 22, 186}: "WEATHERNEWS INC.",
+ [3]byte{0, 22, 187}: "Law-Chain Computer Technology Co Ltd",
+ [3]byte{0, 22, 188}: "Nokia Danmark A/S",
+ [3]byte{0, 22, 189}: "ATI Industrial Automation",
+ [3]byte{0, 22, 190}: "INFRANET, Inc.",
+ [3]byte{0, 22, 191}: "PaloDEx Group Oy",
+ [3]byte{0, 22, 192}: "Semtech Corporation",
+ [3]byte{0, 22, 193}: "Eleksen Ltd",
+ [3]byte{0, 22, 194}: "Avtec Systems Inc",
+ [3]byte{0, 22, 195}: "BA Systems Inc",
+ [3]byte{0, 22, 196}: "SiRF Technology, Inc.",
+ [3]byte{0, 22, 197}: "Shenzhen Xing Feng Industry Co.,Ltd",
+ [3]byte{0, 22, 198}: "North Atlantic Industries",
+ [3]byte{0, 22, 199}: "Cisco Systems, Inc",
+ [3]byte{0, 22, 200}: "Cisco Systems, Inc",
+ [3]byte{0, 22, 201}: "NAT Seattle, Inc.",
+ [3]byte{0, 22, 202}: "Nortel Networks",
+ [3]byte{0, 22, 203}: "Apple, Inc.",
+ [3]byte{0, 22, 204}: "Xcute Mobile Corp.",
+ [3]byte{0, 22, 205}: "HIJI HIGH-TECH CO., LTD.",
+ [3]byte{0, 22, 206}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{0, 22, 207}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{0, 22, 208}: "ATech elektronika d.o.o.",
+ [3]byte{0, 22, 209}: "ZAT a.s.",
+ [3]byte{0, 22, 210}: "Caspian",
+ [3]byte{0, 22, 211}: "Wistron Corporation",
+ [3]byte{0, 22, 212}: "Compal Communications, Inc.",
+ [3]byte{0, 22, 213}: "Synccom Co., Ltd",
+ [3]byte{0, 22, 214}: "TDA Tech Pty Ltd",
+ [3]byte{0, 22, 215}: "Sunways AG",
+ [3]byte{0, 22, 216}: "Senea AB",
+ [3]byte{0, 22, 217}: "NINGBO BIRD CO.,LTD.",
+ [3]byte{0, 22, 218}: "Futronic Technology Co. Ltd.",
+ [3]byte{0, 22, 219}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 22, 220}: "ARCHOS",
+ [3]byte{0, 22, 221}: "Gigabeam Corporation",
+ [3]byte{0, 22, 222}: "FAST Inc",
+ [3]byte{0, 22, 223}: "Lundinova AB",
+ [3]byte{0, 22, 224}: "3Com Ltd",
+ [3]byte{0, 22, 225}: "SiliconStor, Inc.",
+ [3]byte{0, 22, 226}: "American Fibertek, Inc.",
+ [3]byte{0, 22, 227}: "ASKEY COMPUTER CORP",
+ [3]byte{0, 22, 228}: "VANGUARD SECURITY ENGINEERING CORP.",
+ [3]byte{0, 22, 229}: "FORDLEY DEVELOPMENT LIMITED",
+ [3]byte{0, 22, 230}: "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+ [3]byte{0, 22, 231}: "Dynamix Promotions Limited",
+ [3]byte{0, 22, 232}: "Sigma Designs, Inc.",
+ [3]byte{0, 22, 233}: "Tiba Medical Inc",
+ [3]byte{0, 22, 234}: "Intel Corporate",
+ [3]byte{0, 22, 235}: "Intel Corporate",
+ [3]byte{0, 22, 236}: "Elitegroup Computer Systems Co.,Ltd.",
+ [3]byte{0, 22, 237}: "Utility, Inc",
+ [3]byte{0, 22, 238}: "Royaldigital Inc.",
+ [3]byte{0, 22, 239}: "Koko Fitness, Inc.",
+ [3]byte{0, 22, 240}: "Dell",
+ [3]byte{0, 22, 241}: "OmniSense, LLC",
+ [3]byte{0, 22, 242}: "Dmobile System Co., Ltd.",
+ [3]byte{0, 22, 243}: "CAST Information Co., Ltd",
+ [3]byte{0, 22, 244}: "Eidicom Co., Ltd.",
+ [3]byte{0, 22, 245}: "Dalian Golden Hualu Digital Technology Co.,Ltd",
+ [3]byte{0, 22, 246}: "Video Products Group",
+ [3]byte{0, 22, 247}: "L-3 Communications, Aviation Recorders",
+ [3]byte{0, 22, 248}: "AVIQTECH TECHNOLOGY CO., LTD.",
+ [3]byte{0, 22, 249}: "CETRTA POT, d.o.o., Kranj",
+ [3]byte{0, 22, 250}: "ECI Telecom Ltd.",
+ [3]byte{0, 22, 251}: "SHENZHEN MTC CO LTD",
+ [3]byte{0, 22, 252}: "TOHKEN CO.,LTD.",
+ [3]byte{0, 22, 253}: "Jaty Electronics",
+ [3]byte{0, 22, 254}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{0, 22, 255}: "Wamin Optocomm Mfg Corp",
+ [3]byte{0, 23, 0}: "ARRIS Group, Inc.",
+ [3]byte{0, 23, 1}: "KDE, Inc.",
+ [3]byte{0, 23, 2}: "Osung Midicom Co., Ltd",
+ [3]byte{0, 23, 3}: "MOSDAN Internation Co.,Ltd",
+ [3]byte{0, 23, 4}: "Shinco Electronics Group Co.,Ltd",
+ [3]byte{0, 23, 5}: "Methode Electronics",
+ [3]byte{0, 23, 6}: "Techfaithwireless Communication Technology Limited.",
+ [3]byte{0, 23, 7}: "InGrid, Inc",
+ [3]byte{0, 23, 8}: "Hewlett Packard",
+ [3]byte{0, 23, 9}: "Exalt Communications",
+ [3]byte{0, 23, 10}: "INEW DIGITAL COMPANY",
+ [3]byte{0, 23, 11}: "Contela, Inc.",
+ [3]byte{0, 23, 12}: "Twig Com Ltd.",
+ [3]byte{0, 23, 13}: "Dust Networks Inc.",
+ [3]byte{0, 23, 14}: "Cisco Systems, Inc",
+ [3]byte{0, 23, 15}: "Cisco Systems, Inc",
+ [3]byte{0, 23, 16}: "Casa Systems Inc.",
+ [3]byte{0, 23, 17}: "GE Healthcare Bio-Sciences AB",
+ [3]byte{0, 23, 18}: "ISCO International",
+ [3]byte{0, 23, 19}: "Tiger NetCom",
+ [3]byte{0, 23, 20}: "BR Controls Nederland bv",
+ [3]byte{0, 23, 21}: "Qstik",
+ [3]byte{0, 23, 22}: "Qno Technology Inc.",
+ [3]byte{0, 23, 23}: "Leica Geosystems AG",
+ [3]byte{0, 23, 24}: "Vansco Electronics Oy",
+ [3]byte{0, 23, 25}: "Audiocodes USA, Inc",
+ [3]byte{0, 23, 26}: "Winegard Company",
+ [3]byte{0, 23, 27}: "Innovation Lab Corp.",
+ [3]byte{0, 23, 28}: "NT MicroSystems, Inc.",
+ [3]byte{0, 23, 29}: "DIGIT",
+ [3]byte{0, 23, 30}: "Theo Benning GmbH & Co. KG",
+ [3]byte{0, 23, 31}: "IMV Corporation",
+ [3]byte{0, 23, 32}: "Image Sensing Systems, Inc.",
+ [3]byte{0, 23, 33}: "FITRE S.p.A.",
+ [3]byte{0, 23, 34}: "Hanazeder Electronic GmbH",
+ [3]byte{0, 23, 35}: "Summit Data Communications",
+ [3]byte{0, 23, 36}: "Studer Professional Audio GmbH",
+ [3]byte{0, 23, 37}: "Liquid Computing",
+ [3]byte{0, 23, 38}: "m2c Electronic Technology Ltd.",
+ [3]byte{0, 23, 39}: "Thermo Ramsey Italia s.r.l.",
+ [3]byte{0, 23, 40}: "Selex Communications",
+ [3]byte{0, 23, 41}: "Ubicod Co.LTD",
+ [3]byte{0, 23, 42}: "Proware Technology Corp.(By Unifosa)",
+ [3]byte{0, 23, 43}: "Global Technologies Inc.",
+ [3]byte{0, 23, 44}: "TAEJIN INFOTECH",
+ [3]byte{0, 23, 45}: "Axcen Photonics Corporation",
+ [3]byte{0, 23, 46}: "FXC Inc.",
+ [3]byte{0, 23, 47}: "NeuLion Incorporated",
+ [3]byte{0, 23, 48}: "Automation Electronics",
+ [3]byte{0, 23, 49}: "ASUSTek COMPUTER INC.",
+ [3]byte{0, 23, 50}: "Science-Technical Center RISSA",
+ [3]byte{0, 23, 51}: "SFR",
+ [3]byte{0, 23, 52}: "ADC Telecommunications",
+ [3]byte{0, 23, 53}: "Intel Wireless Network Group",
+ [3]byte{0, 23, 54}: "iiTron Inc.",
+ [3]byte{0, 23, 55}: "Industrie Dial Face S.p.A.",
+ [3]byte{0, 23, 56}: "International Business Machines",
+ [3]byte{0, 23, 57}: "Bright Headphone Electronics Company",
+ [3]byte{0, 23, 58}: "Cloudastructure Inc",
+ [3]byte{0, 23, 59}: "Cisco Systems, Inc",
+ [3]byte{0, 23, 60}: "Extreme Engineering Solutions",
+ [3]byte{0, 23, 61}: "Neology",
+ [3]byte{0, 23, 62}: "LeucotronEquipamentos Ltda.",
+ [3]byte{0, 23, 63}: "Belkin International Inc.",
+ [3]byte{0, 23, 64}: "Bluberi Gaming Technologies Inc",
+ [3]byte{0, 23, 65}: "DEFIDEV",
+ [3]byte{0, 23, 66}: "FUJITSU LIMITED",
+ [3]byte{0, 23, 67}: "Deck Srl",
+ [3]byte{0, 23, 68}: "Araneo Ltd.",
+ [3]byte{0, 23, 69}: "INNOTZ CO., Ltd",
+ [3]byte{0, 23, 70}: "Freedom9 Inc.",
+ [3]byte{0, 23, 71}: "Trimble",
+ [3]byte{0, 23, 72}: "Neokoros Brasil Ltda",
+ [3]byte{0, 23, 73}: "HYUNDAE YONG-O-SA CO.,LTD",
+ [3]byte{0, 23, 74}: "SOCOMEC",
+ [3]byte{0, 23, 75}: "Nokia Danmark A/S",
+ [3]byte{0, 23, 76}: "Millipore",
+ [3]byte{0, 23, 77}: "DYNAMIC NETWORK FACTORY, INC.",
+ [3]byte{0, 23, 78}: "Parama-tech Co.,Ltd.",
+ [3]byte{0, 23, 79}: "iCatch Inc.",
+ [3]byte{0, 23, 80}: "GSI Group, MicroE Systems",
+ [3]byte{0, 23, 81}: "Online Corporation",
+ [3]byte{0, 23, 82}: "DAGS, Inc",
+ [3]byte{0, 23, 83}: "nFore Technology Inc.",
+ [3]byte{0, 23, 84}: "Arkino HiTOP Corporation Limited",
+ [3]byte{0, 23, 85}: "GE Security",
+ [3]byte{0, 23, 86}: "Vinci Labs Oy",
+ [3]byte{0, 23, 87}: "RIX TECHNOLOGY LIMITED",
+ [3]byte{0, 23, 88}: "ThruVision Ltd",
+ [3]byte{0, 23, 89}: "Cisco Systems, Inc",
+ [3]byte{0, 23, 90}: "Cisco Systems, Inc",
+ [3]byte{0, 23, 91}: "ACS Solutions Switzerland Ltd.",
+ [3]byte{0, 23, 92}: "SHARP CORPORATION",
+ [3]byte{0, 23, 93}: "Dongseo system.",
+ [3]byte{0, 23, 94}: "Zed-3",
+ [3]byte{0, 23, 95}: "XENOLINK Communications Co., Ltd.",
+ [3]byte{0, 23, 96}: "Naito Densei Machida MFG.CO.,LTD",
+ [3]byte{0, 23, 97}: "Private",
+ [3]byte{0, 23, 98}: "Solar Technology, Inc.",
+ [3]byte{0, 23, 99}: "Essentia S.p.A.",
+ [3]byte{0, 23, 100}: "ATMedia GmbH",
+ [3]byte{0, 23, 101}: "Nortel Networks",
+ [3]byte{0, 23, 102}: "Accense Technology, Inc.",
+ [3]byte{0, 23, 103}: "Earforce AS",
+ [3]byte{0, 23, 104}: "Zinwave Ltd",
+ [3]byte{0, 23, 105}: "Cymphonix Corp",
+ [3]byte{0, 23, 106}: "Avago Technologies",
+ [3]byte{0, 23, 107}: "Kiyon, Inc.",
+ [3]byte{0, 23, 108}: "Pivot3, Inc.",
+ [3]byte{0, 23, 109}: "CORE CORPORATION",
+ [3]byte{0, 23, 110}: "DUCATI SISTEMI",
+ [3]byte{0, 23, 111}: "PAX Computer Technology(Shenzhen) Ltd.",
+ [3]byte{0, 23, 112}: "Arti Industrial Electronics Ltd.",
+ [3]byte{0, 23, 113}: "APD Communications Ltd",
+ [3]byte{0, 23, 114}: "ASTRO Strobel Kommunikationssysteme GmbH",
+ [3]byte{0, 23, 115}: "Laketune Technologies Co. Ltd",
+ [3]byte{0, 23, 116}: "Elesta GmbH",
+ [3]byte{0, 23, 117}: "TTE Germany GmbH",
+ [3]byte{0, 23, 118}: "Meso Scale Diagnostics, LLC",
+ [3]byte{0, 23, 119}: "Obsidian Research Corporation",
+ [3]byte{0, 23, 120}: "Central Music Co.",
+ [3]byte{0, 23, 121}: "QuickTel",
+ [3]byte{0, 23, 122}: "ASSA ABLOY AB",
+ [3]byte{0, 23, 123}: "Azalea Networks inc",
+ [3]byte{0, 23, 124}: "Smartlink Network Systems Limited",
+ [3]byte{0, 23, 125}: "IDT Technology Limited",
+ [3]byte{0, 23, 126}: "Meshcom Technologies Inc.",
+ [3]byte{0, 23, 127}: "Worldsmart Retech",
+ [3]byte{0, 23, 128}: "Applied Biosystems B.V.",
+ [3]byte{0, 23, 129}: "Greystone Data System, Inc.",
+ [3]byte{0, 23, 130}: "LoBenn Inc.",
+ [3]byte{0, 23, 131}: "Texas Instruments",
+ [3]byte{0, 23, 132}: "ARRIS Group, Inc.",
+ [3]byte{0, 23, 133}: "Sparr Electronics Ltd",
+ [3]byte{0, 23, 134}: "wisembed",
+ [3]byte{0, 23, 135}: "Brother, Brother & Sons ApS",
+ [3]byte{0, 23, 136}: "Philips Lighting BV",
+ [3]byte{0, 23, 137}: "Zenitron Corporation",
+ [3]byte{0, 23, 138}: "DARTS TECHNOLOGIES CORP.",
+ [3]byte{0, 23, 139}: "Teledyne Technologies Incorporated",
+ [3]byte{0, 23, 140}: "Independent Witness, Inc",
+ [3]byte{0, 23, 141}: "Checkpoint Systems, Inc.",
+ [3]byte{0, 23, 142}: "Gunnebo Cash Automation AB",
+ [3]byte{0, 23, 143}: "NINGBO YIDONG ELECTRONIC CO.,LTD.",
+ [3]byte{0, 23, 144}: "HYUNDAI DIGITECH Co, Ltd.",
+ [3]byte{0, 23, 145}: "LinTech GmbH",
+ [3]byte{0, 23, 146}: "Falcom Wireless Comunications Gmbh",
+ [3]byte{0, 23, 147}: "Tigi Corporation",
+ [3]byte{0, 23, 148}: "Cisco Systems, Inc",
+ [3]byte{0, 23, 149}: "Cisco Systems, Inc",
+ [3]byte{0, 23, 150}: "Rittmeyer AG",
+ [3]byte{0, 23, 151}: "Telsy Elettronica S.p.A.",
+ [3]byte{0, 23, 152}: "Azonic Technology Co., LTD",
+ [3]byte{0, 23, 153}: "SmarTire Systems Inc.",
+ [3]byte{0, 23, 154}: "D-Link Corporation",
+ [3]byte{0, 23, 155}: "CHANT SINCERE CO.,LTD",
+ [3]byte{0, 23, 156}: "DEPRAG SCHULZ GMBH u. CO.",
+ [3]byte{0, 23, 157}: "Kelman Limited",
+ [3]byte{0, 23, 158}: "Sirit Inc",
+ [3]byte{0, 23, 159}: "Apricorn",
+ [3]byte{0, 23, 160}: "RoboTech srl",
+ [3]byte{0, 23, 161}: "3soft inc.",
+ [3]byte{0, 23, 162}: "Camrivox Ltd.",
+ [3]byte{0, 23, 163}: "MIX s.r.l.",
+ [3]byte{0, 23, 164}: "Hewlett Packard",
+ [3]byte{0, 23, 165}: "Ralink Technology Corp",
+ [3]byte{0, 23, 166}: "YOSIN ELECTRONICS CO., LTD.",
+ [3]byte{0, 23, 167}: "Mobile Computing Promotion Consortium",
+ [3]byte{0, 23, 168}: "EDM Corporation",
+ [3]byte{0, 23, 169}: "Sentivision",
+ [3]byte{0, 23, 170}: "elab-experience inc.",
+ [3]byte{0, 23, 171}: "Nintendo Co., Ltd.",
+ [3]byte{0, 23, 172}: "O'Neil Product Development Inc.",
+ [3]byte{0, 23, 173}: "AceNet Corporation",
+ [3]byte{0, 23, 174}: "GAI-Tronics",
+ [3]byte{0, 23, 175}: "Enermet",
+ [3]byte{0, 23, 176}: "Nokia Danmark A/S",
+ [3]byte{0, 23, 177}: "ACIST Medical Systems, Inc.",
+ [3]byte{0, 23, 178}: "SK Telesys",
+ [3]byte{0, 23, 179}: "Aftek Infosys Limited",
+ [3]byte{0, 23, 180}: "Remote Security Systems, LLC",
+ [3]byte{0, 23, 181}: "Peerless Systems Corporation",
+ [3]byte{0, 23, 182}: "Aquantia",
+ [3]byte{0, 23, 183}: "Tonze Technology Co.",
+ [3]byte{0, 23, 184}: "NOVATRON CO., LTD.",
+ [3]byte{0, 23, 185}: "Gambro Lundia AB",
+ [3]byte{0, 23, 186}: "SEDO CO., LTD.",
+ [3]byte{0, 23, 187}: "Syrinx Industrial Electronics",
+ [3]byte{0, 23, 188}: "Touchtunes Music Corporation",
+ [3]byte{0, 23, 189}: "Tibetsystem",
+ [3]byte{0, 23, 190}: "Tratec Telecom B.V.",
+ [3]byte{0, 23, 191}: "Coherent Research Limited",
+ [3]byte{0, 23, 192}: "PureTech Systems, Inc.",
+ [3]byte{0, 23, 193}: "CM Precision Technology LTD.",
+ [3]byte{0, 23, 194}: "ADB Broadband Italia",
+ [3]byte{0, 23, 195}: "KTF Technologies Inc.",
+ [3]byte{0, 23, 196}: "Quanta Microsystems, INC.",
+ [3]byte{0, 23, 197}: "SonicWALL",
+ [3]byte{0, 23, 198}: "Cross Match Technologies Inc",
+ [3]byte{0, 23, 199}: "MARA Systems Consulting AB",
+ [3]byte{0, 23, 200}: "KYOCERA Display Corporation",
+ [3]byte{0, 23, 201}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 23, 202}: "Qisda Corporation",
+ [3]byte{0, 23, 203}: "Juniper Networks",
+ [3]byte{0, 23, 204}: "Alcatel-Lucent",
+ [3]byte{0, 23, 205}: "CEC Wireless R&D Ltd.",
+ [3]byte{0, 23, 206}: "Screen Service Spa",
+ [3]byte{0, 23, 207}: "iMCA-GmbH",
+ [3]byte{0, 23, 208}: "Opticom Communications, LLC",
+ [3]byte{0, 23, 209}: "Nortel Networks",
+ [3]byte{0, 23, 210}: "THINLINX PTY LTD",
+ [3]byte{0, 23, 211}: "Etymotic Research, Inc.",
+ [3]byte{0, 23, 212}: "Monsoon Multimedia, Inc",
+ [3]byte{0, 23, 213}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 23, 214}: "Bluechips Microhouse Co.,Ltd.",
+ [3]byte{0, 23, 215}: "ION Geophysical Corporation Inc.",
+ [3]byte{0, 23, 216}: "Magnum Semiconductor, Inc.",
+ [3]byte{0, 23, 217}: "AAI Corporation",
+ [3]byte{0, 23, 218}: "Spans Logic",
+ [3]byte{0, 23, 219}: "CANKO TECHNOLOGIES INC.",
+ [3]byte{0, 23, 220}: "DAEMYUNG ZERO1",
+ [3]byte{0, 23, 221}: "Clipsal Australia",
+ [3]byte{0, 23, 222}: "Advantage Six Ltd",
+ [3]byte{0, 23, 223}: "Cisco Systems, Inc",
+ [3]byte{0, 23, 224}: "Cisco Systems, Inc",
+ [3]byte{0, 23, 225}: "DACOS Technologies Co., Ltd.",
+ [3]byte{0, 23, 226}: "ARRIS Group, Inc.",
+ [3]byte{0, 23, 227}: "Texas Instruments",
+ [3]byte{0, 23, 228}: "Texas Instruments",
+ [3]byte{0, 23, 229}: "Texas Instruments",
+ [3]byte{0, 23, 230}: "Texas Instruments",
+ [3]byte{0, 23, 231}: "Texas Instruments",
+ [3]byte{0, 23, 232}: "Texas Instruments",
+ [3]byte{0, 23, 233}: "Texas Instruments",
+ [3]byte{0, 23, 234}: "Texas Instruments",
+ [3]byte{0, 23, 235}: "Texas Instruments",
+ [3]byte{0, 23, 236}: "Texas Instruments",
+ [3]byte{0, 23, 237}: "WooJooIT Ltd.",
+ [3]byte{0, 23, 238}: "ARRIS Group, Inc.",
+ [3]byte{0, 23, 239}: "IBM Corp",
+ [3]byte{0, 23, 240}: "SZCOM Broadband Network Technology Co.,Ltd",
+ [3]byte{0, 23, 241}: "Renu Electronics Pvt Ltd",
+ [3]byte{0, 23, 242}: "Apple, Inc.",
+ [3]byte{0, 23, 243}: "Harris Corparation",
+ [3]byte{0, 23, 244}: "ZERON ALLIANCE",
+ [3]byte{0, 23, 245}: "LIG NEOPTEK",
+ [3]byte{0, 23, 246}: "Pyramid Meriden Inc.",
+ [3]byte{0, 23, 247}: "CEM Solutions Pvt Ltd",
+ [3]byte{0, 23, 248}: "Motech Industries Inc.",
+ [3]byte{0, 23, 249}: "Forcom Sp. z o.o.",
+ [3]byte{0, 23, 250}: "Microsoft Corporation",
+ [3]byte{0, 23, 251}: "FA",
+ [3]byte{0, 23, 252}: "Suprema Inc.",
+ [3]byte{0, 23, 253}: "Amulet Hotkey",
+ [3]byte{0, 23, 254}: "TALOS SYSTEM INC.",
+ [3]byte{0, 23, 255}: "PLAYLINE Co.,Ltd.",
+ [3]byte{0, 24, 0}: "UNIGRAND LTD",
+ [3]byte{0, 24, 1}: "Actiontec Electronics, Inc",
+ [3]byte{0, 24, 2}: "Alpha Networks Inc.",
+ [3]byte{0, 24, 3}: "ArcSoft Shanghai Co. LTD",
+ [3]byte{0, 24, 4}: "E-TEK DIGITAL TECHNOLOGY LIMITED",
+ [3]byte{0, 24, 5}: "Beijing InHand Networking Technology Co.,Ltd.",
+ [3]byte{0, 24, 6}: "Hokkei Industries Co., Ltd.",
+ [3]byte{0, 24, 7}: "Fanstel Corp.",
+ [3]byte{0, 24, 8}: "SightLogix, Inc.",
+ [3]byte{0, 24, 9}: "CRESYN",
+ [3]byte{0, 24, 10}: "Cisco Meraki",
+ [3]byte{0, 24, 11}: "Brilliant Telecommunications",
+ [3]byte{0, 24, 12}: "Optelian Access Networks",
+ [3]byte{0, 24, 13}: "Terabytes Server Storage Tech Corp",
+ [3]byte{0, 24, 14}: "Avega Systems",
+ [3]byte{0, 24, 15}: "Nokia Danmark A/S",
+ [3]byte{0, 24, 16}: "IPTrade S.A.",
+ [3]byte{0, 24, 17}: "Neuros Technology International, LLC.",
+ [3]byte{0, 24, 18}: "Beijing Xinwei Telecom Technology Co., Ltd.",
+ [3]byte{0, 24, 19}: "Sony Mobile Communications AB",
+ [3]byte{0, 24, 20}: "Mitutoyo Corporation",
+ [3]byte{0, 24, 21}: "GZ Technologies, Inc.",
+ [3]byte{0, 24, 22}: "Ubixon Co., Ltd.",
+ [3]byte{0, 24, 23}: "D. E. Shaw Research, LLC",
+ [3]byte{0, 24, 24}: "Cisco Systems, Inc",
+ [3]byte{0, 24, 25}: "Cisco Systems, Inc",
+ [3]byte{0, 24, 26}: "AVerMedia Information Inc.",
+ [3]byte{0, 24, 27}: "TaiJin Metal Co., Ltd.",
+ [3]byte{0, 24, 28}: "Exterity Limited",
+ [3]byte{0, 24, 29}: "ASIA ELECTRONICS CO.,LTD",
+ [3]byte{0, 24, 30}: "GDX Technologies Ltd.",
+ [3]byte{0, 24, 31}: "Palmmicro Communications",
+ [3]byte{0, 24, 32}: "w5networks",
+ [3]byte{0, 24, 33}: "SINDORICOH",
+ [3]byte{0, 24, 34}: "CEC TELECOM CO.,LTD.",
+ [3]byte{0, 24, 35}: "Delta Electronics, Inc.",
+ [3]byte{0, 24, 36}: "Kimaldi Electronics, S.L.",
+ [3]byte{0, 24, 37}: "Private",
+ [3]byte{0, 24, 38}: "Cale Access AB",
+ [3]byte{0, 24, 39}: "NEC UNIFIED SOLUTIONS NEDERLAND B.V.",
+ [3]byte{0, 24, 40}: "e2v technologies (UK) ltd.",
+ [3]byte{0, 24, 41}: "Gatsometer",
+ [3]byte{0, 24, 42}: "Taiwan Video & Monitor",
+ [3]byte{0, 24, 43}: "Softier",
+ [3]byte{0, 24, 44}: "Ascend Networks, Inc.",
+ [3]byte{0, 24, 45}: "Artec Design",
+ [3]byte{0, 24, 46}: "XStreamHD",
+ [3]byte{0, 24, 47}: "Texas Instruments",
+ [3]byte{0, 24, 48}: "Texas Instruments",
+ [3]byte{0, 24, 49}: "Texas Instruments",
+ [3]byte{0, 24, 50}: "Texas Instruments",
+ [3]byte{0, 24, 51}: "Texas Instruments",
+ [3]byte{0, 24, 52}: "Texas Instruments",
+ [3]byte{0, 24, 53}: "Thoratec / ITC",
+ [3]byte{0, 24, 54}: "Reliance Electric Limited",
+ [3]byte{0, 24, 55}: "Universal ABIT Co., Ltd.",
+ [3]byte{0, 24, 56}: "PanAccess Communications,Inc.",
+ [3]byte{0, 24, 57}: "Cisco-Linksys, LLC",
+ [3]byte{0, 24, 58}: "Westell Technologies Inc.",
+ [3]byte{0, 24, 59}: "CENITS Co., Ltd.",
+ [3]byte{0, 24, 60}: "Encore Software Limited",
+ [3]byte{0, 24, 61}: "Vertex Link Corporation",
+ [3]byte{0, 24, 62}: "Digilent, Inc",
+ [3]byte{0, 24, 63}: "2Wire Inc",
+ [3]byte{0, 24, 64}: "3 Phoenix, Inc.",
+ [3]byte{0, 24, 65}: "High Tech Computer Corp",
+ [3]byte{0, 24, 66}: "Nokia Danmark A/S",
+ [3]byte{0, 24, 67}: "Dawevision Ltd",
+ [3]byte{0, 24, 68}: "Heads Up Technologies, Inc.",
+ [3]byte{0, 24, 69}: "Pulsar-Telecom LLC.",
+ [3]byte{0, 24, 70}: "Crypto S.A.",
+ [3]byte{0, 24, 71}: "AceNet Technology Inc.",
+ [3]byte{0, 24, 72}: "Vecima Networks Inc.",
+ [3]byte{0, 24, 73}: "Pigeon Point Systems LLC",
+ [3]byte{0, 24, 74}: "Catcher, Inc.",
+ [3]byte{0, 24, 75}: "Las Vegas Gaming, Inc.",
+ [3]byte{0, 24, 76}: "Bogen Communications",
+ [3]byte{0, 24, 77}: "NETGEAR",
+ [3]byte{0, 24, 78}: "Lianhe Technologies, Inc.",
+ [3]byte{0, 24, 79}: "8 Ways Technology Corp.",
+ [3]byte{0, 24, 80}: "Secfone Kft",
+ [3]byte{0, 24, 81}: "SWsoft",
+ [3]byte{0, 24, 82}: "StorLink Semiconductors, Inc.",
+ [3]byte{0, 24, 83}: "Atera Networks LTD.",
+ [3]byte{0, 24, 84}: "Argard Co., Ltd",
+ [3]byte{0, 24, 85}: "Aeromaritime Systembau GmbH",
+ [3]byte{0, 24, 86}: "EyeFi, Inc",
+ [3]byte{0, 24, 87}: "Unilever R&D",
+ [3]byte{0, 24, 88}: "TagMaster AB",
+ [3]byte{0, 24, 89}: "Strawberry Linux Co.,Ltd.",
+ [3]byte{0, 24, 90}: "uControl, Inc.",
+ [3]byte{0, 24, 91}: "Network Chemistry, Inc",
+ [3]byte{0, 24, 92}: "EDSLAB Technologies",
+ [3]byte{0, 24, 93}: "TAIGUEN TECHNOLOGY (SHEN-ZHEN) CO., LTD.",
+ [3]byte{0, 24, 94}: "Nexterm Inc.",
+ [3]byte{0, 24, 95}: "TAC Inc.",
+ [3]byte{0, 24, 96}: "SIM Technology Group Shanghai Simcom Ltd.,",
+ [3]byte{0, 24, 97}: "Ooma, Inc.",
+ [3]byte{0, 24, 98}: "Seagate Technology",
+ [3]byte{0, 24, 99}: "Veritech Electronics Limited",
+ [3]byte{0, 24, 100}: "Eaton Corporation",
+ [3]byte{0, 24, 101}: "Siemens Healthcare Diagnostics Manufacturing Ltd",
+ [3]byte{0, 24, 102}: "Leutron Vision",
+ [3]byte{0, 24, 103}: "Datalogic ADC",
+ [3]byte{0, 24, 104}: "Cisco SPVTG",
+ [3]byte{0, 24, 105}: "KINGJIM",
+ [3]byte{0, 24, 106}: "Global Link Digital Technology Co,.LTD",
+ [3]byte{0, 24, 107}: "Sambu Communics CO., LTD.",
+ [3]byte{0, 24, 108}: "Neonode AB",
+ [3]byte{0, 24, 109}: "Zhenjiang Sapphire Electronic Industry CO.",
+ [3]byte{0, 24, 110}: "3Com Ltd",
+ [3]byte{0, 24, 111}: "Setha Industria Eletronica LTDA",
+ [3]byte{0, 24, 112}: "E28 Shanghai Limited",
+ [3]byte{0, 24, 113}: "Hewlett Packard",
+ [3]byte{0, 24, 114}: "Expertise Engineering",
+ [3]byte{0, 24, 115}: "Cisco Systems, Inc",
+ [3]byte{0, 24, 116}: "Cisco Systems, Inc",
+ [3]byte{0, 24, 117}: "AnaCise Testnology Pte Ltd",
+ [3]byte{0, 24, 118}: "WowWee Ltd.",
+ [3]byte{0, 24, 119}: "Amplex A/S",
+ [3]byte{0, 24, 120}: "Mackware GmbH",
+ [3]byte{0, 24, 121}: "dSys",
+ [3]byte{0, 24, 122}: "Wiremold",
+ [3]byte{0, 24, 123}: "4NSYS Co. Ltd.",
+ [3]byte{0, 24, 124}: "INTERCROSS, LLC",
+ [3]byte{0, 24, 125}: "Armorlink Co .Ltd",
+ [3]byte{0, 24, 126}: "RGB Spectrum",
+ [3]byte{0, 24, 127}: "ZODIANET",
+ [3]byte{0, 24, 128}: "Maxim Integrated Products",
+ [3]byte{0, 24, 129}: "Buyang Electronics Industrial Co., Ltd",
+ [3]byte{0, 24, 130}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{0, 24, 131}: "FORMOSA21 INC.",
+ [3]byte{0, 24, 132}: "Fon Technology S.L.",
+ [3]byte{0, 24, 133}: "Avigilon Corporation",
+ [3]byte{0, 24, 134}: "EL-TECH, INC.",
+ [3]byte{0, 24, 135}: "Metasystem SpA",
+ [3]byte{0, 24, 136}: "GOTIVE a.s.",
+ [3]byte{0, 24, 137}: "WinNet Solutions Limited",
+ [3]byte{0, 24, 138}: "Infinova LLC",
+ [3]byte{0, 24, 139}: "Dell Inc.",
+ [3]byte{0, 24, 140}: "Mobile Action Technology Inc.",
+ [3]byte{0, 24, 141}: "Nokia Danmark A/S",
+ [3]byte{0, 24, 142}: "Ekahau, Inc.",
+ [3]byte{0, 24, 143}: "Montgomery Technology, Inc.",
+ [3]byte{0, 24, 144}: "RadioCOM, s.r.o.",
+ [3]byte{0, 24, 145}: "Zhongshan General K-mate Electronics Co., Ltd",
+ [3]byte{0, 24, 146}: "ads-tec GmbH",
+ [3]byte{0, 24, 147}: "SHENZHEN PHOTON BROADBAND TECHNOLOGY CO.,LTD",
+ [3]byte{0, 24, 148}: "NPCore, Inc.",
+ [3]byte{0, 24, 149}: "Hansun Technologies Inc.",
+ [3]byte{0, 24, 150}: "Great Well Electronic LTD",
+ [3]byte{0, 24, 151}: "JESS-LINK PRODUCTS Co., LTD",
+ [3]byte{0, 24, 152}: "KINGSTATE ELECTRONICS CORPORATION",
+ [3]byte{0, 24, 153}: "ShenZhen jieshun Science&Technology Industry CO,LTD.",
+ [3]byte{0, 24, 154}: "HANA Micron Inc.",
+ [3]byte{0, 24, 155}: "Thomson Inc.",
+ [3]byte{0, 24, 156}: "Weldex Corporation",
+ [3]byte{0, 24, 157}: "Navcast Inc.",
+ [3]byte{0, 24, 158}: "OMNIKEY GmbH.",
+ [3]byte{0, 24, 159}: "Lenntek Corporation",
+ [3]byte{0, 24, 160}: "Cierma Ascenseurs",
+ [3]byte{0, 24, 161}: "Tiqit Computers, Inc.",
+ [3]byte{0, 24, 162}: "XIP Technology AB",
+ [3]byte{0, 24, 163}: "ZIPPY TECHNOLOGY CORP.",
+ [3]byte{0, 24, 164}: "ARRIS Group, Inc.",
+ [3]byte{0, 24, 165}: "ADigit Technologies Corp.",
+ [3]byte{0, 24, 166}: "Persistent Systems, LLC",
+ [3]byte{0, 24, 167}: "Yoggie Security Systems LTD.",
+ [3]byte{0, 24, 168}: "AnNeal Technology Inc.",
+ [3]byte{0, 24, 169}: "Ethernet Direct Corporation",
+ [3]byte{0, 24, 170}: "Protec Fire Detection plc",
+ [3]byte{0, 24, 171}: "BEIJING LHWT MICROELECTRONICS INC.",
+ [3]byte{0, 24, 172}: "Shanghai Jiao Da HISYS Technology Co. Ltd.",
+ [3]byte{0, 24, 173}: "NIDEC SANKYO CORPORATION",
+ [3]byte{0, 24, 174}: "TVT CO.,LTD",
+ [3]byte{0, 24, 175}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 24, 176}: "Nortel Networks",
+ [3]byte{0, 24, 177}: "IBM Corp",
+ [3]byte{0, 24, 178}: "ADEUNIS RF",
+ [3]byte{0, 24, 179}: "TEC WizHome Co., Ltd.",
+ [3]byte{0, 24, 180}: "Dawon Media Inc.",
+ [3]byte{0, 24, 181}: "Magna Carta",
+ [3]byte{0, 24, 182}: "S3C, Inc.",
+ [3]byte{0, 24, 183}: "D3 LED, LLC",
+ [3]byte{0, 24, 184}: "New Voice International AG",
+ [3]byte{0, 24, 185}: "Cisco Systems, Inc",
+ [3]byte{0, 24, 186}: "Cisco Systems, Inc",
+ [3]byte{0, 24, 187}: "Eliwell Controls srl",
+ [3]byte{0, 24, 188}: "ZAO NVP Bolid",
+ [3]byte{0, 24, 189}: "SHENZHEN DVBWORLD TECHNOLOGY CO., LTD.",
+ [3]byte{0, 24, 190}: "ANSA Corporation",
+ [3]byte{0, 24, 191}: "Essence Technology Solution, Inc.",
+ [3]byte{0, 24, 192}: "ARRIS Group, Inc.",
+ [3]byte{0, 24, 193}: "Almitec Informática e Comércio",
+ [3]byte{0, 24, 194}: "Firetide, Inc",
+ [3]byte{0, 24, 195}: "CS Corporation",
+ [3]byte{0, 24, 196}: "Raba Technologies LLC",
+ [3]byte{0, 24, 197}: "Nokia Danmark A/S",
+ [3]byte{0, 24, 198}: "OPW Fuel Management Systems",
+ [3]byte{0, 24, 199}: "Real Time Automation",
+ [3]byte{0, 24, 200}: "ISONAS Inc.",
+ [3]byte{0, 24, 201}: "EOps Technology Limited",
+ [3]byte{0, 24, 202}: "Viprinet GmbH",
+ [3]byte{0, 24, 203}: "Tecobest Technology Limited",
+ [3]byte{0, 24, 204}: "AXIOHM SAS",
+ [3]byte{0, 24, 205}: "Erae Electronics Industry Co., Ltd",
+ [3]byte{0, 24, 206}: "Dreamtech Co., Ltd",
+ [3]byte{0, 24, 207}: "Baldor Electric Company",
+ [3]byte{0, 24, 208}: "AtRoad, A Trimble Company",
+ [3]byte{0, 24, 209}: "Siemens Home & Office Comm. Devices",
+ [3]byte{0, 24, 210}: "High-Gain Antennas LLC",
+ [3]byte{0, 24, 211}: "TEAMCAST",
+ [3]byte{0, 24, 212}: "Unified Display Interface SIG",
+ [3]byte{0, 24, 213}: "REIGNCOM",
+ [3]byte{0, 24, 214}: "Swirlnet A/S",
+ [3]byte{0, 24, 215}: "JAVAD GNSS, Inc.",
+ [3]byte{0, 24, 216}: "ARCH METER Corporation",
+ [3]byte{0, 24, 217}: "Santosha Internatonal, Inc",
+ [3]byte{0, 24, 218}: "AMBER wireless GmbH",
+ [3]byte{0, 24, 219}: "EPL Technology Ltd",
+ [3]byte{0, 24, 220}: "Prostar Co., Ltd.",
+ [3]byte{0, 24, 221}: "Silicondust Engineering Ltd",
+ [3]byte{0, 24, 222}: "Intel Corporate",
+ [3]byte{0, 24, 223}: "The Morey Corporation",
+ [3]byte{0, 24, 224}: "ANAVEO",
+ [3]byte{0, 24, 225}: "Verkerk Service Systemen",
+ [3]byte{0, 24, 226}: "Topdata Sistemas de Automacao Ltda",
+ [3]byte{0, 24, 227}: "Visualgate Systems, Inc.",
+ [3]byte{0, 24, 228}: "YIGUANG",
+ [3]byte{0, 24, 229}: "Adhoco AG",
+ [3]byte{0, 24, 230}: "Computer Hardware Design SIA",
+ [3]byte{0, 24, 231}: "Cameo Communications, INC.",
+ [3]byte{0, 24, 232}: "Hacetron Corporation",
+ [3]byte{0, 24, 233}: "Numata Corporation",
+ [3]byte{0, 24, 234}: "Alltec GmbH",
+ [3]byte{0, 24, 235}: "Blue Zen Enterprises Private Limited",
+ [3]byte{0, 24, 236}: "Welding Technology Corporation",
+ [3]byte{0, 24, 237}: "Accutech Ultrasystems Co., Ltd.",
+ [3]byte{0, 24, 238}: "Videology Imaging Solutions, Inc.",
+ [3]byte{0, 24, 239}: "Escape Communications, Inc.",
+ [3]byte{0, 24, 240}: "JOYTOTO Co., Ltd.",
+ [3]byte{0, 24, 241}: "Chunichi Denshi Co.,LTD.",
+ [3]byte{0, 24, 242}: "Beijing Tianyu Communication Equipment Co., Ltd",
+ [3]byte{0, 24, 243}: "ASUSTek COMPUTER INC.",
+ [3]byte{0, 24, 244}: "EO TECHNICS Co., Ltd.",
+ [3]byte{0, 24, 245}: "Shenzhen Streaming Video Technology Company Limited",
+ [3]byte{0, 24, 246}: "Thomson Telecom Belgium",
+ [3]byte{0, 24, 247}: "Kameleon Technologies",
+ [3]byte{0, 24, 248}: "Cisco-Linksys, LLC",
+ [3]byte{0, 24, 249}: "VVOND, Inc.",
+ [3]byte{0, 24, 250}: "Yushin Precision Equipment Co.,Ltd.",
+ [3]byte{0, 24, 251}: "Compro Technology",
+ [3]byte{0, 24, 252}: "Altec Electronic AG",
+ [3]byte{0, 24, 253}: "Optimal Technologies International Inc.",
+ [3]byte{0, 24, 254}: "Hewlett Packard",
+ [3]byte{0, 24, 255}: "PowerQuattro Co.",
+ [3]byte{0, 25, 0}: "Intelliverese - DBA Voicecom",
+ [3]byte{0, 25, 1}: "F1MEDIA",
+ [3]byte{0, 25, 2}: "Cambridge Consultants Ltd",
+ [3]byte{0, 25, 3}: "Bigfoot Networks Inc",
+ [3]byte{0, 25, 4}: "WB Electronics Sp. z o.o.",
+ [3]byte{0, 25, 5}: "SCHRACK Seconet AG",
+ [3]byte{0, 25, 6}: "Cisco Systems, Inc",
+ [3]byte{0, 25, 7}: "Cisco Systems, Inc",
+ [3]byte{0, 25, 8}: "Duaxes Corporation",
+ [3]byte{0, 25, 9}: "DEVI - Danfoss A/S",
+ [3]byte{0, 25, 10}: "HASWARE INC.",
+ [3]byte{0, 25, 11}: "Southern Vision Systems, Inc.",
+ [3]byte{0, 25, 12}: "Encore Electronics, Inc.",
+ [3]byte{0, 25, 13}: "IEEE 1394c",
+ [3]byte{0, 25, 14}: "Atech Technology Co., Ltd.",
+ [3]byte{0, 25, 15}: "Advansus Corp.",
+ [3]byte{0, 25, 16}: "Knick Elektronische Messgeraete GmbH & Co. KG",
+ [3]byte{0, 25, 17}: "Just In Mobile Information Technologies (Shanghai) Co., Ltd.",
+ [3]byte{0, 25, 18}: "Welcat Inc",
+ [3]byte{0, 25, 19}: "Chuang-Yi Network Equipment Co.Ltd.",
+ [3]byte{0, 25, 20}: "Winix Co., Ltd",
+ [3]byte{0, 25, 21}: "TECOM Co., Ltd.",
+ [3]byte{0, 25, 22}: "PayTec AG",
+ [3]byte{0, 25, 23}: "Posiflex Inc.",
+ [3]byte{0, 25, 24}: "Interactive Wear AG",
+ [3]byte{0, 25, 25}: "ASTEL Inc.",
+ [3]byte{0, 25, 26}: "IRLINK",
+ [3]byte{0, 25, 27}: "Sputnik Engineering AG",
+ [3]byte{0, 25, 28}: "Sensicast Systems",
+ [3]byte{0, 25, 29}: "Nintendo Co., Ltd.",
+ [3]byte{0, 25, 30}: "Beyondwiz Co., Ltd.",
+ [3]byte{0, 25, 31}: "Microlink communications Inc.",
+ [3]byte{0, 25, 32}: "KUME electric Co.,Ltd.",
+ [3]byte{0, 25, 33}: "Elitegroup Computer Systems Co.,Ltd.",
+ [3]byte{0, 25, 34}: "CM Comandos Lineares",
+ [3]byte{0, 25, 35}: "Phonex Korea Co., LTD.",
+ [3]byte{0, 25, 36}: "LBNL Engineering",
+ [3]byte{0, 25, 37}: "Intelicis Corporation",
+ [3]byte{0, 25, 38}: "BitsGen Co., Ltd.",
+ [3]byte{0, 25, 39}: "ImCoSys Ltd",
+ [3]byte{0, 25, 40}: "Siemens AG, Transportation Systems",
+ [3]byte{0, 25, 41}: "2M2B Montadora de Maquinas Bahia Brasil LTDA",
+ [3]byte{0, 25, 42}: "Antiope Associates",
+ [3]byte{0, 25, 43}: "Aclara RF Systems Inc.",
+ [3]byte{0, 25, 44}: "ARRIS Group, Inc.",
+ [3]byte{0, 25, 45}: "Nokia Corporation",
+ [3]byte{0, 25, 46}: "Spectral Instruments, Inc.",
+ [3]byte{0, 25, 47}: "Cisco Systems, Inc",
+ [3]byte{0, 25, 48}: "Cisco Systems, Inc",
+ [3]byte{0, 25, 49}: "Balluff GmbH",
+ [3]byte{0, 25, 50}: "Gude Analog- und Digialsysteme GmbH",
+ [3]byte{0, 25, 51}: "Strix Systems, Inc.",
+ [3]byte{0, 25, 52}: "TRENDON TOUCH TECHNOLOGY CORP.",
+ [3]byte{0, 25, 53}: "DUERR DENTAL AG",
+ [3]byte{0, 25, 54}: "STERLITE OPTICAL TECHNOLOGIES LIMITED",
+ [3]byte{0, 25, 55}: "CommerceGuard AB",
+ [3]byte{0, 25, 56}: "UMB Communications Co., Ltd.",
+ [3]byte{0, 25, 57}: "Gigamips",
+ [3]byte{0, 25, 58}: "OESOLUTIONS",
+ [3]byte{0, 25, 59}: "Wilibox Deliberant Group LLC",
+ [3]byte{0, 25, 60}: "HighPoint Technologies Incorporated",
+ [3]byte{0, 25, 61}: "GMC Guardian Mobility Corp.",
+ [3]byte{0, 25, 62}: "ADB Broadband Italia",
+ [3]byte{0, 25, 63}: "RDI technology(Shenzhen) Co.,LTD",
+ [3]byte{0, 25, 64}: "Rackable Systems",
+ [3]byte{0, 25, 65}: "Pitney Bowes, Inc",
+ [3]byte{0, 25, 66}: "ON SOFTWARE INTERNATIONAL LIMITED",
+ [3]byte{0, 25, 67}: "Belden",
+ [3]byte{0, 25, 68}: "Fossil Partners, L.P.",
+ [3]byte{0, 25, 69}: "RF COncepts, LLC",
+ [3]byte{0, 25, 70}: "Cianet Industria e Comercio S/A",
+ [3]byte{0, 25, 71}: "Cisco SPVTG",
+ [3]byte{0, 25, 72}: "AireSpider Networks",
+ [3]byte{0, 25, 73}: "TENTEL COMTECH CO., LTD.",
+ [3]byte{0, 25, 74}: "TESTO AG",
+ [3]byte{0, 25, 75}: "Sagemcom Broadband SAS",
+ [3]byte{0, 25, 76}: "Fujian Stelcom information & Technology CO.,Ltd",
+ [3]byte{0, 25, 77}: "Avago Technologies Sdn Bhd",
+ [3]byte{0, 25, 78}: "Ultra Electronics - TCS (Tactical Communication Systems)",
+ [3]byte{0, 25, 79}: "Nokia Danmark A/S",
+ [3]byte{0, 25, 80}: "Harman Multimedia",
+ [3]byte{0, 25, 81}: "NETCONS, s.r.o.",
+ [3]byte{0, 25, 82}: "ACOGITO Co., Ltd",
+ [3]byte{0, 25, 83}: "Chainleader Communications Corp.",
+ [3]byte{0, 25, 84}: "Leaf Corporation.",
+ [3]byte{0, 25, 85}: "Cisco Systems, Inc",
+ [3]byte{0, 25, 86}: "Cisco Systems, Inc",
+ [3]byte{0, 25, 87}: "Saafnet Canada Inc.",
+ [3]byte{0, 25, 88}: "Bluetooth SIG, Inc.",
+ [3]byte{0, 25, 89}: "Staccato Communications Inc.",
+ [3]byte{0, 25, 90}: "Jenaer Antriebstechnik GmbH",
+ [3]byte{0, 25, 91}: "D-Link Corporation",
+ [3]byte{0, 25, 92}: "Innotech Corporation",
+ [3]byte{0, 25, 93}: "ShenZhen XinHuaTong Opto Electronics Co.,Ltd",
+ [3]byte{0, 25, 94}: "ARRIS Group, Inc.",
+ [3]byte{0, 25, 95}: "Valemount Networks Corporation",
+ [3]byte{0, 25, 96}: "DoCoMo Systems, Inc.",
+ [3]byte{0, 25, 97}: "Blaupunkt Embedded Systems GmbH",
+ [3]byte{0, 25, 98}: "Commerciant, LP",
+ [3]byte{0, 25, 99}: "Sony Mobile Communications AB",
+ [3]byte{0, 25, 100}: "Doorking Inc.",
+ [3]byte{0, 25, 101}: "YuHua TelTech (ShangHai) Co., Ltd.",
+ [3]byte{0, 25, 102}: "Asiarock Technology Limited",
+ [3]byte{0, 25, 103}: "TELDAT Sp.J.",
+ [3]byte{0, 25, 104}: "Digital Video Networks(Shanghai) CO. LTD.",
+ [3]byte{0, 25, 105}: "Nortel Networks",
+ [3]byte{0, 25, 106}: "MikroM GmbH",
+ [3]byte{0, 25, 107}: "Danpex Corporation",
+ [3]byte{0, 25, 108}: "ETROVISION TECHNOLOGY",
+ [3]byte{0, 25, 109}: "Raybit Systems Korea, Inc",
+ [3]byte{0, 25, 110}: "Metacom (Pty) Ltd.",
+ [3]byte{0, 25, 111}: "SensoPart GmbH",
+ [3]byte{0, 25, 112}: "Z-Com, Inc.",
+ [3]byte{0, 25, 113}: "Guangzhou Unicomp Technology Co.,Ltd",
+ [3]byte{0, 25, 114}: "Plexus (Xiamen) Co.,ltd.",
+ [3]byte{0, 25, 115}: "Zeugma Systems",
+ [3]byte{0, 25, 116}: "16063",
+ [3]byte{0, 25, 117}: "Beijing Huisen networks technology Inc",
+ [3]byte{0, 25, 118}: "Xipher Technologies, LLC",
+ [3]byte{0, 25, 119}: "Aerohive Networks Inc.",
+ [3]byte{0, 25, 120}: "Datum Systems, Inc.",
+ [3]byte{0, 25, 121}: "Nokia Danmark A/S",
+ [3]byte{0, 25, 122}: "MAZeT GmbH",
+ [3]byte{0, 25, 123}: "Picotest Corp.",
+ [3]byte{0, 25, 124}: "Riedel Communications GmbH",
+ [3]byte{0, 25, 125}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{0, 25, 126}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{0, 25, 127}: "PLANTRONICS, INC.",
+ [3]byte{0, 25, 128}: "Gridpoint Systems",
+ [3]byte{0, 25, 129}: "Vivox Inc",
+ [3]byte{0, 25, 130}: "SmarDTV",
+ [3]byte{0, 25, 131}: "CCT R&D Limited",
+ [3]byte{0, 25, 132}: "ESTIC Corporation",
+ [3]byte{0, 25, 133}: "IT Watchdogs, Inc",
+ [3]byte{0, 25, 134}: "Cheng Hongjian",
+ [3]byte{0, 25, 135}: "Panasonic Mobile Communications Co.,Ltd.",
+ [3]byte{0, 25, 136}: "Wi2Wi, Inc",
+ [3]byte{0, 25, 137}: "Sonitrol Corporation",
+ [3]byte{0, 25, 138}: "Northrop Grumman Systems Corp.",
+ [3]byte{0, 25, 139}: "Novera Optics Korea, Inc.",
+ [3]byte{0, 25, 140}: "iXSea",
+ [3]byte{0, 25, 141}: "Ocean Optics, Inc.",
+ [3]byte{0, 25, 142}: "Oticon A/S",
+ [3]byte{0, 25, 143}: "Alcatel Bell N.V.",
+ [3]byte{0, 25, 144}: "ELM DATA Co., Ltd.",
+ [3]byte{0, 25, 145}: "avinfo",
+ [3]byte{0, 25, 146}: "Adtran Inc",
+ [3]byte{0, 25, 147}: "Changshu Switchgear MFG. Co.,Ltd. (Former Changshu Switchgea",
+ [3]byte{0, 25, 148}: "Jorjin Technologies Inc.",
+ [3]byte{0, 25, 149}: "Jurong Hi-Tech (Suzhou)Co.ltd",
+ [3]byte{0, 25, 150}: "TurboChef Technologies Inc.",
+ [3]byte{0, 25, 151}: "Soft Device Sdn Bhd",
+ [3]byte{0, 25, 152}: "SATO CORPORATION",
+ [3]byte{0, 25, 153}: "Fujitsu Technology Solutions GmbH",
+ [3]byte{0, 25, 154}: "EDO-EVI",
+ [3]byte{0, 25, 155}: "Diversified Technical Systems, Inc.",
+ [3]byte{0, 25, 156}: "CTRING",
+ [3]byte{0, 25, 157}: "Vizio, Inc",
+ [3]byte{0, 25, 158}: "Nifty",
+ [3]byte{0, 25, 159}: "DKT A/S",
+ [3]byte{0, 25, 160}: "NIHON DATA SYSTENS, INC.",
+ [3]byte{0, 25, 161}: "LG INFORMATION & COMM.",
+ [3]byte{0, 25, 162}: "ORDYN TECHNOLOGIES",
+ [3]byte{0, 25, 163}: "asteel electronique atlantique",
+ [3]byte{0, 25, 164}: "Austar Technology (hang zhou) Co.,Ltd",
+ [3]byte{0, 25, 165}: "RadarFind Corporation",
+ [3]byte{0, 25, 166}: "ARRIS Group, Inc.",
+ [3]byte{0, 25, 167}: "ITU-T",
+ [3]byte{0, 25, 168}: "WiQuest Communications",
+ [3]byte{0, 25, 169}: "Cisco Systems, Inc",
+ [3]byte{0, 25, 170}: "Cisco Systems, Inc",
+ [3]byte{0, 25, 171}: "Raycom CO ., LTD",
+ [3]byte{0, 25, 172}: "GSP SYSTEMS Inc.",
+ [3]byte{0, 25, 173}: "BOBST SA",
+ [3]byte{0, 25, 174}: "Hopling Technologies b.v.",
+ [3]byte{0, 25, 175}: "Rigol Technologies, Inc.",
+ [3]byte{0, 25, 176}: "HanYang System",
+ [3]byte{0, 25, 177}: "Arrow7 Corporation",
+ [3]byte{0, 25, 178}: "XYnetsoft Co.,Ltd",
+ [3]byte{0, 25, 179}: "Stanford Research Systems",
+ [3]byte{0, 25, 180}: "Intellio Ltd",
+ [3]byte{0, 25, 181}: "Famar Fueguina S.A.",
+ [3]byte{0, 25, 182}: "Euro Emme s.r.l.",
+ [3]byte{0, 25, 183}: "Nokia Danmark A/S",
+ [3]byte{0, 25, 184}: "Boundary Devices",
+ [3]byte{0, 25, 185}: "Dell Inc.",
+ [3]byte{0, 25, 186}: "Paradox Security Systems Ltd",
+ [3]byte{0, 25, 187}: "Hewlett Packard",
+ [3]byte{0, 25, 188}: "ELECTRO CHANCE SRL",
+ [3]byte{0, 25, 189}: "New Media Life",
+ [3]byte{0, 25, 190}: "Altai Technologies Limited",
+ [3]byte{0, 25, 191}: "Citiway technology Co.,ltd",
+ [3]byte{0, 25, 192}: "ARRIS Group, Inc.",
+ [3]byte{0, 25, 193}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{0, 25, 194}: "Equustek Solutions, Inc.",
+ [3]byte{0, 25, 195}: "Qualitrol",
+ [3]byte{0, 25, 196}: "Infocrypt Inc.",
+ [3]byte{0, 25, 197}: "Sony Interactive Entertainment Inc.",
+ [3]byte{0, 25, 198}: "zte corporation",
+ [3]byte{0, 25, 199}: "Cambridge Industries(Group) Co.,Ltd.",
+ [3]byte{0, 25, 200}: "AnyDATA Corporation",
+ [3]byte{0, 25, 201}: "S&C ELECTRIC COMPANY",
+ [3]byte{0, 25, 202}: "Broadata Communications, Inc",
+ [3]byte{0, 25, 203}: "Zyxel Communications Corporation",
+ [3]byte{0, 25, 204}: "RCG (HK) Ltd",
+ [3]byte{0, 25, 205}: "Chengdu ethercom information technology Ltd.",
+ [3]byte{0, 25, 206}: "Progressive Gaming International",
+ [3]byte{0, 25, 207}: "SALICRU, S.A.",
+ [3]byte{0, 25, 208}: "Cathexis",
+ [3]byte{0, 25, 209}: "Intel Corporate",
+ [3]byte{0, 25, 210}: "Intel Corporate",
+ [3]byte{0, 25, 211}: "TRAK Microwave",
+ [3]byte{0, 25, 212}: "ICX Technologies",
+ [3]byte{0, 25, 213}: "IP Innovations, Inc.",
+ [3]byte{0, 25, 214}: "LS Cable and System Ltd.",
+ [3]byte{0, 25, 215}: "FORTUNETEK CO., LTD",
+ [3]byte{0, 25, 216}: "MAXFOR",
+ [3]byte{0, 25, 217}: "Zeutschel GmbH",
+ [3]byte{0, 25, 218}: "Welltrans O&E Technology Co. , Ltd.",
+ [3]byte{0, 25, 219}: "MICRO-STAR INTERNATIONAL CO., LTD.",
+ [3]byte{0, 25, 220}: "ENENSYS Technologies",
+ [3]byte{0, 25, 221}: "FEI-Zyfer, Inc.",
+ [3]byte{0, 25, 222}: "MOBITEK",
+ [3]byte{0, 25, 223}: "Thomson Inc.",
+ [3]byte{0, 25, 224}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{0, 25, 225}: "Nortel Networks",
+ [3]byte{0, 25, 226}: "Juniper Networks",
+ [3]byte{0, 25, 227}: "Apple, Inc.",
+ [3]byte{0, 25, 228}: "2Wire Inc",
+ [3]byte{0, 25, 229}: "Lynx Studio Technology, Inc.",
+ [3]byte{0, 25, 230}: "TOYO MEDIC CO.,LTD.",
+ [3]byte{0, 25, 231}: "Cisco Systems, Inc",
+ [3]byte{0, 25, 232}: "Cisco Systems, Inc",
+ [3]byte{0, 25, 233}: "S-Information Technolgy, Co., Ltd.",
+ [3]byte{0, 25, 234}: "TeraMage Technologies Co., Ltd.",
+ [3]byte{0, 25, 235}: "Pyronix Ltd",
+ [3]byte{0, 25, 236}: "Sagamore Systems, Inc.",
+ [3]byte{0, 25, 237}: "Axesstel Inc.",
+ [3]byte{0, 25, 238}: "CARLO GAVAZZI CONTROLS SPA-Controls Division",
+ [3]byte{0, 25, 239}: "SHENZHEN LINNKING ELECTRONICS CO.,LTD",
+ [3]byte{0, 25, 240}: "UNIONMAN TECHNOLOGY CO.,LTD",
+ [3]byte{0, 25, 241}: "Star Communication Network Technology Co.,Ltd",
+ [3]byte{0, 25, 242}: "Teradyne K.K.",
+ [3]byte{0, 25, 243}: "Cetis, Inc",
+ [3]byte{0, 25, 244}: "Convergens Oy Ltd",
+ [3]byte{0, 25, 245}: "Imagination Technologies Ltd",
+ [3]byte{0, 25, 246}: "Acconet (PTE) Ltd",
+ [3]byte{0, 25, 247}: "Onset Computer Corporation",
+ [3]byte{0, 25, 248}: "Embedded Systems Design, Inc.",
+ [3]byte{0, 25, 249}: "TDK-Lambda",
+ [3]byte{0, 25, 250}: "Cable Vision Electronics CO., LTD.",
+ [3]byte{0, 25, 251}: "BSkyB Ltd",
+ [3]byte{0, 25, 252}: "PT. Ufoakses Sukses Luarbiasa",
+ [3]byte{0, 25, 253}: "Nintendo Co., Ltd.",
+ [3]byte{0, 25, 254}: "SHENZHEN SEECOMM TECHNOLOGY CO.,LTD.",
+ [3]byte{0, 25, 255}: "Finnzymes",
+ [3]byte{0, 26, 0}: "MATRIX INC.",
+ [3]byte{0, 26, 1}: "Smiths Medical",
+ [3]byte{0, 26, 2}: "SECURE CARE PRODUCTS, INC",
+ [3]byte{0, 26, 3}: "Angel Electronics Co., Ltd.",
+ [3]byte{0, 26, 4}: "Interay Solutions BV",
+ [3]byte{0, 26, 5}: "OPTIBASE LTD",
+ [3]byte{0, 26, 6}: "OpVista, Inc.",
+ [3]byte{0, 26, 7}: "Arecont Vision",
+ [3]byte{0, 26, 8}: "Simoco Ltd.",
+ [3]byte{0, 26, 9}: "Wayfarer Transit Systems Ltd",
+ [3]byte{0, 26, 10}: "Adaptive Micro-Ware Inc.",
+ [3]byte{0, 26, 11}: "BONA TECHNOLOGY INC.",
+ [3]byte{0, 26, 12}: "Swe-Dish Satellite Systems AB",
+ [3]byte{0, 26, 13}: "HandHeld entertainment, Inc.",
+ [3]byte{0, 26, 14}: "Cheng Uei Precision Industry Co.,Ltd",
+ [3]byte{0, 26, 15}: "Sistemas Avanzados de Control, S.A.",
+ [3]byte{0, 26, 16}: "LUCENT TRANS ELECTRONICS CO.,LTD",
+ [3]byte{0, 26, 17}: "Google, Inc.",
+ [3]byte{0, 26, 18}: "Essilor",
+ [3]byte{0, 26, 19}: "Wanlida Group Co., LTD",
+ [3]byte{0, 26, 20}: "Xin Hua Control Engineering Co.,Ltd.",
+ [3]byte{0, 26, 21}: "gemalto e-Payment",
+ [3]byte{0, 26, 22}: "Nokia Danmark A/S",
+ [3]byte{0, 26, 23}: "Teak Technologies, Inc.",
+ [3]byte{0, 26, 24}: "Advanced Simulation Technology inc.",
+ [3]byte{0, 26, 25}: "Computer Engineering Limited",
+ [3]byte{0, 26, 26}: "Gentex Corporation/Electro-Acoustic Products",
+ [3]byte{0, 26, 27}: "ARRIS Group, Inc.",
+ [3]byte{0, 26, 28}: "GT&T Engineering Pte Ltd",
+ [3]byte{0, 26, 29}: "PChome Online Inc.",
+ [3]byte{0, 26, 30}: "Aruba Networks",
+ [3]byte{0, 26, 31}: "Coastal Environmental Systems",
+ [3]byte{0, 26, 32}: "CMOTECH Co. Ltd.",
+ [3]byte{0, 26, 33}: "Brookhuis Applied Technologies BV",
+ [3]byte{0, 26, 34}: "eQ-3 Entwicklung GmbH",
+ [3]byte{0, 26, 35}: "Ice Qube, Inc",
+ [3]byte{0, 26, 36}: "Galaxy Telecom Technologies Ltd",
+ [3]byte{0, 26, 37}: "DELTA DORE",
+ [3]byte{0, 26, 38}: "Deltanode Solutions AB",
+ [3]byte{0, 26, 39}: "Ubistar",
+ [3]byte{0, 26, 40}: "ASWT Co., LTD. Taiwan Branch H.K.",
+ [3]byte{0, 26, 41}: "Johnson Outdoors Marine Electronics d/b/a Minnkota",
+ [3]byte{0, 26, 42}: "Arcadyan Technology Corporation",
+ [3]byte{0, 26, 43}: "Ayecom Technology Co., Ltd.",
+ [3]byte{0, 26, 44}: "SATEC Co.,LTD",
+ [3]byte{0, 26, 45}: "The Navvo Group",
+ [3]byte{0, 26, 46}: "Ziova Coporation",
+ [3]byte{0, 26, 47}: "Cisco Systems, Inc",
+ [3]byte{0, 26, 48}: "Cisco Systems, Inc",
+ [3]byte{0, 26, 49}: "SCAN COIN Industries AB",
+ [3]byte{0, 26, 50}: "ACTIVA MULTIMEDIA",
+ [3]byte{0, 26, 51}: "ASI Communications, Inc.",
+ [3]byte{0, 26, 52}: "Konka Group Co., Ltd.",
+ [3]byte{0, 26, 53}: "BARTEC GmbH",
+ [3]byte{0, 26, 54}: "Aipermon GmbH & Co. KG",
+ [3]byte{0, 26, 55}: "Lear Corporation",
+ [3]byte{0, 26, 56}: "Sanmina-SCI",
+ [3]byte{0, 26, 57}: "Merten GmbH&CoKG",
+ [3]byte{0, 26, 58}: "Dongahelecomm",
+ [3]byte{0, 26, 59}: "Doah Elecom Inc.",
+ [3]byte{0, 26, 60}: "Technowave Ltd.",
+ [3]byte{0, 26, 61}: "Ajin Vision Co.,Ltd",
+ [3]byte{0, 26, 62}: "Faster Technology LLC",
+ [3]byte{0, 26, 63}: "intelbras",
+ [3]byte{0, 26, 64}: "A-FOUR TECH CO., LTD.",
+ [3]byte{0, 26, 65}: "INOCOVA Co.,Ltd",
+ [3]byte{0, 26, 66}: "Techcity Technology co., Ltd.",
+ [3]byte{0, 26, 67}: "Logical Link Communications",
+ [3]byte{0, 26, 68}: "JWTrading Co., Ltd",
+ [3]byte{0, 26, 69}: "GN Netcom A/S",
+ [3]byte{0, 26, 70}: "Digital Multimedia Technology Co., Ltd",
+ [3]byte{0, 26, 71}: "Agami Systems, Inc.",
+ [3]byte{0, 26, 72}: "Takacom Corporation",
+ [3]byte{0, 26, 73}: "Micro Vision Co.,LTD",
+ [3]byte{0, 26, 74}: "Qumranet Inc.",
+ [3]byte{0, 26, 75}: "Hewlett Packard",
+ [3]byte{0, 26, 76}: "Crossbow Technology, Inc",
+ [3]byte{0, 26, 77}: "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+ [3]byte{0, 26, 78}: "NTI AG / LinMot",
+ [3]byte{0, 26, 79}: "AVM GmbH",
+ [3]byte{0, 26, 80}: "PheeNet Technology Corp.",
+ [3]byte{0, 26, 81}: "Alfred Mann Foundation",
+ [3]byte{0, 26, 82}: "Meshlinx Wireless Inc.",
+ [3]byte{0, 26, 83}: "Zylaya",
+ [3]byte{0, 26, 84}: "Hip Shing Electronics Ltd.",
+ [3]byte{0, 26, 85}: "ACA-Digital Corporation",
+ [3]byte{0, 26, 86}: "ViewTel Co,. Ltd.",
+ [3]byte{0, 26, 87}: "Matrix Design Group, LLC",
+ [3]byte{0, 26, 88}: "CCV Deutschland GmbH - Celectronic eHealth Div.",
+ [3]byte{0, 26, 89}: "Ircona",
+ [3]byte{0, 26, 90}: "Korea Electric Power Data Network (KDN) Co., Ltd",
+ [3]byte{0, 26, 91}: "NetCare Service Co., Ltd.",
+ [3]byte{0, 26, 92}: "Euchner GmbH+Co. KG",
+ [3]byte{0, 26, 93}: "Mobinnova Corp.",
+ [3]byte{0, 26, 94}: "Thincom Technology Co.,Ltd",
+ [3]byte{0, 26, 95}: "KitWorks.fi Ltd.",
+ [3]byte{0, 26, 96}: "Wave Electronics Co.,Ltd.",
+ [3]byte{0, 26, 97}: "PacStar Corp.",
+ [3]byte{0, 26, 98}: "Data Robotics, Incorporated",
+ [3]byte{0, 26, 99}: "Elster Solutions, LLC,",
+ [3]byte{0, 26, 100}: "IBM Corp",
+ [3]byte{0, 26, 101}: "Seluxit",
+ [3]byte{0, 26, 102}: "ARRIS Group, Inc.",
+ [3]byte{0, 26, 103}: "Infinite QL Sdn Bhd",
+ [3]byte{0, 26, 104}: "Weltec Enterprise Co., Ltd.",
+ [3]byte{0, 26, 105}: "Wuhan Yangtze Optical Technology CO.,Ltd.",
+ [3]byte{0, 26, 106}: "Tranzas, Inc.",
+ [3]byte{0, 26, 107}: "Universal Global Scientific Industrial Co., Ltd.",
+ [3]byte{0, 26, 108}: "Cisco Systems, Inc",
+ [3]byte{0, 26, 109}: "Cisco Systems, Inc",
+ [3]byte{0, 26, 110}: "Impro Technologies",
+ [3]byte{0, 26, 111}: "MI.TEL s.r.l.",
+ [3]byte{0, 26, 112}: "Cisco-Linksys, LLC",
+ [3]byte{0, 26, 113}: "Diostech Co., Ltd.",
+ [3]byte{0, 26, 114}: "Mosart Semiconductor Corp.",
+ [3]byte{0, 26, 115}: "Gemtek Technology Co., Ltd.",
+ [3]byte{0, 26, 116}: "Procare International Co",
+ [3]byte{0, 26, 117}: "Sony Mobile Communications AB",
+ [3]byte{0, 26, 118}: "SDT information Technology Co.,LTD.",
+ [3]byte{0, 26, 119}: "ARRIS Group, Inc.",
+ [3]byte{0, 26, 120}: "ubtos",
+ [3]byte{0, 26, 121}: "TELECOMUNICATION TECHNOLOGIES LTD.",
+ [3]byte{0, 26, 122}: "Lismore Instruments Limited",
+ [3]byte{0, 26, 123}: "Teleco, Inc.",
+ [3]byte{0, 26, 124}: "Hirschmann Multimedia B.V.",
+ [3]byte{0, 26, 125}: "cyber-blue(HK)Ltd",
+ [3]byte{0, 26, 126}: "LN Srithai Comm Ltd.",
+ [3]byte{0, 26, 127}: "GCI Science & Technology Co.,LTD",
+ [3]byte{0, 26, 128}: "Sony Corporation",
+ [3]byte{0, 26, 129}: "Zelax",
+ [3]byte{0, 26, 130}: "PROBA Building Automation Co.,LTD",
+ [3]byte{0, 26, 131}: "Pegasus Technologies Inc.",
+ [3]byte{0, 26, 132}: "V One Multimedia Pte Ltd",
+ [3]byte{0, 26, 133}: "NV Michel Van de Wiele",
+ [3]byte{0, 26, 134}: "AdvancedIO Systems Inc",
+ [3]byte{0, 26, 135}: "Canhold International Limited",
+ [3]byte{0, 26, 136}: "Venergy,Co,Ltd",
+ [3]byte{0, 26, 137}: "Nokia Danmark A/S",
+ [3]byte{0, 26, 138}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 26, 139}: "CHUNIL ELECTRIC IND., CO.",
+ [3]byte{0, 26, 140}: "Sophos Ltd",
+ [3]byte{0, 26, 141}: "AVECS Bergen GmbH",
+ [3]byte{0, 26, 142}: "3Way Networks Ltd",
+ [3]byte{0, 26, 143}: "Nortel Networks",
+ [3]byte{0, 26, 144}: "Trópico Sistemas e Telecomunicações da Amazônia LTDA.",
+ [3]byte{0, 26, 145}: "FusionDynamic Ltd.",
+ [3]byte{0, 26, 146}: "ASUSTek COMPUTER INC.",
+ [3]byte{0, 26, 147}: "ERCO Leuchten GmbH",
+ [3]byte{0, 26, 148}: "Votronic GmbH",
+ [3]byte{0, 26, 149}: "Hisense Mobile Communications Technoligy Co.,Ltd.",
+ [3]byte{0, 26, 150}: "ECLER S.A.",
+ [3]byte{0, 26, 151}: "fitivision technology Inc.",
+ [3]byte{0, 26, 152}: "Asotel Communication Limited Taiwan Branch",
+ [3]byte{0, 26, 153}: "Smarty (HZ) Information Electronics Co., Ltd",
+ [3]byte{0, 26, 154}: "Skyworth Digital Technology(Shenzhen) Co.,Ltd",
+ [3]byte{0, 26, 155}: "ADEC & Parter AG",
+ [3]byte{0, 26, 156}: "RightHand Technologies, Inc.",
+ [3]byte{0, 26, 157}: "Skipper Wireless, Inc.",
+ [3]byte{0, 26, 158}: "ICON Digital International Limited",
+ [3]byte{0, 26, 159}: "A-Link Ltd",
+ [3]byte{0, 26, 160}: "Dell Inc.",
+ [3]byte{0, 26, 161}: "Cisco Systems, Inc",
+ [3]byte{0, 26, 162}: "Cisco Systems, Inc",
+ [3]byte{0, 26, 163}: "DELORME",
+ [3]byte{0, 26, 164}: "Future University-Hakodate",
+ [3]byte{0, 26, 165}: "BRN Phoenix",
+ [3]byte{0, 26, 166}: "Telefunken Radio Communication Systems GmbH &CO.KG",
+ [3]byte{0, 26, 167}: "Torian Wireless",
+ [3]byte{0, 26, 168}: "Mamiya Digital Imaging Co., Ltd.",
+ [3]byte{0, 26, 169}: "FUJIAN STAR-NET COMMUNICATION CO.,LTD",
+ [3]byte{0, 26, 170}: "Analogic Corp.",
+ [3]byte{0, 26, 171}: "eWings s.r.l.",
+ [3]byte{0, 26, 172}: "Corelatus AB",
+ [3]byte{0, 26, 173}: "ARRIS Group, Inc.",
+ [3]byte{0, 26, 174}: "Savant Systems LLC",
+ [3]byte{0, 26, 175}: "BLUSENS TECHNOLOGY",
+ [3]byte{0, 26, 176}: "Signal Networks Pvt. Ltd.,",
+ [3]byte{0, 26, 177}: "Asia Pacific Satellite Industries Co., Ltd.",
+ [3]byte{0, 26, 178}: "Cyber Solutions Inc.",
+ [3]byte{0, 26, 179}: "VISIONITE INC.",
+ [3]byte{0, 26, 180}: "FFEI Ltd.",
+ [3]byte{0, 26, 181}: "Home Network System",
+ [3]byte{0, 26, 182}: "Texas Instruments",
+ [3]byte{0, 26, 183}: "Ethos Networks LTD.",
+ [3]byte{0, 26, 184}: "Anseri Corporation",
+ [3]byte{0, 26, 185}: "PMC",
+ [3]byte{0, 26, 186}: "Caton Overseas Limited",
+ [3]byte{0, 26, 187}: "Fontal Technology Incorporation",
+ [3]byte{0, 26, 188}: "U4EA Technologies Ltd",
+ [3]byte{0, 26, 189}: "Impatica Inc.",
+ [3]byte{0, 26, 190}: "COMPUTER HI-TECH INC.",
+ [3]byte{0, 26, 191}: "TRUMPF Laser Marking Systems AG",
+ [3]byte{0, 26, 192}: "JOYBIEN TECHNOLOGIES CO., LTD.",
+ [3]byte{0, 26, 193}: "3Com Ltd",
+ [3]byte{0, 26, 194}: "YEC Co.,Ltd.",
+ [3]byte{0, 26, 195}: "Scientific-Atlanta, Inc",
+ [3]byte{0, 26, 196}: "2Wire Inc",
+ [3]byte{0, 26, 197}: "BreakingPoint Systems, Inc.",
+ [3]byte{0, 26, 198}: "Micro Control Designs",
+ [3]byte{0, 26, 199}: "UNIPOINT",
+ [3]byte{0, 26, 200}: "ISL (Instrumentation Scientifique de Laboratoire)",
+ [3]byte{0, 26, 201}: "SUZUKEN CO.,LTD",
+ [3]byte{0, 26, 202}: "Tilera Corporation",
+ [3]byte{0, 26, 203}: "Autocom Products Ltd",
+ [3]byte{0, 26, 204}: "Celestial Semiconductor, Ltd",
+ [3]byte{0, 26, 205}: "Tidel Engineering LP",
+ [3]byte{0, 26, 206}: "YUPITERU CORPORATION",
+ [3]byte{0, 26, 207}: "C.T. ELETTRONICA",
+ [3]byte{0, 26, 208}: "Albis Technologies AG",
+ [3]byte{0, 26, 209}: "FARGO CO., LTD.",
+ [3]byte{0, 26, 210}: "Eletronica Nitron Ltda",
+ [3]byte{0, 26, 211}: "Vamp Ltd.",
+ [3]byte{0, 26, 212}: "iPOX Technology Co., Ltd.",
+ [3]byte{0, 26, 213}: "KMC CHAIN INDUSTRIAL CO., LTD.",
+ [3]byte{0, 26, 214}: "JIAGNSU AETNA ELECTRIC CO.,LTD",
+ [3]byte{0, 26, 215}: "Christie Digital Systems, Inc.",
+ [3]byte{0, 26, 216}: "AlsterAero GmbH",
+ [3]byte{0, 26, 217}: "International Broadband Electric Communications, Inc.",
+ [3]byte{0, 26, 218}: "Biz-2-Me Inc.",
+ [3]byte{0, 26, 219}: "ARRIS Group, Inc.",
+ [3]byte{0, 26, 220}: "Nokia Danmark A/S",
+ [3]byte{0, 26, 221}: "PePWave Ltd",
+ [3]byte{0, 26, 222}: "ARRIS Group, Inc.",
+ [3]byte{0, 26, 223}: "Interactivetv Pty Limited",
+ [3]byte{0, 26, 224}: "Mythology Tech Express Inc.",
+ [3]byte{0, 26, 225}: "EDGE ACCESS INC",
+ [3]byte{0, 26, 226}: "Cisco Systems, Inc",
+ [3]byte{0, 26, 227}: "Cisco Systems, Inc",
+ [3]byte{0, 26, 228}: "Medicis Technologies Corporation",
+ [3]byte{0, 26, 229}: "Mvox Technologies Inc.",
+ [3]byte{0, 26, 230}: "Atlanta Advanced Communications Holdings Limited",
+ [3]byte{0, 26, 231}: "Aztek Networks, Inc.",
+ [3]byte{0, 26, 232}: "Unify Software and Solutions GmbH & Co. KG",
+ [3]byte{0, 26, 233}: "Nintendo Co., Ltd.",
+ [3]byte{0, 26, 234}: "Radio Terminal Systems Pty Ltd",
+ [3]byte{0, 26, 235}: "Allied Telesis R&D Center K.K.",
+ [3]byte{0, 26, 236}: "Keumbee Electronics Co.,Ltd.",
+ [3]byte{0, 26, 237}: "INCOTEC GmbH",
+ [3]byte{0, 26, 238}: "Shenztech Ltd",
+ [3]byte{0, 26, 239}: "Loopcomm Technology, Inc.",
+ [3]byte{0, 26, 240}: "Alcatel-Lucent IPD",
+ [3]byte{0, 26, 241}: "Embedded Artists AB",
+ [3]byte{0, 26, 242}: "Dynavisions Schweiz AG",
+ [3]byte{0, 26, 243}: "Samyoung Electronics",
+ [3]byte{0, 26, 244}: "Handreamnet",
+ [3]byte{0, 26, 245}: "PENTAONE. CO., LTD.",
+ [3]byte{0, 26, 246}: "Woven Systems, Inc.",
+ [3]byte{0, 26, 247}: "dataschalt e+a GmbH",
+ [3]byte{0, 26, 248}: "Copley Controls Corporation",
+ [3]byte{0, 26, 249}: "AeroVIronment (AV Inc)",
+ [3]byte{0, 26, 250}: "Welch Allyn, Inc.",
+ [3]byte{0, 26, 251}: "Joby Inc.",
+ [3]byte{0, 26, 252}: "ModusLink Corporation",
+ [3]byte{0, 26, 253}: "EVOLIS",
+ [3]byte{0, 26, 254}: "SOFACREAL",
+ [3]byte{0, 26, 255}: "Wizyoung Tech.",
+ [3]byte{0, 27, 0}: "Neopost Technologies",
+ [3]byte{0, 27, 1}: "Applied Radio Technologies",
+ [3]byte{0, 27, 2}: "ED Co.Ltd",
+ [3]byte{0, 27, 3}: "Action Technology (SZ) Co., Ltd",
+ [3]byte{0, 27, 4}: "Affinity International S.p.a",
+ [3]byte{0, 27, 5}: "YMC AG",
+ [3]byte{0, 27, 6}: "Ateliers R. LAUMONIER",
+ [3]byte{0, 27, 7}: "Mendocino Software",
+ [3]byte{0, 27, 8}: "Danfoss Drives A/S",
+ [3]byte{0, 27, 9}: "Matrix Telecom Pvt. Ltd.",
+ [3]byte{0, 27, 10}: "Intelligent Distributed Controls Ltd",
+ [3]byte{0, 27, 11}: "Phidgets Inc.",
+ [3]byte{0, 27, 12}: "Cisco Systems, Inc",
+ [3]byte{0, 27, 13}: "Cisco Systems, Inc",
+ [3]byte{0, 27, 14}: "InoTec GmbH Organisationssysteme",
+ [3]byte{0, 27, 15}: "Petratec",
+ [3]byte{0, 27, 16}: "ShenZhen Kang Hui Technology Co.,ltd",
+ [3]byte{0, 27, 17}: "D-Link Corporation",
+ [3]byte{0, 27, 18}: "Apprion",
+ [3]byte{0, 27, 19}: "Icron Technologies Corporation",
+ [3]byte{0, 27, 20}: "Carex Lighting Equipment Factory",
+ [3]byte{0, 27, 21}: "Voxtel, Inc.",
+ [3]byte{0, 27, 22}: "Celtro Ltd.",
+ [3]byte{0, 27, 23}: "Palo Alto Networks",
+ [3]byte{0, 27, 24}: "Tsuken Electric Ind. Co.,Ltd",
+ [3]byte{0, 27, 25}: "IEEE I&M Society TC9",
+ [3]byte{0, 27, 26}: "e-trees Japan, Inc.",
+ [3]byte{0, 27, 27}: "Siemens AG,",
+ [3]byte{0, 27, 28}: "Coherent",
+ [3]byte{0, 27, 29}: "Phoenix International Co., Ltd",
+ [3]byte{0, 27, 30}: "HART Communication Foundation",
+ [3]byte{0, 27, 31}: "DELTA - Danish Electronics, Light & Acoustics",
+ [3]byte{0, 27, 32}: "TPine Technology",
+ [3]byte{0, 27, 33}: "Intel Corporate",
+ [3]byte{0, 27, 34}: "Palit Microsystems ( H.K.) Ltd.",
+ [3]byte{0, 27, 35}: "SimpleComTools",
+ [3]byte{0, 27, 36}: "QUANTA COMPUTER INC.",
+ [3]byte{0, 27, 37}: "Nortel Networks",
+ [3]byte{0, 27, 38}: "RON-Telecom ZAO",
+ [3]byte{0, 27, 39}: "Merlin CSI",
+ [3]byte{0, 27, 40}: "POLYGON, JSC",
+ [3]byte{0, 27, 41}: "Avantis.Co.,Ltd",
+ [3]byte{0, 27, 42}: "Cisco Systems, Inc",
+ [3]byte{0, 27, 43}: "Cisco Systems, Inc",
+ [3]byte{0, 27, 44}: "ATRON electronic GmbH",
+ [3]byte{0, 27, 45}: "Med-Eng Systems Inc.",
+ [3]byte{0, 27, 46}: "Sinkyo Electron Inc",
+ [3]byte{0, 27, 47}: "NETGEAR",
+ [3]byte{0, 27, 48}: "Solitech Inc.",
+ [3]byte{0, 27, 49}: "Neural Image. Co. Ltd.",
+ [3]byte{0, 27, 50}: "QLogic Corporation",
+ [3]byte{0, 27, 51}: "Nokia Danmark A/S",
+ [3]byte{0, 27, 52}: "Focus System Inc.",
+ [3]byte{0, 27, 53}: "ChongQing JINOU Science & Technology Development CO.,Ltd",
+ [3]byte{0, 27, 54}: "Tsubata Engineering Co.,Ltd. (Head Office)",
+ [3]byte{0, 27, 55}: "Computec Oy",
+ [3]byte{0, 27, 56}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+ [3]byte{0, 27, 57}: "Proxicast",
+ [3]byte{0, 27, 58}: "SIMS Corp.",
+ [3]byte{0, 27, 59}: "Yi-Qing CO., LTD",
+ [3]byte{0, 27, 60}: "Software Technologies Group,Inc.",
+ [3]byte{0, 27, 61}: "EuroTel Spa",
+ [3]byte{0, 27, 62}: "Curtis, Inc.",
+ [3]byte{0, 27, 63}: "ProCurve Networking by HP",
+ [3]byte{0, 27, 64}: "Network Automation mxc AB",
+ [3]byte{0, 27, 65}: "General Infinity Co.,Ltd.",
+ [3]byte{0, 27, 66}: "Wise & Blue",
+ [3]byte{0, 27, 67}: "Beijing DG Telecommunications equipment Co.,Ltd",
+ [3]byte{0, 27, 68}: "SanDisk Corporation",
+ [3]byte{0, 27, 69}: "ABB AS, Division Automation Products",
+ [3]byte{0, 27, 70}: "Blueone Technology Co.,Ltd",
+ [3]byte{0, 27, 71}: "Futarque A/S",
+ [3]byte{0, 27, 72}: "Shenzhen Lantech Electronics Co., Ltd.",
+ [3]byte{0, 27, 73}: "Roberts Radio limited",
+ [3]byte{0, 27, 74}: "W&W Communications, Inc.",
+ [3]byte{0, 27, 75}: "SANION Co., Ltd.",
+ [3]byte{0, 27, 76}: "Signtech",
+ [3]byte{0, 27, 77}: "Areca Technology Corporation",
+ [3]byte{0, 27, 78}: "Navman New Zealand",
+ [3]byte{0, 27, 79}: "Avaya Inc",
+ [3]byte{0, 27, 80}: "Nizhny Novgorod Factory named after M.Frunze, FSUE (NZiF)",
+ [3]byte{0, 27, 81}: "Vector Technology Corp.",
+ [3]byte{0, 27, 82}: "ARRIS Group, Inc.",
+ [3]byte{0, 27, 83}: "Cisco Systems, Inc",
+ [3]byte{0, 27, 84}: "Cisco Systems, Inc",
+ [3]byte{0, 27, 85}: "Hurco Automation Ltd.",
+ [3]byte{0, 27, 86}: "Tehuti Networks Ltd.",
+ [3]byte{0, 27, 87}: "SEMINDIA SYSTEMS PRIVATE LIMITED",
+ [3]byte{0, 27, 88}: "ACE CAD Enterprise Co., Ltd.",
+ [3]byte{0, 27, 89}: "Sony Mobile Communications AB",
+ [3]byte{0, 27, 90}: "Apollo Imaging Technologies, Inc.",
+ [3]byte{0, 27, 91}: "2Wire Inc",
+ [3]byte{0, 27, 92}: "Azuretec Co., Ltd.",
+ [3]byte{0, 27, 93}: "Vololink Pty Ltd",
+ [3]byte{0, 27, 94}: "BPL Limited",
+ [3]byte{0, 27, 95}: "Alien Technology",
+ [3]byte{0, 27, 96}: "NAVIGON AG",
+ [3]byte{0, 27, 97}: "Digital Acoustics, LLC",
+ [3]byte{0, 27, 98}: "JHT Optoelectronics Co.,Ltd.",
+ [3]byte{0, 27, 99}: "Apple, Inc.",
+ [3]byte{0, 27, 100}: "IsaacLandKorea Co., Ltd,",
+ [3]byte{0, 27, 101}: "China Gridcom Co., Ltd",
+ [3]byte{0, 27, 102}: "Sennheiser electronic GmbH & Co. KG",
+ [3]byte{0, 27, 103}: "Cisco Systems Inc",
+ [3]byte{0, 27, 104}: "Modnnet Co., Ltd",
+ [3]byte{0, 27, 105}: "Equaline Corporation",
+ [3]byte{0, 27, 106}: "Powerwave Technologies Sweden AB",
+ [3]byte{0, 27, 107}: "Swyx Solutions AG",
+ [3]byte{0, 27, 108}: "LookX Digital Media BV",
+ [3]byte{0, 27, 109}: "Midtronics, Inc.",
+ [3]byte{0, 27, 110}: "Anue Systems, Inc.",
+ [3]byte{0, 27, 111}: "Teletrak Ltd",
+ [3]byte{0, 27, 112}: "IRI Ubiteq, INC.",
+ [3]byte{0, 27, 113}: "Telular Corp.",
+ [3]byte{0, 27, 114}: "Sicep s.p.a.",
+ [3]byte{0, 27, 115}: "DTL Broadcast Ltd",
+ [3]byte{0, 27, 116}: "MiraLink Corporation",
+ [3]byte{0, 27, 117}: "Hypermedia Systems",
+ [3]byte{0, 27, 118}: "Ripcode, Inc.",
+ [3]byte{0, 27, 119}: "Intel Corporate",
+ [3]byte{0, 27, 120}: "Hewlett Packard",
+ [3]byte{0, 27, 121}: "FAIVELEY TRANSPORT",
+ [3]byte{0, 27, 122}: "Nintendo Co., Ltd.",
+ [3]byte{0, 27, 123}: "The Tintometer Ltd",
+ [3]byte{0, 27, 124}: "A & R Cambridge",
+ [3]byte{0, 27, 125}: "CXR Anderson Jacobson",
+ [3]byte{0, 27, 126}: "Beckmann GmbH",
+ [3]byte{0, 27, 127}: "TMN Technologies Telecomunicacoes Ltda",
+ [3]byte{0, 27, 128}: "LORD Corporation",
+ [3]byte{0, 27, 129}: "DATAQ Instruments, Inc.",
+ [3]byte{0, 27, 130}: "Taiwan Semiconductor Co., Ltd.",
+ [3]byte{0, 27, 131}: "Finsoft Ltd",
+ [3]byte{0, 27, 132}: "Scan Engineering Telecom",
+ [3]byte{0, 27, 133}: "MAN Diesel SE",
+ [3]byte{0, 27, 134}: "Bosch Access Systems GmbH",
+ [3]byte{0, 27, 135}: "Deepsound Tech. Co., Ltd",
+ [3]byte{0, 27, 136}: "Divinet Access Technologies Ltd",
+ [3]byte{0, 27, 137}: "EMZA Visual Sense Ltd.",
+ [3]byte{0, 27, 138}: "2M Electronic A/S",
+ [3]byte{0, 27, 139}: "NEC Platforms, Ltd.",
+ [3]byte{0, 27, 140}: "JMicron Technology Corp.",
+ [3]byte{0, 27, 141}: "Electronic Computer Systems, Inc.",
+ [3]byte{0, 27, 142}: "Hulu Sweden AB",
+ [3]byte{0, 27, 143}: "Cisco Systems, Inc",
+ [3]byte{0, 27, 144}: "Cisco Systems, Inc",
+ [3]byte{0, 27, 145}: "EFKON AG",
+ [3]byte{0, 27, 146}: "l-acoustics",
+ [3]byte{0, 27, 147}: "JC Decaux SA DNT",
+ [3]byte{0, 27, 148}: "T.E.M.A. S.p.A.",
+ [3]byte{0, 27, 149}: "VIDEO SYSTEMS SRL",
+ [3]byte{0, 27, 150}: "General Sensing",
+ [3]byte{0, 27, 151}: "Violin Technologies",
+ [3]byte{0, 27, 152}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 27, 153}: "KS System GmbH",
+ [3]byte{0, 27, 154}: "Apollo Fire Detectors Ltd",
+ [3]byte{0, 27, 155}: "Hose-McCann Communications",
+ [3]byte{0, 27, 156}: "SATEL sp. z o.o.",
+ [3]byte{0, 27, 157}: "Novus Security Sp. z o.o.",
+ [3]byte{0, 27, 158}: "ASKEY COMPUTER CORP",
+ [3]byte{0, 27, 159}: "Calyptech Pty Ltd",
+ [3]byte{0, 27, 160}: "Awox",
+ [3]byte{0, 27, 161}: "Åmic AB",
+ [3]byte{0, 27, 162}: "IDS Imaging Development Systems GmbH",
+ [3]byte{0, 27, 163}: "Flexit Group GmbH",
+ [3]byte{0, 27, 164}: "S.A.E Afikim",
+ [3]byte{0, 27, 165}: "MyungMin Systems, Inc.",
+ [3]byte{0, 27, 166}: "intotech inc.",
+ [3]byte{0, 27, 167}: "Lorica Solutions",
+ [3]byte{0, 27, 168}: "UBI&MOBI,.Inc",
+ [3]byte{0, 27, 169}: "Brother industries, LTD.",
+ [3]byte{0, 27, 170}: "XenICs nv",
+ [3]byte{0, 27, 171}: "Telchemy, Incorporated",
+ [3]byte{0, 27, 172}: "Curtiss Wright Controls Embedded Computing",
+ [3]byte{0, 27, 173}: "iControl Incorporated",
+ [3]byte{0, 27, 174}: "Micro Control Systems, Inc",
+ [3]byte{0, 27, 175}: "Nokia Danmark A/S",
+ [3]byte{0, 27, 176}: "BHARAT ELECTRONICS",
+ [3]byte{0, 27, 177}: "Wistron Neweb Corporation",
+ [3]byte{0, 27, 178}: "Intellect International NV",
+ [3]byte{0, 27, 179}: "Condalo GmbH",
+ [3]byte{0, 27, 180}: "Airvod Limited",
+ [3]byte{0, 27, 181}: "Cherry GmbH",
+ [3]byte{0, 27, 182}: "Bird Electronic Corp.",
+ [3]byte{0, 27, 183}: "Alta Heights Technology Corp.",
+ [3]byte{0, 27, 184}: "BLUEWAY ELECTRONIC CO;LTD",
+ [3]byte{0, 27, 185}: "Elitegroup Computer Systems Co.,Ltd.",
+ [3]byte{0, 27, 186}: "Nortel Networks",
+ [3]byte{0, 27, 187}: "RFTech Co.,Ltd",
+ [3]byte{0, 27, 188}: "Silver Peak Systems, Inc.",
+ [3]byte{0, 27, 189}: "FMC Kongsberg Subsea AS",
+ [3]byte{0, 27, 190}: "ICOP Digital",
+ [3]byte{0, 27, 191}: "Sagemcom Broadband SAS",
+ [3]byte{0, 27, 192}: "Juniper Networks",
+ [3]byte{0, 27, 193}: "HOLUX Technology, Inc.",
+ [3]byte{0, 27, 194}: "Integrated Control Technology Limitied",
+ [3]byte{0, 27, 195}: "Mobisolution Co.,Ltd",
+ [3]byte{0, 27, 196}: "Ultratec, Inc.",
+ [3]byte{0, 27, 197}: "IEEE Registration Authority",
+ [3]byte{0, 27, 198}: "Strato Rechenzentrum AG",
+ [3]byte{0, 27, 199}: "StarVedia Technology Inc.",
+ [3]byte{0, 27, 200}: "MIURA CO.,LTD",
+ [3]byte{0, 27, 201}: "FSN DISPLAY INC",
+ [3]byte{0, 27, 202}: "Beijing Run Technology LTD. Company",
+ [3]byte{0, 27, 203}: "PEMPEK SYSTEMS PTY LTD",
+ [3]byte{0, 27, 204}: "KINGTEK CCTV ALLIANCE CO., LTD.",
+ [3]byte{0, 27, 205}: "DAVISCOMMS (S) PTE LTD",
+ [3]byte{0, 27, 206}: "Measurement Devices Ltd",
+ [3]byte{0, 27, 207}: "Dataupia Corporation",
+ [3]byte{0, 27, 208}: "IDENTEC SOLUTIONS",
+ [3]byte{0, 27, 209}: "SOGESTMATIC",
+ [3]byte{0, 27, 210}: "ULTRA-X ASIA PACIFIC Inc.",
+ [3]byte{0, 27, 211}: "Panasonic Corporation AVC Networks Company",
+ [3]byte{0, 27, 212}: "Cisco Systems, Inc",
+ [3]byte{0, 27, 213}: "Cisco Systems, Inc",
+ [3]byte{0, 27, 214}: "Kelvin Hughes Ltd",
+ [3]byte{0, 27, 215}: "Cisco SPVTG",
+ [3]byte{0, 27, 216}: "DVTel LTD",
+ [3]byte{0, 27, 217}: "Edgewater Computer Systems",
+ [3]byte{0, 27, 218}: "UTStarcom Inc",
+ [3]byte{0, 27, 219}: "Valeo VECS",
+ [3]byte{0, 27, 220}: "Vencer Co., Ltd.",
+ [3]byte{0, 27, 221}: "ARRIS Group, Inc.",
+ [3]byte{0, 27, 222}: "Renkus-Heinz, Inc.",
+ [3]byte{0, 27, 223}: "Iskra Sistemi d.d.",
+ [3]byte{0, 27, 224}: "TELENOT ELECTRONIC GmbH",
+ [3]byte{0, 27, 225}: "ViaLogy",
+ [3]byte{0, 27, 226}: "AhnLab,Inc.",
+ [3]byte{0, 27, 227}: "Health Hero Network, Inc.",
+ [3]byte{0, 27, 228}: "TOWNET SRL",
+ [3]byte{0, 27, 229}: "802automation Limited",
+ [3]byte{0, 27, 230}: "VR AG",
+ [3]byte{0, 27, 231}: "Postek Electronics Co., Ltd.",
+ [3]byte{0, 27, 232}: "Ultratronik GmbH",
+ [3]byte{0, 27, 233}: "Broadcom",
+ [3]byte{0, 27, 234}: "Nintendo Co., Ltd.",
+ [3]byte{0, 27, 235}: "DMP Electronics INC.",
+ [3]byte{0, 27, 236}: "Netio Technologies Co., Ltd",
+ [3]byte{0, 27, 237}: "Brocade Communications Systems, Inc.",
+ [3]byte{0, 27, 238}: "Nokia Danmark A/S",
+ [3]byte{0, 27, 239}: "Blossoms Digital Technology Co.,Ltd.",
+ [3]byte{0, 27, 240}: "Value Platforms Limited",
+ [3]byte{0, 27, 241}: "Nanjing SilverNet Software Co., Ltd.",
+ [3]byte{0, 27, 242}: "KWORLD COMPUTER CO., LTD",
+ [3]byte{0, 27, 243}: "TRANSRADIO SenderSysteme Berlin AG",
+ [3]byte{0, 27, 244}: "KENWIN INDUSTRIAL(HK) LTD.",
+ [3]byte{0, 27, 245}: "Tellink Sistemas de Telecomunicación S.L.",
+ [3]byte{0, 27, 246}: "CONWISE Technology Corporation Ltd.",
+ [3]byte{0, 27, 247}: "Lund IP Products AB",
+ [3]byte{0, 27, 248}: "Digitrax Inc.",
+ [3]byte{0, 27, 249}: "Intellitect Water Ltd",
+ [3]byte{0, 27, 250}: "G.i.N. mbH",
+ [3]byte{0, 27, 251}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{0, 27, 252}: "ASUSTek COMPUTER INC.",
+ [3]byte{0, 27, 253}: "Dignsys Inc.",
+ [3]byte{0, 27, 254}: "Zavio Inc.",
+ [3]byte{0, 27, 255}: "Millennia Media inc.",
+ [3]byte{0, 28, 0}: "Entry Point, LLC",
+ [3]byte{0, 28, 1}: "ABB Oy Drives",
+ [3]byte{0, 28, 2}: "Pano Logic",
+ [3]byte{0, 28, 3}: "Betty TV Technology AG",
+ [3]byte{0, 28, 4}: "Airgain, Inc.",
+ [3]byte{0, 28, 5}: "Nonin Medical Inc.",
+ [3]byte{0, 28, 6}: "Siemens Numerical Control Ltd., Nanjing",
+ [3]byte{0, 28, 7}: "Cwlinux Limited",
+ [3]byte{0, 28, 8}: "Echo360, Inc.",
+ [3]byte{0, 28, 9}: "SAE Electronic Co.,Ltd.",
+ [3]byte{0, 28, 10}: "Shenzhen AEE Technology Co.,Ltd.",
+ [3]byte{0, 28, 11}: "SmartAnt Telecom",
+ [3]byte{0, 28, 12}: "TANITA Corporation",
+ [3]byte{0, 28, 13}: "G-Technology, Inc.",
+ [3]byte{0, 28, 14}: "Cisco Systems, Inc",
+ [3]byte{0, 28, 15}: "Cisco Systems, Inc",
+ [3]byte{0, 28, 16}: "Cisco-Linksys, LLC",
+ [3]byte{0, 28, 17}: "ARRIS Group, Inc.",
+ [3]byte{0, 28, 18}: "ARRIS Group, Inc.",
+ [3]byte{0, 28, 19}: "OPTSYS TECHNOLOGY CO., LTD.",
+ [3]byte{0, 28, 20}: "VMware, Inc.",
+ [3]byte{0, 28, 21}: "iPhotonix LLC",
+ [3]byte{0, 28, 22}: "ThyssenKrupp Elevator",
+ [3]byte{0, 28, 23}: "Nortel Networks",
+ [3]byte{0, 28, 24}: "Sicert S.r.L.",
+ [3]byte{0, 28, 25}: "secunet Security Networks AG",
+ [3]byte{0, 28, 26}: "Thomas Instrumentation, Inc",
+ [3]byte{0, 28, 27}: "Hyperstone GmbH",
+ [3]byte{0, 28, 28}: "Center Communication Systems GmbH",
+ [3]byte{0, 28, 29}: "CHENZHOU GOSPELL DIGITAL TECHNOLOGY CO.,LTD",
+ [3]byte{0, 28, 30}: "emtrion GmbH",
+ [3]byte{0, 28, 31}: "Quest Retail Technology Pty Ltd",
+ [3]byte{0, 28, 32}: "CLB Benelux",
+ [3]byte{0, 28, 33}: "Nucsafe Inc.",
+ [3]byte{0, 28, 34}: "Aeris Elettronica s.r.l.",
+ [3]byte{0, 28, 35}: "Dell Inc.",
+ [3]byte{0, 28, 36}: "Formosa Wireless Systems Corp.",
+ [3]byte{0, 28, 37}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{0, 28, 38}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{0, 28, 39}: "Sunell Electronics Co.",
+ [3]byte{0, 28, 40}: "Sphairon Technologies GmbH",
+ [3]byte{0, 28, 41}: "CORE DIGITAL ELECTRONICS CO., LTD",
+ [3]byte{0, 28, 42}: "Envisacor Technologies Inc.",
+ [3]byte{0, 28, 43}: "Alertme.com Limited",
+ [3]byte{0, 28, 44}: "Synapse",
+ [3]byte{0, 28, 45}: "FlexRadio Systems",
+ [3]byte{0, 28, 46}: "HPN Supply Chain",
+ [3]byte{0, 28, 47}: "Pfister GmbH",
+ [3]byte{0, 28, 48}: "Mode Lighting (UK ) Ltd.",
+ [3]byte{0, 28, 49}: "Mobile XP Technology Co., LTD",
+ [3]byte{0, 28, 50}: "Telian Corporation",
+ [3]byte{0, 28, 51}: "Sutron",
+ [3]byte{0, 28, 52}: "HUEY CHIAO INTERNATIONAL CO., LTD.",
+ [3]byte{0, 28, 53}: "Nokia Danmark A/S",
+ [3]byte{0, 28, 54}: "iNEWiT NV",
+ [3]byte{0, 28, 55}: "Callpod, Inc.",
+ [3]byte{0, 28, 56}: "Bio-Rad Laboratories, Inc.",
+ [3]byte{0, 28, 57}: "S Netsystems Inc.",
+ [3]byte{0, 28, 58}: "Element Labs, Inc.",
+ [3]byte{0, 28, 59}: "AmRoad Technology Inc.",
+ [3]byte{0, 28, 60}: "Seon Design Inc.",
+ [3]byte{0, 28, 61}: "WaveStorm",
+ [3]byte{0, 28, 62}: "ECKey Corporation",
+ [3]byte{0, 28, 63}: "International Police Technologies, Inc.",
+ [3]byte{0, 28, 64}: "VDG-Security bv",
+ [3]byte{0, 28, 65}: "scemtec Transponder Technology GmbH",
+ [3]byte{0, 28, 66}: "Parallels, Inc.",
+ [3]byte{0, 28, 67}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 28, 68}: "Bosch Security Systems BV",
+ [3]byte{0, 28, 69}: "Chenbro Micom Co., Ltd.",
+ [3]byte{0, 28, 70}: "QTUM",
+ [3]byte{0, 28, 71}: "Hangzhou Hollysys Automation Co., Ltd",
+ [3]byte{0, 28, 72}: "WiDeFi, Inc.",
+ [3]byte{0, 28, 73}: "Zoltan Technology Inc.",
+ [3]byte{0, 28, 74}: "AVM GmbH",
+ [3]byte{0, 28, 75}: "Gener8, Inc.",
+ [3]byte{0, 28, 76}: "Petrotest Instruments",
+ [3]byte{0, 28, 77}: "Aplix IP Holdings Corporation",
+ [3]byte{0, 28, 78}: "TASA International Limited",
+ [3]byte{0, 28, 79}: "MACAB AB",
+ [3]byte{0, 28, 80}: "TCL Technoly Electronics (Huizhou) Co., Ltd.",
+ [3]byte{0, 28, 81}: "Celeno Communications",
+ [3]byte{0, 28, 82}: "VISIONEE SRL",
+ [3]byte{0, 28, 83}: "Synergy Lighting Controls",
+ [3]byte{0, 28, 84}: "Hillstone Networks Inc",
+ [3]byte{0, 28, 85}: "Shenzhen Kaifa Technology Co.",
+ [3]byte{0, 28, 86}: "Pado Systems, Inc.",
+ [3]byte{0, 28, 87}: "Cisco Systems, Inc",
+ [3]byte{0, 28, 88}: "Cisco Systems, Inc",
+ [3]byte{0, 28, 89}: "DEVON IT",
+ [3]byte{0, 28, 90}: "Advanced Relay Corporation",
+ [3]byte{0, 28, 91}: "Chubb Electronic Security Systems Ltd",
+ [3]byte{0, 28, 92}: "Integrated Medical Systems, Inc.",
+ [3]byte{0, 28, 93}: "Leica Microsystems",
+ [3]byte{0, 28, 94}: "ASTON France",
+ [3]byte{0, 28, 95}: "Winland Electronics, Inc.",
+ [3]byte{0, 28, 96}: "CSP Frontier Technologies,Inc.",
+ [3]byte{0, 28, 97}: "Galaxy Microsystems LImited",
+ [3]byte{0, 28, 98}: "LG Electronics (Mobile Communications)",
+ [3]byte{0, 28, 99}: "TRUEN",
+ [3]byte{0, 28, 100}: "Landis+Gyr",
+ [3]byte{0, 28, 101}: "JoeScan, Inc.",
+ [3]byte{0, 28, 102}: "UCAMP CO.,LTD",
+ [3]byte{0, 28, 103}: "Pumpkin Networks, Inc.",
+ [3]byte{0, 28, 104}: "Anhui Sun Create Electronics Co., Ltd",
+ [3]byte{0, 28, 105}: "Packet Vision Ltd",
+ [3]byte{0, 28, 106}: "Weiss Engineering Ltd.",
+ [3]byte{0, 28, 107}: "COVAX Co. Ltd",
+ [3]byte{0, 28, 108}: "30805",
+ [3]byte{0, 28, 109}: "KYOHRITSU ELECTRONIC INDUSTRY CO., LTD.",
+ [3]byte{0, 28, 110}: "Newbury Networks, Inc.",
+ [3]byte{0, 28, 111}: "Emfit Ltd",
+ [3]byte{0, 28, 112}: "NOVACOMM LTDA",
+ [3]byte{0, 28, 113}: "Emergent Electronics",
+ [3]byte{0, 28, 114}: "Mayer & Cie GmbH & Co KG",
+ [3]byte{0, 28, 115}: "Arista Networks",
+ [3]byte{0, 28, 116}: "Syswan Technologies Inc.",
+ [3]byte{0, 28, 117}: "Segnet Ltd.",
+ [3]byte{0, 28, 118}: "The Wandsworth Group Ltd",
+ [3]byte{0, 28, 119}: "Prodys",
+ [3]byte{0, 28, 120}: "WYPLAY SAS",
+ [3]byte{0, 28, 121}: "Cohesive Financial Technologies LLC",
+ [3]byte{0, 28, 122}: "Perfectone Netware Company Ltd",
+ [3]byte{0, 28, 123}: "Castlenet Technology Inc.",
+ [3]byte{0, 28, 124}: "PERQ SYSTEMS CORPORATION",
+ [3]byte{0, 28, 125}: "Excelpoint Manufacturing Pte Ltd",
+ [3]byte{0, 28, 126}: "Toshiba",
+ [3]byte{0, 28, 127}: "Check Point Software Technologies",
+ [3]byte{0, 28, 128}: "New Business Division/Rhea-Information CO., LTD.",
+ [3]byte{0, 28, 129}: "NextGen Venturi LTD",
+ [3]byte{0, 28, 130}: "Genew Technologies",
+ [3]byte{0, 28, 131}: "New Level Telecom Co., Ltd.",
+ [3]byte{0, 28, 132}: "STL Solution Co.,Ltd.",
+ [3]byte{0, 28, 133}: "Eunicorn",
+ [3]byte{0, 28, 134}: "Cranite Systems, Inc.",
+ [3]byte{0, 28, 135}: "Uriver Inc.",
+ [3]byte{0, 28, 136}: "TRANSYSTEM INC.",
+ [3]byte{0, 28, 137}: "Force Communications, Inc.",
+ [3]byte{0, 28, 138}: "Cirrascale Corporation",
+ [3]byte{0, 28, 139}: "MJ Innovations Ltd.",
+ [3]byte{0, 28, 140}: "DIAL TECHNOLOGY LTD.",
+ [3]byte{0, 28, 141}: "Mesa Imaging",
+ [3]byte{0, 28, 142}: "Alcatel-Lucent IPD",
+ [3]byte{0, 28, 143}: "Advanced Electronic Design, Inc.",
+ [3]byte{0, 28, 144}: "Empacket Corporation",
+ [3]byte{0, 28, 145}: "Gefen Inc.",
+ [3]byte{0, 28, 146}: "Tervela",
+ [3]byte{0, 28, 147}: "ExaDigm Inc",
+ [3]byte{0, 28, 148}: "LI-COR Biosciences",
+ [3]byte{0, 28, 149}: "Opticomm Corporation",
+ [3]byte{0, 28, 150}: "Linkwise Technology Pte Ltd",
+ [3]byte{0, 28, 151}: "Enzytek Technology Inc.,",
+ [3]byte{0, 28, 152}: "LUCKY TECHNOLOGY (HK) COMPANY LIMITED",
+ [3]byte{0, 28, 153}: "Shunra Software Ltd.",
+ [3]byte{0, 28, 154}: "Nokia Danmark A/S",
+ [3]byte{0, 28, 155}: "FEIG ELECTRONIC GmbH",
+ [3]byte{0, 28, 156}: "Nortel Networks",
+ [3]byte{0, 28, 157}: "Liecthi AG",
+ [3]byte{0, 28, 158}: "Dualtech IT AB",
+ [3]byte{0, 28, 159}: "Razorstream, LLC",
+ [3]byte{0, 28, 160}: "Production Resource Group, LLC",
+ [3]byte{0, 28, 161}: "AKAMAI TECHNOLOGIES, INC.",
+ [3]byte{0, 28, 162}: "ADB Broadband Italia",
+ [3]byte{0, 28, 163}: "Terra",
+ [3]byte{0, 28, 164}: "Sony Mobile Communications AB",
+ [3]byte{0, 28, 165}: "Zygo Corporation",
+ [3]byte{0, 28, 166}: "Win4NET",
+ [3]byte{0, 28, 167}: "International Quartz Limited",
+ [3]byte{0, 28, 168}: "AirTies Wireless Networks",
+ [3]byte{0, 28, 169}: "Audiomatica Srl",
+ [3]byte{0, 28, 170}: "Bellon Pty Ltd",
+ [3]byte{0, 28, 171}: "Meyer Sound Laboratories, Inc.",
+ [3]byte{0, 28, 172}: "Qniq Technology Corp.",
+ [3]byte{0, 28, 173}: "Wuhan Telecommunication Devices Co.,Ltd",
+ [3]byte{0, 28, 174}: "WiChorus, Inc.",
+ [3]byte{0, 28, 175}: "Plato Networks Inc.",
+ [3]byte{0, 28, 176}: "Cisco Systems, Inc",
+ [3]byte{0, 28, 177}: "Cisco Systems, Inc",
+ [3]byte{0, 28, 178}: "BPT SPA",
+ [3]byte{0, 28, 179}: "Apple, Inc.",
+ [3]byte{0, 28, 180}: "Iridium Satellite LLC",
+ [3]byte{0, 28, 181}: "Neihua Network Technology Co.,LTD.(NHN)",
+ [3]byte{0, 28, 182}: "Duzon CNT Co., Ltd.",
+ [3]byte{0, 28, 183}: "USC DigiArk Corporation",
+ [3]byte{0, 28, 184}: "CBC Co., Ltd",
+ [3]byte{0, 28, 185}: "KWANG SUNG ELECTRONICS CO., LTD.",
+ [3]byte{0, 28, 186}: "VerScient, Inc.",
+ [3]byte{0, 28, 187}: "MusicianLink",
+ [3]byte{0, 28, 188}: "CastGrabber, LLC",
+ [3]byte{0, 28, 189}: "Ezze Mobile Tech., Inc.",
+ [3]byte{0, 28, 190}: "Nintendo Co., Ltd.",
+ [3]byte{0, 28, 191}: "Intel Corporate",
+ [3]byte{0, 28, 192}: "Intel Corporate",
+ [3]byte{0, 28, 193}: "ARRIS Group, Inc.",
+ [3]byte{0, 28, 194}: "Part II Research, Inc.",
+ [3]byte{0, 28, 195}: "ARRIS Group, Inc.",
+ [3]byte{0, 28, 196}: "Hewlett Packard",
+ [3]byte{0, 28, 197}: "3Com Ltd",
+ [3]byte{0, 28, 198}: "ProStor Systems",
+ [3]byte{0, 28, 199}: "Rembrandt Technologies, LLC d/b/a REMSTREAM",
+ [3]byte{0, 28, 200}: "INDUSTRONIC Industrie-Electronic GmbH & Co. KG",
+ [3]byte{0, 28, 201}: "Kaise Electronic Technology Co., Ltd.",
+ [3]byte{0, 28, 202}: "Shanghai Gaozhi Science & Technology Development Co.",
+ [3]byte{0, 28, 203}: "Forth Corporation Public Company Limited",
+ [3]byte{0, 28, 204}: "BlackBerry RTS",
+ [3]byte{0, 28, 205}: "Alektrona Corporation",
+ [3]byte{0, 28, 206}: "By Techdesign",
+ [3]byte{0, 28, 207}: "LIMETEK",
+ [3]byte{0, 28, 208}: "Circleone Co.,Ltd.",
+ [3]byte{0, 28, 209}: "Waves Audio LTD",
+ [3]byte{0, 28, 210}: "King Champion (Hong Kong) Limited",
+ [3]byte{0, 28, 211}: "ZP Engineering SEL",
+ [3]byte{0, 28, 212}: "Nokia Danmark A/S",
+ [3]byte{0, 28, 213}: "ZeeVee, Inc.",
+ [3]byte{0, 28, 214}: "Nokia Danmark A/S",
+ [3]byte{0, 28, 215}: "Harman/Becker Automotive Systems GmbH",
+ [3]byte{0, 28, 216}: "BlueAnt Wireless",
+ [3]byte{0, 28, 217}: "GlobalTop Technology Inc.",
+ [3]byte{0, 28, 218}: "Exegin Technologies Limited",
+ [3]byte{0, 28, 219}: "CARPOINT CO.,LTD",
+ [3]byte{0, 28, 220}: "Custom Computer Services, Inc.",
+ [3]byte{0, 28, 221}: "COWBELL ENGINEERING CO., LTD.",
+ [3]byte{0, 28, 222}: "Interactive Multimedia eXchange Inc.",
+ [3]byte{0, 28, 223}: "Belkin International Inc.",
+ [3]byte{0, 28, 224}: "DASAN TPS",
+ [3]byte{0, 28, 225}: "INDRA SISTEMAS, S.A.",
+ [3]byte{0, 28, 226}: "Attero Tech, LLC.",
+ [3]byte{0, 28, 227}: "Optimedical Systems",
+ [3]byte{0, 28, 228}: "EleSy JSC",
+ [3]byte{0, 28, 229}: "MBS Electronic Systems GmbH",
+ [3]byte{0, 28, 230}: "INNES",
+ [3]byte{0, 28, 231}: "Rocon PLC Research Centre",
+ [3]byte{0, 28, 232}: "Cummins Inc",
+ [3]byte{0, 28, 233}: "Galaxy Technology Limited",
+ [3]byte{0, 28, 234}: "Scientific-Atlanta, Inc",
+ [3]byte{0, 28, 235}: "Nortel Networks",
+ [3]byte{0, 28, 236}: "Mobilesoft (Aust.) Pty Ltd",
+ [3]byte{0, 28, 237}: "ENVIRONNEMENT SA",
+ [3]byte{0, 28, 238}: "SHARP Corporation",
+ [3]byte{0, 28, 239}: "Primax Electronics Ltd.",
+ [3]byte{0, 28, 240}: "D-Link Corporation",
+ [3]byte{0, 28, 241}: "SUPoX Technology Co. , LTD.",
+ [3]byte{0, 28, 242}: "Tenlon Technology Co.,Ltd.",
+ [3]byte{0, 28, 243}: "EVS BROADCAST EQUIPMENT",
+ [3]byte{0, 28, 244}: "Media Technology Systems Inc",
+ [3]byte{0, 28, 245}: "Wiseblue Technology Limited",
+ [3]byte{0, 28, 246}: "Cisco Systems, Inc",
+ [3]byte{0, 28, 247}: "AudioScience",
+ [3]byte{0, 28, 248}: "Parade Technologies, Ltd.",
+ [3]byte{0, 28, 249}: "Cisco Systems, Inc",
+ [3]byte{0, 28, 250}: "Alarm.com",
+ [3]byte{0, 28, 251}: "ARRIS Group, Inc.",
+ [3]byte{0, 28, 252}: "Sumitomo Electric Industries,Ltd",
+ [3]byte{0, 28, 253}: "Universal Electronics, Inc.",
+ [3]byte{0, 28, 254}: "Quartics Inc",
+ [3]byte{0, 28, 255}: "Napera Networks Inc",
+ [3]byte{0, 29, 0}: "Brivo Systems, LLC",
+ [3]byte{0, 29, 1}: "Neptune Digital",
+ [3]byte{0, 29, 2}: "Cybertech Telecom Development",
+ [3]byte{0, 29, 3}: "Design Solutions Inc.",
+ [3]byte{0, 29, 4}: "Zipit Wireless, Inc.",
+ [3]byte{0, 29, 5}: "Eaton Corporation",
+ [3]byte{0, 29, 6}: "HM Electronics, Inc.",
+ [3]byte{0, 29, 7}: "Shenzhen Sang Fei Consumer Communications Co.,Ltd",
+ [3]byte{0, 29, 8}: "Jiangsu Yinhe Electronics Co.,Ltd.",
+ [3]byte{0, 29, 9}: "Dell Inc.",
+ [3]byte{0, 29, 10}: "Davis Instruments, Inc.",
+ [3]byte{0, 29, 11}: "Power Standards Lab",
+ [3]byte{0, 29, 12}: "MobileCompia",
+ [3]byte{0, 29, 13}: "Sony Interactive Entertainment Inc.",
+ [3]byte{0, 29, 14}: "Agapha Technology co., Ltd.",
+ [3]byte{0, 29, 15}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{0, 29, 16}: "LightHaus Logic, Inc.",
+ [3]byte{0, 29, 17}: "Analogue & Micro Ltd",
+ [3]byte{0, 29, 18}: "ROHM CO., LTD.",
+ [3]byte{0, 29, 19}: "NextGTV",
+ [3]byte{0, 29, 20}: "SPERADTONE INFORMATION TECHNOLOGY LIMITED",
+ [3]byte{0, 29, 21}: "Shenzhen Dolphin Electronic Co., Ltd",
+ [3]byte{0, 29, 22}: "SFR",
+ [3]byte{0, 29, 23}: "Digital Sky Corporation",
+ [3]byte{0, 29, 24}: "Power Innovation GmbH",
+ [3]byte{0, 29, 25}: "Arcadyan Technology Corporation",
+ [3]byte{0, 29, 26}: "OvisLink S.A.",
+ [3]byte{0, 29, 27}: "Sangean Electronics Inc.",
+ [3]byte{0, 29, 28}: "Gennet s.a.",
+ [3]byte{0, 29, 29}: "Inter-M Corporation",
+ [3]byte{0, 29, 30}: "KYUSHU TEN CO.,LTD",
+ [3]byte{0, 29, 31}: "Siauliu Tauro Televizoriai, JSC",
+ [3]byte{0, 29, 32}: "Comtrend Corporation",
+ [3]byte{0, 29, 33}: "Alcad SL",
+ [3]byte{0, 29, 34}: "Foss Analytical A/S",
+ [3]byte{0, 29, 35}: "SENSUS",
+ [3]byte{0, 29, 36}: "Aclara Power-Line Systems Inc.",
+ [3]byte{0, 29, 37}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 29, 38}: "Rockridgesound Technology Co.",
+ [3]byte{0, 29, 39}: "NAC-INTERCOM",
+ [3]byte{0, 29, 40}: "Sony Mobile Communications AB",
+ [3]byte{0, 29, 41}: "Doro AB",
+ [3]byte{0, 29, 42}: "SHENZHEN BUL-TECH CO.,LTD.",
+ [3]byte{0, 29, 43}: "Wuhan Pont Technology CO. , LTD",
+ [3]byte{0, 29, 44}: "Wavetrend Technologies (Pty) Limited",
+ [3]byte{0, 29, 45}: "Pylone, Inc.",
+ [3]byte{0, 29, 46}: "Ruckus Wireless",
+ [3]byte{0, 29, 47}: "QuantumVision Corporation",
+ [3]byte{0, 29, 48}: "YX Wireless S.A.",
+ [3]byte{0, 29, 49}: "HIGHPRO INTERNATIONAL R&D CO,.LTD.",
+ [3]byte{0, 29, 50}: "Longkay Communication & Technology (Shanghai) Co. Ltd",
+ [3]byte{0, 29, 51}: "Maverick Systems Inc.",
+ [3]byte{0, 29, 52}: "SYRIS Technology Corp",
+ [3]byte{0, 29, 53}: "Viconics Electronics Inc.",
+ [3]byte{0, 29, 54}: "ELECTRONICS CORPORATION OF INDIA LIMITED",
+ [3]byte{0, 29, 55}: "Thales-Panda Transportation System",
+ [3]byte{0, 29, 56}: "Seagate Technology",
+ [3]byte{0, 29, 57}: "MOOHADIGITAL CO., LTD",
+ [3]byte{0, 29, 58}: "mh acoustics LLC",
+ [3]byte{0, 29, 59}: "Nokia Danmark A/S",
+ [3]byte{0, 29, 60}: "Muscle Corporation",
+ [3]byte{0, 29, 61}: "Avidyne Corporation",
+ [3]byte{0, 29, 62}: "SAKA TECHNO SCIENCE CO.,LTD",
+ [3]byte{0, 29, 63}: "Mitron Pty Ltd",
+ [3]byte{0, 29, 64}: "Intel – GE Care Innovations LLC",
+ [3]byte{0, 29, 65}: "Hardy Instruments",
+ [3]byte{0, 29, 66}: "Nortel Networks",
+ [3]byte{0, 29, 67}: "Shenzhen G-link Digital Technology Co., Ltd.",
+ [3]byte{0, 29, 68}: "Krohne",
+ [3]byte{0, 29, 69}: "Cisco Systems, Inc",
+ [3]byte{0, 29, 70}: "Cisco Systems, Inc",
+ [3]byte{0, 29, 71}: "Covote GmbH & Co KG",
+ [3]byte{0, 29, 72}: "Sensor-Technik Wiedemann GmbH",
+ [3]byte{0, 29, 73}: "Innovation Wireless Inc.",
+ [3]byte{0, 29, 74}: "Carestream Health, Inc.",
+ [3]byte{0, 29, 75}: "Grid Connect Inc.",
+ [3]byte{0, 29, 76}: "Alcatel-Lucent",
+ [3]byte{0, 29, 77}: "Adaptive Recognition Hungary, Inc",
+ [3]byte{0, 29, 78}: "TCM Mobile LLC",
+ [3]byte{0, 29, 79}: "Apple, Inc.",
+ [3]byte{0, 29, 80}: "SPINETIX SA",
+ [3]byte{0, 29, 81}: "Babcock & Wilcox Power Generation Group, Inc",
+ [3]byte{0, 29, 82}: "Defzone B.V.",
+ [3]byte{0, 29, 83}: "S&O Electronics (Malaysia) Sdn. Bhd.",
+ [3]byte{0, 29, 84}: "Sunnic Technology & Merchandise INC.",
+ [3]byte{0, 29, 85}: "ZANTAZ, Inc",
+ [3]byte{0, 29, 86}: "Kramer Electronics Ltd.",
+ [3]byte{0, 29, 87}: "CAETEC Messtechnik",
+ [3]byte{0, 29, 88}: "CQ Inc",
+ [3]byte{0, 29, 89}: "Mitra Energy & Infrastructure",
+ [3]byte{0, 29, 90}: "2Wire Inc",
+ [3]byte{0, 29, 91}: "Tecvan Informática Ltda",
+ [3]byte{0, 29, 92}: "Tom Communication Industrial Co.,Ltd.",
+ [3]byte{0, 29, 93}: "Control Dynamics Pty. Ltd.",
+ [3]byte{0, 29, 94}: "COMING MEDIA CORP.",
+ [3]byte{0, 29, 95}: "OverSpeed SARL",
+ [3]byte{0, 29, 96}: "ASUSTek COMPUTER INC.",
+ [3]byte{0, 29, 97}: "BIJ Corporation",
+ [3]byte{0, 29, 98}: "InPhase Technologies",
+ [3]byte{0, 29, 99}: "Miele & Cie. KG",
+ [3]byte{0, 29, 100}: "Adam Communications Systems Int Ltd",
+ [3]byte{0, 29, 101}: "Microwave Radio Communications",
+ [3]byte{0, 29, 102}: "Hyundai Telecom",
+ [3]byte{0, 29, 103}: "AMEC",
+ [3]byte{0, 29, 104}: "Thomson Telecom Belgium",
+ [3]byte{0, 29, 105}: "Knorr-Bremse IT-Services GmbH",
+ [3]byte{0, 29, 106}: "Alpha Networks Inc.",
+ [3]byte{0, 29, 107}: "ARRIS Group, Inc.",
+ [3]byte{0, 29, 108}: "ClariPhy Communications, Inc.",
+ [3]byte{0, 29, 109}: "Confidant International LLC",
+ [3]byte{0, 29, 110}: "Nokia Danmark A/S",
+ [3]byte{0, 29, 111}: "Chainzone Technology Co., Ltd",
+ [3]byte{0, 29, 112}: "Cisco Systems, Inc",
+ [3]byte{0, 29, 113}: "Cisco Systems, Inc",
+ [3]byte{0, 29, 114}: "Wistron Corporation",
+ [3]byte{0, 29, 115}: "BUFFALO.INC",
+ [3]byte{0, 29, 116}: "Tianjin China-Silicon Microelectronics Co., Ltd.",
+ [3]byte{0, 29, 117}: "Radioscape PLC",
+ [3]byte{0, 29, 118}: "Eyeheight Ltd.",
+ [3]byte{0, 29, 119}: "NSGate",
+ [3]byte{0, 29, 120}: "Invengo Information Technology Co.,Ltd",
+ [3]byte{0, 29, 121}: "SIGNAMAX LLC",
+ [3]byte{0, 29, 122}: "Wideband Semiconductor, Inc.",
+ [3]byte{0, 29, 123}: "Ice Energy, Inc.",
+ [3]byte{0, 29, 124}: "ABE Elettronica S.p.A.",
+ [3]byte{0, 29, 125}: "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+ [3]byte{0, 29, 126}: "Cisco-Linksys, LLC",
+ [3]byte{0, 29, 127}: "Tekron International Ltd",
+ [3]byte{0, 29, 128}: "Beijing Huahuan Eletronics Co.,Ltd",
+ [3]byte{0, 29, 129}: "GUANGZHOU GATEWAY ELECTRONICS CO., LTD",
+ [3]byte{0, 29, 130}: "GN Netcom A/S",
+ [3]byte{0, 29, 131}: "Emitech Corporation",
+ [3]byte{0, 29, 132}: "Gateway, Inc.",
+ [3]byte{0, 29, 133}: "Call Direct Cellular Solutions",
+ [3]byte{0, 29, 134}: "Shinwa Industries(China) Ltd.",
+ [3]byte{0, 29, 135}: "VigTech Labs Sdn Bhd",
+ [3]byte{0, 29, 136}: "Clearwire",
+ [3]byte{0, 29, 137}: "VaultStor Corporation",
+ [3]byte{0, 29, 138}: "TechTrex Inc",
+ [3]byte{0, 29, 139}: "ADB Broadband Italia",
+ [3]byte{0, 29, 140}: "La Crosse Technology LTD",
+ [3]byte{0, 29, 141}: "Raytek GmbH",
+ [3]byte{0, 29, 142}: "Alereon, Inc.",
+ [3]byte{0, 29, 143}: "PureWave Networks",
+ [3]byte{0, 29, 144}: "EMCO Flow Systems",
+ [3]byte{0, 29, 145}: "Digitize, Inc",
+ [3]byte{0, 29, 146}: "MICRO-STAR INT'L CO.,LTD.",
+ [3]byte{0, 29, 147}: "Modacom",
+ [3]byte{0, 29, 148}: "Climax Technology Co., Ltd",
+ [3]byte{0, 29, 149}: "Flash, Inc.",
+ [3]byte{0, 29, 150}: "WatchGuard Video",
+ [3]byte{0, 29, 151}: "Alertus Technologies LLC",
+ [3]byte{0, 29, 152}: "Nokia Danmark A/S",
+ [3]byte{0, 29, 153}: "Cyan Optic, Inc.",
+ [3]byte{0, 29, 154}: "GODEX INTERNATIONAL CO., LTD",
+ [3]byte{0, 29, 155}: "Hokuyo Automatic Co., Ltd.",
+ [3]byte{0, 29, 156}: "Rockwell Automation",
+ [3]byte{0, 29, 157}: "ARTJOY INTERNATIONAL LIMITED",
+ [3]byte{0, 29, 158}: "AXION TECHNOLOGIES",
+ [3]byte{0, 29, 159}: "MATT R.P.Traczynscy Sp.J.",
+ [3]byte{0, 29, 160}: "Heng Yu Electronic Manufacturing Company Limited",
+ [3]byte{0, 29, 161}: "Cisco Systems, Inc",
+ [3]byte{0, 29, 162}: "Cisco Systems, Inc",
+ [3]byte{0, 29, 163}: "SabiOso",
+ [3]byte{0, 29, 164}: "Hangzhou System Technology CO., LTD",
+ [3]byte{0, 29, 165}: "WB Electronics",
+ [3]byte{0, 29, 166}: "Media Numerics Limited",
+ [3]byte{0, 29, 167}: "Seamless Internet",
+ [3]byte{0, 29, 168}: "Takahata Electronics Co.,Ltd",
+ [3]byte{0, 29, 169}: "Castles Technology, Co., LTD",
+ [3]byte{0, 29, 170}: "DrayTek Corp.",
+ [3]byte{0, 29, 171}: "SwissQual License AG",
+ [3]byte{0, 29, 172}: "Gigamon Systems LLC",
+ [3]byte{0, 29, 173}: "Sinotech Engineering Consultants, Inc. Geotechnical Enginee",
+ [3]byte{0, 29, 174}: "CHANG TSENG TECHNOLOGY CO., LTD",
+ [3]byte{0, 29, 175}: "Nortel Networks",
+ [3]byte{0, 29, 176}: "FuJian HengTong Information Technology Co.,Ltd",
+ [3]byte{0, 29, 177}: "Crescendo Networks",
+ [3]byte{0, 29, 178}: "HOKKAIDO ELECTRIC ENGINEERING CO.,LTD.",
+ [3]byte{0, 29, 179}: "HPN Supply Chain",
+ [3]byte{0, 29, 180}: "KUMHO ENG CO.,LTD",
+ [3]byte{0, 29, 181}: "Juniper Networks",
+ [3]byte{0, 29, 182}: "BestComm Networks, Inc.",
+ [3]byte{0, 29, 183}: "Tendril Networks, Inc.",
+ [3]byte{0, 29, 184}: "Intoto Inc.",
+ [3]byte{0, 29, 185}: "Wellspring Wireless",
+ [3]byte{0, 29, 186}: "Sony Corporation",
+ [3]byte{0, 29, 187}: "Dynamic System Electronics Corp.",
+ [3]byte{0, 29, 188}: "Nintendo Co., Ltd.",
+ [3]byte{0, 29, 189}: "Versamed Inc.",
+ [3]byte{0, 29, 190}: "ARRIS Group, Inc.",
+ [3]byte{0, 29, 191}: "Radiient Technologies, Inc.",
+ [3]byte{0, 29, 192}: "Enphase Energy",
+ [3]byte{0, 29, 193}: "Audinate Pty L",
+ [3]byte{0, 29, 194}: "XORTEC OY",
+ [3]byte{0, 29, 195}: "RIKOR TV, Ltd",
+ [3]byte{0, 29, 196}: "AIOI Systems Co., Ltd.",
+ [3]byte{0, 29, 197}: "Beijing Jiaxun Feihong Electricial Co., Ltd.",
+ [3]byte{0, 29, 198}: "SNR Inc.",
+ [3]byte{0, 29, 199}: "L-3 Communications Geneva Aerospace",
+ [3]byte{0, 29, 200}: "Navionics Research Inc., dba SCADAmetrics",
+ [3]byte{0, 29, 201}: "GainSpan Corp.",
+ [3]byte{0, 29, 202}: "PAV Electronics Limited",
+ [3]byte{0, 29, 203}: "Exéns Development Oy",
+ [3]byte{0, 29, 204}: "Ayon Cyber Security, Inc",
+ [3]byte{0, 29, 205}: "ARRIS Group, Inc.",
+ [3]byte{0, 29, 206}: "ARRIS Group, Inc.",
+ [3]byte{0, 29, 207}: "ARRIS Group, Inc.",
+ [3]byte{0, 29, 208}: "ARRIS Group, Inc.",
+ [3]byte{0, 29, 209}: "ARRIS Group, Inc.",
+ [3]byte{0, 29, 210}: "ARRIS Group, Inc.",
+ [3]byte{0, 29, 211}: "ARRIS Group, Inc.",
+ [3]byte{0, 29, 212}: "ARRIS Group, Inc.",
+ [3]byte{0, 29, 213}: "ARRIS Group, Inc.",
+ [3]byte{0, 29, 214}: "ARRIS Group, Inc.",
+ [3]byte{0, 29, 215}: "Algolith",
+ [3]byte{0, 29, 216}: "Microsoft Corporation",
+ [3]byte{0, 29, 217}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{0, 29, 218}: "Mikroelektronika spol. s r. o.",
+ [3]byte{0, 29, 219}: "C-BEL Corporation",
+ [3]byte{0, 29, 220}: "HangZhou DeChangLong Tech&Info Co.,Ltd",
+ [3]byte{0, 29, 221}: "DAT H.K. LIMITED",
+ [3]byte{0, 29, 222}: "Zhejiang Broadcast&Television Technology Co.,Ltd.",
+ [3]byte{0, 29, 223}: "Sunitec Enterprise Co., Ltd.",
+ [3]byte{0, 29, 224}: "Intel Corporate",
+ [3]byte{0, 29, 225}: "Intel Corporate",
+ [3]byte{0, 29, 226}: "Radionor Communications",
+ [3]byte{0, 29, 227}: "Intuicom",
+ [3]byte{0, 29, 228}: "Visioneered Image Systems",
+ [3]byte{0, 29, 229}: "Cisco Systems, Inc",
+ [3]byte{0, 29, 230}: "Cisco Systems, Inc",
+ [3]byte{0, 29, 231}: "Marine Sonic Technology, Ltd.",
+ [3]byte{0, 29, 232}: "Nikko Denki Tsushin Corporation(NDTC)",
+ [3]byte{0, 29, 233}: "Nokia Danmark A/S",
+ [3]byte{0, 29, 234}: "Commtest Instruments Ltd",
+ [3]byte{0, 29, 235}: "DINEC International",
+ [3]byte{0, 29, 236}: "Marusys",
+ [3]byte{0, 29, 237}: "Grid Net, Inc.",
+ [3]byte{0, 29, 238}: "NEXTVISION SISTEMAS DIGITAIS DE TELEVISÃO LTDA.",
+ [3]byte{0, 29, 239}: "TRIMM, INC.",
+ [3]byte{0, 29, 240}: "Vidient Systems, Inc.",
+ [3]byte{0, 29, 241}: "Intego Systems, Inc.",
+ [3]byte{0, 29, 242}: "Netflix, Inc.",
+ [3]byte{0, 29, 243}: "SBS Science & Technology Co., Ltd",
+ [3]byte{0, 29, 244}: "Magellan Technology Pty Limited",
+ [3]byte{0, 29, 245}: "Sunshine Co,LTD",
+ [3]byte{0, 29, 246}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 29, 247}: "R. STAHL Schaltgeräte GmbH",
+ [3]byte{0, 29, 248}: "Webpro Vision Technology Corporation",
+ [3]byte{0, 29, 249}: "Cybiotronics (Far East) Limited",
+ [3]byte{0, 29, 250}: "Fujian LANDI Commercial Equipment Co.,Ltd",
+ [3]byte{0, 29, 251}: "NETCLEUS Systems Corporation",
+ [3]byte{0, 29, 252}: "KSIC",
+ [3]byte{0, 29, 253}: "Nokia Danmark A/S",
+ [3]byte{0, 29, 254}: "Palm, Inc",
+ [3]byte{0, 29, 255}: "Network Critical Solutions Ltd",
+ [3]byte{0, 30, 0}: "Shantou Institute of Ultrasonic Instruments",
+ [3]byte{0, 30, 1}: "Renesas Technology Sales Co., Ltd.",
+ [3]byte{0, 30, 2}: "Sougou Keikaku Kougyou Co.,Ltd.",
+ [3]byte{0, 30, 3}: "LiComm Co., Ltd.",
+ [3]byte{0, 30, 4}: "Hanson Research Corporation",
+ [3]byte{0, 30, 5}: "Xseed Technologies & Computing",
+ [3]byte{0, 30, 6}: "WIBRAIN",
+ [3]byte{0, 30, 7}: "Winy Technology Co., Ltd.",
+ [3]byte{0, 30, 8}: "Centec Networks Inc",
+ [3]byte{0, 30, 9}: "ZEFATEK Co.,LTD",
+ [3]byte{0, 30, 10}: "Syba Tech Limited",
+ [3]byte{0, 30, 11}: "Hewlett Packard",
+ [3]byte{0, 30, 12}: "Sherwood Information Partners, Inc.",
+ [3]byte{0, 30, 13}: "Micran Ltd.",
+ [3]byte{0, 30, 14}: "MAXI VIEW HOLDINGS LIMITED",
+ [3]byte{0, 30, 15}: "Briot International",
+ [3]byte{0, 30, 16}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{0, 30, 17}: "ELELUX INTERNATIONAL LTD",
+ [3]byte{0, 30, 18}: "Ecolab",
+ [3]byte{0, 30, 19}: "Cisco Systems, Inc",
+ [3]byte{0, 30, 20}: "Cisco Systems, Inc",
+ [3]byte{0, 30, 21}: "Beech Hill Electronics",
+ [3]byte{0, 30, 22}: "Keytronix",
+ [3]byte{0, 30, 23}: "STN BV",
+ [3]byte{0, 30, 24}: "Radio Activity srl",
+ [3]byte{0, 30, 25}: "GTRI",
+ [3]byte{0, 30, 26}: "Best Source Taiwan Inc.",
+ [3]byte{0, 30, 27}: "Digital Stream Technology, Inc.",
+ [3]byte{0, 30, 28}: "SWS Australia Pty Limited",
+ [3]byte{0, 30, 29}: "East Coast Datacom, Inc.",
+ [3]byte{0, 30, 30}: "Honeywell Life Safety",
+ [3]byte{0, 30, 31}: "Nortel Networks",
+ [3]byte{0, 30, 32}: "Intertain Inc.",
+ [3]byte{0, 30, 33}: "Qisda Corporation",
+ [3]byte{0, 30, 34}: "ARVOO Imaging Products BV",
+ [3]byte{0, 30, 35}: "Electronic Educational Devices, Inc",
+ [3]byte{0, 30, 36}: "Zhejiang Bell Technology Co.,ltd",
+ [3]byte{0, 30, 37}: "INTEK DIGITAL",
+ [3]byte{0, 30, 38}: "Digifriends Co. Ltd",
+ [3]byte{0, 30, 39}: "SBN TECH Co.,Ltd.",
+ [3]byte{0, 30, 40}: "Lumexis Corporation",
+ [3]byte{0, 30, 41}: "Hypertherm Inc",
+ [3]byte{0, 30, 42}: "NETGEAR",
+ [3]byte{0, 30, 43}: "Radio Systems Design, Inc.",
+ [3]byte{0, 30, 44}: "CyVerse Corporation",
+ [3]byte{0, 30, 45}: "STIM",
+ [3]byte{0, 30, 46}: "SIRTI S.p.A.",
+ [3]byte{0, 30, 47}: "DiMoto Pty Ltd",
+ [3]byte{0, 30, 48}: "Shireen Inc",
+ [3]byte{0, 30, 49}: "INFOMARK CO.,LTD.",
+ [3]byte{0, 30, 50}: "Zensys",
+ [3]byte{0, 30, 51}: "INVENTEC Corporation",
+ [3]byte{0, 30, 52}: "CryptoMetrics",
+ [3]byte{0, 30, 53}: "Nintendo Co., Ltd.",
+ [3]byte{0, 30, 54}: "IPTE",
+ [3]byte{0, 30, 55}: "Universal Global Scientific Industrial Co., Ltd.",
+ [3]byte{0, 30, 56}: "Bluecard Software Technology Co., Ltd.",
+ [3]byte{0, 30, 57}: "Comsys Communication Ltd.",
+ [3]byte{0, 30, 58}: "Nokia Danmark A/S",
+ [3]byte{0, 30, 59}: "Nokia Danmark A/S",
+ [3]byte{0, 30, 60}: "Lyngbox Media AB",
+ [3]byte{0, 30, 61}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{0, 30, 62}: "KMW Inc.",
+ [3]byte{0, 30, 63}: "TrellisWare Technologies, Inc.",
+ [3]byte{0, 30, 64}: "Shanghai DareGlobal Technologies Co.,Ltd",
+ [3]byte{0, 30, 65}: "Microwave Communication & Component, Inc.",
+ [3]byte{0, 30, 66}: "Teltonika",
+ [3]byte{0, 30, 67}: "AISIN AW CO.,LTD.",
+ [3]byte{0, 30, 68}: "SANTEC",
+ [3]byte{0, 30, 69}: "Sony Mobile Communications AB",
+ [3]byte{0, 30, 70}: "ARRIS Group, Inc.",
+ [3]byte{0, 30, 71}: "PT. Hariff Daya Tunggal Engineering",
+ [3]byte{0, 30, 72}: "Wi-Links",
+ [3]byte{0, 30, 73}: "Cisco Systems, Inc",
+ [3]byte{0, 30, 74}: "Cisco Systems, Inc",
+ [3]byte{0, 30, 75}: "City Theatrical",
+ [3]byte{0, 30, 76}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{0, 30, 77}: "Welkin Sciences, LLC",
+ [3]byte{0, 30, 78}: "DAKO EDV-Ingenieur- und Systemhaus GmbH",
+ [3]byte{0, 30, 79}: "Dell Inc.",
+ [3]byte{0, 30, 80}: "BATTISTONI RESEARCH",
+ [3]byte{0, 30, 81}: "Converter Industry Srl",
+ [3]byte{0, 30, 82}: "Apple, Inc.",
+ [3]byte{0, 30, 83}: "Further Tech Co., LTD",
+ [3]byte{0, 30, 84}: "TOYO ELECTRIC Corporation",
+ [3]byte{0, 30, 85}: "COWON SYSTEMS,Inc.",
+ [3]byte{0, 30, 86}: "Bally Wulff Entertainment GmbH",
+ [3]byte{0, 30, 87}: "ALCOMA, spol. s r.o.",
+ [3]byte{0, 30, 88}: "D-Link Corporation",
+ [3]byte{0, 30, 89}: "Silicon Turnkey Express, LLC",
+ [3]byte{0, 30, 90}: "ARRIS Group, Inc.",
+ [3]byte{0, 30, 91}: "Unitron Company, Inc.",
+ [3]byte{0, 30, 92}: "RB GeneralEkonomik",
+ [3]byte{0, 30, 93}: "Holosys d.o.o.",
+ [3]byte{0, 30, 94}: "COmputime Ltd.",
+ [3]byte{0, 30, 95}: "KwikByte, LLC",
+ [3]byte{0, 30, 96}: "Digital Lighting Systems, Inc",
+ [3]byte{0, 30, 97}: "ITEC GmbH",
+ [3]byte{0, 30, 98}: "Siemon",
+ [3]byte{0, 30, 99}: "Vibro-Meter SA",
+ [3]byte{0, 30, 100}: "Intel Corporate",
+ [3]byte{0, 30, 101}: "Intel Corporate",
+ [3]byte{0, 30, 102}: "RESOL Elektronische Regelungen GmbH",
+ [3]byte{0, 30, 103}: "Intel Corporate",
+ [3]byte{0, 30, 104}: "QUANTA COMPUTER INC.",
+ [3]byte{0, 30, 105}: "Thomson Inc.",
+ [3]byte{0, 30, 106}: "Beijing Bluexon Technology Co.,Ltd",
+ [3]byte{0, 30, 107}: "Cisco SPVTG",
+ [3]byte{0, 30, 108}: "Opaque Systems",
+ [3]byte{0, 30, 109}: "IT R&D Center",
+ [3]byte{0, 30, 110}: "Shenzhen First Mile Communications Ltd",
+ [3]byte{0, 30, 111}: "Magna-Power Electronics, Inc.",
+ [3]byte{0, 30, 112}: "Cobham Defence Communications Ltd",
+ [3]byte{0, 30, 113}: "MIrcom Group of Companies",
+ [3]byte{0, 30, 114}: "PCS",
+ [3]byte{0, 30, 115}: "zte corporation",
+ [3]byte{0, 30, 116}: "Sagemcom Broadband SAS",
+ [3]byte{0, 30, 117}: "LG Electronics (Mobile Communications)",
+ [3]byte{0, 30, 118}: "Thermo Fisher Scientific",
+ [3]byte{0, 30, 119}: "Air2App",
+ [3]byte{0, 30, 120}: "Owitek Technology Ltd.,",
+ [3]byte{0, 30, 121}: "Cisco Systems, Inc",
+ [3]byte{0, 30, 122}: "Cisco Systems, Inc",
+ [3]byte{0, 30, 123}: "R.I.CO. S.r.l.",
+ [3]byte{0, 30, 124}: "Taiwick Limited",
+ [3]byte{0, 30, 125}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 30, 126}: "Nortel Networks",
+ [3]byte{0, 30, 127}: "CBM of America",
+ [3]byte{0, 30, 128}: "Last Mile Ltd.",
+ [3]byte{0, 30, 129}: "CNB Technology Inc.",
+ [3]byte{0, 30, 130}: "SanDisk Corporation",
+ [3]byte{0, 30, 131}: "LAN/MAN Standards Association (LMSC)",
+ [3]byte{0, 30, 132}: "Pika Technologies Inc.",
+ [3]byte{0, 30, 133}: "Lagotek Corporation",
+ [3]byte{0, 30, 134}: "MEL Co.,Ltd.",
+ [3]byte{0, 30, 135}: "Realease Limited",
+ [3]byte{0, 30, 136}: "ANDOR SYSTEM SUPPORT CO., LTD.",
+ [3]byte{0, 30, 137}: "CRFS Limited",
+ [3]byte{0, 30, 138}: "eCopy, Inc",
+ [3]byte{0, 30, 139}: "Infra Access Korea Co., Ltd.",
+ [3]byte{0, 30, 140}: "ASUSTek COMPUTER INC.",
+ [3]byte{0, 30, 141}: "ARRIS Group, Inc.",
+ [3]byte{0, 30, 142}: "Hunkeler AG",
+ [3]byte{0, 30, 143}: "CANON INC.",
+ [3]byte{0, 30, 144}: "Elitegroup Computer Systems Co.,Ltd.",
+ [3]byte{0, 30, 145}: "KIMIN Electronic Co., Ltd.",
+ [3]byte{0, 30, 146}: "JEULIN S.A.",
+ [3]byte{0, 30, 147}: "CiriTech Systems Inc",
+ [3]byte{0, 30, 148}: "SUPERCOM TECHNOLOGY CORPORATION",
+ [3]byte{0, 30, 149}: "SIGMALINK",
+ [3]byte{0, 30, 150}: "Sepura Plc",
+ [3]byte{0, 30, 151}: "Medium Link System Technology CO., LTD,",
+ [3]byte{0, 30, 152}: "GreenLine Communications",
+ [3]byte{0, 30, 153}: "Vantanol Industrial Corporation",
+ [3]byte{0, 30, 154}: "HAMILTON Bonaduz AG",
+ [3]byte{0, 30, 155}: "San-Eisha, Ltd.",
+ [3]byte{0, 30, 156}: "Fidustron INC",
+ [3]byte{0, 30, 157}: "Recall Technologies, Inc.",
+ [3]byte{0, 30, 158}: "ddm hopt + schuler Gmbh + Co. KG",
+ [3]byte{0, 30, 159}: "Visioneering Systems, Inc.",
+ [3]byte{0, 30, 160}: "XLN-t",
+ [3]byte{0, 30, 161}: "Brunata a/s",
+ [3]byte{0, 30, 162}: "Symx Systems, Inc.",
+ [3]byte{0, 30, 163}: "Nokia Danmark A/S",
+ [3]byte{0, 30, 164}: "Nokia Danmark A/S",
+ [3]byte{0, 30, 165}: "ROBOTOUS, Inc.",
+ [3]byte{0, 30, 166}: "Best IT World (India) Pvt. Ltd.",
+ [3]byte{0, 30, 167}: "Actiontec Electronics, Inc",
+ [3]byte{0, 30, 168}: "Datang Mobile Communications Equipment CO.,LTD",
+ [3]byte{0, 30, 169}: "Nintendo Co., Ltd.",
+ [3]byte{0, 30, 170}: "E-Senza Technologies GmbH",
+ [3]byte{0, 30, 171}: "TeleWell Oy",
+ [3]byte{0, 30, 172}: "Armadeus Systems",
+ [3]byte{0, 30, 173}: "Wingtech Group Limited",
+ [3]byte{0, 30, 174}: "Continental Automotive Systems Inc.",
+ [3]byte{0, 30, 175}: "Ophir Optronics Ltd",
+ [3]byte{0, 30, 176}: "ImesD Electronica S.L.",
+ [3]byte{0, 30, 177}: "Cryptsoft Pty Ltd",
+ [3]byte{0, 30, 178}: "LG innotek",
+ [3]byte{0, 30, 179}: "Primex Wireless",
+ [3]byte{0, 30, 180}: "UNIFAT TECHNOLOGY LTD.",
+ [3]byte{0, 30, 181}: "Ever Sparkle Technologies Ltd",
+ [3]byte{0, 30, 182}: "TAG Heuer SA",
+ [3]byte{0, 30, 183}: "TBTech, Co., Ltd.",
+ [3]byte{0, 30, 184}: "Fortis, Inc.",
+ [3]byte{0, 30, 185}: "Sing Fai Technology Limited",
+ [3]byte{0, 30, 186}: "High Density Devices AS",
+ [3]byte{0, 30, 187}: "BLUELIGHT TECHNOLOGY INC.",
+ [3]byte{0, 30, 188}: "WINTECH AUTOMATION CO.,LTD.",
+ [3]byte{0, 30, 189}: "Cisco Systems, Inc",
+ [3]byte{0, 30, 190}: "Cisco Systems, Inc",
+ [3]byte{0, 30, 191}: "Haas Automation Inc.",
+ [3]byte{0, 30, 192}: "Microchip Technology Inc.",
+ [3]byte{0, 30, 193}: "3COM EUROPE LTD",
+ [3]byte{0, 30, 194}: "Apple, Inc.",
+ [3]byte{0, 30, 195}: "Kozio, Inc.",
+ [3]byte{0, 30, 196}: "Celio Corp",
+ [3]byte{0, 30, 197}: "Middle Atlantic Products Inc",
+ [3]byte{0, 30, 198}: "Obvius Holdings LLC",
+ [3]byte{0, 30, 199}: "2Wire Inc",
+ [3]byte{0, 30, 200}: "Rapid Mobile (Pty) Ltd",
+ [3]byte{0, 30, 201}: "Dell Inc.",
+ [3]byte{0, 30, 202}: "Nortel Networks",
+ [3]byte{0, 30, 203}: "RPC Energoautomatika Ltd",
+ [3]byte{0, 30, 204}: "CDVI",
+ [3]byte{0, 30, 205}: "KYLAND Technology Co. LTD",
+ [3]byte{0, 30, 206}: "BISA Technologies (Hong Kong) Limited",
+ [3]byte{0, 30, 207}: "PHILIPS ELECTRONICS UK LTD",
+ [3]byte{0, 30, 208}: "Ingespace",
+ [3]byte{0, 30, 209}: "Keyprocessor B.V.",
+ [3]byte{0, 30, 210}: "Ray Shine Video Technology Inc",
+ [3]byte{0, 30, 211}: "Dot Technology Int'l Co., Ltd.",
+ [3]byte{0, 30, 212}: "Doble Engineering",
+ [3]byte{0, 30, 213}: "Tekon-Automatics",
+ [3]byte{0, 30, 214}: "Alentec & Orion AB",
+ [3]byte{0, 30, 215}: "H-Stream Wireless, Inc.",
+ [3]byte{0, 30, 216}: "Digital United Inc.",
+ [3]byte{0, 30, 217}: "Mitsubishi Precision Co.,LTd.",
+ [3]byte{0, 30, 218}: "Wesemann Elektrotechniek B.V.",
+ [3]byte{0, 30, 219}: "Giken Trastem Co., Ltd.",
+ [3]byte{0, 30, 220}: "Sony Mobile Communications AB",
+ [3]byte{0, 30, 221}: "WASKO S.A.",
+ [3]byte{0, 30, 222}: "BYD COMPANY LIMITED",
+ [3]byte{0, 30, 223}: "Master Industrialization Center Kista",
+ [3]byte{0, 30, 224}: "Urmet Domus SpA",
+ [3]byte{0, 30, 225}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 30, 226}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 30, 227}: "T&W Electronics (ShenZhen) Co.,Ltd",
+ [3]byte{0, 30, 228}: "ACS Solutions France",
+ [3]byte{0, 30, 229}: "Cisco-Linksys, LLC",
+ [3]byte{0, 30, 230}: "Shenzhen Advanced Video Info-Tech Co., Ltd.",
+ [3]byte{0, 30, 231}: "Epic Systems Inc",
+ [3]byte{0, 30, 232}: "Mytek",
+ [3]byte{0, 30, 233}: "Stoneridge Electronics AB",
+ [3]byte{0, 30, 234}: "Sensor Switch, Inc.",
+ [3]byte{0, 30, 235}: "Talk-A-Phone Co.",
+ [3]byte{0, 30, 236}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+ [3]byte{0, 30, 237}: "Adventiq Ltd.",
+ [3]byte{0, 30, 238}: "ETL Systems Ltd",
+ [3]byte{0, 30, 239}: "Cantronic International Limited",
+ [3]byte{0, 30, 240}: "Gigafin Networks",
+ [3]byte{0, 30, 241}: "Servimat",
+ [3]byte{0, 30, 242}: "Micro Motion Inc",
+ [3]byte{0, 30, 243}: "From2",
+ [3]byte{0, 30, 244}: "L-3 Communications Display Systems",
+ [3]byte{0, 30, 245}: "Hitek Automated Inc.",
+ [3]byte{0, 30, 246}: "Cisco Systems, Inc",
+ [3]byte{0, 30, 247}: "Cisco Systems, Inc",
+ [3]byte{0, 30, 248}: "Emfinity Inc.",
+ [3]byte{0, 30, 249}: "Pascom Kommunikations systeme GmbH.",
+ [3]byte{0, 30, 250}: "PROTEI Ltd.",
+ [3]byte{0, 30, 251}: "Trio Motion Technology Ltd",
+ [3]byte{0, 30, 252}: "JSC MASSA-K",
+ [3]byte{0, 30, 253}: "Microbit 2.0 AB",
+ [3]byte{0, 30, 254}: "LEVEL s.r.o.",
+ [3]byte{0, 30, 255}: "Mueller-Elektronik GmbH & Co. KG",
+ [3]byte{0, 31, 0}: "Nokia Danmark A/S",
+ [3]byte{0, 31, 1}: "Nokia Danmark A/S",
+ [3]byte{0, 31, 2}: "Pixelmetrix Corporation Pte Ltd",
+ [3]byte{0, 31, 3}: "NUM AG",
+ [3]byte{0, 31, 4}: "Granch Ltd.",
+ [3]byte{0, 31, 5}: "iTAS Technology Corp.",
+ [3]byte{0, 31, 6}: "Integrated Dispatch Solutions",
+ [3]byte{0, 31, 7}: "AZTEQ Mobile",
+ [3]byte{0, 31, 8}: "RISCO LTD",
+ [3]byte{0, 31, 9}: "Jastec",
+ [3]byte{0, 31, 10}: "Nortel Networks",
+ [3]byte{0, 31, 11}: "Federal State Unitary Enterprise Industrial UnionElectropribor",
+ [3]byte{0, 31, 12}: "Intelligent Digital Services GmbH",
+ [3]byte{0, 31, 13}: "L3 Communications - Telemetry West",
+ [3]byte{0, 31, 14}: "Japan Kyastem Co., Ltd",
+ [3]byte{0, 31, 15}: "Select Engineered Systems",
+ [3]byte{0, 31, 16}: "TOLEDO DO BRASIL INDUSTRIA DE BALANCAS LTDA",
+ [3]byte{0, 31, 17}: "OPENMOKO, INC.",
+ [3]byte{0, 31, 18}: "Juniper Networks",
+ [3]byte{0, 31, 19}: "S.& A.S. Ltd.",
+ [3]byte{0, 31, 20}: "NexG",
+ [3]byte{0, 31, 21}: "Bioscrypt Inc",
+ [3]byte{0, 31, 22}: "Wistron Corporation",
+ [3]byte{0, 31, 23}: "IDX Company, Ltd.",
+ [3]byte{0, 31, 24}: "Hakusan.Mfg.Co,.Ltd",
+ [3]byte{0, 31, 25}: "BEN-RI ELECTRONICA S.A.",
+ [3]byte{0, 31, 26}: "Prominvest",
+ [3]byte{0, 31, 27}: "RoyalTek Company Ltd.",
+ [3]byte{0, 31, 28}: "KOBISHI ELECTRIC Co.,Ltd.",
+ [3]byte{0, 31, 29}: "Atlas Material Testing Technology LLC",
+ [3]byte{0, 31, 30}: "Astec Technology Co., Ltd",
+ [3]byte{0, 31, 31}: "Edimax Technology Co. Ltd.",
+ [3]byte{0, 31, 32}: "Logitech Europe SA",
+ [3]byte{0, 31, 33}: "Inner Mongolia Yin An Science & Technology Development Co.,L",
+ [3]byte{0, 31, 34}: "Source Photonics, Inc.",
+ [3]byte{0, 31, 35}: "Interacoustics",
+ [3]byte{0, 31, 36}: "DIGITVIEW TECHNOLOGY CO., LTD.",
+ [3]byte{0, 31, 37}: "MBS GmbH",
+ [3]byte{0, 31, 38}: "Cisco Systems, Inc",
+ [3]byte{0, 31, 39}: "Cisco Systems, Inc",
+ [3]byte{0, 31, 40}: "HPN Supply Chain",
+ [3]byte{0, 31, 41}: "Hewlett Packard",
+ [3]byte{0, 31, 42}: "ACCM",
+ [3]byte{0, 31, 43}: "Orange Logic",
+ [3]byte{0, 31, 44}: "Starbridge Networks",
+ [3]byte{0, 31, 45}: "Electro-Optical Imaging, Inc.",
+ [3]byte{0, 31, 46}: "Triangle Research Int'l Pte Ltd",
+ [3]byte{0, 31, 47}: "Berker GmbH & Co. KG",
+ [3]byte{0, 31, 48}: "Travelping",
+ [3]byte{0, 31, 49}: "Radiocomp",
+ [3]byte{0, 31, 50}: "Nintendo Co., Ltd.",
+ [3]byte{0, 31, 51}: "NETGEAR",
+ [3]byte{0, 31, 52}: "Lung Hwa Electronics Co., Ltd.",
+ [3]byte{0, 31, 53}: "AIR802 LLC",
+ [3]byte{0, 31, 54}: "Bellwin Information Co. Ltd.,",
+ [3]byte{0, 31, 55}: "Genesis I&C",
+ [3]byte{0, 31, 56}: "POSITRON",
+ [3]byte{0, 31, 57}: "Construcciones y Auxiliar de Ferrocarriles, S.A.",
+ [3]byte{0, 31, 58}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{0, 31, 59}: "Intel Corporate",
+ [3]byte{0, 31, 60}: "Intel Corporate",
+ [3]byte{0, 31, 61}: "Qbit GmbH",
+ [3]byte{0, 31, 62}: "RP-Technik e.K.",
+ [3]byte{0, 31, 63}: "AVM GmbH",
+ [3]byte{0, 31, 64}: "Speakercraft Inc.",
+ [3]byte{0, 31, 65}: "Ruckus Wireless",
+ [3]byte{0, 31, 66}: "Etherstack plc",
+ [3]byte{0, 31, 67}: "ENTES ELEKTRONIK",
+ [3]byte{0, 31, 68}: "GE Transportation Systems",
+ [3]byte{0, 31, 69}: "Enterasys",
+ [3]byte{0, 31, 70}: "Nortel Networks",
+ [3]byte{0, 31, 71}: "MCS Logic Inc.",
+ [3]byte{0, 31, 72}: "Mojix Inc.",
+ [3]byte{0, 31, 73}: "Manhattan TV Ltd",
+ [3]byte{0, 31, 74}: "Albentia Systems S.A.",
+ [3]byte{0, 31, 75}: "Lineage Power",
+ [3]byte{0, 31, 76}: "Roseman Engineering Ltd",
+ [3]byte{0, 31, 77}: "Segnetics LLC",
+ [3]byte{0, 31, 78}: "ConMed Linvatec",
+ [3]byte{0, 31, 79}: "Thinkware Co. Ltd.",
+ [3]byte{0, 31, 80}: "Swissdis AG",
+ [3]byte{0, 31, 81}: "HD Communications Corp",
+ [3]byte{0, 31, 82}: "UVT Unternehmensberatung fur Verkehr und Technik GmbH",
+ [3]byte{0, 31, 83}: "GEMAC Gesellschaft für Mikroelektronikanwendung Chemnitz mbH",
+ [3]byte{0, 31, 84}: "Lorex Technology Inc.",
+ [3]byte{0, 31, 85}: "Honeywell Security (China) Co., Ltd.",
+ [3]byte{0, 31, 86}: "DIGITAL FORECAST",
+ [3]byte{0, 31, 87}: "Phonik Innovation Co.,LTD",
+ [3]byte{0, 31, 88}: "EMH Energiemesstechnik GmbH",
+ [3]byte{0, 31, 89}: "Kronback Tracers",
+ [3]byte{0, 31, 90}: "Beckwith Electric Co.",
+ [3]byte{0, 31, 91}: "Apple, Inc.",
+ [3]byte{0, 31, 92}: "Nokia Danmark A/S",
+ [3]byte{0, 31, 93}: "Nokia Danmark A/S",
+ [3]byte{0, 31, 94}: "Dyna Technology Co.,Ltd.",
+ [3]byte{0, 31, 95}: "Blatand GmbH",
+ [3]byte{0, 31, 96}: "COMPASS SYSTEMS CORP.",
+ [3]byte{0, 31, 97}: "Talent Communication Networks Inc.",
+ [3]byte{0, 31, 98}: "JSC Stilsoft",
+ [3]byte{0, 31, 99}: "JSC Goodwin-Europa",
+ [3]byte{0, 31, 100}: "Beijing Autelan Technology Inc.",
+ [3]byte{0, 31, 101}: "KOREA ELECTRIC TERMINAL CO., LTD.",
+ [3]byte{0, 31, 102}: "PLANAR LLC",
+ [3]byte{0, 31, 103}: "Hitachi,Ltd.",
+ [3]byte{0, 31, 104}: "Martinsson Elektronik AB",
+ [3]byte{0, 31, 105}: "Pingood Technology Co., Ltd.",
+ [3]byte{0, 31, 106}: "PacketFlux Technologies, Inc.",
+ [3]byte{0, 31, 107}: "LG Electronics (Mobile Communications)",
+ [3]byte{0, 31, 108}: "Cisco Systems, Inc",
+ [3]byte{0, 31, 109}: "Cisco Systems, Inc",
+ [3]byte{0, 31, 110}: "Vtech Engineering Corporation",
+ [3]byte{0, 31, 111}: "Fujian Sunnada Communication Co.,Ltd.",
+ [3]byte{0, 31, 112}: "Botik Technologies LTD",
+ [3]byte{0, 31, 113}: "xG Technology, Inc.",
+ [3]byte{0, 31, 114}: "QingDao Hiphone Technology Co,.Ltd",
+ [3]byte{0, 31, 115}: "Teraview Technology Co., Ltd.",
+ [3]byte{0, 31, 116}: "Eigen Development",
+ [3]byte{0, 31, 117}: "GiBahn Media",
+ [3]byte{0, 31, 118}: "AirLogic Systems Inc.",
+ [3]byte{0, 31, 119}: "HEOL DESIGN",
+ [3]byte{0, 31, 120}: "Blue Fox Porini Textile",
+ [3]byte{0, 31, 121}: "Lodam Electronics A/S",
+ [3]byte{0, 31, 122}: "WiWide Inc.",
+ [3]byte{0, 31, 123}: "TechNexion Ltd.",
+ [3]byte{0, 31, 124}: "Witelcom AS",
+ [3]byte{0, 31, 125}: "Embedded Wireless GmbH",
+ [3]byte{0, 31, 126}: "ARRIS Group, Inc.",
+ [3]byte{0, 31, 127}: "Phabrix Limited",
+ [3]byte{0, 31, 128}: "Lucas Holding bv",
+ [3]byte{0, 31, 129}: "Accel Semiconductor Corp",
+ [3]byte{0, 31, 130}: "Cal-Comp Electronics & Communications Company Ltd.",
+ [3]byte{0, 31, 131}: "Teleplan Technology Services Sdn Bhd",
+ [3]byte{0, 31, 132}: "Gigle Semiconductor",
+ [3]byte{0, 31, 133}: "Apriva ISS, LLC",
+ [3]byte{0, 31, 134}: "digEcor",
+ [3]byte{0, 31, 135}: "Skydigital Inc.",
+ [3]byte{0, 31, 136}: "FMS Force Measuring Systems AG",
+ [3]byte{0, 31, 137}: "Signalion GmbH",
+ [3]byte{0, 31, 138}: "Ellion Digital Inc.",
+ [3]byte{0, 31, 139}: "Cache IQ",
+ [3]byte{0, 31, 140}: "CCS Inc.",
+ [3]byte{0, 31, 141}: "Ingenieurbuero Stark GmbH und Ko. KG",
+ [3]byte{0, 31, 142}: "Metris USA Inc.",
+ [3]byte{0, 31, 143}: "Shanghai Bellmann Digital Source Co.,Ltd.",
+ [3]byte{0, 31, 144}: "Actiontec Electronics, Inc",
+ [3]byte{0, 31, 145}: "DBS Lodging Technologies, LLC",
+ [3]byte{0, 31, 146}: "Avigilon Corporation",
+ [3]byte{0, 31, 147}: "Xiotech Corporation",
+ [3]byte{0, 31, 148}: "Lascar Electronics Ltd",
+ [3]byte{0, 31, 149}: "Sagemcom Broadband SAS",
+ [3]byte{0, 31, 150}: "APROTECH CO.LTD",
+ [3]byte{0, 31, 151}: "BERTANA srl",
+ [3]byte{0, 31, 152}: "DAIICHI-DENTSU LTD.",
+ [3]byte{0, 31, 153}: "SERONICS co.ltd",
+ [3]byte{0, 31, 154}: "Nortel Networks",
+ [3]byte{0, 31, 155}: "POSBRO",
+ [3]byte{0, 31, 156}: "LEDCO",
+ [3]byte{0, 31, 157}: "Cisco Systems, Inc",
+ [3]byte{0, 31, 158}: "Cisco Systems, Inc",
+ [3]byte{0, 31, 159}: "Thomson Telecom Belgium",
+ [3]byte{0, 31, 160}: "A10 Networks",
+ [3]byte{0, 31, 161}: "Gtran Inc",
+ [3]byte{0, 31, 162}: "Datron World Communications, Inc.",
+ [3]byte{0, 31, 163}: "T&W Electronics(Shenzhen)Co.,Ltd.",
+ [3]byte{0, 31, 164}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+ [3]byte{0, 31, 165}: "Blue-White Industries",
+ [3]byte{0, 31, 166}: "Stilo srl",
+ [3]byte{0, 31, 167}: "Sony Interactive Entertainment Inc.",
+ [3]byte{0, 31, 168}: "Smart Energy Instruments Inc.",
+ [3]byte{0, 31, 169}: "Atlanta DTH, Inc.",
+ [3]byte{0, 31, 170}: "Taseon, Inc.",
+ [3]byte{0, 31, 171}: "I.S HIGH TECH.INC",
+ [3]byte{0, 31, 172}: "Goodmill Systems Ltd",
+ [3]byte{0, 31, 173}: "Brown Innovations, Inc",
+ [3]byte{0, 31, 174}: "Blick South Africa (Pty) Ltd",
+ [3]byte{0, 31, 175}: "NextIO, Inc.",
+ [3]byte{0, 31, 176}: "TimeIPS, Inc.",
+ [3]byte{0, 31, 177}: "Cybertech Inc.",
+ [3]byte{0, 31, 178}: "Sontheim Industrie Elektronik GmbH",
+ [3]byte{0, 31, 179}: "2Wire Inc",
+ [3]byte{0, 31, 180}: "SmartShare Systems",
+ [3]byte{0, 31, 181}: "I/O Interconnect Inc.",
+ [3]byte{0, 31, 182}: "Chi Lin Technology Co., Ltd.",
+ [3]byte{0, 31, 183}: "WiMate Technologies Corp.",
+ [3]byte{0, 31, 184}: "Universal Remote Control, Inc.",
+ [3]byte{0, 31, 185}: "Paltronics",
+ [3]byte{0, 31, 186}: "Boyoung Tech",
+ [3]byte{0, 31, 187}: "Xenatech Co.,LTD",
+ [3]byte{0, 31, 188}: "EVGA Corporation",
+ [3]byte{0, 31, 189}: "Kyocera Wireless Corp.",
+ [3]byte{0, 31, 190}: "Shenzhen Mopnet Industrial Co.,Ltd",
+ [3]byte{0, 31, 191}: "Fulhua Microelectronics Corp. Taiwan Branch",
+ [3]byte{0, 31, 192}: "Control Express Finland Oy",
+ [3]byte{0, 31, 193}: "Hanlong Technology Co.,LTD",
+ [3]byte{0, 31, 194}: "Jow Tong Technology Co Ltd",
+ [3]byte{0, 31, 195}: "SmartSynch, Inc",
+ [3]byte{0, 31, 196}: "ARRIS Group, Inc.",
+ [3]byte{0, 31, 197}: "Nintendo Co., Ltd.",
+ [3]byte{0, 31, 198}: "ASUSTek COMPUTER INC.",
+ [3]byte{0, 31, 199}: "Casio Hitachi Mobile Communications Co., Ltd.",
+ [3]byte{0, 31, 200}: "Up-Today Industrial Co., Ltd.",
+ [3]byte{0, 31, 201}: "Cisco Systems, Inc",
+ [3]byte{0, 31, 202}: "Cisco Systems, Inc",
+ [3]byte{0, 31, 203}: "NIW Solutions",
+ [3]byte{0, 31, 204}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 31, 205}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 31, 206}: "QTECH LLC",
+ [3]byte{0, 31, 207}: "MSI Technology GmbH",
+ [3]byte{0, 31, 208}: "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+ [3]byte{0, 31, 209}: "OPTEX CO.,LTD.",
+ [3]byte{0, 31, 210}: "COMMTECH TECHNOLOGY MACAO COMMERCIAL OFFSHORE LTD.",
+ [3]byte{0, 31, 211}: "RIVA Networks Inc.",
+ [3]byte{0, 31, 212}: "4IPNET, INC.",
+ [3]byte{0, 31, 213}: "MICRORISC s.r.o.",
+ [3]byte{0, 31, 214}: "Shenzhen Allywll",
+ [3]byte{0, 31, 215}: "TELERAD SA",
+ [3]byte{0, 31, 216}: "A-TRUST COMPUTER CORPORATION",
+ [3]byte{0, 31, 217}: "RSD Communications Ltd",
+ [3]byte{0, 31, 218}: "Nortel Networks",
+ [3]byte{0, 31, 219}: "Network Supply Corp.,",
+ [3]byte{0, 31, 220}: "Mobile Safe Track Ltd",
+ [3]byte{0, 31, 221}: "GDI LLC",
+ [3]byte{0, 31, 222}: "Nokia Danmark A/S",
+ [3]byte{0, 31, 223}: "Nokia Danmark A/S",
+ [3]byte{0, 31, 224}: "EdgeVelocity Corp",
+ [3]byte{0, 31, 225}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{0, 31, 226}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{0, 31, 227}: "LG Electronics (Mobile Communications)",
+ [3]byte{0, 31, 228}: "Sony Mobile Communications AB",
+ [3]byte{0, 31, 229}: "In-Circuit GmbH",
+ [3]byte{0, 31, 230}: "Alphion Corporation",
+ [3]byte{0, 31, 231}: "Simet",
+ [3]byte{0, 31, 232}: "KURUSUGAWA Electronics Industry Inc,.",
+ [3]byte{0, 31, 233}: "Printrex, Inc.",
+ [3]byte{0, 31, 234}: "Applied Media Technologies Corporation",
+ [3]byte{0, 31, 235}: "Trio Datacom Pty Ltd",
+ [3]byte{0, 31, 236}: "Synapse Électronique",
+ [3]byte{0, 31, 237}: "Tecan Systems Inc.",
+ [3]byte{0, 31, 238}: "ubisys technologies GmbH",
+ [3]byte{0, 31, 239}: "SHINSEI INDUSTRIES CO.,LTD",
+ [3]byte{0, 31, 240}: "Audio Partnership",
+ [3]byte{0, 31, 241}: "Paradox Hellas S.A.",
+ [3]byte{0, 31, 242}: "VIA Technologies, Inc.",
+ [3]byte{0, 31, 243}: "Apple, Inc.",
+ [3]byte{0, 31, 244}: "Power Monitors, Inc.",
+ [3]byte{0, 31, 245}: "Kongsberg Defence & Aerospace",
+ [3]byte{0, 31, 246}: "PS Audio International",
+ [3]byte{0, 31, 247}: "Nakajima All Precision Co., Ltd.",
+ [3]byte{0, 31, 248}: "Siemens AG, Sector Industry, Drive Technologies, Motion Control Systems",
+ [3]byte{0, 31, 249}: "Advanced Knowledge Associates",
+ [3]byte{0, 31, 250}: "Coretree, Co, Ltd",
+ [3]byte{0, 31, 251}: "Green Packet Bhd",
+ [3]byte{0, 31, 252}: "Riccius+Sohn GmbH",
+ [3]byte{0, 31, 253}: "Indigo Mobile Technologies Corp.",
+ [3]byte{0, 31, 254}: "HPN Supply Chain",
+ [3]byte{0, 31, 255}: "Respironics, Inc.",
+ [3]byte{0, 32, 0}: "LEXMARK INTERNATIONAL, INC.",
+ [3]byte{0, 32, 1}: "DSP SOLUTIONS, INC.",
+ [3]byte{0, 32, 2}: "SERITECH ENTERPRISE CO., LTD.",
+ [3]byte{0, 32, 3}: "PIXEL POWER LTD.",
+ [3]byte{0, 32, 4}: "YAMATAKE-HONEYWELL CO., LTD.",
+ [3]byte{0, 32, 5}: "SIMPLE TECHNOLOGY",
+ [3]byte{0, 32, 6}: "GARRETT COMMUNICATIONS, INC.",
+ [3]byte{0, 32, 7}: "SFA, INC.",
+ [3]byte{0, 32, 8}: "CABLE & COMPUTER TECHNOLOGY",
+ [3]byte{0, 32, 9}: "PACKARD BELL ELEC., INC.",
+ [3]byte{0, 32, 10}: "SOURCE-COMM CORP.",
+ [3]byte{0, 32, 11}: "OCTAGON SYSTEMS CORP.",
+ [3]byte{0, 32, 12}: "ADASTRA SYSTEMS CORP.",
+ [3]byte{0, 32, 13}: "CARL ZEISS",
+ [3]byte{0, 32, 14}: "SATELLITE TECHNOLOGY MGMT, INC",
+ [3]byte{0, 32, 15}: "EBRAINS Inc",
+ [3]byte{0, 32, 16}: "JEOL SYSTEM TECHNOLOGY CO. LTD",
+ [3]byte{0, 32, 17}: "CANOPUS CO., LTD.",
+ [3]byte{0, 32, 18}: "CAMTRONICS MEDICAL SYSTEMS",
+ [3]byte{0, 32, 19}: "DIVERSIFIED TECHNOLOGY, INC.",
+ [3]byte{0, 32, 20}: "GLOBAL VIEW CO., LTD.",
+ [3]byte{0, 32, 21}: "ACTIS COMPUTER SA",
+ [3]byte{0, 32, 22}: "SHOWA ELECTRIC WIRE & CABLE CO",
+ [3]byte{0, 32, 23}: "ORBOTECH",
+ [3]byte{0, 32, 24}: "CIS TECHNOLOGY INC.",
+ [3]byte{0, 32, 25}: "OHLER GMBH",
+ [3]byte{0, 32, 26}: "MRV Communications, Inc.",
+ [3]byte{0, 32, 27}: "NORTHERN TELECOM/NETWORK",
+ [3]byte{0, 32, 28}: "EXCEL, INC.",
+ [3]byte{0, 32, 29}: "KATANA PRODUCTS",
+ [3]byte{0, 32, 30}: "NETQUEST CORPORATION",
+ [3]byte{0, 32, 31}: "BEST POWER TECHNOLOGY, INC.",
+ [3]byte{0, 32, 32}: "MEGATRON COMPUTER INDUSTRIES PTY, LTD.",
+ [3]byte{0, 32, 33}: "ALGORITHMS SOFTWARE PVT. LTD.",
+ [3]byte{0, 32, 34}: "NMS Communications",
+ [3]byte{0, 32, 35}: "T.C. TECHNOLOGIES PTY. LTD",
+ [3]byte{0, 32, 36}: "PACIFIC COMMUNICATION SCIENCES",
+ [3]byte{0, 32, 37}: "CONTROL TECHNOLOGY, INC.",
+ [3]byte{0, 32, 38}: "AMKLY SYSTEMS, INC.",
+ [3]byte{0, 32, 39}: "MING FORTUNE INDUSTRY CO., LTD",
+ [3]byte{0, 32, 40}: "WEST EGG SYSTEMS, INC.",
+ [3]byte{0, 32, 41}: "TELEPROCESSING PRODUCTS, INC.",
+ [3]byte{0, 32, 42}: "N.V. DZINE",
+ [3]byte{0, 32, 43}: "ADVANCED TELECOMMUNICATIONS MODULES, LTD.",
+ [3]byte{0, 32, 44}: "WELLTRONIX CO., LTD.",
+ [3]byte{0, 32, 45}: "TAIYO CORPORATION",
+ [3]byte{0, 32, 46}: "DAYSTAR DIGITAL",
+ [3]byte{0, 32, 47}: "ZETA COMMUNICATIONS, LTD.",
+ [3]byte{0, 32, 48}: "ANALOG & DIGITAL SYSTEMS",
+ [3]byte{0, 32, 49}: "Tattile SRL",
+ [3]byte{0, 32, 50}: "ALCATEL TAISEL",
+ [3]byte{0, 32, 51}: "SYNAPSE TECHNOLOGIES, INC.",
+ [3]byte{0, 32, 52}: "ROTEC INDUSTRIEAUTOMATION GMBH",
+ [3]byte{0, 32, 53}: "IBM Corp",
+ [3]byte{0, 32, 54}: "BMC SOFTWARE",
+ [3]byte{0, 32, 55}: "Seagate Technology",
+ [3]byte{0, 32, 56}: "VME MICROSYSTEMS INTERNATIONAL CORPORATION",
+ [3]byte{0, 32, 57}: "SCINETS",
+ [3]byte{0, 32, 58}: "DIGITAL BI0METRICS INC.",
+ [3]byte{0, 32, 59}: "WISDM LTD.",
+ [3]byte{0, 32, 60}: "EUROTIME AB",
+ [3]byte{0, 32, 61}: "Honeywell ECC",
+ [3]byte{0, 32, 62}: "LogiCan Technologies, Inc.",
+ [3]byte{0, 32, 63}: "JUKI CORPORATION",
+ [3]byte{0, 32, 64}: "ARRIS Group, Inc.",
+ [3]byte{0, 32, 65}: "DATA NET",
+ [3]byte{0, 32, 66}: "DATAMETRICS CORP.",
+ [3]byte{0, 32, 67}: "NEURON COMPANY LIMITED",
+ [3]byte{0, 32, 68}: "GENITECH PTY LTD",
+ [3]byte{0, 32, 69}: "ION Networks, Inc.",
+ [3]byte{0, 32, 70}: "CIPRICO, INC.",
+ [3]byte{0, 32, 71}: "STEINBRECHER CORP.",
+ [3]byte{0, 32, 72}: "Marconi Communications",
+ [3]byte{0, 32, 73}: "COMTRON, INC.",
+ [3]byte{0, 32, 74}: "PRONET GMBH",
+ [3]byte{0, 32, 75}: "AUTOCOMPUTER CO., LTD.",
+ [3]byte{0, 32, 76}: "MITRON COMPUTER PTE LTD.",
+ [3]byte{0, 32, 77}: "INOVIS GMBH",
+ [3]byte{0, 32, 78}: "NETWORK SECURITY SYSTEMS, INC.",
+ [3]byte{0, 32, 79}: "DEUTSCHE AEROSPACE AG",
+ [3]byte{0, 32, 80}: "KOREA COMPUTER INC.",
+ [3]byte{0, 32, 81}: "Verilink Corporation",
+ [3]byte{0, 32, 82}: "RAGULA SYSTEMS",
+ [3]byte{0, 32, 83}: "HUNTSVILLE MICROSYSTEMS, INC.",
+ [3]byte{0, 32, 84}: "Sycamore Networks",
+ [3]byte{0, 32, 85}: "ALTECH CO., LTD.",
+ [3]byte{0, 32, 86}: "NEOPRODUCTS",
+ [3]byte{0, 32, 87}: "TITZE DATENTECHNIK GmbH",
+ [3]byte{0, 32, 88}: "ALLIED SIGNAL INC.",
+ [3]byte{0, 32, 89}: "MIRO COMPUTER PRODUCTS AG",
+ [3]byte{0, 32, 90}: "COMPUTER IDENTICS",
+ [3]byte{0, 32, 91}: "Kentrox, LLC",
+ [3]byte{0, 32, 92}: "InterNet Systems of Florida, Inc.",
+ [3]byte{0, 32, 93}: "NANOMATIC OY",
+ [3]byte{0, 32, 94}: "CASTLE ROCK, INC.",
+ [3]byte{0, 32, 95}: "GAMMADATA COMPUTER GMBH",
+ [3]byte{0, 32, 96}: "ALCATEL ITALIA S.p.A.",
+ [3]byte{0, 32, 97}: "GarrettCom, Inc.",
+ [3]byte{0, 32, 98}: "SCORPION LOGIC, LTD.",
+ [3]byte{0, 32, 99}: "WIPRO INFOTECH LTD.",
+ [3]byte{0, 32, 100}: "PROTEC MICROSYSTEMS, INC.",
+ [3]byte{0, 32, 101}: "SUPERNET NETWORKING INC.",
+ [3]byte{0, 32, 102}: "GENERAL MAGIC, INC.",
+ [3]byte{0, 32, 103}: "Private",
+ [3]byte{0, 32, 104}: "ISDYNE",
+ [3]byte{0, 32, 105}: "ISDN SYSTEMS CORPORATION",
+ [3]byte{0, 32, 106}: "OSAKA COMPUTER CORP.",
+ [3]byte{0, 32, 107}: "KONICA MINOLTA HOLDINGS, INC.",
+ [3]byte{0, 32, 108}: "EVERGREEN TECHNOLOGY CORP.",
+ [3]byte{0, 32, 109}: "DATA RACE, INC.",
+ [3]byte{0, 32, 110}: "XACT, INC.",
+ [3]byte{0, 32, 111}: "FLOWPOINT CORPORATION",
+ [3]byte{0, 32, 112}: "HYNET, LTD.",
+ [3]byte{0, 32, 113}: "IBR GMBH",
+ [3]byte{0, 32, 114}: "WORKLINK INNOVATIONS",
+ [3]byte{0, 32, 115}: "FUSION SYSTEMS CORPORATION",
+ [3]byte{0, 32, 116}: "SUNGWOON SYSTEMS",
+ [3]byte{0, 32, 117}: "MOTOROLA COMMUNICATION ISRAEL",
+ [3]byte{0, 32, 118}: "REUDO CORPORATION",
+ [3]byte{0, 32, 119}: "KARDIOS SYSTEMS CORP.",
+ [3]byte{0, 32, 120}: "RUNTOP, INC.",
+ [3]byte{0, 32, 121}: "MIKRON GMBH",
+ [3]byte{0, 32, 122}: "WiSE Communications, Inc.",
+ [3]byte{0, 32, 123}: "Intel Corporation",
+ [3]byte{0, 32, 124}: "AUTEC GMBH",
+ [3]byte{0, 32, 125}: "ADVANCED COMPUTER APPLICATIONS",
+ [3]byte{0, 32, 126}: "FINECOM CO., LTD.",
+ [3]byte{0, 32, 127}: "KYOEI SANGYO CO., LTD.",
+ [3]byte{0, 32, 128}: "SYNERGY (UK) LTD.",
+ [3]byte{0, 32, 129}: "TITAN ELECTRONICS",
+ [3]byte{0, 32, 130}: "ONEAC CORPORATION",
+ [3]byte{0, 32, 131}: "PRESTICOM INCORPORATED",
+ [3]byte{0, 32, 132}: "OCE PRINTING SYSTEMS, GMBH",
+ [3]byte{0, 32, 133}: "Eaton Corporation",
+ [3]byte{0, 32, 134}: "MICROTECH ELECTRONICS LIMITED",
+ [3]byte{0, 32, 135}: "MEMOTEC, INC.",
+ [3]byte{0, 32, 136}: "GLOBAL VILLAGE COMMUNICATION",
+ [3]byte{0, 32, 137}: "T3PLUS NETWORKING, INC.",
+ [3]byte{0, 32, 138}: "SONIX COMMUNICATIONS, LTD.",
+ [3]byte{0, 32, 139}: "LAPIS TECHNOLOGIES, INC.",
+ [3]byte{0, 32, 140}: "GALAXY NETWORKS, INC.",
+ [3]byte{0, 32, 141}: "CMD TECHNOLOGY",
+ [3]byte{0, 32, 142}: "CHEVIN SOFTWARE ENG. LTD.",
+ [3]byte{0, 32, 143}: "ECI Telecom Ltd.",
+ [3]byte{0, 32, 144}: "ADVANCED COMPRESSION TECHNOLOGY, INC.",
+ [3]byte{0, 32, 145}: "J125, NATIONAL SECURITY AGENCY",
+ [3]byte{0, 32, 146}: "CHESS ENGINEERING B.V.",
+ [3]byte{0, 32, 147}: "LANDINGS TECHNOLOGY CORP.",
+ [3]byte{0, 32, 148}: "CUBIX CORPORATION",
+ [3]byte{0, 32, 149}: "RIVA ELECTRONICS",
+ [3]byte{0, 32, 150}: "Invensys",
+ [3]byte{0, 32, 151}: "APPLIED SIGNAL TECHNOLOGY",
+ [3]byte{0, 32, 152}: "HECTRONIC AB",
+ [3]byte{0, 32, 153}: "BON ELECTRIC CO., LTD.",
+ [3]byte{0, 32, 154}: "THE 3DO COMPANY",
+ [3]byte{0, 32, 155}: "ERSAT ELECTRONIC GMBH",
+ [3]byte{0, 32, 156}: "PRIMARY ACCESS CORP.",
+ [3]byte{0, 32, 157}: "LIPPERT AUTOMATIONSTECHNIK",
+ [3]byte{0, 32, 158}: "BROWN'S OPERATING SYSTEM SERVICES, LTD.",
+ [3]byte{0, 32, 159}: "MERCURY COMPUTER SYSTEMS, INC.",
+ [3]byte{0, 32, 160}: "OA LABORATORY CO., LTD.",
+ [3]byte{0, 32, 161}: "DOVATRON",
+ [3]byte{0, 32, 162}: "GALCOM NETWORKING LTD.",
+ [3]byte{0, 32, 163}: "Harmonic, Inc",
+ [3]byte{0, 32, 164}: "MULTIPOINT NETWORKS",
+ [3]byte{0, 32, 165}: "API ENGINEERING",
+ [3]byte{0, 32, 166}: "Proxim Wireless",
+ [3]byte{0, 32, 167}: "PAIRGAIN TECHNOLOGIES, INC.",
+ [3]byte{0, 32, 168}: "SAST TECHNOLOGY CORP.",
+ [3]byte{0, 32, 169}: "WHITE HORSE INDUSTRIAL",
+ [3]byte{0, 32, 170}: "Ericsson Television Limited",
+ [3]byte{0, 32, 171}: "MICRO INDUSTRIES CORP.",
+ [3]byte{0, 32, 172}: "INTERFLEX DATENSYSTEME GMBH",
+ [3]byte{0, 32, 173}: "LINQ SYSTEMS",
+ [3]byte{0, 32, 174}: "ORNET DATA COMMUNICATION TECH.",
+ [3]byte{0, 32, 175}: "3COM CORPORATION",
+ [3]byte{0, 32, 176}: "GATEWAY DEVICES, INC.",
+ [3]byte{0, 32, 177}: "COMTECH RESEARCH INC.",
+ [3]byte{0, 32, 178}: "GKD Gesellschaft Fur Kommunikation Und Datentechnik",
+ [3]byte{0, 32, 179}: "Tattile SRL",
+ [3]byte{0, 32, 180}: "TERMA ELEKTRONIK AS",
+ [3]byte{0, 32, 181}: "YASKAWA ELECTRIC CORPORATION",
+ [3]byte{0, 32, 182}: "AGILE NETWORKS, INC.",
+ [3]byte{0, 32, 183}: "NAMAQUA COMPUTERWARE",
+ [3]byte{0, 32, 184}: "PRIME OPTION, INC.",
+ [3]byte{0, 32, 185}: "METRICOM, INC.",
+ [3]byte{0, 32, 186}: "CENTER FOR HIGH PERFORMANCE",
+ [3]byte{0, 32, 187}: "ZAX CORPORATION",
+ [3]byte{0, 32, 188}: "Long Reach Networks Pty Ltd",
+ [3]byte{0, 32, 189}: "NIOBRARA R & D CORPORATION",
+ [3]byte{0, 32, 190}: "LAN ACCESS CORP.",
+ [3]byte{0, 32, 191}: "AEHR TEST SYSTEMS",
+ [3]byte{0, 32, 192}: "PULSE ELECTRONICS, INC.",
+ [3]byte{0, 32, 193}: "SAXA, Inc.",
+ [3]byte{0, 32, 194}: "TEXAS MEMORY SYSTEMS, INC.",
+ [3]byte{0, 32, 195}: "COUNTER SOLUTIONS LTD.",
+ [3]byte{0, 32, 196}: "INET,INC.",
+ [3]byte{0, 32, 197}: "EAGLE TECHNOLOGY",
+ [3]byte{0, 32, 198}: "NECTEC",
+ [3]byte{0, 32, 199}: "AKAI Professional M.I. Corp.",
+ [3]byte{0, 32, 200}: "LARSCOM INCORPORATED",
+ [3]byte{0, 32, 201}: "VICTRON BV",
+ [3]byte{0, 32, 202}: "DIGITAL OCEAN",
+ [3]byte{0, 32, 203}: "PRETEC ELECTRONICS CORP.",
+ [3]byte{0, 32, 204}: "DIGITAL SERVICES, LTD.",
+ [3]byte{0, 32, 205}: "HYBRID NETWORKS, INC.",
+ [3]byte{0, 32, 206}: "LOGICAL DESIGN GROUP, INC.",
+ [3]byte{0, 32, 207}: "TEST & MEASUREMENT SYSTEMS INC",
+ [3]byte{0, 32, 208}: "VERSALYNX CORPORATION",
+ [3]byte{0, 32, 209}: "MICROCOMPUTER SYSTEMS (M) SDN.",
+ [3]byte{0, 32, 210}: "RAD DATA COMMUNICATIONS, LTD.",
+ [3]byte{0, 32, 211}: "OST (OUEST STANDARD TELEMATIQU",
+ [3]byte{0, 32, 212}: "Cabletron Systems, Inc.",
+ [3]byte{0, 32, 213}: "VIPA GMBH",
+ [3]byte{0, 32, 214}: "Breezecom, Ltd.",
+ [3]byte{0, 32, 215}: "JAPAN MINICOMPUTER SYSTEMS CO., Ltd.",
+ [3]byte{0, 32, 216}: "Nortel Networks",
+ [3]byte{0, 32, 217}: "PANASONIC TECHNOLOGIES, INC./MIECO-US",
+ [3]byte{0, 32, 218}: "Alcatel-Lucent Enterprise",
+ [3]byte{0, 32, 219}: "XNET TECHNOLOGY, INC.",
+ [3]byte{0, 32, 220}: "DENSITRON TAIWAN LTD.",
+ [3]byte{0, 32, 221}: "Cybertec Pty Ltd",
+ [3]byte{0, 32, 222}: "JAPAN DIGITAL LABORAT'Y CO.LTD",
+ [3]byte{0, 32, 223}: "KYOSAN ELECTRIC MFG. CO., LTD.",
+ [3]byte{0, 32, 224}: "Actiontec Electronics, Inc",
+ [3]byte{0, 32, 225}: "ALAMAR ELECTRONICS",
+ [3]byte{0, 32, 226}: "INFORMATION RESOURCE ENGINEERING",
+ [3]byte{0, 32, 227}: "MCD KENCOM CORPORATION",
+ [3]byte{0, 32, 228}: "HSING TECH ENTERPRISE CO., LTD",
+ [3]byte{0, 32, 229}: "APEX DATA, INC.",
+ [3]byte{0, 32, 230}: "LIDKOPING MACHINE TOOLS AB",
+ [3]byte{0, 32, 231}: "B&W NUCLEAR SERVICE COMPANY",
+ [3]byte{0, 32, 232}: "DATATREK CORPORATION",
+ [3]byte{0, 32, 233}: "DANTEL",
+ [3]byte{0, 32, 234}: "EFFICIENT NETWORKS, INC.",
+ [3]byte{0, 32, 235}: "CINCINNATI MICROWAVE, INC.",
+ [3]byte{0, 32, 236}: "TECHWARE SYSTEMS CORP.",
+ [3]byte{0, 32, 237}: "GIGA-BYTE TECHNOLOGY CO., LTD.",
+ [3]byte{0, 32, 238}: "GTECH CORPORATION",
+ [3]byte{0, 32, 239}: "USC CORPORATION",
+ [3]byte{0, 32, 240}: "UNIVERSAL MICROELECTRONICS CO.",
+ [3]byte{0, 32, 241}: "ALTOS INDIA LIMITED",
+ [3]byte{0, 32, 242}: "Oracle Corporation",
+ [3]byte{0, 32, 243}: "RAYNET CORPORATION",
+ [3]byte{0, 32, 244}: "SPECTRIX CORPORATION",
+ [3]byte{0, 32, 245}: "PANDATEL AG",
+ [3]byte{0, 32, 246}: "NET TEK AND KARLNET, INC.",
+ [3]byte{0, 32, 247}: "CYBERDATA CORPORATION",
+ [3]byte{0, 32, 248}: "CARRERA COMPUTERS, INC.",
+ [3]byte{0, 32, 249}: "PARALINK NETWORKS, INC.",
+ [3]byte{0, 32, 250}: "GDE SYSTEMS, INC.",
+ [3]byte{0, 32, 251}: "OCTEL COMMUNICATIONS CORP.",
+ [3]byte{0, 32, 252}: "MATROX",
+ [3]byte{0, 32, 253}: "ITV TECHNOLOGIES, INC.",
+ [3]byte{0, 32, 254}: "TOPWARE INC. / GRAND COMPUTER",
+ [3]byte{0, 32, 255}: "SYMMETRICAL TECHNOLOGIES",
+ [3]byte{0, 33, 0}: "Gemtek Technology Co., Ltd.",
+ [3]byte{0, 33, 1}: "Aplicaciones Electronicas Quasar (AEQ)",
+ [3]byte{0, 33, 2}: "UpdateLogic Inc.",
+ [3]byte{0, 33, 3}: "GHI Electronics, LLC",
+ [3]byte{0, 33, 4}: "Gigaset Communications GmbH",
+ [3]byte{0, 33, 5}: "Alcatel-Lucent IPD",
+ [3]byte{0, 33, 6}: "RIM Testing Services",
+ [3]byte{0, 33, 7}: "Seowonintech Co Ltd.",
+ [3]byte{0, 33, 8}: "Nokia Danmark A/S",
+ [3]byte{0, 33, 9}: "Nokia Danmark A/S",
+ [3]byte{0, 33, 10}: "byd:sign Corporation",
+ [3]byte{0, 33, 11}: "GEMINI TRAZE RFID PVT. LTD.",
+ [3]byte{0, 33, 12}: "Cymtec Systems, Inc.",
+ [3]byte{0, 33, 13}: "SAMSIN INNOTEC",
+ [3]byte{0, 33, 14}: "Orpak Systems L.T.D.",
+ [3]byte{0, 33, 15}: "Cernium Corp",
+ [3]byte{0, 33, 16}: "Clearbox Systems",
+ [3]byte{0, 33, 17}: "Uniphone Inc.",
+ [3]byte{0, 33, 18}: "WISCOM SYSTEM CO.,LTD",
+ [3]byte{0, 33, 19}: "Padtec S/A",
+ [3]byte{0, 33, 20}: "Hylab Technology Inc.",
+ [3]byte{0, 33, 21}: "PHYWE Systeme GmbH & Co. KG",
+ [3]byte{0, 33, 22}: "Transcon Electronic Systems, spol. s r. o.",
+ [3]byte{0, 33, 23}: "Tellord",
+ [3]byte{0, 33, 24}: "Athena Tech, Inc.",
+ [3]byte{0, 33, 25}: "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+ [3]byte{0, 33, 26}: "LInTech Corporation",
+ [3]byte{0, 33, 27}: "Cisco Systems, Inc",
+ [3]byte{0, 33, 28}: "Cisco Systems, Inc",
+ [3]byte{0, 33, 29}: "Dataline AB",
+ [3]byte{0, 33, 30}: "ARRIS Group, Inc.",
+ [3]byte{0, 33, 31}: "SHINSUNG DELTATECH CO.,LTD.",
+ [3]byte{0, 33, 32}: "Sequel Technologies",
+ [3]byte{0, 33, 33}: "VRmagic GmbH",
+ [3]byte{0, 33, 34}: "Chip-pro Ltd.",
+ [3]byte{0, 33, 35}: "Aerosat Avionics",
+ [3]byte{0, 33, 36}: "Optos Plc",
+ [3]byte{0, 33, 37}: "KUK JE TONG SHIN Co.,LTD",
+ [3]byte{0, 33, 38}: "Shenzhen Torch Equipment Co., Ltd.",
+ [3]byte{0, 33, 39}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{0, 33, 40}: "Oracle Corporation",
+ [3]byte{0, 33, 41}: "Cisco-Linksys, LLC",
+ [3]byte{0, 33, 42}: "Audiovox Corporation",
+ [3]byte{0, 33, 43}: "MSA Auer",
+ [3]byte{0, 33, 44}: "SemIndia System Private Limited",
+ [3]byte{0, 33, 45}: "SCIMOLEX CORPORATION",
+ [3]byte{0, 33, 46}: "dresden-elektronik",
+ [3]byte{0, 33, 47}: "Phoebe Micro Inc.",
+ [3]byte{0, 33, 48}: "Keico Hightech Inc.",
+ [3]byte{0, 33, 49}: "Blynke Inc.",
+ [3]byte{0, 33, 50}: "Masterclock, Inc.",
+ [3]byte{0, 33, 51}: "Building B, Inc",
+ [3]byte{0, 33, 52}: "Brandywine Communications",
+ [3]byte{0, 33, 53}: "ALCATEL-LUCENT",
+ [3]byte{0, 33, 54}: "ARRIS Group, Inc.",
+ [3]byte{0, 33, 55}: "Bay Controls, LLC",
+ [3]byte{0, 33, 56}: "Cepheid",
+ [3]byte{0, 33, 57}: "Escherlogic Inc.",
+ [3]byte{0, 33, 58}: "Winchester Systems Inc.",
+ [3]byte{0, 33, 59}: "Berkshire Products, Inc",
+ [3]byte{0, 33, 60}: "AliphCom",
+ [3]byte{0, 33, 61}: "Cermetek Microelectronics, Inc.",
+ [3]byte{0, 33, 62}: "TomTom",
+ [3]byte{0, 33, 63}: "A-Team Technology Ltd.",
+ [3]byte{0, 33, 64}: "EN Technologies Inc.",
+ [3]byte{0, 33, 65}: "RADLIVE",
+ [3]byte{0, 33, 66}: "Advanced Control Systems doo",
+ [3]byte{0, 33, 67}: "ARRIS Group, Inc.",
+ [3]byte{0, 33, 68}: "SS Telecoms",
+ [3]byte{0, 33, 69}: "Semptian Technologies Ltd.",
+ [3]byte{0, 33, 70}: "Sanmina-SCI",
+ [3]byte{0, 33, 71}: "Nintendo Co., Ltd.",
+ [3]byte{0, 33, 72}: "Kaco Solar Korea",
+ [3]byte{0, 33, 73}: "China Daheng Group ,Inc.",
+ [3]byte{0, 33, 74}: "Pixel Velocity, Inc",
+ [3]byte{0, 33, 75}: "Shenzhen HAMP Science & Technology Co.,Ltd",
+ [3]byte{0, 33, 76}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 33, 77}: "Guangzhou Skytone Transmission Technology Com. Ltd.",
+ [3]byte{0, 33, 78}: "GS Yuasa Power Supply Ltd.",
+ [3]byte{0, 33, 79}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{0, 33, 80}: "EYEVIEW ELECTRONICS",
+ [3]byte{0, 33, 81}: "Millinet Co., Ltd.",
+ [3]byte{0, 33, 82}: "General Satellite Research & Development Limited",
+ [3]byte{0, 33, 83}: "SeaMicro Inc.",
+ [3]byte{0, 33, 84}: "D-TACQ Solutions Ltd",
+ [3]byte{0, 33, 85}: "Cisco Systems, Inc",
+ [3]byte{0, 33, 86}: "Cisco Systems, Inc",
+ [3]byte{0, 33, 87}: "National Datacast, Inc.",
+ [3]byte{0, 33, 88}: "Style Flying Technology Co.",
+ [3]byte{0, 33, 89}: "Juniper Networks",
+ [3]byte{0, 33, 90}: "Hewlett Packard",
+ [3]byte{0, 33, 91}: "SenseAnywhere",
+ [3]byte{0, 33, 92}: "Intel Corporate",
+ [3]byte{0, 33, 93}: "Intel Corporate",
+ [3]byte{0, 33, 94}: "IBM Corp",
+ [3]byte{0, 33, 95}: "IHSE GmbH",
+ [3]byte{0, 33, 96}: "Hidea Solutions Co. Ltd.",
+ [3]byte{0, 33, 97}: "Yournet Inc.",
+ [3]byte{0, 33, 98}: "Nortel Networks",
+ [3]byte{0, 33, 99}: "ASKEY COMPUTER CORP",
+ [3]byte{0, 33, 100}: "Special Design Bureau for Seismic Instrumentation",
+ [3]byte{0, 33, 101}: "Presstek Inc.",
+ [3]byte{0, 33, 102}: "NovAtel Inc.",
+ [3]byte{0, 33, 103}: "HWA JIN T&I Corp.",
+ [3]byte{0, 33, 104}: "iVeia, LLC",
+ [3]byte{0, 33, 105}: "Prologix, LLC.",
+ [3]byte{0, 33, 106}: "Intel Corporate",
+ [3]byte{0, 33, 107}: "Intel Corporate",
+ [3]byte{0, 33, 108}: "ODVA",
+ [3]byte{0, 33, 109}: "Soltech Co., Ltd.",
+ [3]byte{0, 33, 110}: "Function ATI (Huizhou) Telecommunications Co., Ltd.",
+ [3]byte{0, 33, 111}: "SymCom, Inc.",
+ [3]byte{0, 33, 112}: "Dell Inc.",
+ [3]byte{0, 33, 113}: "Wesung TNC Co., Ltd.",
+ [3]byte{0, 33, 114}: "Seoultek Valley",
+ [3]byte{0, 33, 115}: "Ion Torrent Systems, Inc.",
+ [3]byte{0, 33, 116}: "AvaLAN Wireless",
+ [3]byte{0, 33, 117}: "Pacific Satellite International Ltd.",
+ [3]byte{0, 33, 118}: "YMax Telecom Ltd.",
+ [3]byte{0, 33, 119}: "W. L. Gore & Associates",
+ [3]byte{0, 33, 120}: "Matuschek Messtechnik GmbH",
+ [3]byte{0, 33, 121}: "IOGEAR, Inc.",
+ [3]byte{0, 33, 122}: "Sejin Electron, Inc.",
+ [3]byte{0, 33, 123}: "Bastec AB",
+ [3]byte{0, 33, 124}: "2Wire Inc",
+ [3]byte{0, 33, 125}: "PYXIS S.R.L.",
+ [3]byte{0, 33, 126}: "Telit Communication s.p.a",
+ [3]byte{0, 33, 127}: "Intraco Technology Pte Ltd",
+ [3]byte{0, 33, 128}: "ARRIS Group, Inc.",
+ [3]byte{0, 33, 129}: "Si2 Microsystems Limited",
+ [3]byte{0, 33, 130}: "SandLinks Systems, Ltd.",
+ [3]byte{0, 33, 131}: "ANDRITZ HYDRO GmbH",
+ [3]byte{0, 33, 132}: "POWERSOFT SRL",
+ [3]byte{0, 33, 133}: "MICRO-STAR INT'L CO.,LTD.",
+ [3]byte{0, 33, 134}: "Universal Global Scientific Industrial Co., Ltd.",
+ [3]byte{0, 33, 135}: "Imacs GmbH",
+ [3]byte{0, 33, 136}: "EMC Corporation",
+ [3]byte{0, 33, 137}: "AppTech, Inc.",
+ [3]byte{0, 33, 138}: "Electronic Design and Manufacturing Company",
+ [3]byte{0, 33, 139}: "Wescon Technology, Inc.",
+ [3]byte{0, 33, 140}: "TopControl GMBH",
+ [3]byte{0, 33, 141}: "AP Router Ind. Eletronica LTDA",
+ [3]byte{0, 33, 142}: "MEKICS CO., LTD.",
+ [3]byte{0, 33, 143}: "Avantgarde Acoustic Lautsprechersysteme GmbH",
+ [3]byte{0, 33, 144}: "Goliath Solutions",
+ [3]byte{0, 33, 145}: "D-Link Corporation",
+ [3]byte{0, 33, 146}: "Baoding Galaxy Electronic Technology Co.,Ltd",
+ [3]byte{0, 33, 147}: "Videofon MV",
+ [3]byte{0, 33, 148}: "Ping Communication",
+ [3]byte{0, 33, 149}: "GWD Media Limited",
+ [3]byte{0, 33, 150}: "Telsey S.p.A.",
+ [3]byte{0, 33, 151}: "Elitegroup Computer Systems Co.,Ltd.",
+ [3]byte{0, 33, 152}: "Thai Radio Co, LTD",
+ [3]byte{0, 33, 153}: "Vacon Plc",
+ [3]byte{0, 33, 154}: "Cambridge Visual Networks Ltd",
+ [3]byte{0, 33, 155}: "Dell Inc.",
+ [3]byte{0, 33, 156}: "Honeywld Technology Corp.",
+ [3]byte{0, 33, 157}: "Adesys BV",
+ [3]byte{0, 33, 158}: "Sony Mobile Communications AB",
+ [3]byte{0, 33, 159}: "SATEL OY",
+ [3]byte{0, 33, 160}: "Cisco Systems, Inc",
+ [3]byte{0, 33, 161}: "Cisco Systems, Inc",
+ [3]byte{0, 33, 162}: "EKE-Electronics Ltd.",
+ [3]byte{0, 33, 163}: "Micromint",
+ [3]byte{0, 33, 164}: "Dbii Networks",
+ [3]byte{0, 33, 165}: "ERLPhase Power Technologies Ltd.",
+ [3]byte{0, 33, 166}: "Videotec Spa",
+ [3]byte{0, 33, 167}: "Hantle System Co., Ltd.",
+ [3]byte{0, 33, 168}: "Telephonics Corporation",
+ [3]byte{0, 33, 169}: "Mobilink Telecom Co.,Ltd",
+ [3]byte{0, 33, 170}: "Nokia Danmark A/S",
+ [3]byte{0, 33, 171}: "Nokia Danmark A/S",
+ [3]byte{0, 33, 172}: "Infrared Integrated Systems Ltd",
+ [3]byte{0, 33, 173}: "Nordic ID Oy",
+ [3]byte{0, 33, 174}: "ALCATEL-LUCENT FRANCE - WTD",
+ [3]byte{0, 33, 175}: "Radio Frequency Systems",
+ [3]byte{0, 33, 176}: "Tyco Telecommunications",
+ [3]byte{0, 33, 177}: "DIGITAL SOLUTIONS LTD",
+ [3]byte{0, 33, 178}: "Fiberblaze A/S",
+ [3]byte{0, 33, 179}: "Ross Controls",
+ [3]byte{0, 33, 180}: "APRO MEDIA CO., LTD",
+ [3]byte{0, 33, 181}: "Galvanic Ltd",
+ [3]byte{0, 33, 182}: "Triacta Power Technologies Inc.",
+ [3]byte{0, 33, 183}: "Lexmark International Inc.",
+ [3]byte{0, 33, 184}: "Inphi Corporation",
+ [3]byte{0, 33, 185}: "Universal Devices Inc.",
+ [3]byte{0, 33, 186}: "Texas Instruments",
+ [3]byte{0, 33, 187}: "Riken Keiki Co., Ltd.",
+ [3]byte{0, 33, 188}: "ZALA COMPUTER",
+ [3]byte{0, 33, 189}: "Nintendo Co., Ltd.",
+ [3]byte{0, 33, 190}: "Cisco SPVTG",
+ [3]byte{0, 33, 191}: "Hitachi High-Tech Control Systems Corporation",
+ [3]byte{0, 33, 192}: "Mobile Appliance, Inc.",
+ [3]byte{0, 33, 193}: "ABB Oy / Medium Voltage Products",
+ [3]byte{0, 33, 194}: "GL Communications Inc",
+ [3]byte{0, 33, 195}: "CORNELL Communications, Inc.",
+ [3]byte{0, 33, 196}: "Consilium AB",
+ [3]byte{0, 33, 197}: "3DSP Corp",
+ [3]byte{0, 33, 198}: "CSJ Global, Inc.",
+ [3]byte{0, 33, 199}: "Russound",
+ [3]byte{0, 33, 200}: "LOHUIS Networks",
+ [3]byte{0, 33, 201}: "Wavecom Asia Pacific Limited",
+ [3]byte{0, 33, 202}: "ART System Co., Ltd.",
+ [3]byte{0, 33, 203}: "SMS TECNOLOGIA ELETRONICA LTDA",
+ [3]byte{0, 33, 204}: "Flextronics International",
+ [3]byte{0, 33, 205}: "LiveTV",
+ [3]byte{0, 33, 206}: "NTC-Metrotek",
+ [3]byte{0, 33, 207}: "The Crypto Group",
+ [3]byte{0, 33, 208}: "Global Display Solutions Spa",
+ [3]byte{0, 33, 209}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 33, 210}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 33, 211}: "BOCOM SECURITY(ASIA PACIFIC) LIMITED",
+ [3]byte{0, 33, 212}: "Vollmer Werke GmbH",
+ [3]byte{0, 33, 213}: "X2E GmbH",
+ [3]byte{0, 33, 214}: "LXI Consortium",
+ [3]byte{0, 33, 215}: "Cisco Systems, Inc",
+ [3]byte{0, 33, 216}: "Cisco Systems, Inc",
+ [3]byte{0, 33, 217}: "SEKONIC CORPORATION",
+ [3]byte{0, 33, 218}: "Automation Products Group Inc.",
+ [3]byte{0, 33, 219}: "Santachi Video Technology (Shenzhen) Co., Ltd.",
+ [3]byte{0, 33, 220}: "TECNOALARM S.r.l.",
+ [3]byte{0, 33, 221}: "Northstar Systems Corp",
+ [3]byte{0, 33, 222}: "Firepro Wireless",
+ [3]byte{0, 33, 223}: "Martin Christ GmbH",
+ [3]byte{0, 33, 224}: "CommAgility Ltd",
+ [3]byte{0, 33, 225}: "Nortel Networks",
+ [3]byte{0, 33, 226}: "visago Systems & Controls GmbH & Co. KG",
+ [3]byte{0, 33, 227}: "SerialTek LLC",
+ [3]byte{0, 33, 228}: "I-WIN",
+ [3]byte{0, 33, 229}: "Display Solution AG",
+ [3]byte{0, 33, 230}: "Starlight Video Limited",
+ [3]byte{0, 33, 231}: "Informatics Services Corporation",
+ [3]byte{0, 33, 232}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{0, 33, 233}: "Apple, Inc.",
+ [3]byte{0, 33, 234}: "Bystronic Laser AG",
+ [3]byte{0, 33, 235}: "ESP SYSTEMS, LLC",
+ [3]byte{0, 33, 236}: "Solutronic GmbH",
+ [3]byte{0, 33, 237}: "Telegesis",
+ [3]byte{0, 33, 238}: "Full Spectrum Inc.",
+ [3]byte{0, 33, 239}: "Kapsys",
+ [3]byte{0, 33, 240}: "EW3 Technologies LLC",
+ [3]byte{0, 33, 241}: "Tutus Data AB",
+ [3]byte{0, 33, 242}: "EASY3CALL Technology Limited",
+ [3]byte{0, 33, 243}: "Si14 SpA",
+ [3]byte{0, 33, 244}: "INRange Systems, Inc",
+ [3]byte{0, 33, 245}: "Western Engravers Supply, Inc.",
+ [3]byte{0, 33, 246}: "Oracle Corporation",
+ [3]byte{0, 33, 247}: "HPN Supply Chain",
+ [3]byte{0, 33, 248}: "Enseo, Inc.",
+ [3]byte{0, 33, 249}: "WIRECOM Technologies",
+ [3]byte{0, 33, 250}: "A4SP Technologies Ltd.",
+ [3]byte{0, 33, 251}: "LG Electronics (Mobile Communications)",
+ [3]byte{0, 33, 252}: "Nokia Danmark A/S",
+ [3]byte{0, 33, 253}: "LACROIX TRAFFIC S.A.U",
+ [3]byte{0, 33, 254}: "Nokia Danmark A/S",
+ [3]byte{0, 33, 255}: "Cyfrowy Polsat SA",
+ [3]byte{0, 34, 0}: "IBM Corp",
+ [3]byte{0, 34, 1}: "Aksys Networks Inc",
+ [3]byte{0, 34, 2}: "Excito Elektronik i Skåne AB",
+ [3]byte{0, 34, 3}: "Glensound Electronics Ltd",
+ [3]byte{0, 34, 4}: "KORATEK",
+ [3]byte{0, 34, 5}: "WeLink Solutions, Inc.",
+ [3]byte{0, 34, 6}: "Cyberdyne Inc.",
+ [3]byte{0, 34, 7}: "Inteno Broadband Technology AB",
+ [3]byte{0, 34, 8}: "Certicom Corp",
+ [3]byte{0, 34, 9}: "Omron Healthcare Co., Ltd",
+ [3]byte{0, 34, 10}: "OnLive, Inc",
+ [3]byte{0, 34, 11}: "National Source Coding Center",
+ [3]byte{0, 34, 12}: "Cisco Systems, Inc",
+ [3]byte{0, 34, 13}: "Cisco Systems, Inc",
+ [3]byte{0, 34, 14}: "Indigo Security Co., Ltd.",
+ [3]byte{0, 34, 15}: "MoCA (Multimedia over Coax Alliance)",
+ [3]byte{0, 34, 16}: "ARRIS Group, Inc.",
+ [3]byte{0, 34, 17}: "Rohati Systems",
+ [3]byte{0, 34, 18}: "CAI Networks, Inc.",
+ [3]byte{0, 34, 19}: "PCI CORPORATION",
+ [3]byte{0, 34, 20}: "RINNAI KOREA",
+ [3]byte{0, 34, 21}: "ASUSTek COMPUTER INC.",
+ [3]byte{0, 34, 22}: "SHIBAURA VENDING MACHINE CORPORATION",
+ [3]byte{0, 34, 23}: "Neat Electronics",
+ [3]byte{0, 34, 24}: "Verivue Inc.",
+ [3]byte{0, 34, 25}: "Dell Inc.",
+ [3]byte{0, 34, 26}: "Audio Precision",
+ [3]byte{0, 34, 27}: "Morega Systems",
+ [3]byte{0, 34, 28}: "Private",
+ [3]byte{0, 34, 29}: "Freegene Technology LTD",
+ [3]byte{0, 34, 30}: "Media Devices Co., Ltd.",
+ [3]byte{0, 34, 31}: "eSang Technologies Co., Ltd.",
+ [3]byte{0, 34, 32}: "Mitac Technology Corp",
+ [3]byte{0, 34, 33}: "ITOH DENKI CO,LTD.",
+ [3]byte{0, 34, 34}: "Schaffner Deutschland GmbH",
+ [3]byte{0, 34, 35}: "TimeKeeping Systems, Inc.",
+ [3]byte{0, 34, 36}: "Good Will Instrument Co., Ltd.",
+ [3]byte{0, 34, 37}: "Thales Avionics Ltd",
+ [3]byte{0, 34, 38}: "Avaak, Inc.",
+ [3]byte{0, 34, 39}: "uv-electronic GmbH",
+ [3]byte{0, 34, 40}: "Breeze Innovations Ltd.",
+ [3]byte{0, 34, 41}: "Compumedics Ltd",
+ [3]byte{0, 34, 42}: "SoundEar A/S",
+ [3]byte{0, 34, 43}: "Nucomm, Inc.",
+ [3]byte{0, 34, 44}: "Ceton Corp",
+ [3]byte{0, 34, 45}: "SMC Networks Inc.",
+ [3]byte{0, 34, 46}: "maintech GmbH",
+ [3]byte{0, 34, 47}: "Open Grid Computing, Inc.",
+ [3]byte{0, 34, 48}: "FutureLogic Inc.",
+ [3]byte{0, 34, 49}: "SMT&C Co., Ltd.",
+ [3]byte{0, 34, 50}: "Design Design Technology Ltd",
+ [3]byte{0, 34, 51}: "ADB Broadband Italia",
+ [3]byte{0, 34, 52}: "Corventis Inc.",
+ [3]byte{0, 34, 53}: "Strukton Systems bv",
+ [3]byte{0, 34, 54}: "VECTOR SP. Z O.O.",
+ [3]byte{0, 34, 55}: "Shinhint Group",
+ [3]byte{0, 34, 56}: "LOGIPLUS",
+ [3]byte{0, 34, 57}: "Indiana Life Sciences Incorporated",
+ [3]byte{0, 34, 58}: "Cisco SPVTG",
+ [3]byte{0, 34, 59}: "Communication Networks, LLC",
+ [3]byte{0, 34, 60}: "RATIO Entwicklungen GmbH",
+ [3]byte{0, 34, 61}: "JumpGen Systems, LLC",
+ [3]byte{0, 34, 62}: "IRTrans GmbH",
+ [3]byte{0, 34, 63}: "NETGEAR",
+ [3]byte{0, 34, 64}: "Universal Telecom S/A",
+ [3]byte{0, 34, 65}: "Apple, Inc.",
+ [3]byte{0, 34, 66}: "Alacron Inc.",
+ [3]byte{0, 34, 67}: "AzureWave Technology Inc.",
+ [3]byte{0, 34, 68}: "Chengdu Linkon Communications Device Co., Ltd",
+ [3]byte{0, 34, 69}: "Leine & Linde AB",
+ [3]byte{0, 34, 70}: "Evoc Intelligent Technology Co.,Ltd.",
+ [3]byte{0, 34, 71}: "DAC ENGINEERING CO., LTD.",
+ [3]byte{0, 34, 72}: "Microsoft Corporation",
+ [3]byte{0, 34, 73}: "HOME MULTIENERGY SL",
+ [3]byte{0, 34, 74}: "RAYLASE AG",
+ [3]byte{0, 34, 75}: "AIRTECH TECHNOLOGIES, INC.",
+ [3]byte{0, 34, 76}: "Nintendo Co., Ltd.",
+ [3]byte{0, 34, 77}: "MITAC INTERNATIONAL CORP.",
+ [3]byte{0, 34, 78}: "SEEnergy Corp.",
+ [3]byte{0, 34, 79}: "Byzoro Networks Ltd.",
+ [3]byte{0, 34, 80}: "Point Six Wireless, LLC",
+ [3]byte{0, 34, 81}: "Lumasense Technologies",
+ [3]byte{0, 34, 82}: "ZOLL Lifecor Corporation",
+ [3]byte{0, 34, 83}: "Entorian Technologies",
+ [3]byte{0, 34, 84}: "Bigelow Aerospace",
+ [3]byte{0, 34, 85}: "Cisco Systems, Inc",
+ [3]byte{0, 34, 86}: "Cisco Systems, Inc",
+ [3]byte{0, 34, 87}: "3COM EUROPE LTD",
+ [3]byte{0, 34, 88}: "Taiyo Yuden Co., Ltd.",
+ [3]byte{0, 34, 89}: "Guangzhou New Postcom Equipment Co.,Ltd.",
+ [3]byte{0, 34, 90}: "Garde Security AB",
+ [3]byte{0, 34, 91}: "Teradici Corporation",
+ [3]byte{0, 34, 92}: "Multimedia & Communication Technology",
+ [3]byte{0, 34, 93}: "Digicable Network India Pvt. Ltd.",
+ [3]byte{0, 34, 94}: "Uwin Technologies Co.,LTD",
+ [3]byte{0, 34, 95}: "Liteon Technology Corporation",
+ [3]byte{0, 34, 96}: "AFREEY Inc.",
+ [3]byte{0, 34, 97}: "Frontier Silicon Ltd",
+ [3]byte{0, 34, 98}: "BEP Marine",
+ [3]byte{0, 34, 99}: "Koos Technical Services, Inc.",
+ [3]byte{0, 34, 100}: "Hewlett Packard",
+ [3]byte{0, 34, 101}: "Nokia Danmark A/S",
+ [3]byte{0, 34, 102}: "Nokia Danmark A/S",
+ [3]byte{0, 34, 103}: "Nortel Networks",
+ [3]byte{0, 34, 104}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{0, 34, 105}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{0, 34, 106}: "Honeywell",
+ [3]byte{0, 34, 107}: "Cisco-Linksys, LLC",
+ [3]byte{0, 34, 108}: "LinkSprite Technologies, Inc.",
+ [3]byte{0, 34, 109}: "Shenzhen GIEC Electronics Co., Ltd.",
+ [3]byte{0, 34, 110}: "Gowell Electronic Limited",
+ [3]byte{0, 34, 111}: "3onedata Technology Co. Ltd.",
+ [3]byte{0, 34, 112}: "ABK North America, LLC",
+ [3]byte{0, 34, 113}: "Jäger Computergesteuerte Meßtechnik GmbH.",
+ [3]byte{0, 34, 114}: "American Micro-Fuel Device Corp.",
+ [3]byte{0, 34, 115}: "Techway",
+ [3]byte{0, 34, 116}: "FamilyPhone AB",
+ [3]byte{0, 34, 117}: "Belkin International Inc.",
+ [3]byte{0, 34, 118}: "Triple EYE B.V.",
+ [3]byte{0, 34, 119}: "NEC Australia Pty Ltd",
+ [3]byte{0, 34, 120}: "Shenzhen Tongfang Multimedia Technology Co.,Ltd.",
+ [3]byte{0, 34, 121}: "Nippon Conlux Co., Ltd.",
+ [3]byte{0, 34, 122}: "Telecom Design",
+ [3]byte{0, 34, 123}: "Apogee Labs, Inc.",
+ [3]byte{0, 34, 124}: "Woori SMT Co.,ltd",
+ [3]byte{0, 34, 125}: "YE DATA INC.",
+ [3]byte{0, 34, 126}: "Chengdu 30Kaitian Communication Industry Co.Ltd",
+ [3]byte{0, 34, 127}: "Ruckus Wireless",
+ [3]byte{0, 34, 128}: "A2B Electronics AB",
+ [3]byte{0, 34, 129}: "Daintree Networks Pty",
+ [3]byte{0, 34, 130}: "8086 Consultancy",
+ [3]byte{0, 34, 131}: "Juniper Networks",
+ [3]byte{0, 34, 132}: "DESAY A&V SCIENCE AND TECHNOLOGY CO.,LTD",
+ [3]byte{0, 34, 133}: "NOMUS COMM SYSTEMS",
+ [3]byte{0, 34, 134}: "ASTRON",
+ [3]byte{0, 34, 135}: "Titan Wireless LLC",
+ [3]byte{0, 34, 136}: "Sagrad, Inc.",
+ [3]byte{0, 34, 137}: "Optosecurity Inc.",
+ [3]byte{0, 34, 138}: "Teratronik elektronische systeme gmbh",
+ [3]byte{0, 34, 139}: "Kensington Computer Products Group",
+ [3]byte{0, 34, 140}: "Photon Europe GmbH",
+ [3]byte{0, 34, 141}: "GBS Laboratories LLC",
+ [3]byte{0, 34, 142}: "TV-NUMERIC",
+ [3]byte{0, 34, 143}: "CNRS",
+ [3]byte{0, 34, 144}: "Cisco Systems, Inc",
+ [3]byte{0, 34, 145}: "Cisco Systems, Inc",
+ [3]byte{0, 34, 146}: "Cinetal",
+ [3]byte{0, 34, 147}: "zte corporation",
+ [3]byte{0, 34, 148}: "KYOCERA CORPORATION",
+ [3]byte{0, 34, 149}: "SGM Technology for lighting spa",
+ [3]byte{0, 34, 150}: "LinoWave Corporation",
+ [3]byte{0, 34, 151}: "XMOS Semiconductor",
+ [3]byte{0, 34, 152}: "Sony Mobile Communications AB",
+ [3]byte{0, 34, 153}: "SeaMicro Inc.",
+ [3]byte{0, 34, 154}: "Lastar, Inc.",
+ [3]byte{0, 34, 155}: "AverLogic Technologies, Inc.",
+ [3]byte{0, 34, 156}: "Verismo Networks Inc",
+ [3]byte{0, 34, 157}: "PYUNG-HWA IND.CO.,LTD",
+ [3]byte{0, 34, 158}: "Social Aid Research Co., Ltd.",
+ [3]byte{0, 34, 159}: "Sensys Traffic AB",
+ [3]byte{0, 34, 160}: "Delphi Corporation",
+ [3]byte{0, 34, 161}: "Huawei Symantec Technologies Co.,Ltd.",
+ [3]byte{0, 34, 162}: "Xtramus Technologies",
+ [3]byte{0, 34, 163}: "California Eastern Laboratories",
+ [3]byte{0, 34, 164}: "2Wire Inc",
+ [3]byte{0, 34, 165}: "Texas Instruments",
+ [3]byte{0, 34, 166}: "Sony Computer Entertainment America",
+ [3]byte{0, 34, 167}: "Tyco Electronics AMP GmbH",
+ [3]byte{0, 34, 168}: "Ouman Oy",
+ [3]byte{0, 34, 169}: "LG Electronics (Mobile Communications)",
+ [3]byte{0, 34, 170}: "Nintendo Co., Ltd.",
+ [3]byte{0, 34, 171}: "Shenzhen Turbosight Technology Ltd",
+ [3]byte{0, 34, 172}: "Hangzhou Siyuan Tech. Co., Ltd",
+ [3]byte{0, 34, 173}: "TELESIS TECHNOLOGIES, INC.",
+ [3]byte{0, 34, 174}: "Mattel Inc.",
+ [3]byte{0, 34, 175}: "Safety Vision",
+ [3]byte{0, 34, 176}: "D-Link Corporation",
+ [3]byte{0, 34, 177}: "Elbit Systems Ltd.",
+ [3]byte{0, 34, 178}: "4RF Communications Ltd",
+ [3]byte{0, 34, 179}: "Sei S.p.A.",
+ [3]byte{0, 34, 180}: "ARRIS Group, Inc.",
+ [3]byte{0, 34, 181}: "NOVITA",
+ [3]byte{0, 34, 182}: "Superflow Technologies Group",
+ [3]byte{0, 34, 183}: "GSS Grundig SAT-Systems GmbH",
+ [3]byte{0, 34, 184}: "Norcott",
+ [3]byte{0, 34, 185}: "Analogix Seminconductor, Inc",
+ [3]byte{0, 34, 186}: "HUTH Elektronik Systeme GmbH",
+ [3]byte{0, 34, 187}: "beyerdynamic GmbH & Co. KG",
+ [3]byte{0, 34, 188}: "JDSU France SAS",
+ [3]byte{0, 34, 189}: "Cisco Systems, Inc",
+ [3]byte{0, 34, 190}: "Cisco Systems, Inc",
+ [3]byte{0, 34, 191}: "SieAmp Group of Companies",
+ [3]byte{0, 34, 192}: "Shenzhen Forcelink Electronic Co, Ltd",
+ [3]byte{0, 34, 193}: "Active Storage Inc.",
+ [3]byte{0, 34, 194}: "Proview Eletrônica do Brasil LTDA",
+ [3]byte{0, 34, 195}: "Zeeport Technology Inc.",
+ [3]byte{0, 34, 196}: "epro GmbH",
+ [3]byte{0, 34, 197}: "INFORSON Co,Ltd.",
+ [3]byte{0, 34, 198}: "Sutus Inc",
+ [3]byte{0, 34, 199}: "SEGGER Microcontroller GmbH & Co. KG",
+ [3]byte{0, 34, 200}: "Applied Instruments B.V.",
+ [3]byte{0, 34, 201}: "Lenord, Bauer & Co GmbH",
+ [3]byte{0, 34, 202}: "Anviz Biometric Tech. Co., Ltd.",
+ [3]byte{0, 34, 203}: "IONODES Inc.",
+ [3]byte{0, 34, 204}: "SciLog, Inc.",
+ [3]byte{0, 34, 205}: "Ared Technology Co., Ltd.",
+ [3]byte{0, 34, 206}: "Cisco SPVTG",
+ [3]byte{0, 34, 207}: "PLANEX COMMUNICATIONS INC.",
+ [3]byte{0, 34, 208}: "Polar Electro Oy",
+ [3]byte{0, 34, 209}: "Albrecht Jung GmbH & Co. KG",
+ [3]byte{0, 34, 210}: "All Earth Comércio de Eletrônicos LTDA.",
+ [3]byte{0, 34, 211}: "Hub-Tech",
+ [3]byte{0, 34, 212}: "ComWorth Co., Ltd.",
+ [3]byte{0, 34, 213}: "Eaton Corp. Electrical Group Data Center Solutions - Pulizzi",
+ [3]byte{0, 34, 214}: "Cypak AB",
+ [3]byte{0, 34, 215}: "Nintendo Co., Ltd.",
+ [3]byte{0, 34, 216}: "Shenzhen GST Security and Safety Technology Limited",
+ [3]byte{0, 34, 217}: "Fortex Industrial Ltd.",
+ [3]byte{0, 34, 218}: "ANATEK, LLC",
+ [3]byte{0, 34, 219}: "Translogic Corporation",
+ [3]byte{0, 34, 220}: "Vigil Health Solutions Inc.",
+ [3]byte{0, 34, 221}: "Protecta Electronics Ltd",
+ [3]byte{0, 34, 222}: "OPPO Digital, Inc.",
+ [3]byte{0, 34, 223}: "TAMUZ Monitors",
+ [3]byte{0, 34, 224}: "Atlantic Software Technologies S.r.L.",
+ [3]byte{0, 34, 225}: "ZORT Labs, LLC.",
+ [3]byte{0, 34, 226}: "WABTEC Transit Division",
+ [3]byte{0, 34, 227}: "Amerigon",
+ [3]byte{0, 34, 228}: "APASS TECHNOLOGY CO., LTD.",
+ [3]byte{0, 34, 229}: "Fisher-Rosemount Systems Inc.",
+ [3]byte{0, 34, 230}: "Intelligent Data",
+ [3]byte{0, 34, 231}: "WPS Parking Systems",
+ [3]byte{0, 34, 232}: "Applition Co., Ltd.",
+ [3]byte{0, 34, 233}: "ProVision Communications",
+ [3]byte{0, 34, 234}: "Rustelcom Inc.",
+ [3]byte{0, 34, 235}: "Data Respons A/S",
+ [3]byte{0, 34, 236}: "IDEALBT TECHNOLOGY CORPORATION",
+ [3]byte{0, 34, 237}: "TSI Power Corporation",
+ [3]byte{0, 34, 238}: "Algo Communication Products Ltd",
+ [3]byte{0, 34, 239}: "iWDL Technologies",
+ [3]byte{0, 34, 240}: "3 Greens Aviation Limited",
+ [3]byte{0, 34, 241}: "Private",
+ [3]byte{0, 34, 242}: "SunPower Corp",
+ [3]byte{0, 34, 243}: "SHARP Corporation",
+ [3]byte{0, 34, 244}: "AMPAK Technology, Inc.",
+ [3]byte{0, 34, 245}: "Advanced Realtime Tracking GmbH",
+ [3]byte{0, 34, 246}: "Syracuse Research Corporation",
+ [3]byte{0, 34, 247}: "Conceptronic",
+ [3]byte{0, 34, 248}: "PIMA Electronic Systems Ltd.",
+ [3]byte{0, 34, 249}: "Pollin Electronic GmbH",
+ [3]byte{0, 34, 250}: "Intel Corporate",
+ [3]byte{0, 34, 251}: "Intel Corporate",
+ [3]byte{0, 34, 252}: "Nokia Danmark A/S",
+ [3]byte{0, 34, 253}: "Nokia Danmark A/S",
+ [3]byte{0, 34, 254}: "Advanced Illumination",
+ [3]byte{0, 34, 255}: "NIVIS LLC",
+ [3]byte{0, 35, 0}: "Cayee Computer Ltd.",
+ [3]byte{0, 35, 1}: "Witron Technology Limited",
+ [3]byte{0, 35, 2}: "Cobalt Digital, Inc.",
+ [3]byte{0, 35, 3}: "LITE-ON IT Corporation",
+ [3]byte{0, 35, 4}: "Cisco Systems, Inc",
+ [3]byte{0, 35, 5}: "Cisco Systems, Inc",
+ [3]byte{0, 35, 6}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{0, 35, 7}: "FUTURE INNOVATION TECH CO.,LTD",
+ [3]byte{0, 35, 8}: "Arcadyan Technology Corporation",
+ [3]byte{0, 35, 9}: "Janam Technologies LLC",
+ [3]byte{0, 35, 10}: "ARBURG GmbH & Co KG",
+ [3]byte{0, 35, 11}: "ARRIS Group, Inc.",
+ [3]byte{0, 35, 12}: "CLOVER ELECTRONICS CO.,LTD.",
+ [3]byte{0, 35, 13}: "Nortel Networks",
+ [3]byte{0, 35, 14}: "Gorba AG",
+ [3]byte{0, 35, 15}: "Hirsch Electronics Corporation",
+ [3]byte{0, 35, 16}: "LNC Technology Co., Ltd.",
+ [3]byte{0, 35, 17}: "Gloscom Co., Ltd.",
+ [3]byte{0, 35, 18}: "Apple, Inc.",
+ [3]byte{0, 35, 19}: "Qool Technologies Ltd.",
+ [3]byte{0, 35, 20}: "Intel Corporate",
+ [3]byte{0, 35, 21}: "Intel Corporate",
+ [3]byte{0, 35, 22}: "KISAN ELECTRONICS CO",
+ [3]byte{0, 35, 23}: "Lasercraft Inc",
+ [3]byte{0, 35, 24}: "Toshiba",
+ [3]byte{0, 35, 25}: "Sielox LLC",
+ [3]byte{0, 35, 26}: "ITF Co., Ltd.",
+ [3]byte{0, 35, 27}: "Danaher Motion - Kollmorgen",
+ [3]byte{0, 35, 28}: "Fourier Systems Ltd.",
+ [3]byte{0, 35, 29}: "Deltacom Electronics Ltd",
+ [3]byte{0, 35, 30}: "Cezzer Multimedia Technologies",
+ [3]byte{0, 35, 31}: "Guangda Electronic & Telecommunication Technology Development Co., Ltd.",
+ [3]byte{0, 35, 32}: "Nicira Networks",
+ [3]byte{0, 35, 33}: "Avitech International Corp",
+ [3]byte{0, 35, 34}: "KISS Teknical Solutions, Inc.",
+ [3]byte{0, 35, 35}: "Zylin AS",
+ [3]byte{0, 35, 36}: "G-PRO COMPUTER",
+ [3]byte{0, 35, 37}: "IOLAN Holding",
+ [3]byte{0, 35, 38}: "FUJITSU LIMITED",
+ [3]byte{0, 35, 39}: "Shouyo Electronics CO., LTD",
+ [3]byte{0, 35, 40}: "ALCON TELECOMMUNICATIONS CO., LTD.",
+ [3]byte{0, 35, 41}: "DDRdrive LLC",
+ [3]byte{0, 35, 42}: "eonas IT-Beratung und -Entwicklung GmbH",
+ [3]byte{0, 35, 43}: "IRD A/S",
+ [3]byte{0, 35, 44}: "Senticare",
+ [3]byte{0, 35, 45}: "SandForce",
+ [3]byte{0, 35, 46}: "Kedah Electronics Engineering, LLC",
+ [3]byte{0, 35, 47}: "Advanced Card Systems Ltd.",
+ [3]byte{0, 35, 48}: "DIZIPIA, INC.",
+ [3]byte{0, 35, 49}: "Nintendo Co., Ltd.",
+ [3]byte{0, 35, 50}: "Apple, Inc.",
+ [3]byte{0, 35, 51}: "Cisco Systems, Inc",
+ [3]byte{0, 35, 52}: "Cisco Systems, Inc",
+ [3]byte{0, 35, 53}: "Linkflex Co.,Ltd",
+ [3]byte{0, 35, 54}: "METEL s.r.o.",
+ [3]byte{0, 35, 55}: "Global Star Solutions ULC",
+ [3]byte{0, 35, 56}: "OJ-Electronics A/S",
+ [3]byte{0, 35, 57}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 35, 58}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 35, 59}: "C-Matic Systems Ltd",
+ [3]byte{0, 35, 60}: "Alflex",
+ [3]byte{0, 35, 61}: "Novero holding B.V.",
+ [3]byte{0, 35, 62}: "Alcatel-Lucent IPD",
+ [3]byte{0, 35, 63}: "Purechoice Inc",
+ [3]byte{0, 35, 64}: "MiXTelematics",
+ [3]byte{0, 35, 65}: "Vanderbilt International (SWE) AB",
+ [3]byte{0, 35, 66}: "Coffee Equipment Company",
+ [3]byte{0, 35, 67}: "TEM AG",
+ [3]byte{0, 35, 68}: "Objective Interface Systems, Inc.",
+ [3]byte{0, 35, 69}: "Sony Mobile Communications AB",
+ [3]byte{0, 35, 70}: "Vestac",
+ [3]byte{0, 35, 71}: "ProCurve Networking by HP",
+ [3]byte{0, 35, 72}: "Sagemcom Broadband SAS",
+ [3]byte{0, 35, 73}: "Helmholtz Centre Berlin for Material and Energy",
+ [3]byte{0, 35, 74}: "Private",
+ [3]byte{0, 35, 75}: "Inyuan Technology Inc.",
+ [3]byte{0, 35, 76}: "KTC AB",
+ [3]byte{0, 35, 77}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{0, 35, 78}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{0, 35, 79}: "Luminous Power Technologies Pvt. Ltd.",
+ [3]byte{0, 35, 80}: "LynTec",
+ [3]byte{0, 35, 81}: "2Wire Inc",
+ [3]byte{0, 35, 82}: "DATASENSOR S.p.A.",
+ [3]byte{0, 35, 83}: "F E T Elettronica snc",
+ [3]byte{0, 35, 84}: "ASUSTek COMPUTER INC.",
+ [3]byte{0, 35, 85}: "Kinco Automation(Shanghai) Ltd.",
+ [3]byte{0, 35, 86}: "Packet Forensics LLC",
+ [3]byte{0, 35, 87}: "Pitronot Technologies and Engineering P.T.E. Ltd.",
+ [3]byte{0, 35, 88}: "SYSTEL SA",
+ [3]byte{0, 35, 89}: "Benchmark Electronics ( Thailand ) Public Company Limited",
+ [3]byte{0, 35, 90}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+ [3]byte{0, 35, 91}: "Gulfstream",
+ [3]byte{0, 35, 92}: "Aprius, Inc.",
+ [3]byte{0, 35, 93}: "Cisco Systems, Inc",
+ [3]byte{0, 35, 94}: "Cisco Systems, Inc",
+ [3]byte{0, 35, 95}: "Silicon Micro Sensors GmbH",
+ [3]byte{0, 35, 96}: "Lookit Technology Co., Ltd",
+ [3]byte{0, 35, 97}: "Unigen Corporation",
+ [3]byte{0, 35, 98}: "Goldline Controls",
+ [3]byte{0, 35, 99}: "Zhuhai Raysharp Technology Co.,Ltd",
+ [3]byte{0, 35, 100}: "Power Instruments Pte Ltd",
+ [3]byte{0, 35, 101}: "Insta Elektro GmbH",
+ [3]byte{0, 35, 102}: "Beijing Siasun Electronic System Co.,Ltd.",
+ [3]byte{0, 35, 103}: "UniControls a.s.",
+ [3]byte{0, 35, 104}: "Zebra Technologies Inc",
+ [3]byte{0, 35, 105}: "Cisco-Linksys, LLC",
+ [3]byte{0, 35, 106}: "SmartRG Inc",
+ [3]byte{0, 35, 107}: "Xembedded, Inc.",
+ [3]byte{0, 35, 108}: "Apple, Inc.",
+ [3]byte{0, 35, 109}: "ResMed Ltd",
+ [3]byte{0, 35, 110}: "Burster GmbH & Co KG",
+ [3]byte{0, 35, 111}: "DAQ System",
+ [3]byte{0, 35, 112}: "Snell",
+ [3]byte{0, 35, 113}: "SOAM Systel",
+ [3]byte{0, 35, 114}: "MORE STAR INDUSTRIAL GROUP LIMITED",
+ [3]byte{0, 35, 115}: "GridIron Systems, Inc.",
+ [3]byte{0, 35, 116}: "ARRIS Group, Inc.",
+ [3]byte{0, 35, 117}: "ARRIS Group, Inc.",
+ [3]byte{0, 35, 118}: "HTC Corporation",
+ [3]byte{0, 35, 119}: "Isotek Electronics Ltd",
+ [3]byte{0, 35, 120}: "GN Netcom A/S",
+ [3]byte{0, 35, 121}: "Union Business Machines Co. Ltd.",
+ [3]byte{0, 35, 122}: "RIM",
+ [3]byte{0, 35, 123}: "WHDI LLC",
+ [3]byte{0, 35, 124}: "NEOTION",
+ [3]byte{0, 35, 125}: "Hewlett Packard",
+ [3]byte{0, 35, 126}: "ELSTER GMBH",
+ [3]byte{0, 35, 127}: "PLANTRONICS, INC.",
+ [3]byte{0, 35, 128}: "Nanoteq",
+ [3]byte{0, 35, 129}: "Lengda Technology(Xiamen) Co.,Ltd.",
+ [3]byte{0, 35, 130}: "Lih Rong electronic Enterprise Co., Ltd.",
+ [3]byte{0, 35, 131}: "InMage Systems Inc",
+ [3]byte{0, 35, 132}: "GGH Engineering s.r.l.",
+ [3]byte{0, 35, 133}: "ANTIPODE",
+ [3]byte{0, 35, 134}: "Tour & Andersson AB",
+ [3]byte{0, 35, 135}: "ThinkFlood, Inc.",
+ [3]byte{0, 35, 136}: "V.T. Telematica S.p.a.",
+ [3]byte{0, 35, 137}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{0, 35, 138}: "Ciena Corporation",
+ [3]byte{0, 35, 139}: "QUANTA COMPUTER INC.",
+ [3]byte{0, 35, 140}: "Private",
+ [3]byte{0, 35, 141}: "Techno Design Co., Ltd.",
+ [3]byte{0, 35, 142}: "ADB Broadband Italia",
+ [3]byte{0, 35, 143}: "NIDEC COPAL CORPORATION",
+ [3]byte{0, 35, 144}: "Algolware Corporation",
+ [3]byte{0, 35, 145}: "Maxian",
+ [3]byte{0, 35, 146}: "Proteus Industries Inc.",
+ [3]byte{0, 35, 147}: "AJINEXTEK",
+ [3]byte{0, 35, 148}: "Samjeon",
+ [3]byte{0, 35, 149}: "ARRIS Group, Inc.",
+ [3]byte{0, 35, 150}: "ANDES TECHNOLOGY CORPORATION",
+ [3]byte{0, 35, 151}: "Westell Technologies Inc.",
+ [3]byte{0, 35, 152}: "Vutlan sro",
+ [3]byte{0, 35, 153}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 35, 154}: "EasyData Hardware GmbH",
+ [3]byte{0, 35, 155}: "Elster Solutions, LLC",
+ [3]byte{0, 35, 156}: "Juniper Networks",
+ [3]byte{0, 35, 157}: "Mapower Electronics Co., Ltd",
+ [3]byte{0, 35, 158}: "Jiangsu Lemote Technology Corporation Limited",
+ [3]byte{0, 35, 159}: "Institut für Prüftechnik",
+ [3]byte{0, 35, 160}: "Hana CNS Co., LTD.",
+ [3]byte{0, 35, 161}: "Trend Electronics Ltd",
+ [3]byte{0, 35, 162}: "ARRIS Group, Inc.",
+ [3]byte{0, 35, 163}: "ARRIS Group, Inc.",
+ [3]byte{0, 35, 164}: "New Concepts Development Corp.",
+ [3]byte{0, 35, 165}: "SageTV, LLC",
+ [3]byte{0, 35, 166}: "E-Mon",
+ [3]byte{0, 35, 167}: "Redpine Signals, Inc.",
+ [3]byte{0, 35, 168}: "Marshall Electronics",
+ [3]byte{0, 35, 169}: "Beijing Detianquan Electromechanical Equipment Co., Ltd",
+ [3]byte{0, 35, 170}: "HFR, Inc.",
+ [3]byte{0, 35, 171}: "Cisco Systems, Inc",
+ [3]byte{0, 35, 172}: "Cisco Systems, Inc",
+ [3]byte{0, 35, 173}: "Xmark Corporation",
+ [3]byte{0, 35, 174}: "Dell Inc.",
+ [3]byte{0, 35, 175}: "ARRIS Group, Inc.",
+ [3]byte{0, 35, 176}: "COMXION Technology Inc.",
+ [3]byte{0, 35, 177}: "Longcheer Technology (Singapore) Pte Ltd",
+ [3]byte{0, 35, 178}: "Intelligent Mechatronic Systems Inc",
+ [3]byte{0, 35, 179}: "Lyyn AB",
+ [3]byte{0, 35, 180}: "Nokia Danmark A/S",
+ [3]byte{0, 35, 181}: "ORTANA LTD",
+ [3]byte{0, 35, 182}: "SECURITE COMMUNICATIONS / HONEYWELL",
+ [3]byte{0, 35, 183}: "Q-Light Co., Ltd.",
+ [3]byte{0, 35, 184}: "Sichuan Jiuzhou Electronic Technology Co.,Ltd",
+ [3]byte{0, 35, 185}: "Airbus Defence and Space Deutschland GmbH",
+ [3]byte{0, 35, 186}: "Chroma",
+ [3]byte{0, 35, 187}: "Schmitt Industries",
+ [3]byte{0, 35, 188}: "EQ-SYS GmbH",
+ [3]byte{0, 35, 189}: "Digital Ally, Inc.",
+ [3]byte{0, 35, 190}: "Cisco SPVTG",
+ [3]byte{0, 35, 191}: "Mainpine, Inc.",
+ [3]byte{0, 35, 192}: "Broadway Networks",
+ [3]byte{0, 35, 193}: "Securitas Direct AB",
+ [3]byte{0, 35, 194}: "SAMSUNG Electronics. Co. LTD",
+ [3]byte{0, 35, 195}: "LogMeIn, Inc.",
+ [3]byte{0, 35, 196}: "Lux Lumen",
+ [3]byte{0, 35, 197}: "Radiation Safety and Control Services Inc",
+ [3]byte{0, 35, 198}: "SMC Corporation",
+ [3]byte{0, 35, 199}: "AVSystem",
+ [3]byte{0, 35, 200}: "TEAM-R",
+ [3]byte{0, 35, 201}: "Sichuan Tianyi Information Science & Technology Stock CO.,LTD",
+ [3]byte{0, 35, 202}: "Behind The Set, LLC",
+ [3]byte{0, 35, 203}: "Shenzhen Full-join Technology Co.,Ltd",
+ [3]byte{0, 35, 204}: "Nintendo Co., Ltd.",
+ [3]byte{0, 35, 205}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{0, 35, 206}: "KITA DENSHI CORPORATION",
+ [3]byte{0, 35, 207}: "CUMMINS-ALLISON CORP.",
+ [3]byte{0, 35, 208}: "Uniloc USA Inc.",
+ [3]byte{0, 35, 209}: "TRG",
+ [3]byte{0, 35, 210}: "Inhand Electronics, Inc.",
+ [3]byte{0, 35, 211}: "AirLink WiFi Networking Corp.",
+ [3]byte{0, 35, 212}: "Texas Instruments",
+ [3]byte{0, 35, 213}: "WAREMA electronic GmbH",
+ [3]byte{0, 35, 214}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 35, 215}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 35, 216}: "Ball-It Oy",
+ [3]byte{0, 35, 217}: "Banner Engineering",
+ [3]byte{0, 35, 218}: "Industrial Computer Source (Deutschland)GmbH",
+ [3]byte{0, 35, 219}: "saxnet gmbh",
+ [3]byte{0, 35, 220}: "Benein, Inc",
+ [3]byte{0, 35, 221}: "ELGIN S.A.",
+ [3]byte{0, 35, 222}: "Ansync Inc.",
+ [3]byte{0, 35, 223}: "Apple, Inc.",
+ [3]byte{0, 35, 224}: "INO Therapeutics LLC",
+ [3]byte{0, 35, 225}: "Cavena Image Products AB",
+ [3]byte{0, 35, 226}: "SEA Signalisation",
+ [3]byte{0, 35, 227}: "Microtronic AG",
+ [3]byte{0, 35, 228}: "IPnect co. ltd.",
+ [3]byte{0, 35, 229}: "IPaXiom Networks",
+ [3]byte{0, 35, 230}: "Pirkus, Inc.",
+ [3]byte{0, 35, 231}: "Hinke A/S",
+ [3]byte{0, 35, 232}: "Demco Corp.",
+ [3]byte{0, 35, 233}: "F5 Networks, Inc.",
+ [3]byte{0, 35, 234}: "Cisco Systems, Inc",
+ [3]byte{0, 35, 235}: "Cisco Systems, Inc",
+ [3]byte{0, 35, 236}: "Algorithmix GmbH",
+ [3]byte{0, 35, 237}: "ARRIS Group, Inc.",
+ [3]byte{0, 35, 238}: "ARRIS Group, Inc.",
+ [3]byte{0, 35, 239}: "Zuend Systemtechnik AG",
+ [3]byte{0, 35, 240}: "Shanghai Jinghan Weighing Apparatus Co. Ltd.",
+ [3]byte{0, 35, 241}: "Sony Mobile Communications AB",
+ [3]byte{0, 35, 242}: "TVLogic",
+ [3]byte{0, 35, 243}: "Glocom, Inc.",
+ [3]byte{0, 35, 244}: "Masternaut",
+ [3]byte{0, 35, 245}: "WILO SE",
+ [3]byte{0, 35, 246}: "Softwell Technology Co., Ltd.",
+ [3]byte{0, 35, 247}: "Private",
+ [3]byte{0, 35, 248}: "Zyxel Communications Corporation",
+ [3]byte{0, 35, 249}: "Double-Take Software, INC.",
+ [3]byte{0, 35, 250}: "RG Nets, Inc.",
+ [3]byte{0, 35, 251}: "IP Datatel, LLC.",
+ [3]byte{0, 35, 252}: "Ultra Stereo Labs, Inc",
+ [3]byte{0, 35, 253}: "AFT Atlas Fahrzeugtechnik GmbH",
+ [3]byte{0, 35, 254}: "Biodevices, SA",
+ [3]byte{0, 35, 255}: "Beijing HTTC Technology Ltd.",
+ [3]byte{0, 36, 0}: "Nortel Networks",
+ [3]byte{0, 36, 1}: "D-Link Corporation",
+ [3]byte{0, 36, 2}: "Op-Tection GmbH",
+ [3]byte{0, 36, 3}: "Nokia Danmark A/S",
+ [3]byte{0, 36, 4}: "Nokia Danmark A/S",
+ [3]byte{0, 36, 5}: "Dilog Nordic AB",
+ [3]byte{0, 36, 6}: "Pointmobile",
+ [3]byte{0, 36, 7}: "TELEM SAS",
+ [3]byte{0, 36, 8}: "Pacific Biosciences",
+ [3]byte{0, 36, 9}: "The Toro Company",
+ [3]byte{0, 36, 10}: "US Beverage Net",
+ [3]byte{0, 36, 11}: "Virtual Computer Inc.",
+ [3]byte{0, 36, 12}: "DELEC GmbH",
+ [3]byte{0, 36, 13}: "OnePath Networks LTD.",
+ [3]byte{0, 36, 14}: "Inventec Besta Co., Ltd.",
+ [3]byte{0, 36, 15}: "Ishii Tool & Engineering Corporation",
+ [3]byte{0, 36, 16}: "NUETEQ Technology,Inc.",
+ [3]byte{0, 36, 17}: "PharmaSmart LLC",
+ [3]byte{0, 36, 18}: "Benign Technologies Co, Ltd.",
+ [3]byte{0, 36, 19}: "Cisco Systems, Inc",
+ [3]byte{0, 36, 20}: "Cisco Systems, Inc",
+ [3]byte{0, 36, 21}: "Magnetic Autocontrol GmbH",
+ [3]byte{0, 36, 22}: "Any Use",
+ [3]byte{0, 36, 23}: "Thomson Telecom Belgium",
+ [3]byte{0, 36, 24}: "Nextwave Semiconductor",
+ [3]byte{0, 36, 25}: "Private",
+ [3]byte{0, 36, 26}: "Red Beetle Inc.",
+ [3]byte{0, 36, 27}: "iWOW Communications Pte Ltd",
+ [3]byte{0, 36, 28}: "FuGang Electronic (DG) Co.,Ltd",
+ [3]byte{0, 36, 29}: "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+ [3]byte{0, 36, 30}: "Nintendo Co., Ltd.",
+ [3]byte{0, 36, 31}: "DCT-Delta GmbH",
+ [3]byte{0, 36, 32}: "NetUP Inc.",
+ [3]byte{0, 36, 33}: "MICRO-STAR INT'L CO., LTD.",
+ [3]byte{0, 36, 34}: "Knapp Logistik Automation GmbH",
+ [3]byte{0, 36, 35}: "AzureWave Technologies (Shanghai) Inc.",
+ [3]byte{0, 36, 36}: "Ace Axis Limited",
+ [3]byte{0, 36, 37}: "Shenzhenshi chuangzhicheng Technology Co.,Ltd",
+ [3]byte{0, 36, 38}: "NOHMI BOSAI LTD.",
+ [3]byte{0, 36, 39}: "SSI COMPUTER CORP",
+ [3]byte{0, 36, 40}: "EnergyICT",
+ [3]byte{0, 36, 41}: "MK MASTER INC.",
+ [3]byte{0, 36, 42}: "Hittite Microwave Corporation",
+ [3]byte{0, 36, 43}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{0, 36, 44}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{0, 36, 46}: "Datastrip Inc.",
+ [3]byte{0, 36, 47}: "Micron",
+ [3]byte{0, 36, 48}: "Ruby Tech Corp.",
+ [3]byte{0, 36, 49}: "Uni-v co.,ltd",
+ [3]byte{0, 36, 50}: "Neostar Technology Co.,LTD",
+ [3]byte{0, 36, 51}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{0, 36, 52}: "Lectrosonics, Inc.",
+ [3]byte{0, 36, 53}: "WIDE CORPORATION",
+ [3]byte{0, 36, 54}: "Apple, Inc.",
+ [3]byte{0, 36, 55}: "Motorola - BSG",
+ [3]byte{0, 36, 56}: "Brocade Communications Systems, Inc.",
+ [3]byte{0, 36, 57}: "Digital Barriers Advanced Technologies",
+ [3]byte{0, 36, 58}: "Ludl Electronic Products",
+ [3]byte{0, 36, 59}: "CSSI (S) Pte Ltd",
+ [3]byte{0, 36, 60}: "S.A.A.A.",
+ [3]byte{0, 36, 61}: "Emerson Appliance Motors and Controls",
+ [3]byte{0, 36, 63}: "Storwize, Inc.",
+ [3]byte{0, 36, 64}: "Halo Monitoring, Inc.",
+ [3]byte{0, 36, 65}: "Wanzl Metallwarenfabrik GmbH",
+ [3]byte{0, 36, 66}: "Axona Limited",
+ [3]byte{0, 36, 67}: "Nortel Networks",
+ [3]byte{0, 36, 68}: "Nintendo Co., Ltd.",
+ [3]byte{0, 36, 69}: "Adtran Inc",
+ [3]byte{0, 36, 70}: "MMB Research Inc.",
+ [3]byte{0, 36, 71}: "Kaztek Systems",
+ [3]byte{0, 36, 72}: "SpiderCloud Wireless, Inc",
+ [3]byte{0, 36, 73}: "Shen Zhen Lite Star Electronics Technology Co., Ltd",
+ [3]byte{0, 36, 74}: "Voyant International",
+ [3]byte{0, 36, 75}: "PERCEPTRON INC",
+ [3]byte{0, 36, 76}: "Solartron Metrology Ltd",
+ [3]byte{0, 36, 77}: "Hokkaido Electronics Corporation",
+ [3]byte{0, 36, 78}: "RadChips, Inc.",
+ [3]byte{0, 36, 79}: "Asantron Technologies Ltd.",
+ [3]byte{0, 36, 80}: "Cisco Systems, Inc",
+ [3]byte{0, 36, 81}: "Cisco Systems, Inc",
+ [3]byte{0, 36, 82}: "Silicon Software GmbH",
+ [3]byte{0, 36, 83}: "Initra d.o.o.",
+ [3]byte{0, 36, 84}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 36, 85}: "MuLogic BV",
+ [3]byte{0, 36, 86}: "2Wire Inc",
+ [3]byte{0, 36, 88}: "PA Bastion CC",
+ [3]byte{0, 36, 89}: "ABB Automation products GmbH",
+ [3]byte{0, 36, 90}: "Nanjing Panda Electronics Company Limited",
+ [3]byte{0, 36, 91}: "RAIDON TECHNOLOGY, INC.",
+ [3]byte{0, 36, 92}: "Design-Com Technologies Pty. Ltd.",
+ [3]byte{0, 36, 93}: "Terberg besturingstechniek B.V.",
+ [3]byte{0, 36, 94}: "Hivision Co.,ltd",
+ [3]byte{0, 36, 95}: "Vine Telecom CO.,Ltd.",
+ [3]byte{0, 36, 96}: "Giaval Science Development Co. Ltd.",
+ [3]byte{0, 36, 97}: "Shin Wang Tech.",
+ [3]byte{0, 36, 98}: "Rayzone Corporation",
+ [3]byte{0, 36, 99}: "Phybridge Inc",
+ [3]byte{0, 36, 100}: "Bridge Technologies Co AS",
+ [3]byte{0, 36, 101}: "Elentec",
+ [3]byte{0, 36, 102}: "Unitron nv",
+ [3]byte{0, 36, 103}: "AOC International (Europe) GmbH",
+ [3]byte{0, 36, 104}: "Sumavision Technologies Co.,Ltd",
+ [3]byte{0, 36, 105}: "Smart Doorphones",
+ [3]byte{0, 36, 106}: "Solid Year Co., Ltd.",
+ [3]byte{0, 36, 107}: "Covia, Inc.",
+ [3]byte{0, 36, 108}: "Aruba Networks",
+ [3]byte{0, 36, 109}: "Weinzierl Engineering GmbH",
+ [3]byte{0, 36, 110}: "Phihong USA Corp.",
+ [3]byte{0, 36, 111}: "Onda Communication spa",
+ [3]byte{0, 36, 112}: "AUROTECH ultrasound AS.",
+ [3]byte{0, 36, 113}: "Fusion MultiSystems dba Fusion-io",
+ [3]byte{0, 36, 114}: "ReDriven Power Inc.",
+ [3]byte{0, 36, 115}: "3COM EUROPE LTD",
+ [3]byte{0, 36, 116}: "Autronica Fire And Securirty",
+ [3]byte{0, 36, 117}: "Compass System(Embedded Dept.)",
+ [3]byte{0, 36, 118}: "TAP.tv",
+ [3]byte{0, 36, 119}: "Tibbo Technology",
+ [3]byte{0, 36, 120}: "Mag Tech Electronics Co Limited",
+ [3]byte{0, 36, 121}: "Optec Displays, Inc.",
+ [3]byte{0, 36, 122}: "FU YI CHENG Technology Co., Ltd.",
+ [3]byte{0, 36, 123}: "Actiontec Electronics, Inc",
+ [3]byte{0, 36, 124}: "Nokia Danmark A/S",
+ [3]byte{0, 36, 125}: "Nokia Danmark A/S",
+ [3]byte{0, 36, 126}: "Universal Global Scientific Industrial Co., Ltd.",
+ [3]byte{0, 36, 127}: "Nortel Networks",
+ [3]byte{0, 36, 128}: "Meteocontrol GmbH",
+ [3]byte{0, 36, 129}: "Hewlett Packard",
+ [3]byte{0, 36, 130}: "Ruckus Wireless",
+ [3]byte{0, 36, 131}: "LG Electronics (Mobile Communications)",
+ [3]byte{0, 36, 132}: "Bang and Olufsen Medicom a/s",
+ [3]byte{0, 36, 133}: "ConteXtream Ltd",
+ [3]byte{0, 36, 134}: "DesignArt Networks",
+ [3]byte{0, 36, 135}: "Blackboard Inc.",
+ [3]byte{0, 36, 136}: "Centre For Development Of Telematics",
+ [3]byte{0, 36, 137}: "Vodafone Omnitel N.V.",
+ [3]byte{0, 36, 138}: "Kaga Electronics Co., Ltd.",
+ [3]byte{0, 36, 139}: "HYBUS CO., LTD.",
+ [3]byte{0, 36, 140}: "ASUSTek COMPUTER INC.",
+ [3]byte{0, 36, 141}: "Sony Interactive Entertainment Inc.",
+ [3]byte{0, 36, 142}: "Infoware ZRt.",
+ [3]byte{0, 36, 143}: "DO-MONIX",
+ [3]byte{0, 36, 144}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 36, 145}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 36, 146}: "Motorola, Broadband Solutions Group",
+ [3]byte{0, 36, 147}: "ARRIS Group, Inc.",
+ [3]byte{0, 36, 148}: "Shenzhen Baoxin Tech CO., Ltd.",
+ [3]byte{0, 36, 149}: "ARRIS Group, Inc.",
+ [3]byte{0, 36, 150}: "Ginzinger electronic systems",
+ [3]byte{0, 36, 151}: "Cisco Systems, Inc",
+ [3]byte{0, 36, 152}: "Cisco Systems, Inc",
+ [3]byte{0, 36, 153}: "Aquila Technologies",
+ [3]byte{0, 36, 154}: "Beijing Zhongchuang Telecommunication Test Co., Ltd.",
+ [3]byte{0, 36, 155}: "Action Star Enterprise Co., Ltd.",
+ [3]byte{0, 36, 156}: "Bimeng Comunication System Co. Ltd",
+ [3]byte{0, 36, 157}: "NES Technology Inc.",
+ [3]byte{0, 36, 158}: "ADC-Elektronik GmbH",
+ [3]byte{0, 36, 159}: "RIM Testing Services",
+ [3]byte{0, 36, 160}: "ARRIS Group, Inc.",
+ [3]byte{0, 36, 161}: "ARRIS Group, Inc.",
+ [3]byte{0, 36, 162}: "Hong Kong Middleware Technology Limited",
+ [3]byte{0, 36, 163}: "Sonim Technologies Inc",
+ [3]byte{0, 36, 164}: "Siklu Communication",
+ [3]byte{0, 36, 165}: "BUFFALO.INC",
+ [3]byte{0, 36, 166}: "TELESTAR DIGITAL GmbH",
+ [3]byte{0, 36, 167}: "Advanced Video Communications Inc.",
+ [3]byte{0, 36, 168}: "ProCurve Networking by HP",
+ [3]byte{0, 36, 169}: "Ag Leader Technology",
+ [3]byte{0, 36, 170}: "Dycor Technologies Ltd.",
+ [3]byte{0, 36, 171}: "A7 Engineering, Inc.",
+ [3]byte{0, 36, 172}: "Hangzhou DPtech Technologies Co., Ltd.",
+ [3]byte{0, 36, 173}: "Adolf Thies Gmbh & Co. KG",
+ [3]byte{0, 36, 174}: "Morpho",
+ [3]byte{0, 36, 175}: "Echostar Technologies Corp",
+ [3]byte{0, 36, 176}: "ESAB AB",
+ [3]byte{0, 36, 177}: "Coulomb Technologies",
+ [3]byte{0, 36, 178}: "NETGEAR",
+ [3]byte{0, 36, 179}: "Graf-Syteco GmbH & Co. KG",
+ [3]byte{0, 36, 180}: "ESCATRONIC GmbH",
+ [3]byte{0, 36, 181}: "Nortel Networks",
+ [3]byte{0, 36, 182}: "Seagate Technology",
+ [3]byte{0, 36, 183}: "GridPoint, Inc.",
+ [3]byte{0, 36, 184}: "free alliance sdn bhd",
+ [3]byte{0, 36, 185}: "Wuhan Higheasy Electronic Technology Development Co.Ltd",
+ [3]byte{0, 36, 186}: "Texas Instruments",
+ [3]byte{0, 36, 187}: "CENTRAL Corporation",
+ [3]byte{0, 36, 188}: "HuRob Co.,Ltd",
+ [3]byte{0, 36, 189}: "Hainzl Industriesysteme GmbH",
+ [3]byte{0, 36, 190}: "Sony Corporation",
+ [3]byte{0, 36, 191}: "CIAT",
+ [3]byte{0, 36, 192}: "NTI COMODO INC",
+ [3]byte{0, 36, 193}: "ARRIS Group, Inc.",
+ [3]byte{0, 36, 194}: "Asumo Co.,Ltd.",
+ [3]byte{0, 36, 195}: "Cisco Systems, Inc",
+ [3]byte{0, 36, 196}: "Cisco Systems, Inc",
+ [3]byte{0, 36, 197}: "Meridian Audio Limited",
+ [3]byte{0, 36, 198}: "Hager Electro SAS",
+ [3]byte{0, 36, 199}: "Mobilarm Ltd",
+ [3]byte{0, 36, 200}: "Broadband Solutions Group",
+ [3]byte{0, 36, 201}: "Broadband Solutions Group",
+ [3]byte{0, 36, 202}: "Tobii Technology AB",
+ [3]byte{0, 36, 203}: "Autonet Mobile",
+ [3]byte{0, 36, 204}: "Fascinations Toys and Gifts, Inc.",
+ [3]byte{0, 36, 205}: "Willow Garage, Inc.",
+ [3]byte{0, 36, 206}: "Exeltech Inc",
+ [3]byte{0, 36, 207}: "Inscape Data Corporation",
+ [3]byte{0, 36, 208}: "Shenzhen SOGOOD Industry CO.,LTD.",
+ [3]byte{0, 36, 209}: "Thomson Inc.",
+ [3]byte{0, 36, 210}: "ASKEY COMPUTER CORP",
+ [3]byte{0, 36, 211}: "QUALICA Inc.",
+ [3]byte{0, 36, 212}: "FREEBOX SAS",
+ [3]byte{0, 36, 213}: "Winward Industrial Limited",
+ [3]byte{0, 36, 214}: "Intel Corporate",
+ [3]byte{0, 36, 215}: "Intel Corporate",
+ [3]byte{0, 36, 216}: "IlSung Precision",
+ [3]byte{0, 36, 217}: "BICOM, Inc.",
+ [3]byte{0, 36, 218}: "Innovar Systems Limited",
+ [3]byte{0, 36, 219}: "Alcohol Monitoring Systems",
+ [3]byte{0, 36, 220}: "Juniper Networks",
+ [3]byte{0, 36, 221}: "Centrak, Inc.",
+ [3]byte{0, 36, 222}: "GLOBAL Technology Inc.",
+ [3]byte{0, 36, 223}: "Digitalbox Europe GmbH",
+ [3]byte{0, 36, 224}: "DS Tech, LLC",
+ [3]byte{0, 36, 225}: "Convey Computer Corp.",
+ [3]byte{0, 36, 226}: "HASEGAWA ELECTRIC CO.,LTD.",
+ [3]byte{0, 36, 227}: "CAO Group",
+ [3]byte{0, 36, 228}: "Withings",
+ [3]byte{0, 36, 229}: "Seer Technology, Inc",
+ [3]byte{0, 36, 230}: "In Motion Technology Inc.",
+ [3]byte{0, 36, 231}: "Plaster Networks",
+ [3]byte{0, 36, 232}: "Dell Inc.",
+ [3]byte{0, 36, 233}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 36, 234}: "iris-GmbH infrared & intelligent sensors",
+ [3]byte{0, 36, 235}: "ClearPath Networks, Inc.",
+ [3]byte{0, 36, 236}: "United Information Technology Co.,Ltd.",
+ [3]byte{0, 36, 237}: "YT Elec. Co,.Ltd.",
+ [3]byte{0, 36, 238}: "Wynmax Inc.",
+ [3]byte{0, 36, 239}: "Sony Mobile Communications AB",
+ [3]byte{0, 36, 240}: "Seanodes",
+ [3]byte{0, 36, 241}: "Shenzhen Fanhai Sanjiang Electronics Co., Ltd.",
+ [3]byte{0, 36, 242}: "Uniphone Telecommunication Co., Ltd.",
+ [3]byte{0, 36, 243}: "Nintendo Co., Ltd.",
+ [3]byte{0, 36, 244}: "Kaminario, Ltd.",
+ [3]byte{0, 36, 245}: "NDS Surgical Imaging",
+ [3]byte{0, 36, 246}: "MIYOSHI ELECTRONICS CORPORATION",
+ [3]byte{0, 36, 247}: "Cisco Systems, Inc",
+ [3]byte{0, 36, 248}: "Technical Solutions Company Ltd.",
+ [3]byte{0, 36, 249}: "Cisco Systems, Inc",
+ [3]byte{0, 36, 250}: "Hilger u. Kern GMBH",
+ [3]byte{0, 36, 251}: "Private",
+ [3]byte{0, 36, 252}: "QuoPin Co., Ltd.",
+ [3]byte{0, 36, 253}: "Accedian Networks Inc",
+ [3]byte{0, 36, 254}: "AVM GmbH",
+ [3]byte{0, 36, 255}: "QLogic Corporation",
+ [3]byte{0, 37, 0}: "Apple, Inc.",
+ [3]byte{0, 37, 1}: "JSC Supertel",
+ [3]byte{0, 37, 2}: "NaturalPoint",
+ [3]byte{0, 37, 3}: "IBM Corp",
+ [3]byte{0, 37, 4}: "Valiant Communications Limited",
+ [3]byte{0, 37, 5}: "eks Engel GmbH & Co. KG",
+ [3]byte{0, 37, 6}: "A.I. ANTITACCHEGGIO ITALIA SRL",
+ [3]byte{0, 37, 7}: "ASTAK Inc.",
+ [3]byte{0, 37, 8}: "Maquet Cardiopulmonary AG",
+ [3]byte{0, 37, 9}: "SHARETRONIC Group LTD",
+ [3]byte{0, 37, 10}: "Security Expert Co. Ltd",
+ [3]byte{0, 37, 11}: "CENTROFACTOR INC",
+ [3]byte{0, 37, 12}: "Enertrac",
+ [3]byte{0, 37, 13}: "GZT Telkom-Telmor sp. z o.o.",
+ [3]byte{0, 37, 14}: "gt german telematics gmbh",
+ [3]byte{0, 37, 15}: "On-Ramp Wireless, Inc.",
+ [3]byte{0, 37, 16}: "Pico-Tesla Magnetic Therapies",
+ [3]byte{0, 37, 17}: "Elitegroup Computer Systems Co.,Ltd.",
+ [3]byte{0, 37, 18}: "zte corporation",
+ [3]byte{0, 37, 19}: "CXP DIGITAL BV",
+ [3]byte{0, 37, 20}: "PC Worth Int'l Co., Ltd.",
+ [3]byte{0, 37, 21}: "SFR",
+ [3]byte{0, 37, 22}: "Integrated Design Tools, Inc.",
+ [3]byte{0, 37, 23}: "Venntis, LLC",
+ [3]byte{0, 37, 24}: "Power PLUS Communications AG",
+ [3]byte{0, 37, 25}: "Viaas Inc",
+ [3]byte{0, 37, 26}: "Psiber Data Systems Inc.",
+ [3]byte{0, 37, 27}: "Philips CareServant",
+ [3]byte{0, 37, 28}: "EDT",
+ [3]byte{0, 37, 29}: "DSA Encore, LLC",
+ [3]byte{0, 37, 30}: "ROTEL TECHNOLOGIES",
+ [3]byte{0, 37, 31}: "ZYNUS VISION INC.",
+ [3]byte{0, 37, 32}: "SMA Railway Technology GmbH",
+ [3]byte{0, 37, 33}: "Logitek Electronic Systems, Inc.",
+ [3]byte{0, 37, 34}: "ASRock Incorporation",
+ [3]byte{0, 37, 35}: "OCP Inc.",
+ [3]byte{0, 37, 36}: "Lightcomm Technology Co., Ltd",
+ [3]byte{0, 37, 37}: "CTERA Networks Ltd.",
+ [3]byte{0, 37, 38}: "Genuine Technologies Co., Ltd.",
+ [3]byte{0, 37, 39}: "Bitrode Corp.",
+ [3]byte{0, 37, 40}: "Daido Signal Co., Ltd.",
+ [3]byte{0, 37, 41}: "COMELIT GROUP S.P.A",
+ [3]byte{0, 37, 42}: "Chengdu GeeYa Technology Co.,LTD",
+ [3]byte{0, 37, 43}: "Stirling Energy Systems",
+ [3]byte{0, 37, 44}: "Entourage Systems, Inc.",
+ [3]byte{0, 37, 45}: "Kiryung Electronics",
+ [3]byte{0, 37, 46}: "Cisco SPVTG",
+ [3]byte{0, 37, 47}: "Energy, Inc.",
+ [3]byte{0, 37, 48}: "Aetas Systems Inc.",
+ [3]byte{0, 37, 49}: "Cloud Engines, Inc.",
+ [3]byte{0, 37, 50}: "Digital Recorders",
+ [3]byte{0, 37, 51}: "WITTENSTEIN AG",
+ [3]byte{0, 37, 53}: "Minimax GmbH & Co KG",
+ [3]byte{0, 37, 54}: "Oki Electric Industry Co., Ltd.",
+ [3]byte{0, 37, 55}: "Runcom Technologies Ltd.",
+ [3]byte{0, 37, 56}: "Samsung Electronics Co., Ltd., Memory Division",
+ [3]byte{0, 37, 57}: "IfTA GmbH",
+ [3]byte{0, 37, 58}: "CEVA, Ltd.",
+ [3]byte{0, 37, 59}: "din Dietmar Nocker Facilitymanagement GmbH",
+ [3]byte{0, 37, 60}: "2Wire Inc",
+ [3]byte{0, 37, 61}: "DRS Consolidated Controls",
+ [3]byte{0, 37, 62}: "Sensus Metering Systems",
+ [3]byte{0, 37, 64}: "Quasar Technologies, Inc.",
+ [3]byte{0, 37, 65}: "Maquet Critical Care AB",
+ [3]byte{0, 37, 66}: "Pittasoft",
+ [3]byte{0, 37, 67}: "MONEYTECH",
+ [3]byte{0, 37, 68}: "LoJack Corporation",
+ [3]byte{0, 37, 69}: "Cisco Systems, Inc",
+ [3]byte{0, 37, 70}: "Cisco Systems, Inc",
+ [3]byte{0, 37, 71}: "Nokia Danmark A/S",
+ [3]byte{0, 37, 72}: "Nokia Danmark A/S",
+ [3]byte{0, 37, 73}: "Jeorich Tech. Co.,Ltd.",
+ [3]byte{0, 37, 74}: "RingCube Technologies, Inc.",
+ [3]byte{0, 37, 75}: "Apple, Inc.",
+ [3]byte{0, 37, 76}: "Videon Central, Inc.",
+ [3]byte{0, 37, 77}: "Singapore Technologies Electronics Limited",
+ [3]byte{0, 37, 78}: "Vertex Wireless Co., Ltd.",
+ [3]byte{0, 37, 79}: "ELETTROLAB Srl",
+ [3]byte{0, 37, 80}: "Riverbed Technology, Inc.",
+ [3]byte{0, 37, 81}: "SE-Elektronic GmbH",
+ [3]byte{0, 37, 82}: "VXi Corporation",
+ [3]byte{0, 37, 83}: "ADB Broadband Italia",
+ [3]byte{0, 37, 84}: "Pixel8 Networks",
+ [3]byte{0, 37, 85}: "Visonic Technologies 1993 Ltd.",
+ [3]byte{0, 37, 86}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{0, 37, 87}: "BlackBerry RTS",
+ [3]byte{0, 37, 88}: "MPEDIA",
+ [3]byte{0, 37, 89}: "Syphan Technologies Ltd",
+ [3]byte{0, 37, 90}: "Tantalus Systems Corp.",
+ [3]byte{0, 37, 91}: "CoachComm, LLC",
+ [3]byte{0, 37, 92}: "NEC Corporation",
+ [3]byte{0, 37, 93}: "Morningstar Corporation",
+ [3]byte{0, 37, 94}: "Shanghai Dare Technologies Co.,Ltd.",
+ [3]byte{0, 37, 95}: "SenTec AG",
+ [3]byte{0, 37, 96}: "Ibridge Networks & Communications Ltd.",
+ [3]byte{0, 37, 97}: "ProCurve Networking by HP",
+ [3]byte{0, 37, 98}: "interbro Co. Ltd.",
+ [3]byte{0, 37, 99}: "Luxtera Inc",
+ [3]byte{0, 37, 100}: "Dell Inc.",
+ [3]byte{0, 37, 101}: "Vizimax Inc.",
+ [3]byte{0, 37, 102}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 37, 103}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 37, 104}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{0, 37, 105}: "Sagemcom Broadband SAS",
+ [3]byte{0, 37, 106}: "inIT - Institut Industrial IT",
+ [3]byte{0, 37, 107}: "ATENIX E.E. s.r.l.",
+ [3]byte{0, 37, 108}: "Azimut Production Association JSC",
+ [3]byte{0, 37, 109}: "Broadband Forum",
+ [3]byte{0, 37, 110}: "Van Breda B.V.",
+ [3]byte{0, 37, 111}: "Dantherm Power",
+ [3]byte{0, 37, 112}: "Eastern Communications Company Limited",
+ [3]byte{0, 37, 113}: "Zhejiang Tianle Digital Electric Co.,Ltd",
+ [3]byte{0, 37, 114}: "Nemo-Q International AB",
+ [3]byte{0, 37, 115}: "ST Electronics (Info-Security) Pte Ltd",
+ [3]byte{0, 37, 116}: "KUNIMI MEDIA DEVICE Co., Ltd.",
+ [3]byte{0, 37, 117}: "FiberPlex Technologies, LLC",
+ [3]byte{0, 37, 118}: "NELI TECHNOLOGIES",
+ [3]byte{0, 37, 119}: "D-BOX Technologies",
+ [3]byte{0, 37, 120}: "JSC Concern Sozvezdie",
+ [3]byte{0, 37, 121}: "J & F Labs",
+ [3]byte{0, 37, 122}: "CAMCO Produktions- und Vertriebs-GmbH für Beschallungs- und Beleuchtungsanlagen",
+ [3]byte{0, 37, 123}: "STJ ELECTRONICS PVT LTD",
+ [3]byte{0, 37, 124}: "Huachentel Technology Development Co., Ltd",
+ [3]byte{0, 37, 125}: "PointRed Telecom Private Ltd.",
+ [3]byte{0, 37, 126}: "NEW POS Technology Limited",
+ [3]byte{0, 37, 127}: "CallTechSolution Co.,Ltd",
+ [3]byte{0, 37, 128}: "Equipson S.A.",
+ [3]byte{0, 37, 129}: "x-star networks Inc.",
+ [3]byte{0, 37, 130}: "Maksat Technologies (P) Ltd",
+ [3]byte{0, 37, 131}: "Cisco Systems, Inc",
+ [3]byte{0, 37, 132}: "Cisco Systems, Inc",
+ [3]byte{0, 37, 133}: "KOKUYO S&T Co., Ltd.",
+ [3]byte{0, 37, 134}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{0, 37, 135}: "Vitality, Inc.",
+ [3]byte{0, 37, 136}: "Genie Industries, Inc.",
+ [3]byte{0, 37, 137}: "Hills Industries Limited",
+ [3]byte{0, 37, 138}: "Pole/Zero Corporation",
+ [3]byte{0, 37, 139}: "Mellanox Technologies, Inc.",
+ [3]byte{0, 37, 140}: "ESUS ELEKTRONIK SAN. VE DIS. TIC. LTD. STI.",
+ [3]byte{0, 37, 141}: "Haier",
+ [3]byte{0, 37, 142}: "The Weather Channel",
+ [3]byte{0, 37, 143}: "Trident Microsystems, Inc.",
+ [3]byte{0, 37, 144}: "Super Micro Computer, Inc.",
+ [3]byte{0, 37, 145}: "NEXTEK, Inc.",
+ [3]byte{0, 37, 146}: "Guangzhou Shirui Electronic Co., Ltd",
+ [3]byte{0, 37, 147}: "DatNet Informatikai Kft.",
+ [3]byte{0, 37, 148}: "Eurodesign BG LTD",
+ [3]byte{0, 37, 149}: "Northwest Signal Supply, Inc",
+ [3]byte{0, 37, 150}: "GIGAVISION srl",
+ [3]byte{0, 37, 151}: "Kalki Communication Technologies",
+ [3]byte{0, 37, 152}: "Zhong Shan City Litai Electronic Industrial Co. Ltd",
+ [3]byte{0, 37, 153}: "Hedon e.d. B.V.",
+ [3]byte{0, 37, 154}: "CEStronics GmbH",
+ [3]byte{0, 37, 155}: "Beijing PKUNITY Microsystems Technology Co., Ltd",
+ [3]byte{0, 37, 156}: "Cisco-Linksys, LLC",
+ [3]byte{0, 37, 157}: "Private",
+ [3]byte{0, 37, 158}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{0, 37, 159}: "TechnoDigital Technologies GmbH",
+ [3]byte{0, 37, 160}: "Nintendo Co., Ltd.",
+ [3]byte{0, 37, 161}: "Enalasys",
+ [3]byte{0, 37, 162}: "Alta Definicion LINCEO S.L.",
+ [3]byte{0, 37, 163}: "Trimax Wireless, Inc.",
+ [3]byte{0, 37, 164}: "EuroDesign embedded technologies GmbH",
+ [3]byte{0, 37, 165}: "Walnut Media Network",
+ [3]byte{0, 37, 166}: "Central Network Solution Co., Ltd.",
+ [3]byte{0, 37, 167}: "Comverge, Inc.",
+ [3]byte{0, 37, 168}: "Kontron (BeiJing) Technology Co.,Ltd",
+ [3]byte{0, 37, 169}: "Shanghai Embedway Information Technologies Co.,Ltd",
+ [3]byte{0, 37, 170}: "Beijing Soul Technology Co.,Ltd.",
+ [3]byte{0, 37, 171}: "AIO LCD PC BU / TPV",
+ [3]byte{0, 37, 172}: "I-Tech corporation",
+ [3]byte{0, 37, 173}: "Manufacturing Resources International",
+ [3]byte{0, 37, 174}: "Microsoft Corporation",
+ [3]byte{0, 37, 175}: "COMFILE Technology",
+ [3]byte{0, 37, 176}: "Schmartz Inc",
+ [3]byte{0, 37, 177}: "Maya-Creation Corporation",
+ [3]byte{0, 37, 178}: "MBDA Deutschland GmbH",
+ [3]byte{0, 37, 179}: "Hewlett Packard",
+ [3]byte{0, 37, 180}: "Cisco Systems, Inc",
+ [3]byte{0, 37, 181}: "Cisco Systems, Inc",
+ [3]byte{0, 37, 182}: "Telecom FM",
+ [3]byte{0, 37, 183}: "Costar electronics, inc.,",
+ [3]byte{0, 37, 184}: "Agile Communications, Inc.",
+ [3]byte{0, 37, 185}: "Cypress Solutions Inc",
+ [3]byte{0, 37, 186}: "Alcatel-Lucent IPD",
+ [3]byte{0, 37, 187}: "INNERINT Co., Ltd.",
+ [3]byte{0, 37, 188}: "Apple, Inc.",
+ [3]byte{0, 37, 189}: "Italdata Ingegneria dell'Idea S.p.A.",
+ [3]byte{0, 37, 190}: "Tektrap Systems Inc.",
+ [3]byte{0, 37, 191}: "Wireless Cables Inc.",
+ [3]byte{0, 37, 192}: "ZillionTV Corporation",
+ [3]byte{0, 37, 193}: "Nawoo Korea Corp.",
+ [3]byte{0, 37, 194}: "RingBell Co.,Ltd.",
+ [3]byte{0, 37, 195}: "21168",
+ [3]byte{0, 37, 196}: "Ruckus Wireless",
+ [3]byte{0, 37, 197}: "Star Link Communication Pvt. Ltd.",
+ [3]byte{0, 37, 198}: "kasercorp, ltd",
+ [3]byte{0, 37, 199}: "altek Corporation",
+ [3]byte{0, 37, 200}: "S-Access GmbH",
+ [3]byte{0, 37, 201}: "SHENZHEN HUAPU DIGITAL CO., LTD",
+ [3]byte{0, 37, 202}: "LS Research, LLC",
+ [3]byte{0, 37, 203}: "Reiner SCT",
+ [3]byte{0, 37, 204}: "Mobile Communications Korea Incorporated",
+ [3]byte{0, 37, 205}: "Skylane Optics",
+ [3]byte{0, 37, 206}: "InnerSpace",
+ [3]byte{0, 37, 207}: "Nokia Danmark A/S",
+ [3]byte{0, 37, 208}: "Nokia Danmark A/S",
+ [3]byte{0, 37, 209}: "Eastern Asia Technology Limited",
+ [3]byte{0, 37, 210}: "InpegVision Co., Ltd",
+ [3]byte{0, 37, 211}: "AzureWave Technology Inc.",
+ [3]byte{0, 37, 212}: "General Dynamics Mission Systems",
+ [3]byte{0, 37, 213}: "Robonica (Pty) Ltd",
+ [3]byte{0, 37, 214}: "The Kroger Co.",
+ [3]byte{0, 37, 215}: "CEDO",
+ [3]byte{0, 37, 216}: "KOREA MAINTENANCE",
+ [3]byte{0, 37, 217}: "DataFab Systems Inc.",
+ [3]byte{0, 37, 218}: "Secura Key",
+ [3]byte{0, 37, 219}: "ATI Electronics(Shenzhen) Co., LTD",
+ [3]byte{0, 37, 220}: "Sumitomo Electric Industries,Ltd",
+ [3]byte{0, 37, 221}: "SUNNYTEK INFORMATION CO., LTD.",
+ [3]byte{0, 37, 222}: "Probits Co., LTD.",
+ [3]byte{0, 37, 223}: "Private",
+ [3]byte{0, 37, 224}: "CeedTec Sdn Bhd",
+ [3]byte{0, 37, 225}: "SHANGHAI SEEYOO ELECTRONIC & TECHNOLOGY CO., LTD",
+ [3]byte{0, 37, 226}: "Everspring Industry Co., Ltd.",
+ [3]byte{0, 37, 227}: "Hanshinit Inc.",
+ [3]byte{0, 37, 228}: "OMNI-WiFi, LLC",
+ [3]byte{0, 37, 229}: "LG Electronics (Mobile Communications)",
+ [3]byte{0, 37, 230}: "Belgian Monitoring Systems bvba",
+ [3]byte{0, 37, 231}: "Sony Mobile Communications AB",
+ [3]byte{0, 37, 232}: "Idaho Technology",
+ [3]byte{0, 37, 233}: "i-mate Development, Inc.",
+ [3]byte{0, 37, 234}: "Iphion BV",
+ [3]byte{0, 37, 235}: "Reutech Radar Systems (PTY) Ltd",
+ [3]byte{0, 37, 236}: "Humanware",
+ [3]byte{0, 37, 237}: "NuVo Technologies LLC",
+ [3]byte{0, 37, 238}: "Avtex Ltd",
+ [3]byte{0, 37, 239}: "I-TEC Co., Ltd.",
+ [3]byte{0, 37, 240}: "Suga Electronics Limited",
+ [3]byte{0, 37, 241}: "ARRIS Group, Inc.",
+ [3]byte{0, 37, 242}: "ARRIS Group, Inc.",
+ [3]byte{0, 37, 243}: "Nordwestdeutsche Zählerrevision",
+ [3]byte{0, 37, 244}: "KoCo Connector AG",
+ [3]byte{0, 37, 245}: "DVS Korea, Co., Ltd",
+ [3]byte{0, 37, 246}: "netTALK.com, Inc.",
+ [3]byte{0, 37, 247}: "Ansaldo STS USA",
+ [3]byte{0, 37, 249}: "GMK electronic design GmbH",
+ [3]byte{0, 37, 250}: "J&M Analytik AG",
+ [3]byte{0, 37, 251}: "Tunstall Healthcare A/S",
+ [3]byte{0, 37, 252}: "ENDA ENDUSTRIYEL ELEKTRONIK LTD. STI.",
+ [3]byte{0, 37, 253}: "OBR Centrum Techniki Morskiej S.A.",
+ [3]byte{0, 37, 254}: "Pilot Electronics Corporation",
+ [3]byte{0, 37, 255}: "CreNova Multimedia Co., Ltd",
+ [3]byte{0, 38, 0}: "TEAC Australia Pty Ltd.",
+ [3]byte{0, 38, 1}: "Cutera Inc",
+ [3]byte{0, 38, 2}: "SMART Temps LLC",
+ [3]byte{0, 38, 3}: "Shenzhen Wistar Technology Co., Ltd",
+ [3]byte{0, 38, 4}: "Audio Processing Technology Ltd",
+ [3]byte{0, 38, 5}: "CC Systems AB",
+ [3]byte{0, 38, 6}: "RAUMFELD GmbH",
+ [3]byte{0, 38, 7}: "Enabling Technology Pty Ltd",
+ [3]byte{0, 38, 8}: "Apple, Inc.",
+ [3]byte{0, 38, 9}: "Phyllis Co., Ltd.",
+ [3]byte{0, 38, 10}: "Cisco Systems, Inc",
+ [3]byte{0, 38, 11}: "Cisco Systems, Inc",
+ [3]byte{0, 38, 12}: "Dataram",
+ [3]byte{0, 38, 13}: "Mercury Systems, Inc.",
+ [3]byte{0, 38, 14}: "Ablaze Systems, LLC",
+ [3]byte{0, 38, 15}: "Linn Products Ltd",
+ [3]byte{0, 38, 16}: "Apacewave Technologies",
+ [3]byte{0, 38, 17}: "Licera AB",
+ [3]byte{0, 38, 18}: "Space Exploration Technologies",
+ [3]byte{0, 38, 19}: "Engel Axil S.L.",
+ [3]byte{0, 38, 20}: "KTNF",
+ [3]byte{0, 38, 21}: "Teracom Limited",
+ [3]byte{0, 38, 22}: "Rosemount Inc.",
+ [3]byte{0, 38, 23}: "OEM Worldwide",
+ [3]byte{0, 38, 24}: "ASUSTek COMPUTER INC.",
+ [3]byte{0, 38, 25}: "FRC",
+ [3]byte{0, 38, 26}: "Femtocomm System Technology Corp.",
+ [3]byte{0, 38, 27}: "LAUREL BANK MACHINES CO., LTD.",
+ [3]byte{0, 38, 28}: "NEOVIA INC.",
+ [3]byte{0, 38, 29}: "COP SECURITY SYSTEM CORP.",
+ [3]byte{0, 38, 30}: "QINGBANG ELEC(SZ) CO., LTD",
+ [3]byte{0, 38, 31}: "SAE Magnetics (H.K.) Ltd.",
+ [3]byte{0, 38, 32}: "ISGUS GmbH",
+ [3]byte{0, 38, 33}: "InteliCloud Technology Inc.",
+ [3]byte{0, 38, 34}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+ [3]byte{0, 38, 35}: "JRD Communication Inc",
+ [3]byte{0, 38, 36}: "Thomson Inc.",
+ [3]byte{0, 38, 37}: "MediaSputnik",
+ [3]byte{0, 38, 38}: "Geophysical Survey Systems, Inc.",
+ [3]byte{0, 38, 39}: "Truesell",
+ [3]byte{0, 38, 40}: "companytec automação e controle ltda.",
+ [3]byte{0, 38, 41}: "Juphoon System Software Inc.",
+ [3]byte{0, 38, 42}: "Proxense, LLC",
+ [3]byte{0, 38, 43}: "Wongs Electronics Co. Ltd.",
+ [3]byte{0, 38, 44}: "IKT Advanced Technologies s.r.o.",
+ [3]byte{0, 38, 45}: "Wistron Corporation",
+ [3]byte{0, 38, 46}: "Chengdu Jiuzhou Electronic Technology Inc",
+ [3]byte{0, 38, 47}: "HAMAMATSU TOA ELECTRONICS",
+ [3]byte{0, 38, 48}: "ACOREL S.A.S",
+ [3]byte{0, 38, 49}: "COMMTACT LTD",
+ [3]byte{0, 38, 50}: "Instrumentation Technologies d.d.",
+ [3]byte{0, 38, 51}: "MIR - Medical International Research",
+ [3]byte{0, 38, 52}: "Infineta Systems, Inc",
+ [3]byte{0, 38, 53}: "Bluetechnix GmbH",
+ [3]byte{0, 38, 54}: "ARRIS Group, Inc.",
+ [3]byte{0, 38, 55}: "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+ [3]byte{0, 38, 56}: "Xia Men Joyatech Co., Ltd.",
+ [3]byte{0, 38, 57}: "T.M. Electronics, Inc.",
+ [3]byte{0, 38, 58}: "Digitec Systems",
+ [3]byte{0, 38, 59}: "Onbnetech",
+ [3]byte{0, 38, 60}: "Bachmann Technology GmbH & Co. KG",
+ [3]byte{0, 38, 61}: "MIA Corporation",
+ [3]byte{0, 38, 62}: "Trapeze Networks",
+ [3]byte{0, 38, 63}: "LIOS Technology GmbH",
+ [3]byte{0, 38, 64}: "Baustem Broadband Technologies, Ltd.",
+ [3]byte{0, 38, 65}: "ARRIS Group, Inc.",
+ [3]byte{0, 38, 66}: "ARRIS Group, Inc.",
+ [3]byte{0, 38, 67}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{0, 38, 68}: "Thomson Telecom Belgium",
+ [3]byte{0, 38, 69}: "Circontrol S.A.",
+ [3]byte{0, 38, 70}: "SHENYANG TONGFANG MULTIMEDIA TECHNOLOGY COMPANY LIMITED",
+ [3]byte{0, 38, 71}: "WFE TECHNOLOGY CORP.",
+ [3]byte{0, 38, 72}: "Emitech Corp.",
+ [3]byte{0, 38, 74}: "Apple, Inc.",
+ [3]byte{0, 38, 76}: "Shanghai DigiVision Technology Co., Ltd.",
+ [3]byte{0, 38, 77}: "Arcadyan Technology Corporation",
+ [3]byte{0, 38, 78}: "Rail & Road Protec GmbH",
+ [3]byte{0, 38, 79}: "Krüger &Gothe GmbH",
+ [3]byte{0, 38, 80}: "2Wire Inc",
+ [3]byte{0, 38, 81}: "Cisco Systems, Inc",
+ [3]byte{0, 38, 82}: "Cisco Systems, Inc",
+ [3]byte{0, 38, 83}: "DaySequerra Corporation",
+ [3]byte{0, 38, 84}: "3Com Corporation",
+ [3]byte{0, 38, 85}: "Hewlett Packard",
+ [3]byte{0, 38, 86}: "Sansonic Electronics USA",
+ [3]byte{0, 38, 87}: "OOO NPP EKRA",
+ [3]byte{0, 38, 88}: "T-Platforms (Cyprus) Limited",
+ [3]byte{0, 38, 89}: "Nintendo Co., Ltd.",
+ [3]byte{0, 38, 90}: "D-Link Corporation",
+ [3]byte{0, 38, 91}: "Hitron Technologies. Inc",
+ [3]byte{0, 38, 92}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{0, 38, 93}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 38, 94}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{0, 38, 95}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 38, 96}: "Logiways",
+ [3]byte{0, 38, 97}: "Irumtek Co., Ltd.",
+ [3]byte{0, 38, 98}: "Actiontec Electronics, Inc",
+ [3]byte{0, 38, 99}: "Shenzhen Huitaiwei Tech. Ltd, co.",
+ [3]byte{0, 38, 100}: "Core System Japan",
+ [3]byte{0, 38, 101}: "ProtectedLogic Corporation",
+ [3]byte{0, 38, 102}: "EFM Networks",
+ [3]byte{0, 38, 103}: "CARECOM CO.,LTD.",
+ [3]byte{0, 38, 104}: "Nokia Danmark A/S",
+ [3]byte{0, 38, 105}: "Nokia Danmark A/S",
+ [3]byte{0, 38, 106}: "ESSENSIUM NV",
+ [3]byte{0, 38, 107}: "SHINE UNION ENTERPRISE LIMITED",
+ [3]byte{0, 38, 108}: "INVENTEC Corporation",
+ [3]byte{0, 38, 109}: "MobileAccess Networks",
+ [3]byte{0, 38, 110}: "Nissho-denki Co.,LTD.",
+ [3]byte{0, 38, 111}: "Coordiwise Technology Corp.",
+ [3]byte{0, 38, 112}: "Cinch Connectors",
+ [3]byte{0, 38, 113}: "AUTOVISION Co., Ltd",
+ [3]byte{0, 38, 114}: "AAMP of America",
+ [3]byte{0, 38, 115}: "RICOH COMPANY,LTD.",
+ [3]byte{0, 38, 116}: "Electronic Solutions, Inc.",
+ [3]byte{0, 38, 117}: "Aztech Electronics Pte Ltd",
+ [3]byte{0, 38, 118}: "COMMidt AS",
+ [3]byte{0, 38, 119}: "DEIF A/S",
+ [3]byte{0, 38, 120}: "Logic Instrument SA",
+ [3]byte{0, 38, 121}: "Euphonic Technologies, Inc.",
+ [3]byte{0, 38, 122}: "wuhan hongxin telecommunication technologies co.,ltd",
+ [3]byte{0, 38, 123}: "GSI Helmholtzzentrum für Schwerionenforschung GmbH",
+ [3]byte{0, 38, 124}: "Metz-Werke GmbH & Co KG",
+ [3]byte{0, 38, 125}: "A-Max Technology Macao Commercial Offshore Company Limited",
+ [3]byte{0, 38, 126}: "PARROT SA",
+ [3]byte{0, 38, 127}: "Zenterio AB",
+ [3]byte{0, 38, 128}: "SIL3 Pty.Ltd",
+ [3]byte{0, 38, 129}: "Interspiro AB",
+ [3]byte{0, 38, 130}: "Gemtek Technology Co., Ltd.",
+ [3]byte{0, 38, 131}: "Ajoho Enterprise Co., Ltd.",
+ [3]byte{0, 38, 132}: "KISAN SYSTEM",
+ [3]byte{0, 38, 133}: "Digital Innovation",
+ [3]byte{0, 38, 134}: "Quantenna Communcations, Inc.",
+ [3]byte{0, 38, 135}: "corega K.K",
+ [3]byte{0, 38, 136}: "Juniper Networks",
+ [3]byte{0, 38, 137}: "General Dynamics Robotic Systems",
+ [3]byte{0, 38, 138}: "Terrier SC Ltd",
+ [3]byte{0, 38, 139}: "Guangzhou Escene Computer Technology Limited",
+ [3]byte{0, 38, 140}: "StarLeaf Ltd.",
+ [3]byte{0, 38, 141}: "CellTel S.p.A.",
+ [3]byte{0, 38, 142}: "Alta Solutions, Inc.",
+ [3]byte{0, 38, 143}: "MTA SpA",
+ [3]byte{0, 38, 144}: "I DO IT",
+ [3]byte{0, 38, 145}: "Sagemcom Broadband SAS",
+ [3]byte{0, 38, 146}: "Mitsubishi Electric Corporation",
+ [3]byte{0, 38, 147}: "QVidium Technologies, Inc.",
+ [3]byte{0, 38, 148}: "Senscient Ltd",
+ [3]byte{0, 38, 149}: "ZT Group Int'l Inc",
+ [3]byte{0, 38, 150}: "NOOLIX Co., Ltd",
+ [3]byte{0, 38, 151}: "Alpha Technologies Inc.",
+ [3]byte{0, 38, 152}: "Cisco Systems, Inc",
+ [3]byte{0, 38, 153}: "Cisco Systems, Inc",
+ [3]byte{0, 38, 154}: "Carina System Co., Ltd.",
+ [3]byte{0, 38, 155}: "SOKRAT Ltd.",
+ [3]byte{0, 38, 156}: "ITUS JAPAN CO. LTD",
+ [3]byte{0, 38, 157}: "M2Mnet Co., Ltd.",
+ [3]byte{0, 38, 158}: "QUANTA COMPUTER INC.",
+ [3]byte{0, 38, 159}: "Private",
+ [3]byte{0, 38, 160}: "moblic",
+ [3]byte{0, 38, 161}: "Megger",
+ [3]byte{0, 38, 162}: "Instrumentation Technology Systems",
+ [3]byte{0, 38, 163}: "FQ Ingenieria Electronica S.A.",
+ [3]byte{0, 38, 164}: "Novus Produtos Eletronicos Ltda",
+ [3]byte{0, 38, 165}: "MICROROBOT.CO.,LTD",
+ [3]byte{0, 38, 166}: "TRIXELL",
+ [3]byte{0, 38, 167}: "CONNECT SRL",
+ [3]byte{0, 38, 168}: "DAEHAP HYPER-TECH",
+ [3]byte{0, 38, 169}: "Strong Technologies Pty Ltd",
+ [3]byte{0, 38, 170}: "Kenmec Mechanical Engineering Co., Ltd.",
+ [3]byte{0, 38, 171}: "Seiko Epson Corporation",
+ [3]byte{0, 38, 172}: "Shanghai LUSTER Teraband photonic Co., Ltd.",
+ [3]byte{0, 38, 173}: "Arada Systems, Inc.",
+ [3]byte{0, 38, 174}: "Wireless Measurement Ltd",
+ [3]byte{0, 38, 175}: "Duelco A/S",
+ [3]byte{0, 38, 176}: "Apple, Inc.",
+ [3]byte{0, 38, 177}: "Navis Auto Motive Systems, Inc.",
+ [3]byte{0, 38, 178}: "Setrix GmbH",
+ [3]byte{0, 38, 179}: "Thales Communications Inc",
+ [3]byte{0, 38, 180}: "Ford Motor Company",
+ [3]byte{0, 38, 181}: "ICOMM Tele Ltd",
+ [3]byte{0, 38, 182}: "ASKEY COMPUTER CORP",
+ [3]byte{0, 38, 183}: "Kingston Technology Company, Inc.",
+ [3]byte{0, 38, 184}: "Actiontec Electronics, Inc",
+ [3]byte{0, 38, 185}: "Dell Inc.",
+ [3]byte{0, 38, 186}: "ARRIS Group, Inc.",
+ [3]byte{0, 38, 187}: "Apple, Inc.",
+ [3]byte{0, 38, 188}: "General Jack Technology Ltd.",
+ [3]byte{0, 38, 189}: "JTEC Card & Communication Co., Ltd.",
+ [3]byte{0, 38, 190}: "Schoonderbeek Elektronica Systemen B.V.",
+ [3]byte{0, 38, 191}: "ShenZhen Temobi Science&Tech Development Co.,Ltd",
+ [3]byte{0, 38, 192}: "EnergyHub",
+ [3]byte{0, 38, 193}: "ARTRAY CO., LTD.",
+ [3]byte{0, 38, 194}: "SCDI Co. LTD",
+ [3]byte{0, 38, 195}: "Insightek Corp.",
+ [3]byte{0, 38, 196}: "Cadmos microsystems S.r.l.",
+ [3]byte{0, 38, 197}: "Guangdong Gosun Telecommunications Co.,Ltd",
+ [3]byte{0, 38, 198}: "Intel Corporate",
+ [3]byte{0, 38, 199}: "Intel Corporate",
+ [3]byte{0, 38, 200}: "System Sensor",
+ [3]byte{0, 38, 201}: "Proventix Systems, Inc.",
+ [3]byte{0, 38, 202}: "Cisco Systems, Inc",
+ [3]byte{0, 38, 203}: "Cisco Systems, Inc",
+ [3]byte{0, 38, 204}: "Nokia Danmark A/S",
+ [3]byte{0, 38, 205}: "PurpleComm, Inc.",
+ [3]byte{0, 38, 206}: "Kozumi USA Corp.",
+ [3]byte{0, 38, 207}: "DEKA R&D",
+ [3]byte{0, 38, 208}: "Semihalf",
+ [3]byte{0, 38, 209}: "S Squared Innovations Inc.",
+ [3]byte{0, 38, 210}: "Pcube Systems, Inc.",
+ [3]byte{0, 38, 211}: "Zeno Information System",
+ [3]byte{0, 38, 212}: "IRCA SpA",
+ [3]byte{0, 38, 213}: "Ory Solucoes em Comercio de Informatica Ltda.",
+ [3]byte{0, 38, 214}: "Ningbo Andy Optoelectronic Co., Ltd.",
+ [3]byte{0, 38, 215}: "KM Electornic Technology Co., Ltd.",
+ [3]byte{0, 38, 216}: "Magic Point Inc.",
+ [3]byte{0, 38, 217}: "ARRIS Group, Inc.",
+ [3]byte{0, 38, 218}: "Universal Media Corporation /Slovakia/ s.r.o.",
+ [3]byte{0, 38, 219}: "Ionics EMS Inc.",
+ [3]byte{0, 38, 220}: "Optical Systems Design",
+ [3]byte{0, 38, 221}: "Fival Science & Technology Co.,Ltd.",
+ [3]byte{0, 38, 222}: "FDI MATELEC",
+ [3]byte{0, 38, 223}: "TaiDoc Technology Corp.",
+ [3]byte{0, 38, 224}: "ASITEQ",
+ [3]byte{0, 38, 225}: "Stanford University, OpenFlow Group",
+ [3]byte{0, 38, 226}: "LG Electronics (Mobile Communications)",
+ [3]byte{0, 38, 227}: "DTI",
+ [3]byte{0, 38, 228}: "Canal +",
+ [3]byte{0, 38, 229}: "AEG Power Solutions",
+ [3]byte{0, 38, 230}: "Visionhitech Co., Ltd.",
+ [3]byte{0, 38, 231}: "Shanghai ONLAN Communication Tech. Co., Ltd.",
+ [3]byte{0, 38, 232}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{0, 38, 233}: "SP Corp",
+ [3]byte{0, 38, 234}: "Cheerchip Electronic Technology (ShangHai) Co., Ltd.",
+ [3]byte{0, 38, 235}: "Advanced Spectrum Technology Co., Ltd.",
+ [3]byte{0, 38, 236}: "Legrand Home Systems, Inc",
+ [3]byte{0, 38, 237}: "zte corporation",
+ [3]byte{0, 38, 238}: "TKM GmbH",
+ [3]byte{0, 38, 239}: "Technology Advancement Group, Inc.",
+ [3]byte{0, 38, 240}: "cTrixs International GmbH.",
+ [3]byte{0, 38, 241}: "ProCurve Networking by HP",
+ [3]byte{0, 38, 242}: "NETGEAR",
+ [3]byte{0, 38, 243}: "SMC Networks",
+ [3]byte{0, 38, 244}: "Nesslab",
+ [3]byte{0, 38, 245}: "XRPLUS Inc.",
+ [3]byte{0, 38, 246}: "Military Communication Institute",
+ [3]byte{0, 38, 247}: "Nivetti Systems Pvt. Ltd.",
+ [3]byte{0, 38, 248}: "Golden Highway Industry Development Co., Ltd.",
+ [3]byte{0, 38, 249}: "S.E.M. srl",
+ [3]byte{0, 38, 250}: "BandRich Inc.",
+ [3]byte{0, 38, 251}: "AirDio Wireless, Inc.",
+ [3]byte{0, 38, 252}: "AcSiP Technology Corp.",
+ [3]byte{0, 38, 253}: "Interactive Intelligence",
+ [3]byte{0, 38, 254}: "MKD Technology Inc.",
+ [3]byte{0, 38, 255}: "BlackBerry RTS",
+ [3]byte{0, 39, 0}: "Shenzhen Siglent Technology Co., Ltd.",
+ [3]byte{0, 39, 1}: "INCOstartec GmbH",
+ [3]byte{0, 39, 2}: "SolarEdge Technologies",
+ [3]byte{0, 39, 3}: "Testech Electronics Pte Ltd",
+ [3]byte{0, 39, 4}: "Accelerated Concepts, Inc",
+ [3]byte{0, 39, 5}: "Sectronic",
+ [3]byte{0, 39, 6}: "YOISYS",
+ [3]byte{0, 39, 7}: "Lift Complex DS, JSC",
+ [3]byte{0, 39, 8}: "Nordiag ASA",
+ [3]byte{0, 39, 9}: "Nintendo Co., Ltd.",
+ [3]byte{0, 39, 10}: "IEE S.A.",
+ [3]byte{0, 39, 11}: "Adura Technologies",
+ [3]byte{0, 39, 12}: "Cisco Systems, Inc",
+ [3]byte{0, 39, 13}: "Cisco Systems, Inc",
+ [3]byte{0, 39, 14}: "Intel Corporate",
+ [3]byte{0, 39, 15}: "Envisionnovation Inc",
+ [3]byte{0, 39, 16}: "Intel Corporate",
+ [3]byte{0, 39, 17}: "LanPro Inc",
+ [3]byte{0, 39, 18}: "MaxVision LLC",
+ [3]byte{0, 39, 19}: "Universal Global Scientific Industrial Co., Ltd.",
+ [3]byte{0, 39, 20}: "Grainmustards, Co,ltd.",
+ [3]byte{0, 39, 21}: "Rebound Telecom. Co., Ltd",
+ [3]byte{0, 39, 22}: "Adachi-Syokai Co., Ltd.",
+ [3]byte{0, 39, 23}: "CE Digital(Zhenjiang)Co.,Ltd",
+ [3]byte{0, 39, 24}: "Suzhou NEW SEAUNION Video Technology Co.,Ltd",
+ [3]byte{0, 39, 25}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{0, 39, 26}: "Geenovo Technology Ltd.",
+ [3]byte{0, 39, 27}: "Alec Sicherheitssysteme GmbH",
+ [3]byte{0, 39, 28}: "MERCURY CORPORATION",
+ [3]byte{0, 39, 29}: "Comba Telecom Systems (China) Ltd.",
+ [3]byte{0, 39, 30}: "Xagyl Communications",
+ [3]byte{0, 39, 31}: "MIPRO Electronics Co., Ltd",
+ [3]byte{0, 39, 32}: "NEW-SOL COM",
+ [3]byte{0, 39, 33}: "Shenzhen Baoan Fenda Industrial Co., Ltd",
+ [3]byte{0, 39, 34}: "Ubiquiti Networks Inc.",
+ [3]byte{0, 39, 144}: "Cisco Systems, Inc",
+ [3]byte{0, 39, 227}: "Cisco Systems, Inc",
+ [3]byte{0, 39, 248}: "Brocade Communications Systems, Inc.",
+ [3]byte{0, 40, 159}: "Semptian Co., Ltd.",
+ [3]byte{0, 40, 248}: "Intel Corporate",
+ [3]byte{0, 41, 38}: "Applied Optoelectronics, Inc Taiwan Branch",
+ [3]byte{0, 42, 16}: "Cisco Systems, Inc",
+ [3]byte{0, 42, 106}: "Cisco Systems, Inc",
+ [3]byte{0, 42, 175}: "LARsys-Automation GmbH",
+ [3]byte{0, 44, 200}: "Cisco Systems, Inc",
+ [3]byte{0, 45, 118}: "TITECH GmbH",
+ [3]byte{0, 46, 199}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{0, 48, 0}: "ALLWELL TECHNOLOGY CORP.",
+ [3]byte{0, 48, 1}: "SMP",
+ [3]byte{0, 48, 2}: "Expand Networks",
+ [3]byte{0, 48, 3}: "Phasys Ltd.",
+ [3]byte{0, 48, 4}: "LEADTEK RESEARCH INC.",
+ [3]byte{0, 48, 5}: "Fujitsu Siemens Computers",
+ [3]byte{0, 48, 6}: "SUPERPOWER COMPUTER",
+ [3]byte{0, 48, 7}: "OPTI, INC.",
+ [3]byte{0, 48, 8}: "AVIO DIGITAL, INC.",
+ [3]byte{0, 48, 9}: "Tachion Networks, Inc.",
+ [3]byte{0, 48, 10}: "Aztech Electronics Pte Ltd",
+ [3]byte{0, 48, 11}: "mPHASE Technologies, Inc.",
+ [3]byte{0, 48, 12}: "CONGRUENCY, LTD.",
+ [3]byte{0, 48, 13}: "MMC Technology, Inc.",
+ [3]byte{0, 48, 14}: "Klotz Digital AG",
+ [3]byte{0, 48, 15}: "IMT - Information Management T",
+ [3]byte{0, 48, 16}: "VISIONETICS INTERNATIONAL",
+ [3]byte{0, 48, 17}: "HMS Industrial Networks",
+ [3]byte{0, 48, 18}: "DIGITAL ENGINEERING LTD.",
+ [3]byte{0, 48, 19}: "NEC Corporation",
+ [3]byte{0, 48, 20}: "DIVIO, INC.",
+ [3]byte{0, 48, 21}: "CP CLARE CORP.",
+ [3]byte{0, 48, 22}: "ISHIDA CO., LTD.",
+ [3]byte{0, 48, 23}: "BlueArc UK Ltd",
+ [3]byte{0, 48, 24}: "Jetway Information Co., Ltd.",
+ [3]byte{0, 48, 25}: "Cisco Systems, Inc",
+ [3]byte{0, 48, 26}: "SMARTBRIDGES PTE. LTD.",
+ [3]byte{0, 48, 27}: "SHUTTLE, INC.",
+ [3]byte{0, 48, 28}: "ALTVATER AIRDATA SYSTEMS",
+ [3]byte{0, 48, 29}: "SKYSTREAM, INC.",
+ [3]byte{0, 48, 30}: "3COM EUROPE LTD.",
+ [3]byte{0, 48, 31}: "OPTICAL NETWORKS, INC.",
+ [3]byte{0, 48, 32}: "TSI, Inc..",
+ [3]byte{0, 48, 33}: "HSING TECH. ENTERPRISE CO.,LTD",
+ [3]byte{0, 48, 34}: "Fong Kai Industrial Co., Ltd.",
+ [3]byte{0, 48, 35}: "COGENT COMPUTER SYSTEMS, INC.",
+ [3]byte{0, 48, 36}: "Cisco Systems, Inc",
+ [3]byte{0, 48, 37}: "CHECKOUT COMPUTER SYSTEMS, LTD",
+ [3]byte{0, 48, 38}: "HeiTel Digital Video GmbH",
+ [3]byte{0, 48, 39}: "KERBANGO, INC.",
+ [3]byte{0, 48, 40}: "FASE Saldatura srl",
+ [3]byte{0, 48, 41}: "OPICOM",
+ [3]byte{0, 48, 42}: "SOUTHERN INFORMATION",
+ [3]byte{0, 48, 43}: "INALP NETWORKS, INC.",
+ [3]byte{0, 48, 44}: "SYLANTRO SYSTEMS CORPORATION",
+ [3]byte{0, 48, 45}: "QUANTUM BRIDGE COMMUNICATIONS",
+ [3]byte{0, 48, 46}: "Hoft & Wessel AG",
+ [3]byte{0, 48, 47}: "GE Aviation System",
+ [3]byte{0, 48, 48}: "HARMONIX CORPORATION",
+ [3]byte{0, 48, 49}: "LIGHTWAVE COMMUNICATIONS, INC.",
+ [3]byte{0, 48, 50}: "MagicRam, Inc.",
+ [3]byte{0, 48, 51}: "ORIENT TELECOM CO., LTD.",
+ [3]byte{0, 48, 52}: "SET ENGINEERING",
+ [3]byte{0, 48, 53}: "Corning Incorporated",
+ [3]byte{0, 48, 54}: "RMP ELEKTRONIKSYSTEME GMBH",
+ [3]byte{0, 48, 55}: "Packard Bell Nec Services",
+ [3]byte{0, 48, 56}: "XCP, INC.",
+ [3]byte{0, 48, 57}: "SOFTBOOK PRESS",
+ [3]byte{0, 48, 58}: "MAATEL",
+ [3]byte{0, 48, 59}: "PowerCom Technology",
+ [3]byte{0, 48, 60}: "ONNTO CORP.",
+ [3]byte{0, 48, 61}: "IVA CORPORATION",
+ [3]byte{0, 48, 62}: "Radcom Ltd.",
+ [3]byte{0, 48, 63}: "TurboComm Tech Inc.",
+ [3]byte{0, 48, 64}: "Cisco Systems, Inc",
+ [3]byte{0, 48, 65}: "SAEJIN T & M CO., LTD.",
+ [3]byte{0, 48, 66}: "DeTeWe-Deutsche Telephonwerke",
+ [3]byte{0, 48, 67}: "IDREAM TECHNOLOGIES, PTE. LTD.",
+ [3]byte{0, 48, 68}: "CradlePoint, Inc",
+ [3]byte{0, 48, 69}: "Village Networks, Inc. (VNI)",
+ [3]byte{0, 48, 70}: "Controlled Electronic Manageme",
+ [3]byte{0, 48, 71}: "NISSEI ELECTRIC CO., LTD.",
+ [3]byte{0, 48, 72}: "Super Micro Computer, Inc.",
+ [3]byte{0, 48, 73}: "BRYANT TECHNOLOGY, LTD.",
+ [3]byte{0, 48, 74}: "Fraunhofer IPMS",
+ [3]byte{0, 48, 75}: "ORBACOM SYSTEMS, INC.",
+ [3]byte{0, 48, 76}: "APPIAN COMMUNICATIONS, INC.",
+ [3]byte{0, 48, 77}: "ESI",
+ [3]byte{0, 48, 78}: "BUSTEC PRODUCTION LTD.",
+ [3]byte{0, 48, 79}: "PLANET Technology Corporation",
+ [3]byte{0, 48, 80}: "Versa Technology",
+ [3]byte{0, 48, 81}: "ORBIT AVIONIC & COMMUNICATION",
+ [3]byte{0, 48, 82}: "ELASTIC NETWORKS",
+ [3]byte{0, 48, 83}: "Basler AG",
+ [3]byte{0, 48, 84}: "CASTLENET TECHNOLOGY, INC.",
+ [3]byte{0, 48, 85}: "Renesas Technology America, Inc.",
+ [3]byte{0, 48, 86}: "Beck IPC GmbH",
+ [3]byte{0, 48, 87}: "QTelNet, Inc.",
+ [3]byte{0, 48, 88}: "API MOTION",
+ [3]byte{0, 48, 89}: "KONTRON COMPACT COMPUTERS AG",
+ [3]byte{0, 48, 90}: "TELGEN CORPORATION",
+ [3]byte{0, 48, 91}: "Toko Inc.",
+ [3]byte{0, 48, 92}: "SMAR Laboratories Corp.",
+ [3]byte{0, 48, 93}: "DIGITRA SYSTEMS, INC.",
+ [3]byte{0, 48, 94}: "Abelko Innovation",
+ [3]byte{0, 48, 95}: "Hasselblad",
+ [3]byte{0, 48, 96}: "Powerfile, Inc.",
+ [3]byte{0, 48, 97}: "MobyTEL",
+ [3]byte{0, 48, 98}: "IP Video Networks Inc",
+ [3]byte{0, 48, 99}: "SANTERA SYSTEMS, INC.",
+ [3]byte{0, 48, 100}: "ADLINK TECHNOLOGY, INC.",
+ [3]byte{0, 48, 101}: "Apple, Inc.",
+ [3]byte{0, 48, 102}: "RFM",
+ [3]byte{0, 48, 103}: "BIOSTAR Microtech Int'l Corp.",
+ [3]byte{0, 48, 104}: "CYBERNETICS TECH. CO., LTD.",
+ [3]byte{0, 48, 105}: "IMPACCT TECHNOLOGY CORP.",
+ [3]byte{0, 48, 106}: "PENTA MEDIA CO., LTD.",
+ [3]byte{0, 48, 107}: "CMOS SYSTEMS, INC.",
+ [3]byte{0, 48, 108}: "Hitex Holding GmbH",
+ [3]byte{0, 48, 109}: "LUCENT TECHNOLOGIES",
+ [3]byte{0, 48, 110}: "Hewlett Packard",
+ [3]byte{0, 48, 111}: "SEYEON TECH. CO., LTD.",
+ [3]byte{0, 48, 112}: "1Net Corporation",
+ [3]byte{0, 48, 113}: "Cisco Systems, Inc",
+ [3]byte{0, 48, 114}: "Intellibyte Inc.",
+ [3]byte{0, 48, 115}: "International Microsystems, In",
+ [3]byte{0, 48, 116}: "EQUIINET LTD.",
+ [3]byte{0, 48, 117}: "ADTECH",
+ [3]byte{0, 48, 118}: "Akamba Corporation",
+ [3]byte{0, 48, 119}: "ONPREM NETWORKS",
+ [3]byte{0, 48, 120}: "Cisco Systems, Inc",
+ [3]byte{0, 48, 121}: "CQOS, INC.",
+ [3]byte{0, 48, 122}: "Advanced Technology & Systems",
+ [3]byte{0, 48, 123}: "Cisco Systems, Inc",
+ [3]byte{0, 48, 124}: "ADID SA",
+ [3]byte{0, 48, 125}: "GRE AMERICA, INC.",
+ [3]byte{0, 48, 126}: "Redflex Communication Systems",
+ [3]byte{0, 48, 127}: "IRLAN LTD.",
+ [3]byte{0, 48, 128}: "Cisco Systems, Inc",
+ [3]byte{0, 48, 129}: "ALTOS C&C",
+ [3]byte{0, 48, 130}: "TAIHAN ELECTRIC WIRE CO., LTD.",
+ [3]byte{0, 48, 131}: "Ivron Systems",
+ [3]byte{0, 48, 132}: "ALLIED TELESYN INTERNAIONAL",
+ [3]byte{0, 48, 133}: "Cisco Systems, Inc",
+ [3]byte{0, 48, 134}: "Transistor Devices, Inc.",
+ [3]byte{0, 48, 135}: "VEGA GRIESHABER KG",
+ [3]byte{0, 48, 136}: "Ericsson",
+ [3]byte{0, 48, 137}: "Spectrapoint Wireless, LLC",
+ [3]byte{0, 48, 138}: "NICOTRA SISTEMI S.P.A",
+ [3]byte{0, 48, 139}: "Brix Networks",
+ [3]byte{0, 48, 140}: "Quantum Corporation",
+ [3]byte{0, 48, 141}: "Pinnacle Systems, Inc.",
+ [3]byte{0, 48, 142}: "CROSS MATCH TECHNOLOGIES, INC.",
+ [3]byte{0, 48, 143}: "MICRILOR, Inc.",
+ [3]byte{0, 48, 144}: "CYRA TECHNOLOGIES, INC.",
+ [3]byte{0, 48, 145}: "TAIWAN FIRST LINE ELEC. CORP.",
+ [3]byte{0, 48, 146}: "ModuNORM GmbH",
+ [3]byte{0, 48, 147}: "Sonnet Technologies, Inc",
+ [3]byte{0, 48, 148}: "Cisco Systems, Inc",
+ [3]byte{0, 48, 149}: "Procomp Informatics, Ltd.",
+ [3]byte{0, 48, 150}: "Cisco Systems, Inc",
+ [3]byte{0, 48, 151}: "AB Regin",
+ [3]byte{0, 48, 152}: "Global Converging Technologies",
+ [3]byte{0, 48, 153}: "BOENIG UND KALLENBACH OHG",
+ [3]byte{0, 48, 154}: "ASTRO TERRA CORP.",
+ [3]byte{0, 48, 155}: "Smartware",
+ [3]byte{0, 48, 156}: "Timing Applications, Inc.",
+ [3]byte{0, 48, 157}: "Nimble Microsystems, Inc.",
+ [3]byte{0, 48, 158}: "WORKBIT CORPORATION.",
+ [3]byte{0, 48, 159}: "AMBER NETWORKS",
+ [3]byte{0, 48, 160}: "TYCO SUBMARINE SYSTEMS, LTD.",
+ [3]byte{0, 48, 161}: "WEBGATE Inc.",
+ [3]byte{0, 48, 162}: "Lightner Engineering",
+ [3]byte{0, 48, 163}: "Cisco Systems, Inc",
+ [3]byte{0, 48, 164}: "Woodwind Communications System",
+ [3]byte{0, 48, 165}: "ACTIVE POWER",
+ [3]byte{0, 48, 166}: "VIANET TECHNOLOGIES, LTD.",
+ [3]byte{0, 48, 167}: "SCHWEITZER ENGINEERING",
+ [3]byte{0, 48, 168}: "OL'E COMMUNICATIONS, INC.",
+ [3]byte{0, 48, 169}: "Netiverse, Inc.",
+ [3]byte{0, 48, 170}: "AXUS MICROSYSTEMS, INC.",
+ [3]byte{0, 48, 171}: "DELTA NETWORKS, INC.",
+ [3]byte{0, 48, 172}: "Systeme Lauer GmbH & Co., Ltd.",
+ [3]byte{0, 48, 173}: "SHANGHAI COMMUNICATION",
+ [3]byte{0, 48, 174}: "Times N System, Inc.",
+ [3]byte{0, 48, 175}: "Honeywell GmbH",
+ [3]byte{0, 48, 176}: "Convergenet Technologies",
+ [3]byte{0, 48, 177}: "TrunkNet",
+ [3]byte{0, 48, 178}: "L-3 Sonoma EO",
+ [3]byte{0, 48, 179}: "San Valley Systems, Inc.",
+ [3]byte{0, 48, 180}: "INTERSIL CORP.",
+ [3]byte{0, 48, 181}: "Tadiran Microwave Networks",
+ [3]byte{0, 48, 182}: "Cisco Systems, Inc",
+ [3]byte{0, 48, 183}: "Teletrol Systems, Inc.",
+ [3]byte{0, 48, 184}: "RiverDelta Networks",
+ [3]byte{0, 48, 185}: "ECTEL",
+ [3]byte{0, 48, 186}: "AC&T SYSTEM CO., LTD.",
+ [3]byte{0, 48, 187}: "CacheFlow, Inc.",
+ [3]byte{0, 48, 188}: "Optronic AG",
+ [3]byte{0, 48, 189}: "BELKIN COMPONENTS",
+ [3]byte{0, 48, 190}: "City-Net Technology, Inc.",
+ [3]byte{0, 48, 191}: "MULTIDATA GMBH",
+ [3]byte{0, 48, 192}: "Lara Technology, Inc.",
+ [3]byte{0, 48, 193}: "Hewlett Packard",
+ [3]byte{0, 48, 194}: "COMONE",
+ [3]byte{0, 48, 195}: "FLUECKIGER ELEKTRONIK AG",
+ [3]byte{0, 48, 196}: "Canon Imaging Systems Inc.",
+ [3]byte{0, 48, 197}: "CADENCE DESIGN SYSTEMS, INC.",
+ [3]byte{0, 48, 198}: "CONTROL SOLUTIONS, INC.",
+ [3]byte{0, 48, 199}: "Macromate Corp.",
+ [3]byte{0, 48, 200}: "GAD LINE, LTD.",
+ [3]byte{0, 48, 201}: "LuxN, N",
+ [3]byte{0, 48, 202}: "Discovery Com",
+ [3]byte{0, 48, 203}: "OMNI FLOW COMPUTERS, INC.",
+ [3]byte{0, 48, 204}: "Tenor Networks, Inc.",
+ [3]byte{0, 48, 205}: "CONEXANT SYSTEMS, INC.",
+ [3]byte{0, 48, 206}: "Zaffire",
+ [3]byte{0, 48, 207}: "TWO TECHNOLOGIES, INC.",
+ [3]byte{0, 48, 208}: "Tellabs",
+ [3]byte{0, 48, 209}: "INOVA CORPORATION",
+ [3]byte{0, 48, 210}: "WIN TECHNOLOGIES, CO., LTD.",
+ [3]byte{0, 48, 211}: "Agilent Technologies, Inc.",
+ [3]byte{0, 48, 212}: "AAE Systems, Inc.",
+ [3]byte{0, 48, 213}: "DResearch GmbH",
+ [3]byte{0, 48, 214}: "MSC VERTRIEBS GMBH",
+ [3]byte{0, 48, 215}: "Innovative Systems, L.L.C.",
+ [3]byte{0, 48, 216}: "SITEK",
+ [3]byte{0, 48, 217}: "DATACORE SOFTWARE CORP.",
+ [3]byte{0, 48, 218}: "Comtrend Corporation",
+ [3]byte{0, 48, 219}: "Mindready Solutions, Inc.",
+ [3]byte{0, 48, 220}: "RIGHTECH CORPORATION",
+ [3]byte{0, 48, 221}: "INDIGITA CORPORATION",
+ [3]byte{0, 48, 222}: "WAGO Kontakttechnik GmbH",
+ [3]byte{0, 48, 223}: "KB/TEL TELECOMUNICACIONES",
+ [3]byte{0, 48, 224}: "OXFORD SEMICONDUCTOR LTD.",
+ [3]byte{0, 48, 225}: "Network Equipment Technologies, Inc.",
+ [3]byte{0, 48, 226}: "GARNET SYSTEMS CO., LTD.",
+ [3]byte{0, 48, 227}: "SEDONA NETWORKS CORP.",
+ [3]byte{0, 48, 228}: "CHIYODA SYSTEM RIKEN",
+ [3]byte{0, 48, 229}: "Amper Datos S.A.",
+ [3]byte{0, 48, 230}: "Draeger Medical Systems, Inc.",
+ [3]byte{0, 48, 231}: "CNF MOBILE SOLUTIONS, INC.",
+ [3]byte{0, 48, 232}: "ENSIM CORP.",
+ [3]byte{0, 48, 233}: "GMA COMMUNICATION MANUFACT'G",
+ [3]byte{0, 48, 234}: "TeraForce Technology Corporation",
+ [3]byte{0, 48, 235}: "TURBONET COMMUNICATIONS, INC.",
+ [3]byte{0, 48, 236}: "BORGARDT",
+ [3]byte{0, 48, 237}: "Expert Magnetics Corp.",
+ [3]byte{0, 48, 238}: "DSG Technology, Inc.",
+ [3]byte{0, 48, 239}: "NEON TECHNOLOGY, INC.",
+ [3]byte{0, 48, 240}: "Uniform Industrial Corp.",
+ [3]byte{0, 48, 241}: "Accton Technology Corp",
+ [3]byte{0, 48, 242}: "Cisco Systems, Inc",
+ [3]byte{0, 48, 243}: "At Work Computers",
+ [3]byte{0, 48, 244}: "STARDOT TECHNOLOGIES",
+ [3]byte{0, 48, 245}: "Wild Lab. Ltd.",
+ [3]byte{0, 48, 246}: "SECURELOGIX CORPORATION",
+ [3]byte{0, 48, 247}: "RAMIX INC.",
+ [3]byte{0, 48, 248}: "Dynapro Systems, Inc.",
+ [3]byte{0, 48, 249}: "Sollae Systems Co., Ltd.",
+ [3]byte{0, 48, 250}: "TELICA, INC.",
+ [3]byte{0, 48, 251}: "AZS Technology AG",
+ [3]byte{0, 48, 252}: "Terawave Communications, Inc.",
+ [3]byte{0, 48, 253}: "INTEGRATED SYSTEMS DESIGN",
+ [3]byte{0, 48, 254}: "DSA GmbH",
+ [3]byte{0, 48, 255}: "DataFab Systems Inc.",
+ [3]byte{0, 49, 70}: "Juniper Networks",
+ [3]byte{0, 50, 58}: "so-logic",
+ [3]byte{0, 51, 108}: "SynapSense Corporation",
+ [3]byte{0, 52, 218}: "LG Electronics (Mobile Communications)",
+ [3]byte{0, 52, 241}: "Radicom Research, Inc.",
+ [3]byte{0, 52, 254}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{0, 53, 26}: "Cisco Systems, Inc",
+ [3]byte{0, 53, 50}: "Electro-Metrics Corporation",
+ [3]byte{0, 53, 96}: "Rosen Aviation",
+ [3]byte{0, 54, 118}: "ARRIS Group, Inc.",
+ [3]byte{0, 54, 248}: "Conti Temic microelectronic GmbH",
+ [3]byte{0, 54, 254}: "SuperVision",
+ [3]byte{0, 55, 109}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{0, 55, 183}: "Sagemcom Broadband SAS",
+ [3]byte{0, 56, 223}: "Cisco Systems, Inc",
+ [3]byte{0, 58, 125}: "Cisco Systems, Inc",
+ [3]byte{0, 58, 152}: "Cisco Systems, Inc",
+ [3]byte{0, 58, 153}: "Cisco Systems, Inc",
+ [3]byte{0, 58, 154}: "Cisco Systems, Inc",
+ [3]byte{0, 58, 155}: "Cisco Systems, Inc",
+ [3]byte{0, 58, 156}: "Cisco Systems, Inc",
+ [3]byte{0, 58, 157}: "NEC Platforms, Ltd.",
+ [3]byte{0, 58, 175}: "BlueBit Ltd.",
+ [3]byte{0, 60, 197}: "WONWOO Engineering Co., Ltd",
+ [3]byte{0, 61, 65}: "Hatteland Computer AS",
+ [3]byte{0, 62, 225}: "Apple, Inc.",
+ [3]byte{0, 64, 0}: "PCI COMPONENTES DA AMZONIA LTD",
+ [3]byte{0, 64, 1}: "Zero One Technology Co. Ltd.",
+ [3]byte{0, 64, 2}: "PERLE SYSTEMS LIMITED",
+ [3]byte{0, 64, 3}: "Emerson Process Management Power & Water Solutions, Inc.",
+ [3]byte{0, 64, 4}: "ICM CO. LTD.",
+ [3]byte{0, 64, 5}: "ANI COMMUNICATIONS INC.",
+ [3]byte{0, 64, 6}: "SAMPO TECHNOLOGY CORPORATION",
+ [3]byte{0, 64, 7}: "TELMAT INFORMATIQUE",
+ [3]byte{0, 64, 8}: "A PLUS INFO CORPORATION",
+ [3]byte{0, 64, 9}: "TACHIBANA TECTRON CO., LTD.",
+ [3]byte{0, 64, 10}: "PIVOTAL TECHNOLOGIES, INC.",
+ [3]byte{0, 64, 11}: "Cisco Systems, Inc",
+ [3]byte{0, 64, 12}: "GENERAL MICRO SYSTEMS, INC.",
+ [3]byte{0, 64, 13}: "LANNET DATA COMMUNICATIONS,LTD",
+ [3]byte{0, 64, 14}: "MEMOTEC, INC.",
+ [3]byte{0, 64, 15}: "DATACOM TECHNOLOGIES",
+ [3]byte{0, 64, 16}: "SONIC SYSTEMS, INC.",
+ [3]byte{0, 64, 17}: "ANDOVER CONTROLS CORPORATION",
+ [3]byte{0, 64, 18}: "WINDATA, INC.",
+ [3]byte{0, 64, 19}: "NTT DATA COMM. SYSTEMS CORP.",
+ [3]byte{0, 64, 20}: "COMSOFT GMBH",
+ [3]byte{0, 64, 21}: "ASCOM INFRASYS AG",
+ [3]byte{0, 64, 22}: "ADC - Global Connectivity Solutions Division",
+ [3]byte{0, 64, 23}: "Silex Technology America",
+ [3]byte{0, 64, 24}: "ADOBE SYSTEMS, INC.",
+ [3]byte{0, 64, 25}: "AEON SYSTEMS, INC.",
+ [3]byte{0, 64, 26}: "FUJI ELECTRIC CO., LTD.",
+ [3]byte{0, 64, 27}: "PRINTER SYSTEMS CORP.",
+ [3]byte{0, 64, 28}: "AST RESEARCH, INC.",
+ [3]byte{0, 64, 29}: "INVISIBLE SOFTWARE, INC.",
+ [3]byte{0, 64, 30}: "ICC",
+ [3]byte{0, 64, 31}: "COLORGRAPH LTD",
+ [3]byte{0, 64, 32}: "CommScope Inc",
+ [3]byte{0, 64, 33}: "RASTER GRAPHICS",
+ [3]byte{0, 64, 34}: "KLEVER COMPUTERS, INC.",
+ [3]byte{0, 64, 35}: "LOGIC CORPORATION",
+ [3]byte{0, 64, 36}: "COMPAC INC.",
+ [3]byte{0, 64, 37}: "MOLECULAR DYNAMICS",
+ [3]byte{0, 64, 38}: "BUFFALO.INC",
+ [3]byte{0, 64, 39}: "SMC MASSACHUSETTS, INC.",
+ [3]byte{0, 64, 40}: "NETCOMM LIMITED",
+ [3]byte{0, 64, 41}: "Compex",
+ [3]byte{0, 64, 42}: "Canoga Perkins Corporation",
+ [3]byte{0, 64, 43}: "TRIGEM COMPUTER, INC.",
+ [3]byte{0, 64, 44}: "ISIS DISTRIBUTED SYSTEMS, INC.",
+ [3]byte{0, 64, 45}: "HARRIS ADACOM CORPORATION",
+ [3]byte{0, 64, 46}: "PRECISION SOFTWARE, INC.",
+ [3]byte{0, 64, 47}: "XLNT DESIGNS INC.",
+ [3]byte{0, 64, 48}: "GK COMPUTER",
+ [3]byte{0, 64, 49}: "KOKUSAI ELECTRIC CO., LTD",
+ [3]byte{0, 64, 50}: "DIGITAL COMMUNICATIONS",
+ [3]byte{0, 64, 51}: "ADDTRON TECHNOLOGY CO., LTD.",
+ [3]byte{0, 64, 52}: "BUSTEK CORPORATION",
+ [3]byte{0, 64, 53}: "OPCOM",
+ [3]byte{0, 64, 54}: "Zoom Telephonics, Inc",
+ [3]byte{0, 64, 55}: "SEA-ILAN, INC.",
+ [3]byte{0, 64, 56}: "TALENT ELECTRIC INCORPORATED",
+ [3]byte{0, 64, 57}: "OPTEC DAIICHI DENKO CO., LTD.",
+ [3]byte{0, 64, 58}: "IMPACT TECHNOLOGIES",
+ [3]byte{0, 64, 59}: "SYNERJET INTERNATIONAL CORP.",
+ [3]byte{0, 64, 60}: "FORKS, INC.",
+ [3]byte{0, 64, 61}: "Teradata Corporation",
+ [3]byte{0, 64, 62}: "RASTER OPS CORPORATION",
+ [3]byte{0, 64, 63}: "SSANGYONG COMPUTER SYSTEMS",
+ [3]byte{0, 64, 64}: "RING ACCESS, INC.",
+ [3]byte{0, 64, 65}: "FUJIKURA LTD.",
+ [3]byte{0, 64, 66}: "N.A.T. GMBH",
+ [3]byte{0, 64, 67}: "Nokia Siemens Networks GmbH & Co. KG.",
+ [3]byte{0, 64, 68}: "QNIX COMPUTER CO., LTD.",
+ [3]byte{0, 64, 69}: "TWINHEAD CORPORATION",
+ [3]byte{0, 64, 70}: "UDC RESEARCH LIMITED",
+ [3]byte{0, 64, 71}: "WIND RIVER SYSTEMS",
+ [3]byte{0, 64, 72}: "SMD INFORMATICA S.A.",
+ [3]byte{0, 64, 73}: "Roche Diagnostics International Ltd.",
+ [3]byte{0, 64, 74}: "WEST AUSTRALIAN DEPARTMENT",
+ [3]byte{0, 64, 75}: "MAPLE COMPUTER SYSTEMS",
+ [3]byte{0, 64, 76}: "HYPERTEC PTY LTD.",
+ [3]byte{0, 64, 77}: "TELECOMMUNICATIONS TECHNIQUES",
+ [3]byte{0, 64, 78}: "FLUENT, INC.",
+ [3]byte{0, 64, 79}: "SPACE & NAVAL WARFARE SYSTEMS",
+ [3]byte{0, 64, 80}: "IRONICS, INCORPORATED",
+ [3]byte{0, 64, 81}: "GRACILIS, INC.",
+ [3]byte{0, 64, 82}: "STAR TECHNOLOGIES, INC.",
+ [3]byte{0, 64, 83}: "AMPRO COMPUTERS",
+ [3]byte{0, 64, 84}: "CONNECTION MACHINES SERVICES",
+ [3]byte{0, 64, 85}: "METRONIX GMBH",
+ [3]byte{0, 64, 86}: "MCM JAPAN LTD.",
+ [3]byte{0, 64, 87}: "LOCKHEED - SANDERS",
+ [3]byte{0, 64, 88}: "KRONOS, INC.",
+ [3]byte{0, 64, 89}: "YOSHIDA KOGYO K. K.",
+ [3]byte{0, 64, 90}: "GOLDSTAR INFORMATION & COMM.",
+ [3]byte{0, 64, 91}: "FUNASSET LIMITED",
+ [3]byte{0, 64, 92}: "FUTURE SYSTEMS, INC.",
+ [3]byte{0, 64, 93}: "STAR-TEK, INC.",
+ [3]byte{0, 64, 94}: "NORTH HILLS ISRAEL",
+ [3]byte{0, 64, 95}: "AFE COMPUTERS LTD.",
+ [3]byte{0, 64, 96}: "COMENDEC LTD",
+ [3]byte{0, 64, 97}: "DATATECH ENTERPRISES CO., LTD.",
+ [3]byte{0, 64, 98}: "E-SYSTEMS, INC./GARLAND DIV.",
+ [3]byte{0, 64, 99}: "VIA TECHNOLOGIES, INC.",
+ [3]byte{0, 64, 100}: "KLA INSTRUMENTS CORPORATION",
+ [3]byte{0, 64, 101}: "GTE SPACENET",
+ [3]byte{0, 64, 102}: "APRESIA Systems Ltd",
+ [3]byte{0, 64, 103}: "OMNIBYTE CORPORATION",
+ [3]byte{0, 64, 104}: "EXTENDED SYSTEMS",
+ [3]byte{0, 64, 105}: "LEMCOM SYSTEMS, INC.",
+ [3]byte{0, 64, 106}: "KENTEK INFORMATION SYSTEMS,INC",
+ [3]byte{0, 64, 107}: "SYSGEN",
+ [3]byte{0, 64, 108}: "COPERNIQUE",
+ [3]byte{0, 64, 109}: "LANCO, INC.",
+ [3]byte{0, 64, 110}: "COROLLARY, INC.",
+ [3]byte{0, 64, 111}: "SYNC RESEARCH INC.",
+ [3]byte{0, 64, 112}: "INTERWARE CO., LTD.",
+ [3]byte{0, 64, 113}: "ATM COMPUTER GMBH",
+ [3]byte{0, 64, 114}: "Applied Innovation Inc.",
+ [3]byte{0, 64, 115}: "BASS ASSOCIATES",
+ [3]byte{0, 64, 116}: "CABLE AND WIRELESS",
+ [3]byte{0, 64, 117}: "Tattile SRL",
+ [3]byte{0, 64, 118}: "Sun Conversion Technologies",
+ [3]byte{0, 64, 119}: "MAXTON TECHNOLOGY CORPORATION",
+ [3]byte{0, 64, 120}: "WEARNES AUTOMATION PTE LTD",
+ [3]byte{0, 64, 121}: "JUKO MANUFACTURE COMPANY, LTD.",
+ [3]byte{0, 64, 122}: "SOCIETE D'EXPLOITATION DU CNIT",
+ [3]byte{0, 64, 123}: "SCIENTIFIC ATLANTA",
+ [3]byte{0, 64, 124}: "QUME CORPORATION",
+ [3]byte{0, 64, 125}: "EXTENSION TECHNOLOGY CORP.",
+ [3]byte{0, 64, 126}: "EVERGREEN SYSTEMS, INC.",
+ [3]byte{0, 64, 127}: "FLIR Systems",
+ [3]byte{0, 64, 128}: "ATHENIX CORPORATION",
+ [3]byte{0, 64, 129}: "MANNESMANN SCANGRAPHIC GMBH",
+ [3]byte{0, 64, 130}: "LABORATORY EQUIPMENT CORP.",
+ [3]byte{0, 64, 131}: "TDA INDUSTRIA DE PRODUTOS",
+ [3]byte{0, 64, 132}: "HONEYWELL ACS",
+ [3]byte{0, 64, 133}: "SAAB INSTRUMENTS AB",
+ [3]byte{0, 64, 134}: "MICHELS & KLEBERHOFF COMPUTER",
+ [3]byte{0, 64, 135}: "UBITREX CORPORATION",
+ [3]byte{0, 64, 136}: "MOBIUS TECHNOLOGIES, INC.",
+ [3]byte{0, 64, 137}: "MEIDENSHA CORPORATION",
+ [3]byte{0, 64, 138}: "TPS TELEPROCESSING SYS. GMBH",
+ [3]byte{0, 64, 139}: "RAYLAN CORPORATION",
+ [3]byte{0, 64, 140}: "AXIS COMMUNICATIONS AB",
+ [3]byte{0, 64, 141}: "THE GOODYEAR TIRE & RUBBER CO.",
+ [3]byte{0, 64, 142}: "Tattile SRL",
+ [3]byte{0, 64, 143}: "WM-DATA MINFO AB",
+ [3]byte{0, 64, 144}: "ANSEL COMMUNICATIONS",
+ [3]byte{0, 64, 145}: "PROCOMP INDUSTRIA ELETRONICA",
+ [3]byte{0, 64, 146}: "ASP COMPUTER PRODUCTS, INC.",
+ [3]byte{0, 64, 147}: "PAXDATA NETWORKS LTD.",
+ [3]byte{0, 64, 148}: "SHOGRAPHICS, INC.",
+ [3]byte{0, 64, 149}: "R.P.T. INTERGROUPS INT'L LTD.",
+ [3]byte{0, 64, 150}: "Cisco Systems, Inc",
+ [3]byte{0, 64, 151}: "DATEX DIVISION OF",
+ [3]byte{0, 64, 152}: "DRESSLER GMBH & CO.",
+ [3]byte{0, 64, 153}: "NEWGEN SYSTEMS CORP.",
+ [3]byte{0, 64, 154}: "NETWORK EXPRESS, INC.",
+ [3]byte{0, 64, 155}: "HAL COMPUTER SYSTEMS INC.",
+ [3]byte{0, 64, 156}: "TRANSWARE",
+ [3]byte{0, 64, 157}: "DIGIBOARD, INC.",
+ [3]byte{0, 64, 158}: "CONCURRENT TECHNOLOGIES LTD.",
+ [3]byte{0, 64, 159}: "Telco Systems, Inc.",
+ [3]byte{0, 64, 160}: "GOLDSTAR CO., LTD.",
+ [3]byte{0, 64, 161}: "ERGO COMPUTING",
+ [3]byte{0, 64, 162}: "KINGSTAR TECHNOLOGY INC.",
+ [3]byte{0, 64, 163}: "MICROUNITY SYSTEMS ENGINEERING",
+ [3]byte{0, 64, 164}: "ROSE ELECTRONICS",
+ [3]byte{0, 64, 165}: "CLINICOMP INTL.",
+ [3]byte{0, 64, 166}: "Cray, Inc.",
+ [3]byte{0, 64, 167}: "ITAUTEC PHILCO S.A.",
+ [3]byte{0, 64, 168}: "IMF INTERNATIONAL LTD.",
+ [3]byte{0, 64, 169}: "DATACOM INC.",
+ [3]byte{0, 64, 170}: "Valmet Automation",
+ [3]byte{0, 64, 171}: "ROLAND DG CORPORATION",
+ [3]byte{0, 64, 172}: "SUPER WORKSTATION, INC.",
+ [3]byte{0, 64, 173}: "SMA REGELSYSTEME GMBH",
+ [3]byte{0, 64, 174}: "DELTA CONTROLS, INC.",
+ [3]byte{0, 64, 175}: "DIGITAL PRODUCTS, INC.",
+ [3]byte{0, 64, 176}: "BYTEX CORPORATION, ENGINEERING",
+ [3]byte{0, 64, 177}: "CODONICS INC.",
+ [3]byte{0, 64, 178}: "SYSTEMFORSCHUNG",
+ [3]byte{0, 64, 179}: "ParTech Inc.",
+ [3]byte{0, 64, 180}: "NEXTCOM K.K.",
+ [3]byte{0, 64, 181}: "VIDEO TECHNOLOGY COMPUTERS LTD",
+ [3]byte{0, 64, 182}: "COMPUTERM CORPORATION",
+ [3]byte{0, 64, 183}: "STEALTH COMPUTER SYSTEMS",
+ [3]byte{0, 64, 184}: "IDEA ASSOCIATES",
+ [3]byte{0, 64, 185}: "MACQ ELECTRONIQUE SA",
+ [3]byte{0, 64, 186}: "ALLIANT COMPUTER SYSTEMS CORP.",
+ [3]byte{0, 64, 187}: "GOLDSTAR CABLE CO., LTD.",
+ [3]byte{0, 64, 188}: "ALGORITHMICS LTD.",
+ [3]byte{0, 64, 189}: "STARLIGHT NETWORKS, INC.",
+ [3]byte{0, 64, 190}: "BOEING DEFENSE & SPACE",
+ [3]byte{0, 64, 191}: "CHANNEL SYSTEMS INTERN'L INC.",
+ [3]byte{0, 64, 192}: "VISTA CONTROLS CORPORATION",
+ [3]byte{0, 64, 193}: "BIZERBA-WERKE WILHEIM KRAUT",
+ [3]byte{0, 64, 194}: "APPLIED COMPUTING DEVICES",
+ [3]byte{0, 64, 195}: "FISCHER AND PORTER CO.",
+ [3]byte{0, 64, 196}: "KINKEI SYSTEM CORPORATION",
+ [3]byte{0, 64, 197}: "MICOM COMMUNICATIONS INC.",
+ [3]byte{0, 64, 198}: "FIBERNET RESEARCH, INC.",
+ [3]byte{0, 64, 199}: "RUBY TECH CORPORATION",
+ [3]byte{0, 64, 200}: "MILAN TECHNOLOGY CORPORATION",
+ [3]byte{0, 64, 201}: "NCUBE",
+ [3]byte{0, 64, 202}: "FIRST INTERNAT'L COMPUTER, INC",
+ [3]byte{0, 64, 203}: "LANWAN TECHNOLOGIES",
+ [3]byte{0, 64, 204}: "SILCOM MANUF'G TECHNOLOGY INC.",
+ [3]byte{0, 64, 205}: "TERA MICROSYSTEMS, INC.",
+ [3]byte{0, 64, 206}: "NET-SOURCE, INC.",
+ [3]byte{0, 64, 207}: "STRAWBERRY TREE, INC.",
+ [3]byte{0, 64, 208}: "MITAC INTERNATIONAL CORP.",
+ [3]byte{0, 64, 209}: "FUKUDA DENSHI CO., LTD.",
+ [3]byte{0, 64, 210}: "PAGINE CORPORATION",
+ [3]byte{0, 64, 211}: "KIMPSION INTERNATIONAL CORP.",
+ [3]byte{0, 64, 212}: "GAGE TALKER CORP.",
+ [3]byte{0, 64, 213}: "Sartorius Mechatronics T&H GmbH",
+ [3]byte{0, 64, 214}: "LOCAMATION B.V.",
+ [3]byte{0, 64, 215}: "STUDIO GEN INC.",
+ [3]byte{0, 64, 216}: "OCEAN OFFICE AUTOMATION LTD.",
+ [3]byte{0, 64, 217}: "AMERICAN MEGATRENDS INC.",
+ [3]byte{0, 64, 218}: "TELSPEC LTD",
+ [3]byte{0, 64, 219}: "ADVANCED TECHNICAL SOLUTIONS",
+ [3]byte{0, 64, 220}: "TRITEC ELECTRONIC GMBH",
+ [3]byte{0, 64, 221}: "HONG TECHNOLOGIES",
+ [3]byte{0, 64, 222}: "Elsag Datamat spa",
+ [3]byte{0, 64, 223}: "DIGALOG SYSTEMS, INC.",
+ [3]byte{0, 64, 224}: "ATOMWIDE LTD.",
+ [3]byte{0, 64, 225}: "MARNER INTERNATIONAL, INC.",
+ [3]byte{0, 64, 226}: "MESA RIDGE TECHNOLOGIES, INC.",
+ [3]byte{0, 64, 227}: "QUIN SYSTEMS LTD",
+ [3]byte{0, 64, 228}: "E-M TECHNOLOGY, INC.",
+ [3]byte{0, 64, 229}: "SYBUS CORPORATION",
+ [3]byte{0, 64, 230}: "C.A.E.N.",
+ [3]byte{0, 64, 231}: "ARNOS INSTRUMENTS & COMPUTER",
+ [3]byte{0, 64, 232}: "CHARLES RIVER DATA SYSTEMS,INC",
+ [3]byte{0, 64, 233}: "ACCORD SYSTEMS, INC.",
+ [3]byte{0, 64, 234}: "PLAIN TREE SYSTEMS INC",
+ [3]byte{0, 64, 235}: "MARTIN MARIETTA CORPORATION",
+ [3]byte{0, 64, 236}: "MIKASA SYSTEM ENGINEERING",
+ [3]byte{0, 64, 237}: "NETWORK CONTROLS INT'NATL INC.",
+ [3]byte{0, 64, 238}: "OPTIMEM",
+ [3]byte{0, 64, 239}: "HYPERCOM, INC.",
+ [3]byte{0, 64, 240}: "MicroBrain,Inc.",
+ [3]byte{0, 64, 241}: "CHUO ELECTRONICS CO., LTD.",
+ [3]byte{0, 64, 242}: "JANICH & KLASS COMPUTERTECHNIK",
+ [3]byte{0, 64, 243}: "NETCOR",
+ [3]byte{0, 64, 244}: "CAMEO COMMUNICATIONS, INC.",
+ [3]byte{0, 64, 245}: "OEM ENGINES",
+ [3]byte{0, 64, 246}: "KATRON COMPUTERS INC.",
+ [3]byte{0, 64, 247}: "Polaroid Corporation",
+ [3]byte{0, 64, 248}: "SYSTEMHAUS DISCOM",
+ [3]byte{0, 64, 249}: "COMBINET",
+ [3]byte{0, 64, 250}: "MICROBOARDS, INC.",
+ [3]byte{0, 64, 251}: "CASCADE COMMUNICATIONS",
+ [3]byte{0, 64, 252}: "IBR COMPUTER TECHNIK GMBH",
+ [3]byte{0, 64, 253}: "LXE",
+ [3]byte{0, 64, 254}: "SYMPLEX COMMUNICATIONS",
+ [3]byte{0, 64, 255}: "TELEBIT CORPORATION",
+ [3]byte{0, 65, 180}: "Wuxi Zhongxing Optoelectronics Technology Co.,Ltd.",
+ [3]byte{0, 65, 210}: "Cisco Systems, Inc",
+ [3]byte{0, 66, 82}: "RLX Technologies",
+ [3]byte{0, 66, 90}: "Cisco Systems, Inc",
+ [3]byte{0, 66, 104}: "Cisco Systems, Inc",
+ [3]byte{0, 67, 255}: "KETRON S.R.L.",
+ [3]byte{0, 69, 1}: "Versus Technology, Inc.",
+ [3]byte{0, 70, 75}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{0, 74, 119}: "zte corporation",
+ [3]byte{0, 75, 243}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+ [3]byte{0, 77, 50}: "Andon Health Co.,Ltd.",
+ [3]byte{0, 80, 0}: "NEXO COMMUNICATIONS, INC.",
+ [3]byte{0, 80, 1}: "YAMASHITA SYSTEMS CORP.",
+ [3]byte{0, 80, 2}: "OMNISEC AG",
+ [3]byte{0, 80, 3}: "Xrite Inc",
+ [3]byte{0, 80, 4}: "3COM CORPORATION",
+ [3]byte{0, 80, 6}: "TAC AB",
+ [3]byte{0, 80, 7}: "SIEMENS TELECOMMUNICATION SYSTEMS LIMITED",
+ [3]byte{0, 80, 8}: "TIVA MICROCOMPUTER CORP. (TMC)",
+ [3]byte{0, 80, 9}: "PHILIPS BROADBAND NETWORKS",
+ [3]byte{0, 80, 10}: "IRIS TECHNOLOGIES, INC.",
+ [3]byte{0, 80, 11}: "Cisco Systems, Inc",
+ [3]byte{0, 80, 12}: "e-Tek Labs, Inc.",
+ [3]byte{0, 80, 13}: "SATORI ELECTORIC CO., LTD.",
+ [3]byte{0, 80, 14}: "CHROMATIS NETWORKS, INC.",
+ [3]byte{0, 80, 15}: "Cisco Systems, Inc",
+ [3]byte{0, 80, 16}: "NovaNET Learning, Inc.",
+ [3]byte{0, 80, 18}: "CBL - GMBH",
+ [3]byte{0, 80, 19}: "Seagate Cloud Systems Inc",
+ [3]byte{0, 80, 20}: "Cisco Systems, Inc",
+ [3]byte{0, 80, 21}: "BRIGHT STAR ENGINEERING",
+ [3]byte{0, 80, 22}: "Molex Canada Ltd",
+ [3]byte{0, 80, 23}: "RSR S.R.L.",
+ [3]byte{0, 80, 24}: "AMIT, Inc.",
+ [3]byte{0, 80, 25}: "SPRING TIDE NETWORKS, INC.",
+ [3]byte{0, 80, 26}: "IQinVision",
+ [3]byte{0, 80, 27}: "ABL CANADA, INC.",
+ [3]byte{0, 80, 28}: "JATOM SYSTEMS, INC.",
+ [3]byte{0, 80, 30}: "Grass Valley, A Belden Brand",
+ [3]byte{0, 80, 31}: "MRG SYSTEMS, LTD.",
+ [3]byte{0, 80, 32}: "MEDIASTAR CO., LTD.",
+ [3]byte{0, 80, 33}: "EIS INTERNATIONAL, INC.",
+ [3]byte{0, 80, 34}: "ZONET TECHNOLOGY, INC.",
+ [3]byte{0, 80, 35}: "PG DESIGN ELECTRONICS, INC.",
+ [3]byte{0, 80, 36}: "NAVIC SYSTEMS, INC.",
+ [3]byte{0, 80, 38}: "COSYSTEMS, INC.",
+ [3]byte{0, 80, 39}: "GENICOM CORPORATION",
+ [3]byte{0, 80, 40}: "AVAL COMMUNICATIONS",
+ [3]byte{0, 80, 41}: "1394 PRINTER WORKING GROUP",
+ [3]byte{0, 80, 42}: "Cisco Systems, Inc",
+ [3]byte{0, 80, 43}: "GENRAD LTD.",
+ [3]byte{0, 80, 44}: "SOYO COMPUTER, INC.",
+ [3]byte{0, 80, 45}: "ACCEL, INC.",
+ [3]byte{0, 80, 46}: "CAMBEX CORPORATION",
+ [3]byte{0, 80, 47}: "TollBridge Technologies, Inc.",
+ [3]byte{0, 80, 48}: "FUTURE PLUS SYSTEMS",
+ [3]byte{0, 80, 49}: "AEROFLEX LABORATORIES, INC.",
+ [3]byte{0, 80, 50}: "PICAZO COMMUNICATIONS, INC.",
+ [3]byte{0, 80, 51}: "MAYAN NETWORKS",
+ [3]byte{0, 80, 54}: "NETCAM, LTD.",
+ [3]byte{0, 80, 55}: "KOGA ELECTRONICS CO.",
+ [3]byte{0, 80, 56}: "DAIN TELECOM CO., LTD.",
+ [3]byte{0, 80, 57}: "MARINER NETWORKS",
+ [3]byte{0, 80, 58}: "DATONG ELECTRONICS LTD.",
+ [3]byte{0, 80, 59}: "MEDIAFIRE CORPORATION",
+ [3]byte{0, 80, 60}: "TSINGHUA NOVEL ELECTRONICS",
+ [3]byte{0, 80, 62}: "Cisco Systems, Inc",
+ [3]byte{0, 80, 63}: "ANCHOR GAMES",
+ [3]byte{0, 80, 64}: "Panasonic Electric Works Co., Ltd.",
+ [3]byte{0, 80, 65}: "Coretronic Corporation",
+ [3]byte{0, 80, 66}: "SCI MANUFACTURING SINGAPORE PTE, LTD.",
+ [3]byte{0, 80, 67}: "MARVELL SEMICONDUCTOR, INC.",
+ [3]byte{0, 80, 68}: "ASACA CORPORATION",
+ [3]byte{0, 80, 69}: "RIOWORKS SOLUTIONS, INC.",
+ [3]byte{0, 80, 70}: "MENICX INTERNATIONAL CO., LTD.",
+ [3]byte{0, 80, 71}: "Private",
+ [3]byte{0, 80, 72}: "INFOLIBRIA",
+ [3]byte{0, 80, 73}: "Arbor Networks Inc",
+ [3]byte{0, 80, 74}: "ELTECO A.S.",
+ [3]byte{0, 80, 75}: "BARCONET N.V.",
+ [3]byte{0, 80, 76}: "Galil Motion Control",
+ [3]byte{0, 80, 77}: "Tokyo Electron Device Limited",
+ [3]byte{0, 80, 78}: "SIERRA MONITOR CORP.",
+ [3]byte{0, 80, 79}: "OLENCOM ELECTRONICS",
+ [3]byte{0, 80, 80}: "Cisco Systems, Inc",
+ [3]byte{0, 80, 81}: "IWATSU ELECTRIC CO., LTD.",
+ [3]byte{0, 80, 82}: "TIARA NETWORKS, INC.",
+ [3]byte{0, 80, 83}: "Cisco Systems, Inc",
+ [3]byte{0, 80, 84}: "Cisco Systems, Inc",
+ [3]byte{0, 80, 85}: "DOMS A/S",
+ [3]byte{0, 80, 86}: "VMware, Inc.",
+ [3]byte{0, 80, 87}: "BROADBAND ACCESS SYSTEMS",
+ [3]byte{0, 80, 88}: "Sangoma Technologies",
+ [3]byte{0, 80, 89}: "iBAHN",
+ [3]byte{0, 80, 90}: "NETWORK ALCHEMY, INC.",
+ [3]byte{0, 80, 91}: "KAWASAKI LSI U.S.A., INC.",
+ [3]byte{0, 80, 92}: "TUNDO CORPORATION",
+ [3]byte{0, 80, 94}: "DIGITEK MICROLOGIC S.A.",
+ [3]byte{0, 80, 95}: "BRAND INNOVATORS",
+ [3]byte{0, 80, 96}: "TANDBERG TELECOM AS",
+ [3]byte{0, 80, 98}: "KOUWELL ELECTRONICS CORP. **",
+ [3]byte{0, 80, 99}: "OY COMSEL SYSTEM AB",
+ [3]byte{0, 80, 100}: "CAE ELECTRONICS",
+ [3]byte{0, 80, 101}: "TDK-Lambda Corporation",
+ [3]byte{0, 80, 102}: "AtecoM GmbH advanced telecomunication modules",
+ [3]byte{0, 80, 103}: "AEROCOMM, INC.",
+ [3]byte{0, 80, 104}: "ELECTRONIC INDUSTRIES ASSOCIATION",
+ [3]byte{0, 80, 105}: "PixStream Incorporated",
+ [3]byte{0, 80, 106}: "EDEVA, INC.",
+ [3]byte{0, 80, 107}: "SPX-ATEG",
+ [3]byte{0, 80, 108}: "Beijer Electronics Products AB",
+ [3]byte{0, 80, 109}: "VIDEOJET SYSTEMS",
+ [3]byte{0, 80, 110}: "CORDER ENGINEERING CORPORATION",
+ [3]byte{0, 80, 111}: "G-CONNECT",
+ [3]byte{0, 80, 112}: "CHAINTECH COMPUTER CO., LTD.",
+ [3]byte{0, 80, 113}: "AIWA CO., LTD.",
+ [3]byte{0, 80, 114}: "CORVIS CORPORATION",
+ [3]byte{0, 80, 115}: "Cisco Systems, Inc",
+ [3]byte{0, 80, 116}: "ADVANCED HI-TECH CORP.",
+ [3]byte{0, 80, 117}: "KESTREL SOLUTIONS",
+ [3]byte{0, 80, 118}: "IBM Corp",
+ [3]byte{0, 80, 119}: "PROLIFIC TECHNOLOGY, INC.",
+ [3]byte{0, 80, 120}: "MEGATON HOUSE, LTD.",
+ [3]byte{0, 80, 121}: "Private",
+ [3]byte{0, 80, 122}: "XPEED, INC.",
+ [3]byte{0, 80, 123}: "MERLOT COMMUNICATIONS",
+ [3]byte{0, 80, 124}: "VIDEOCON AG",
+ [3]byte{0, 80, 125}: "IFP",
+ [3]byte{0, 80, 126}: "NEWER TECHNOLOGY",
+ [3]byte{0, 80, 127}: "DrayTek Corp.",
+ [3]byte{0, 80, 128}: "Cisco Systems, Inc",
+ [3]byte{0, 80, 129}: "MURATA MACHINERY, LTD.",
+ [3]byte{0, 80, 130}: "FORESSON CORPORATION",
+ [3]byte{0, 80, 131}: "GILBARCO, INC.",
+ [3]byte{0, 80, 132}: "ATL PRODUCTS",
+ [3]byte{0, 80, 134}: "TELKOM SA, LTD.",
+ [3]byte{0, 80, 135}: "TERASAKI ELECTRIC CO., LTD.",
+ [3]byte{0, 80, 136}: "AMANO CORPORATION",
+ [3]byte{0, 80, 137}: "SAFETY MANAGEMENT SYSTEMS",
+ [3]byte{0, 80, 139}: "Hewlett Packard",
+ [3]byte{0, 80, 140}: "RSI SYSTEMS",
+ [3]byte{0, 80, 141}: "ABIT COMPUTER CORPORATION",
+ [3]byte{0, 80, 142}: "OPTIMATION, INC.",
+ [3]byte{0, 80, 143}: "ASITA TECHNOLOGIES INT'L LTD.",
+ [3]byte{0, 80, 144}: "DCTRI",
+ [3]byte{0, 80, 145}: "NETACCESS, INC.",
+ [3]byte{0, 80, 146}: "Rigaku Corporation Osaka Plant",
+ [3]byte{0, 80, 147}: "BOEING",
+ [3]byte{0, 80, 148}: "ARRIS Group, Inc.",
+ [3]byte{0, 80, 149}: "PERACOM NETWORKS",
+ [3]byte{0, 80, 150}: "SALIX TECHNOLOGIES, INC.",
+ [3]byte{0, 80, 151}: "MMC-EMBEDDED COMPUTERTECHNIK GmbH",
+ [3]byte{0, 80, 152}: "GLOBALOOP, LTD.",
+ [3]byte{0, 80, 153}: "3COM EUROPE, LTD.",
+ [3]byte{0, 80, 154}: "TAG ELECTRONIC SYSTEMS",
+ [3]byte{0, 80, 155}: "SWITCHCORE AB",
+ [3]byte{0, 80, 156}: "BETA RESEARCH",
+ [3]byte{0, 80, 157}: "THE INDUSTREE B.V.",
+ [3]byte{0, 80, 158}: "Les Technologies SoftAcoustik Inc.",
+ [3]byte{0, 80, 159}: "HORIZON COMPUTER",
+ [3]byte{0, 80, 160}: "DELTA COMPUTER SYSTEMS, INC.",
+ [3]byte{0, 80, 161}: "CARLO GAVAZZI, INC.",
+ [3]byte{0, 80, 162}: "Cisco Systems, Inc",
+ [3]byte{0, 80, 163}: "TransMedia Communications, Inc.",
+ [3]byte{0, 80, 164}: "IO TECH, INC.",
+ [3]byte{0, 80, 165}: "CAPITOL BUSINESS SYSTEMS, LTD.",
+ [3]byte{0, 80, 166}: "OPTRONICS",
+ [3]byte{0, 80, 167}: "Cisco Systems, Inc",
+ [3]byte{0, 80, 168}: "OpenCon Systems, Inc.",
+ [3]byte{0, 80, 169}: "MOLDAT WIRELESS TECHNOLGIES",
+ [3]byte{0, 80, 170}: "KONICA MINOLTA HOLDINGS, INC.",
+ [3]byte{0, 80, 171}: "NALTEC, Inc.",
+ [3]byte{0, 80, 172}: "MAPLE COMPUTER CORPORATION",
+ [3]byte{0, 80, 173}: "CommUnique Wireless Corp.",
+ [3]byte{0, 80, 174}: "FDK Co., Ltd",
+ [3]byte{0, 80, 175}: "INTERGON, INC.",
+ [3]byte{0, 80, 176}: "TECHNOLOGY ATLANTA CORPORATION",
+ [3]byte{0, 80, 177}: "GIDDINGS & LEWIS",
+ [3]byte{0, 80, 178}: "BRODEL GmbH",
+ [3]byte{0, 80, 179}: "VOICEBOARD CORPORATION",
+ [3]byte{0, 80, 180}: "SATCHWELL CONTROL SYSTEMS, LTD",
+ [3]byte{0, 80, 181}: "FICHET SECURITE ELECTRONIQUE",
+ [3]byte{0, 80, 182}: "GOOD WAY IND. CO., LTD.",
+ [3]byte{0, 80, 183}: "BOSER TECHNOLOGY CO., LTD.",
+ [3]byte{0, 80, 184}: "INOVA COMPUTERS GMBH & CO. KG",
+ [3]byte{0, 80, 185}: "XITRON TECHNOLOGIES, INC.",
+ [3]byte{0, 80, 186}: "D-Link Corporation",
+ [3]byte{0, 80, 187}: "CMS TECHNOLOGIES",
+ [3]byte{0, 80, 188}: "HAMMER STORAGE SOLUTIONS",
+ [3]byte{0, 80, 189}: "Cisco Systems, Inc",
+ [3]byte{0, 80, 190}: "FAST MULTIMEDIA AG",
+ [3]byte{0, 80, 191}: "Metalligence Technology Corp.",
+ [3]byte{0, 80, 192}: "GATAN, INC.",
+ [3]byte{0, 80, 193}: "GEMFLEX NETWORKS, LTD.",
+ [3]byte{0, 80, 194}: "IEEE Registration Authority",
+ [3]byte{0, 80, 196}: "IMD",
+ [3]byte{0, 80, 197}: "ADS Technologies, Inc",
+ [3]byte{0, 80, 198}: "LOOP TELECOMMUNICATION INTERNATIONAL, INC.",
+ [3]byte{0, 80, 199}: "Private",
+ [3]byte{0, 80, 200}: "Addonics Technologies, Inc.",
+ [3]byte{0, 80, 201}: "MASPRO DENKOH CORP.",
+ [3]byte{0, 80, 202}: "NET TO NET TECHNOLOGIES",
+ [3]byte{0, 80, 203}: "JETTER",
+ [3]byte{0, 80, 204}: "Seagate Cloud Systems Inc",
+ [3]byte{0, 80, 205}: "DIGIANSWER A/S",
+ [3]byte{0, 80, 206}: "LG INTERNATIONAL CORP.",
+ [3]byte{0, 80, 207}: "VANLINK COMMUNICATION TECHNOLOGY RESEARCH INSTITUTE",
+ [3]byte{0, 80, 208}: "MINERVA SYSTEMS",
+ [3]byte{0, 80, 209}: "Cisco Systems, Inc",
+ [3]byte{0, 80, 210}: "CMC Electronics Inc",
+ [3]byte{0, 80, 211}: "DIGITAL AUDIO PROCESSING PTY. LTD.",
+ [3]byte{0, 80, 212}: "JOOHONG INFORMATION &",
+ [3]byte{0, 80, 213}: "AD SYSTEMS CORP.",
+ [3]byte{0, 80, 214}: "ATLAS COPCO TOOLS AB",
+ [3]byte{0, 80, 215}: "TELSTRAT",
+ [3]byte{0, 80, 216}: "UNICORN COMPUTER CORP.",
+ [3]byte{0, 80, 217}: "ENGETRON-ENGENHARIA ELETRONICA IND. e COM. LTDA",
+ [3]byte{0, 80, 218}: "3COM CORPORATION",
+ [3]byte{0, 80, 219}: "CONTEMPORARY CONTROL",
+ [3]byte{0, 80, 220}: "TAS TELEFONBAU A. SCHWABE GMBH & CO. KG",
+ [3]byte{0, 80, 221}: "SERRA SOLDADURA, S.A.",
+ [3]byte{0, 80, 222}: "SIGNUM SYSTEMS CORP.",
+ [3]byte{0, 80, 223}: "AirFiber, Inc.",
+ [3]byte{0, 80, 225}: "NS TECH ELECTRONICS SDN BHD",
+ [3]byte{0, 80, 226}: "Cisco Systems, Inc",
+ [3]byte{0, 80, 227}: "ARRIS Group, Inc.",
+ [3]byte{0, 80, 228}: "Apple, Inc.",
+ [3]byte{0, 80, 230}: "HAKUSAN CORPORATION",
+ [3]byte{0, 80, 231}: "PARADISE INNOVATIONS (ASIA)",
+ [3]byte{0, 80, 232}: "NOMADIX INC.",
+ [3]byte{0, 80, 234}: "XEL COMMUNICATIONS, INC.",
+ [3]byte{0, 80, 235}: "ALPHA-TOP CORPORATION",
+ [3]byte{0, 80, 236}: "OLICOM A/S",
+ [3]byte{0, 80, 237}: "ANDA NETWORKS",
+ [3]byte{0, 80, 238}: "TEK DIGITEL CORPORATION",
+ [3]byte{0, 80, 239}: "SPE Systemhaus GmbH",
+ [3]byte{0, 80, 240}: "Cisco Systems, Inc",
+ [3]byte{0, 80, 241}: "Intel Corporation",
+ [3]byte{0, 80, 242}: "MICROSOFT CORP.",
+ [3]byte{0, 80, 243}: "GLOBAL NET INFORMATION CO., Ltd.",
+ [3]byte{0, 80, 244}: "SIGMATEK GMBH & CO. KG",
+ [3]byte{0, 80, 246}: "PAN-INTERNATIONAL INDUSTRIAL CORP.",
+ [3]byte{0, 80, 247}: "VENTURE MANUFACTURING (SINGAPORE) LTD.",
+ [3]byte{0, 80, 248}: "ENTREGA TECHNOLOGIES, INC.",
+ [3]byte{0, 80, 249}: "Sensormatic Electronics LLC",
+ [3]byte{0, 80, 250}: "OXTEL, LTD.",
+ [3]byte{0, 80, 251}: "VSK ELECTRONICS",
+ [3]byte{0, 80, 252}: "Edimax Technology Co. Ltd.",
+ [3]byte{0, 80, 253}: "VISIONCOMM CO., LTD.",
+ [3]byte{0, 80, 254}: "PCTVnet ASA",
+ [3]byte{0, 80, 255}: "HAKKO ELECTRONICS CO., LTD.",
+ [3]byte{0, 82, 24}: "Wuxi Keboda Electron Co.Ltd",
+ [3]byte{0, 84, 159}: "Avaya Inc",
+ [3]byte{0, 84, 175}: "Continental Automotive Systems Inc.",
+ [3]byte{0, 84, 189}: "Swelaser AB",
+ [3]byte{0, 85, 218}: "IEEE Registration Authority",
+ [3]byte{0, 86, 43}: "Cisco Systems, Inc",
+ [3]byte{0, 86, 205}: "Apple, Inc.",
+ [3]byte{0, 87, 210}: "Cisco Systems, Inc",
+ [3]byte{0, 89, 7}: "LenovoEMC Products USA, LLC",
+ [3]byte{0, 89, 121}: "Networked Energy Services",
+ [3]byte{0, 89, 172}: "KPN. B.V.",
+ [3]byte{0, 89, 220}: "Cisco Systems, Inc",
+ [3]byte{0, 90, 19}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{0, 90, 57}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+ [3]byte{0, 91, 161}: "shanghai huayuan chuangxin software CO., LTD.",
+ [3]byte{0, 92, 134}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+ [3]byte{0, 92, 177}: "Gospell DIGITAL TECHNOLOGY CO., LTD",
+ [3]byte{0, 93, 3}: "Xilinx, Inc",
+ [3]byte{0, 93, 115}: "Cisco Systems, Inc",
+ [3]byte{0, 95, 134}: "Cisco Systems, Inc",
+ [3]byte{0, 96, 0}: "XYCOM INC.",
+ [3]byte{0, 96, 1}: "InnoSys, Inc.",
+ [3]byte{0, 96, 2}: "SCREEN SUBTITLING SYSTEMS, LTD",
+ [3]byte{0, 96, 3}: "TERAOKA WEIGH SYSTEM PTE, LTD.",
+ [3]byte{0, 96, 4}: "COMPUTADORES MODULARES SA",
+ [3]byte{0, 96, 5}: "FEEDBACK DATA LTD.",
+ [3]byte{0, 96, 6}: "SOTEC CO., LTD",
+ [3]byte{0, 96, 7}: "ACRES GAMING, INC.",
+ [3]byte{0, 96, 8}: "3COM CORPORATION",
+ [3]byte{0, 96, 9}: "Cisco Systems, Inc",
+ [3]byte{0, 96, 10}: "SORD COMPUTER CORPORATION",
+ [3]byte{0, 96, 11}: "LOGWARE GmbH",
+ [3]byte{0, 96, 12}: "Eurotech Inc.",
+ [3]byte{0, 96, 13}: "Digital Logic GmbH",
+ [3]byte{0, 96, 14}: "WAVENET INTERNATIONAL, INC.",
+ [3]byte{0, 96, 15}: "Westell Technologies Inc.",
+ [3]byte{0, 96, 16}: "NETWORK MACHINES, INC.",
+ [3]byte{0, 96, 17}: "CRYSTAL SEMICONDUCTOR CORP.",
+ [3]byte{0, 96, 18}: "POWER COMPUTING CORPORATION",
+ [3]byte{0, 96, 19}: "NETSTAL MASCHINEN AG",
+ [3]byte{0, 96, 20}: "EDEC CO., LTD.",
+ [3]byte{0, 96, 21}: "NET2NET CORPORATION",
+ [3]byte{0, 96, 22}: "CLARIION",
+ [3]byte{0, 96, 23}: "TOKIMEC INC.",
+ [3]byte{0, 96, 24}: "STELLAR ONE CORPORATION",
+ [3]byte{0, 96, 25}: "Roche Diagnostics",
+ [3]byte{0, 96, 26}: "KEITHLEY INSTRUMENTS",
+ [3]byte{0, 96, 27}: "MESA ELECTRONICS",
+ [3]byte{0, 96, 28}: "TELXON CORPORATION",
+ [3]byte{0, 96, 29}: "LUCENT TECHNOLOGIES",
+ [3]byte{0, 96, 30}: "SOFTLAB, INC.",
+ [3]byte{0, 96, 31}: "STALLION TECHNOLOGIES",
+ [3]byte{0, 96, 32}: "PIVOTAL NETWORKING, INC.",
+ [3]byte{0, 96, 33}: "DSC CORPORATION",
+ [3]byte{0, 96, 34}: "VICOM SYSTEMS, INC.",
+ [3]byte{0, 96, 35}: "PERICOM SEMICONDUCTOR CORP.",
+ [3]byte{0, 96, 36}: "GRADIENT TECHNOLOGIES, INC.",
+ [3]byte{0, 96, 37}: "ACTIVE IMAGING PLC",
+ [3]byte{0, 96, 38}: "VIKING Modular Solutions",
+ [3]byte{0, 96, 39}: "Superior Modular Products",
+ [3]byte{0, 96, 40}: "MACROVISION CORPORATION",
+ [3]byte{0, 96, 41}: "CARY PERIPHERALS INC.",
+ [3]byte{0, 96, 42}: "SYMICRON COMPUTER COMMUNICATIONS, LTD.",
+ [3]byte{0, 96, 43}: "PEAK AUDIO",
+ [3]byte{0, 96, 44}: "LINX Data Terminals, Inc.",
+ [3]byte{0, 96, 45}: "ALERTON TECHNOLOGIES, INC.",
+ [3]byte{0, 96, 46}: "CYCLADES CORPORATION",
+ [3]byte{0, 96, 47}: "Cisco Systems, Inc",
+ [3]byte{0, 96, 48}: "VILLAGE TRONIC ENTWICKLUNG",
+ [3]byte{0, 96, 49}: "HRK SYSTEMS",
+ [3]byte{0, 96, 50}: "I-CUBE, INC.",
+ [3]byte{0, 96, 51}: "ACUITY IMAGING, INC.",
+ [3]byte{0, 96, 52}: "ROBERT BOSCH GmbH",
+ [3]byte{0, 96, 53}: "DALLAS SEMICONDUCTOR, INC.",
+ [3]byte{0, 96, 54}: "AIT Austrian Institute of Technology GmbH",
+ [3]byte{0, 96, 55}: "NXP Semiconductors",
+ [3]byte{0, 96, 56}: "Nortel Networks",
+ [3]byte{0, 96, 57}: "SanCom Technology, Inc.",
+ [3]byte{0, 96, 58}: "QUICK CONTROLS LTD.",
+ [3]byte{0, 96, 59}: "AMTEC spa",
+ [3]byte{0, 96, 60}: "HAGIWARA SYS-COM CO., LTD.",
+ [3]byte{0, 96, 61}: "3CX",
+ [3]byte{0, 96, 62}: "Cisco Systems, Inc",
+ [3]byte{0, 96, 63}: "PATAPSCO DESIGNS",
+ [3]byte{0, 96, 64}: "NETRO CORP.",
+ [3]byte{0, 96, 65}: "Yokogawa Digital Computer Corporation",
+ [3]byte{0, 96, 66}: "TKS (USA), INC.",
+ [3]byte{0, 96, 67}: "iDirect, INC.",
+ [3]byte{0, 96, 68}: "LITTON/POLY-SCIENTIFIC",
+ [3]byte{0, 96, 69}: "PATHLIGHT TECHNOLOGIES",
+ [3]byte{0, 96, 70}: "VMETRO, INC.",
+ [3]byte{0, 96, 71}: "Cisco Systems, Inc",
+ [3]byte{0, 96, 72}: "Dell EMC",
+ [3]byte{0, 96, 73}: "VINA TECHNOLOGIES",
+ [3]byte{0, 96, 74}: "SAIC IDEAS GROUP",
+ [3]byte{0, 96, 75}: "Safe-com GmbH & Co. KG",
+ [3]byte{0, 96, 76}: "Sagemcom Broadband SAS",
+ [3]byte{0, 96, 77}: "MMC NETWORKS, INC.",
+ [3]byte{0, 96, 78}: "CYCLE COMPUTER CORPORATION, INC.",
+ [3]byte{0, 96, 79}: "Tattile SRL",
+ [3]byte{0, 96, 80}: "INTERNIX INC.",
+ [3]byte{0, 96, 81}: "QUALITY SEMICONDUCTOR",
+ [3]byte{0, 96, 82}: "PERIPHERALS ENTERPRISE CO., Ltd.",
+ [3]byte{0, 96, 83}: "TOYODA MACHINE WORKS, LTD.",
+ [3]byte{0, 96, 84}: "CONTROLWARE GMBH",
+ [3]byte{0, 96, 85}: "CORNELL UNIVERSITY",
+ [3]byte{0, 96, 86}: "NETWORK TOOLS, INC.",
+ [3]byte{0, 96, 87}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{0, 96, 88}: "COPPER MOUNTAIN COMMUNICATIONS, INC.",
+ [3]byte{0, 96, 89}: "TECHNICAL COMMUNICATIONS CORP.",
+ [3]byte{0, 96, 90}: "CELCORE, INC.",
+ [3]byte{0, 96, 91}: "IntraServer Technology, Inc.",
+ [3]byte{0, 96, 92}: "Cisco Systems, Inc",
+ [3]byte{0, 96, 93}: "SCANIVALVE CORP.",
+ [3]byte{0, 96, 94}: "LIBERTY TECHNOLOGY NETWORKING",
+ [3]byte{0, 96, 95}: "NIPPON UNISOFT CORPORATION",
+ [3]byte{0, 96, 96}: "Data Innovations North America",
+ [3]byte{0, 96, 97}: "WHISTLE COMMUNICATIONS CORP.",
+ [3]byte{0, 96, 98}: "TELESYNC, INC.",
+ [3]byte{0, 96, 99}: "PSION DACOM PLC.",
+ [3]byte{0, 96, 100}: "NETCOMM LIMITED",
+ [3]byte{0, 96, 101}: "BERNECKER & RAINER INDUSTRIE-ELEKTRONIC GmbH",
+ [3]byte{0, 96, 102}: "LACROIX Trafic",
+ [3]byte{0, 96, 103}: "ACER NETXUS INC.",
+ [3]byte{0, 96, 104}: "Dialogic Corporation",
+ [3]byte{0, 96, 105}: "Brocade Communications Systems, Inc.",
+ [3]byte{0, 96, 106}: "MITSUBISHI WIRELESS COMMUNICATIONS. INC.",
+ [3]byte{0, 96, 107}: "Synclayer Inc.",
+ [3]byte{0, 96, 108}: "ARESCOM",
+ [3]byte{0, 96, 109}: "DIGITAL EQUIPMENT CORP.",
+ [3]byte{0, 96, 110}: "DAVICOM SEMICONDUCTOR, INC.",
+ [3]byte{0, 96, 111}: "CLARION CORPORATION OF AMERICA",
+ [3]byte{0, 96, 112}: "Cisco Systems, Inc",
+ [3]byte{0, 96, 113}: "MIDAS LAB, INC.",
+ [3]byte{0, 96, 114}: "VXL INSTRUMENTS, LIMITED",
+ [3]byte{0, 96, 115}: "REDCREEK COMMUNICATIONS, INC.",
+ [3]byte{0, 96, 116}: "QSC LLC",
+ [3]byte{0, 96, 117}: "PENTEK, INC.",
+ [3]byte{0, 96, 118}: "SCHLUMBERGER TECHNOLOGIES RETAIL PETROLEUM SYSTEMS",
+ [3]byte{0, 96, 119}: "PRISA NETWORKS",
+ [3]byte{0, 96, 120}: "POWER MEASUREMENT LTD.",
+ [3]byte{0, 96, 121}: "Mainstream Data, Inc.",
+ [3]byte{0, 96, 122}: "DVS GMBH",
+ [3]byte{0, 96, 123}: "FORE SYSTEMS, INC.",
+ [3]byte{0, 96, 124}: "WaveAccess, Ltd.",
+ [3]byte{0, 96, 125}: "SENTIENT NETWORKS INC.",
+ [3]byte{0, 96, 126}: "GIGALABS, INC.",
+ [3]byte{0, 96, 127}: "AURORA TECHNOLOGIES, INC.",
+ [3]byte{0, 96, 128}: "MICROTRONIX DATACOM LTD.",
+ [3]byte{0, 96, 129}: "TV/COM INTERNATIONAL",
+ [3]byte{0, 96, 130}: "NOVALINK TECHNOLOGIES, INC.",
+ [3]byte{0, 96, 131}: "Cisco Systems, Inc",
+ [3]byte{0, 96, 132}: "DIGITAL VIDEO",
+ [3]byte{0, 96, 133}: "Storage Concepts",
+ [3]byte{0, 96, 134}: "LOGIC REPLACEMENT TECH. LTD.",
+ [3]byte{0, 96, 135}: "KANSAI ELECTRIC CO., LTD.",
+ [3]byte{0, 96, 136}: "Analog Devices, Inc.",
+ [3]byte{0, 96, 137}: "XATA",
+ [3]byte{0, 96, 138}: "CITADEL COMPUTER",
+ [3]byte{0, 96, 139}: "ConferTech International",
+ [3]byte{0, 96, 140}: "3COM CORPORATION",
+ [3]byte{0, 96, 141}: "UNIPULSE CORP.",
+ [3]byte{0, 96, 142}: "HE ELECTRONICS, TECHNOLOGIE & SYSTEMTECHNIK GmbH",
+ [3]byte{0, 96, 143}: "TEKRAM TECHNOLOGY CO., LTD.",
+ [3]byte{0, 96, 144}: "Artiza Networks Inc",
+ [3]byte{0, 96, 145}: "FIRST PACIFIC NETWORKS, INC.",
+ [3]byte{0, 96, 146}: "MICRO/SYS, INC.",
+ [3]byte{0, 96, 147}: "VARIAN",
+ [3]byte{0, 96, 148}: "IBM Corp",
+ [3]byte{0, 96, 149}: "ACCU-TIME SYSTEMS, INC.",
+ [3]byte{0, 96, 150}: "T.S. MICROTECH INC.",
+ [3]byte{0, 96, 151}: "3COM CORPORATION",
+ [3]byte{0, 96, 152}: "HT COMMUNICATIONS",
+ [3]byte{0, 96, 153}: "SBE, Inc.",
+ [3]byte{0, 96, 154}: "NJK TECHNO CO.",
+ [3]byte{0, 96, 155}: "AstroNova, Inc",
+ [3]byte{0, 96, 156}: "Perkin-Elmer Incorporated",
+ [3]byte{0, 96, 157}: "PMI FOOD EQUIPMENT GROUP",
+ [3]byte{0, 96, 158}: "ASC X3 - INFORMATION TECHNOLOGY STANDARDS SECRETARIATS",
+ [3]byte{0, 96, 159}: "PHAST CORPORATION",
+ [3]byte{0, 96, 160}: "SWITCHED NETWORK TECHNOLOGIES, INC.",
+ [3]byte{0, 96, 161}: "VPNet, Inc.",
+ [3]byte{0, 96, 162}: "NIHON UNISYS LIMITED CO.",
+ [3]byte{0, 96, 163}: "CONTINUUM TECHNOLOGY CORP.",
+ [3]byte{0, 96, 164}: "GEW Technologies (PTY)Ltd",
+ [3]byte{0, 96, 165}: "PERFORMANCE TELECOM CORP.",
+ [3]byte{0, 96, 166}: "PARTICLE MEASURING SYSTEMS",
+ [3]byte{0, 96, 167}: "MICROSENS GmbH & CO. KG",
+ [3]byte{0, 96, 168}: "TIDOMAT AB",
+ [3]byte{0, 96, 169}: "GESYTEC MBH",
+ [3]byte{0, 96, 170}: "INTELLIGENT DEVICES INC. (IDI)",
+ [3]byte{0, 96, 171}: "LARSCOM INCORPORATED",
+ [3]byte{0, 96, 172}: "RESILIENCE CORPORATION",
+ [3]byte{0, 96, 173}: "MegaChips Corporation",
+ [3]byte{0, 96, 174}: "TRIO INFORMATION SYSTEMS AB",
+ [3]byte{0, 96, 175}: "PACIFIC MICRO DATA, INC.",
+ [3]byte{0, 96, 176}: "Hewlett Packard",
+ [3]byte{0, 96, 177}: "Input/Output, Inc.",
+ [3]byte{0, 96, 178}: "PROCESS CONTROL CORP.",
+ [3]byte{0, 96, 179}: "Z-COM, INC.",
+ [3]byte{0, 96, 180}: "GLENAYRE R&D INC.",
+ [3]byte{0, 96, 181}: "KEBA GmbH",
+ [3]byte{0, 96, 182}: "LAND COMPUTER CO., LTD.",
+ [3]byte{0, 96, 183}: "CHANNELMATIC, INC.",
+ [3]byte{0, 96, 184}: "CORELIS Inc.",
+ [3]byte{0, 96, 185}: "NEC Platforms, Ltd",
+ [3]byte{0, 96, 186}: "SAHARA NETWORKS, INC.",
+ [3]byte{0, 96, 187}: "Cabletron Systems, Inc.",
+ [3]byte{0, 96, 188}: "KeunYoung Electronics & Communication Co., Ltd.",
+ [3]byte{0, 96, 189}: "Enginuity Communications",
+ [3]byte{0, 96, 190}: "WEBTRONICS",
+ [3]byte{0, 96, 191}: "MACRAIGOR SYSTEMS, INC.",
+ [3]byte{0, 96, 192}: "Nera Networks AS",
+ [3]byte{0, 96, 193}: "WaveSpan Corporation",
+ [3]byte{0, 96, 194}: "MPL AG",
+ [3]byte{0, 96, 195}: "NETVISION CORPORATION",
+ [3]byte{0, 96, 196}: "SOLITON SYSTEMS K.K.",
+ [3]byte{0, 96, 197}: "ANCOT CORP.",
+ [3]byte{0, 96, 198}: "DCS AG",
+ [3]byte{0, 96, 199}: "AMATI COMMUNICATIONS CORP.",
+ [3]byte{0, 96, 200}: "KUKA WELDING SYSTEMS & ROBOTS",
+ [3]byte{0, 96, 201}: "ControlNet, Inc.",
+ [3]byte{0, 96, 202}: "HARMONIC SYSTEMS INCORPORATED",
+ [3]byte{0, 96, 203}: "HITACHI ZOSEN CORPORATION",
+ [3]byte{0, 96, 204}: "EMTRAK, INCORPORATED",
+ [3]byte{0, 96, 205}: "VideoServer, Inc.",
+ [3]byte{0, 96, 206}: "ACCLAIM COMMUNICATIONS",
+ [3]byte{0, 96, 207}: "ALTEON NETWORKS, INC.",
+ [3]byte{0, 96, 208}: "SNMP RESEARCH INCORPORATED",
+ [3]byte{0, 96, 209}: "CASCADE COMMUNICATIONS",
+ [3]byte{0, 96, 210}: "LUCENT TECHNOLOGIES TAIWAN TELECOMMUNICATIONS CO., LTD.",
+ [3]byte{0, 96, 211}: "AT&T",
+ [3]byte{0, 96, 212}: "ELDAT COMMUNICATION LTD.",
+ [3]byte{0, 96, 213}: "AMADA MIYACHI Co., Ltd",
+ [3]byte{0, 96, 214}: "NovAtel Inc.",
+ [3]byte{0, 96, 215}: "ECOLE POLYTECHNIQUE FEDERALE DE LAUSANNE (EPFL)",
+ [3]byte{0, 96, 216}: "ELMIC SYSTEMS, INC.",
+ [3]byte{0, 96, 217}: "TRANSYS NETWORKS INC.",
+ [3]byte{0, 96, 218}: "Red Lion Controls, LP",
+ [3]byte{0, 96, 219}: "NTP ELEKTRONIK A/S",
+ [3]byte{0, 96, 220}: "NEC Magnus Communications,Ltd.",
+ [3]byte{0, 96, 221}: "MYRICOM, INC.",
+ [3]byte{0, 96, 222}: "Kayser-Threde GmbH",
+ [3]byte{0, 96, 223}: "Brocade Communications Systems, Inc.",
+ [3]byte{0, 96, 224}: "AXIOM TECHNOLOGY CO., LTD.",
+ [3]byte{0, 96, 225}: "ORCKIT COMMUNICATIONS LTD.",
+ [3]byte{0, 96, 226}: "QUEST ENGINEERING & DEVELOPMENT",
+ [3]byte{0, 96, 227}: "ARBIN INSTRUMENTS",
+ [3]byte{0, 96, 228}: "COMPUSERVE, INC.",
+ [3]byte{0, 96, 229}: "FUJI AUTOMATION CO., LTD.",
+ [3]byte{0, 96, 230}: "SHOMITI SYSTEMS INCORPORATED",
+ [3]byte{0, 96, 231}: "RANDATA",
+ [3]byte{0, 96, 232}: "HITACHI COMPUTER PRODUCTS (AMERICA), INC.",
+ [3]byte{0, 96, 233}: "ATOP TECHNOLOGIES, INC.",
+ [3]byte{0, 96, 234}: "StreamLogic",
+ [3]byte{0, 96, 235}: "FOURTHTRACK SYSTEMS",
+ [3]byte{0, 96, 236}: "HERMARY OPTO ELECTRONICS INC.",
+ [3]byte{0, 96, 237}: "RICARDO TEST AUTOMATION LTD.",
+ [3]byte{0, 96, 238}: "APOLLO",
+ [3]byte{0, 96, 239}: "FLYTECH TECHNOLOGY CO., LTD.",
+ [3]byte{0, 96, 240}: "JOHNSON & JOHNSON MEDICAL, INC",
+ [3]byte{0, 96, 241}: "EXP COMPUTER, INC.",
+ [3]byte{0, 96, 242}: "LASERGRAPHICS, INC.",
+ [3]byte{0, 96, 243}: "Performance Analysis Broadband, Spirent plc",
+ [3]byte{0, 96, 244}: "ADVANCED COMPUTER SOLUTIONS, Inc.",
+ [3]byte{0, 96, 245}: "ICON WEST, INC.",
+ [3]byte{0, 96, 246}: "NEXTEST COMMUNICATIONS PRODUCTS, INC.",
+ [3]byte{0, 96, 247}: "DATAFUSION SYSTEMS",
+ [3]byte{0, 96, 248}: "Loran International Technologies Inc.",
+ [3]byte{0, 96, 249}: "DIAMOND LANE COMMUNICATIONS",
+ [3]byte{0, 96, 250}: "EDUCATIONAL TECHNOLOGY RESOURCES, INC.",
+ [3]byte{0, 96, 251}: "PACKETEER, INC.",
+ [3]byte{0, 96, 252}: "CONSERVATION THROUGH INNOVATION LTD.",
+ [3]byte{0, 96, 253}: "NetICs, Inc.",
+ [3]byte{0, 96, 254}: "LYNX SYSTEM DEVELOPERS, INC.",
+ [3]byte{0, 96, 255}: "QuVis, Inc.",
+ [3]byte{0, 97, 113}: "Apple, Inc.",
+ [3]byte{0, 98, 236}: "Cisco Systems, Inc",
+ [3]byte{0, 100, 64}: "Cisco Systems, Inc",
+ [3]byte{0, 100, 166}: "Maquet CardioVascular",
+ [3]byte{0, 102, 75}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{0, 107, 142}: "Shanghai Feixun Communication Co.,Ltd.",
+ [3]byte{0, 107, 158}: "Vizio, Inc",
+ [3]byte{0, 107, 160}: "SHENZHEN UNIVERSAL INTELLISYS PTE LTD",
+ [3]byte{0, 107, 241}: "Cisco Systems, Inc",
+ [3]byte{0, 108, 188}: "Cisco Systems, Inc",
+ [3]byte{0, 108, 253}: "Sichuan Changhong Electric Ltd.",
+ [3]byte{0, 109, 82}: "Apple, Inc.",
+ [3]byte{0, 109, 251}: "Vutrix Technologies Ltd",
+ [3]byte{0, 111, 100}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 112, 176}: "M/A-COM INC. COMPANIES",
+ [3]byte{0, 112, 179}: "DATA RECALL LTD.",
+ [3]byte{0, 113, 194}: "PEGATRON CORPORATION",
+ [3]byte{0, 113, 204}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{0, 114, 99}: "Netcore Technology Inc.",
+ [3]byte{0, 115, 141}: "Shenzhen TINNO Mobile Technology Corp.",
+ [3]byte{0, 115, 224}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 116, 156}: "Ruijie Networks Co.,LTD",
+ [3]byte{0, 117, 50}: "INID BV",
+ [3]byte{0, 117, 225}: "Ampt, LLC",
+ [3]byte{0, 118, 134}: "Cisco Systems, Inc",
+ [3]byte{0, 118, 177}: "Somfy-Protect By Myfox SAS",
+ [3]byte{0, 120, 136}: "Cisco Systems, Inc",
+ [3]byte{0, 120, 158}: "Sagemcom Broadband SAS",
+ [3]byte{0, 120, 205}: "Ignition Design Labs",
+ [3]byte{0, 123, 24}: "SENTRY Co., LTD.",
+ [3]byte{0, 125, 250}: "Volkswagen Group of America",
+ [3]byte{0, 126, 86}: "China Dragon Technology Limited",
+ [3]byte{0, 127, 40}: "Actiontec Electronics, Inc",
+ [3]byte{0, 128, 0}: "MULTITECH SYSTEMS, INC.",
+ [3]byte{0, 128, 1}: "PERIPHONICS CORPORATION",
+ [3]byte{0, 128, 2}: "SATELCOM (UK) LTD",
+ [3]byte{0, 128, 3}: "HYTEC ELECTRONICS LTD.",
+ [3]byte{0, 128, 4}: "ANTLOW COMMUNICATIONS, LTD.",
+ [3]byte{0, 128, 5}: "CACTUS COMPUTER INC.",
+ [3]byte{0, 128, 6}: "COMPUADD CORPORATION",
+ [3]byte{0, 128, 7}: "DLOG NC-SYSTEME",
+ [3]byte{0, 128, 8}: "DYNATECH COMPUTER SYSTEMS",
+ [3]byte{0, 128, 9}: "JUPITER SYSTEMS, INC.",
+ [3]byte{0, 128, 10}: "JAPAN COMPUTER CORP.",
+ [3]byte{0, 128, 11}: "CSK CORPORATION",
+ [3]byte{0, 128, 12}: "VIDECOM LIMITED",
+ [3]byte{0, 128, 13}: "VOSSWINKEL F.U.",
+ [3]byte{0, 128, 14}: "ATLANTIX CORPORATION",
+ [3]byte{0, 128, 15}: "STANDARD MICROSYSTEMS",
+ [3]byte{0, 128, 16}: "COMMODORE INTERNATIONAL",
+ [3]byte{0, 128, 17}: "DIGITAL SYSTEMS INT'L. INC.",
+ [3]byte{0, 128, 18}: "INTEGRATED MEASUREMENT SYSTEMS",
+ [3]byte{0, 128, 19}: "THOMAS-CONRAD CORPORATION",
+ [3]byte{0, 128, 20}: "ESPRIT SYSTEMS",
+ [3]byte{0, 128, 21}: "SEIKO SYSTEMS, INC.",
+ [3]byte{0, 128, 22}: "WANDEL AND GOLTERMANN",
+ [3]byte{0, 128, 23}: "PFU LIMITED",
+ [3]byte{0, 128, 24}: "KOBE STEEL, LTD.",
+ [3]byte{0, 128, 25}: "DAYNA COMMUNICATIONS, INC.",
+ [3]byte{0, 128, 26}: "BELL ATLANTIC",
+ [3]byte{0, 128, 27}: "KODIAK TECHNOLOGY",
+ [3]byte{0, 128, 28}: "NEWPORT SYSTEMS SOLUTIONS",
+ [3]byte{0, 128, 29}: "INTEGRATED INFERENCE MACHINES",
+ [3]byte{0, 128, 30}: "XINETRON, INC.",
+ [3]byte{0, 128, 31}: "KRUPP ATLAS ELECTRONIK GMBH",
+ [3]byte{0, 128, 32}: "NETWORK PRODUCTS",
+ [3]byte{0, 128, 33}: "Alcatel Canada Inc.",
+ [3]byte{0, 128, 34}: "SCAN-OPTICS",
+ [3]byte{0, 128, 35}: "INTEGRATED BUSINESS NETWORKS",
+ [3]byte{0, 128, 36}: "KALPANA, INC.",
+ [3]byte{0, 128, 37}: "Telit Wireless Solutions GmbH",
+ [3]byte{0, 128, 38}: "NETWORK PRODUCTS CORPORATION",
+ [3]byte{0, 128, 39}: "ADAPTIVE SYSTEMS, INC.",
+ [3]byte{0, 128, 40}: "TRADPOST (HK) LTD",
+ [3]byte{0, 128, 41}: "EAGLE TECHNOLOGY, INC.",
+ [3]byte{0, 128, 42}: "TEST SYSTEMS & SIMULATIONS INC",
+ [3]byte{0, 128, 43}: "INTEGRATED MARKETING CO",
+ [3]byte{0, 128, 44}: "THE SAGE GROUP PLC",
+ [3]byte{0, 128, 45}: "XYLOGICS INC",
+ [3]byte{0, 128, 46}: "CASTLE ROCK COMPUTING",
+ [3]byte{0, 128, 47}: "NATIONAL INSTRUMENTS CORP.",
+ [3]byte{0, 128, 48}: "NEXUS ELECTRONICS",
+ [3]byte{0, 128, 49}: "BASYS, CORP.",
+ [3]byte{0, 128, 50}: "ACCESS CO., LTD.",
+ [3]byte{0, 128, 51}: "EMS Aviation, Inc.",
+ [3]byte{0, 128, 52}: "SMT GOUPIL",
+ [3]byte{0, 128, 53}: "TECHNOLOGY WORKS, INC.",
+ [3]byte{0, 128, 54}: "REFLEX MANUFACTURING SYSTEMS",
+ [3]byte{0, 128, 55}: "Ericsson Group",
+ [3]byte{0, 128, 56}: "DATA RESEARCH & APPLICATIONS",
+ [3]byte{0, 128, 57}: "ALCATEL STC AUSTRALIA",
+ [3]byte{0, 128, 58}: "VARITYPER, INC.",
+ [3]byte{0, 128, 59}: "APT COMMUNICATIONS, INC.",
+ [3]byte{0, 128, 60}: "TVS ELECTRONICS LTD",
+ [3]byte{0, 128, 61}: "SURIGIKEN CO., LTD.",
+ [3]byte{0, 128, 62}: "SYNERNETICS",
+ [3]byte{0, 128, 63}: "TATUNG COMPANY",
+ [3]byte{0, 128, 64}: "JOHN FLUKE MANUFACTURING CO.",
+ [3]byte{0, 128, 65}: "VEB KOMBINAT ROBOTRON",
+ [3]byte{0, 128, 66}: "Artesyn Embedded Technologies",
+ [3]byte{0, 128, 67}: "NETWORLD, INC.",
+ [3]byte{0, 128, 68}: "SYSTECH COMPUTER CORP.",
+ [3]byte{0, 128, 69}: "MATSUSHITA ELECTRIC IND. CO",
+ [3]byte{0, 128, 70}: "Tattile SRL",
+ [3]byte{0, 128, 71}: "IN-NET CORP.",
+ [3]byte{0, 128, 72}: "COMPEX INCORPORATED",
+ [3]byte{0, 128, 73}: "NISSIN ELECTRIC CO., LTD.",
+ [3]byte{0, 128, 74}: "PRO-LOG",
+ [3]byte{0, 128, 75}: "EAGLE TECHNOLOGIES PTY.LTD.",
+ [3]byte{0, 128, 76}: "CONTEC CO., LTD.",
+ [3]byte{0, 128, 77}: "CYCLONE MICROSYSTEMS, INC.",
+ [3]byte{0, 128, 78}: "APEX COMPUTER COMPANY",
+ [3]byte{0, 128, 79}: "DAIKIN INDUSTRIES, LTD.",
+ [3]byte{0, 128, 80}: "ZIATECH CORPORATION",
+ [3]byte{0, 128, 81}: "FIBERMUX",
+ [3]byte{0, 128, 82}: "TECHNICALLY ELITE CONCEPTS",
+ [3]byte{0, 128, 83}: "INTELLICOM, INC.",
+ [3]byte{0, 128, 84}: "FRONTIER TECHNOLOGIES CORP.",
+ [3]byte{0, 128, 85}: "FERMILAB",
+ [3]byte{0, 128, 86}: "SPHINX Electronics GmbH & Co KG",
+ [3]byte{0, 128, 87}: "ADSOFT, LTD.",
+ [3]byte{0, 128, 88}: "PRINTER SYSTEMS CORP.",
+ [3]byte{0, 128, 89}: "STANLEY ELECTRIC CO., LTD",
+ [3]byte{0, 128, 90}: "TULIP COMPUTERS INTERNAT'L B.V",
+ [3]byte{0, 128, 91}: "CONDOR SYSTEMS, INC.",
+ [3]byte{0, 128, 92}: "AGILIS CORPORATION",
+ [3]byte{0, 128, 93}: "CANSTAR",
+ [3]byte{0, 128, 94}: "LSI LOGIC CORPORATION",
+ [3]byte{0, 128, 95}: "Hewlett Packard",
+ [3]byte{0, 128, 96}: "NETWORK INTERFACE CORPORATION",
+ [3]byte{0, 128, 97}: "LITTON SYSTEMS, INC.",
+ [3]byte{0, 128, 98}: "INTERFACE CO.",
+ [3]byte{0, 128, 99}: "Hirschmann Automation and Control GmbH",
+ [3]byte{0, 128, 100}: "WYSE TECHNOLOGY LLC",
+ [3]byte{0, 128, 101}: "CYBERGRAPHIC SYSTEMS PTY LTD.",
+ [3]byte{0, 128, 102}: "ARCOM CONTROL SYSTEMS, LTD.",
+ [3]byte{0, 128, 103}: "SQUARE D COMPANY",
+ [3]byte{0, 128, 104}: "YAMATECH SCIENTIFIC LTD.",
+ [3]byte{0, 128, 105}: "COMPUTONE SYSTEMS",
+ [3]byte{0, 128, 106}: "ERI (EMPAC RESEARCH INC.)",
+ [3]byte{0, 128, 107}: "SCHMID TELECOMMUNICATION",
+ [3]byte{0, 128, 108}: "Secure Systems & Services",
+ [3]byte{0, 128, 109}: "CENTURY SYSTEMS CORP.",
+ [3]byte{0, 128, 110}: "NIPPON STEEL CORPORATION",
+ [3]byte{0, 128, 111}: "ONELAN LTD.",
+ [3]byte{0, 128, 112}: "COMPUTADORAS MICRON",
+ [3]byte{0, 128, 113}: "SAI TECHNOLOGY",
+ [3]byte{0, 128, 114}: "MICROPLEX SYSTEMS LTD.",
+ [3]byte{0, 128, 115}: "DWB ASSOCIATES",
+ [3]byte{0, 128, 116}: "FISHER CONTROLS",
+ [3]byte{0, 128, 117}: "PARSYTEC GMBH",
+ [3]byte{0, 128, 118}: "MCNC",
+ [3]byte{0, 128, 119}: "Brother industries, LTD.",
+ [3]byte{0, 128, 120}: "PRACTICAL PERIPHERALS, INC.",
+ [3]byte{0, 128, 121}: "MICROBUS DESIGNS LTD.",
+ [3]byte{0, 128, 122}: "AITECH SYSTEMS LTD.",
+ [3]byte{0, 128, 123}: "ARTEL COMMUNICATIONS CORP.",
+ [3]byte{0, 128, 124}: "FIBERCOM, INC.",
+ [3]byte{0, 128, 125}: "EQUINOX SYSTEMS INC.",
+ [3]byte{0, 128, 126}: "SOUTHERN PACIFIC LTD.",
+ [3]byte{0, 128, 127}: "DY-4 INCORPORATED",
+ [3]byte{0, 128, 128}: "DATAMEDIA CORPORATION",
+ [3]byte{0, 128, 129}: "KENDALL SQUARE RESEARCH CORP.",
+ [3]byte{0, 128, 130}: "PEP MODULAR COMPUTERS GMBH",
+ [3]byte{0, 128, 131}: "AMDAHL",
+ [3]byte{0, 128, 132}: "THE CLOUD INC.",
+ [3]byte{0, 128, 133}: "H-THREE SYSTEMS CORPORATION",
+ [3]byte{0, 128, 134}: "COMPUTER GENERATION INC.",
+ [3]byte{0, 128, 135}: "OKI ELECTRIC INDUSTRY CO., LTD",
+ [3]byte{0, 128, 136}: "VICTOR COMPANY OF JAPAN, LTD.",
+ [3]byte{0, 128, 137}: "TECNETICS (PTY) LTD.",
+ [3]byte{0, 128, 138}: "SUMMIT MICROSYSTEMS CORP.",
+ [3]byte{0, 128, 139}: "DACOLL LIMITED",
+ [3]byte{0, 128, 140}: "NetScout Systems, Inc.",
+ [3]byte{0, 128, 141}: "WESTCOAST TECHNOLOGY B.V.",
+ [3]byte{0, 128, 142}: "RADSTONE TECHNOLOGY",
+ [3]byte{0, 128, 143}: "C. ITOH ELECTRONICS, INC.",
+ [3]byte{0, 128, 144}: "MICROTEK INTERNATIONAL, INC.",
+ [3]byte{0, 128, 145}: "TOKYO ELECTRIC CO.,LTD",
+ [3]byte{0, 128, 146}: "Silex Technology, Inc.",
+ [3]byte{0, 128, 147}: "XYRON CORPORATION",
+ [3]byte{0, 128, 148}: "ALFA LAVAL AUTOMATION AB",
+ [3]byte{0, 128, 149}: "BASIC MERTON HANDELSGES.M.B.H.",
+ [3]byte{0, 128, 150}: "HUMAN DESIGNED SYSTEMS, INC.",
+ [3]byte{0, 128, 151}: "CENTRALP AUTOMATISMES",
+ [3]byte{0, 128, 152}: "TDK CORPORATION",
+ [3]byte{0, 128, 153}: "Eaton Industries GmbH",
+ [3]byte{0, 128, 154}: "NOVUS NETWORKS LTD",
+ [3]byte{0, 128, 155}: "JUSTSYSTEM CORPORATION",
+ [3]byte{0, 128, 156}: "LUXCOM, INC.",
+ [3]byte{0, 128, 157}: "Commscraft Ltd.",
+ [3]byte{0, 128, 158}: "DATUS GMBH",
+ [3]byte{0, 128, 159}: "ALE International",
+ [3]byte{0, 128, 160}: "Hewlett Packard",
+ [3]byte{0, 128, 161}: "MICROTEST, INC.",
+ [3]byte{0, 128, 162}: "CREATIVE ELECTRONIC SYSTEMS",
+ [3]byte{0, 128, 163}: "Lantronix",
+ [3]byte{0, 128, 164}: "LIBERTY ELECTRONICS",
+ [3]byte{0, 128, 165}: "SPEED INTERNATIONAL",
+ [3]byte{0, 128, 166}: "REPUBLIC TECHNOLOGY, INC.",
+ [3]byte{0, 128, 167}: "Honeywell International Inc",
+ [3]byte{0, 128, 168}: "VITACOM CORPORATION",
+ [3]byte{0, 128, 169}: "CLEARPOINT RESEARCH",
+ [3]byte{0, 128, 170}: "MAXPEED",
+ [3]byte{0, 128, 171}: "DUKANE NETWORK INTEGRATION",
+ [3]byte{0, 128, 172}: "IMLOGIX, DIVISION OF GENESYS",
+ [3]byte{0, 128, 173}: "CNET TECHNOLOGY, INC.",
+ [3]byte{0, 128, 174}: "HUGHES NETWORK SYSTEMS",
+ [3]byte{0, 128, 175}: "ALLUMER CO., LTD.",
+ [3]byte{0, 128, 176}: "ADVANCED INFORMATION",
+ [3]byte{0, 128, 177}: "SOFTCOM A/S",
+ [3]byte{0, 128, 178}: "NETWORK EQUIPMENT TECHNOLOGIES",
+ [3]byte{0, 128, 179}: "AVAL DATA CORPORATION",
+ [3]byte{0, 128, 180}: "SOPHIA SYSTEMS",
+ [3]byte{0, 128, 181}: "UNITED NETWORKS INC.",
+ [3]byte{0, 128, 182}: "THEMIS COMPUTER",
+ [3]byte{0, 128, 183}: "STELLAR COMPUTER",
+ [3]byte{0, 128, 184}: "DMG MORI B.U.G. CO., LTD.",
+ [3]byte{0, 128, 185}: "ARCHE TECHNOLIGIES INC.",
+ [3]byte{0, 128, 186}: "SPECIALIX (ASIA) PTE, LTD",
+ [3]byte{0, 128, 187}: "HUGHES LAN SYSTEMS",
+ [3]byte{0, 128, 188}: "HITACHI ENGINEERING CO., LTD",
+ [3]byte{0, 128, 189}: "THE FURUKAWA ELECTRIC CO., LTD",
+ [3]byte{0, 128, 190}: "ARIES RESEARCH",
+ [3]byte{0, 128, 191}: "TAKAOKA ELECTRIC MFG. CO. LTD.",
+ [3]byte{0, 128, 192}: "PENRIL DATACOMM",
+ [3]byte{0, 128, 193}: "LANEX CORPORATION",
+ [3]byte{0, 128, 194}: "IEEE 802.1 Working Group",
+ [3]byte{0, 128, 195}: "BICC INFORMATION SYSTEMS & SVC",
+ [3]byte{0, 128, 196}: "DOCUMENT TECHNOLOGIES, INC.",
+ [3]byte{0, 128, 197}: "NOVELLCO DE MEXICO",
+ [3]byte{0, 128, 198}: "NATIONAL DATACOMM CORPORATION",
+ [3]byte{0, 128, 199}: "XIRCOM",
+ [3]byte{0, 128, 200}: "D-LINK SYSTEMS, INC.",
+ [3]byte{0, 128, 201}: "ALBERTA MICROELECTRONIC CENTRE",
+ [3]byte{0, 128, 202}: "NETCOM RESEARCH INCORPORATED",
+ [3]byte{0, 128, 203}: "FALCO DATA PRODUCTS",
+ [3]byte{0, 128, 204}: "MICROWAVE BYPASS SYSTEMS",
+ [3]byte{0, 128, 205}: "MICRONICS COMPUTER, INC.",
+ [3]byte{0, 128, 206}: "BROADCAST TELEVISION SYSTEMS",
+ [3]byte{0, 128, 207}: "EMBEDDED PERFORMANCE INC.",
+ [3]byte{0, 128, 208}: "COMPUTER PERIPHERALS, INC.",
+ [3]byte{0, 128, 209}: "KIMTRON CORPORATION",
+ [3]byte{0, 128, 210}: "SHINNIHONDENKO CO., LTD.",
+ [3]byte{0, 128, 211}: "SHIVA CORP.",
+ [3]byte{0, 128, 212}: "CHASE RESEARCH LTD.",
+ [3]byte{0, 128, 213}: "CADRE TECHNOLOGIES",
+ [3]byte{0, 128, 214}: "NUVOTECH, INC.",
+ [3]byte{0, 128, 215}: "Fantum Engineering",
+ [3]byte{0, 128, 216}: "NETWORK PERIPHERALS INC.",
+ [3]byte{0, 128, 217}: "EMK Elektronik GmbH & Co. KG",
+ [3]byte{0, 128, 218}: "Bruel & Kjaer Sound & Vibration Measurement A/S",
+ [3]byte{0, 128, 219}: "GRAPHON CORPORATION",
+ [3]byte{0, 128, 220}: "PICKER INTERNATIONAL",
+ [3]byte{0, 128, 221}: "GMX INC/GIMIX",
+ [3]byte{0, 128, 222}: "GIPSI S.A.",
+ [3]byte{0, 128, 223}: "ADC CODENOLL TECHNOLOGY CORP.",
+ [3]byte{0, 128, 224}: "XTP SYSTEMS, INC.",
+ [3]byte{0, 128, 225}: "STMicroelectronics SRL",
+ [3]byte{0, 128, 226}: "T.D.I. CO., LTD.",
+ [3]byte{0, 128, 227}: "CORAL NETWORK CORPORATION",
+ [3]byte{0, 128, 228}: "NORTHWEST DIGITAL SYSTEMS, INC",
+ [3]byte{0, 128, 229}: "NetApp",
+ [3]byte{0, 128, 230}: "PEER NETWORKS, INC.",
+ [3]byte{0, 128, 231}: "Leonardo Tactical Systems.",
+ [3]byte{0, 128, 232}: "CUMULUS CORPORATIION",
+ [3]byte{0, 128, 233}: "Madge Ltd.",
+ [3]byte{0, 128, 234}: "ADVA Optical Networking Ltd.",
+ [3]byte{0, 128, 235}: "COMPCONTROL B.V.",
+ [3]byte{0, 128, 236}: "SUPERCOMPUTING SOLUTIONS, INC.",
+ [3]byte{0, 128, 237}: "IQ TECHNOLOGIES, INC.",
+ [3]byte{0, 128, 238}: "THOMSON CSF",
+ [3]byte{0, 128, 239}: "RATIONAL",
+ [3]byte{0, 128, 240}: "Panasonic Communications Co., Ltd.",
+ [3]byte{0, 128, 241}: "OPUS SYSTEMS",
+ [3]byte{0, 128, 242}: "RAYCOM SYSTEMS INC",
+ [3]byte{0, 128, 243}: "SUN ELECTRONICS CORP.",
+ [3]byte{0, 128, 244}: "TELEMECANIQUE ELECTRIQUE",
+ [3]byte{0, 128, 245}: "Quantel Ltd",
+ [3]byte{0, 128, 246}: "SYNERGY MICROSYSTEMS",
+ [3]byte{0, 128, 247}: "Zenith Electronics Corporation",
+ [3]byte{0, 128, 248}: "MIZAR, INC.",
+ [3]byte{0, 128, 249}: "HEURIKON CORPORATION",
+ [3]byte{0, 128, 250}: "RWT GMBH",
+ [3]byte{0, 128, 251}: "BVM LIMITED",
+ [3]byte{0, 128, 252}: "AVATAR CORPORATION",
+ [3]byte{0, 128, 253}: "EXSCEED CORPRATION",
+ [3]byte{0, 128, 254}: "AZURE TECHNOLOGIES, INC.",
+ [3]byte{0, 128, 255}: "SOC. DE TELEINFORMATIQUE RTC",
+ [3]byte{0, 129, 196}: "Cisco Systems, Inc",
+ [3]byte{0, 129, 249}: "Texas Instruments",
+ [3]byte{0, 132, 237}: "Private",
+ [3]byte{0, 134, 156}: "Palo Alto Networks",
+ [3]byte{0, 134, 160}: "Private",
+ [3]byte{0, 135, 1}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 135, 49}: "Cisco Systems, Inc",
+ [3]byte{0, 136, 101}: "Apple, Inc.",
+ [3]byte{0, 138, 150}: "Cisco Systems, Inc",
+ [3]byte{0, 139, 67}: "RFTECH",
+ [3]byte{0, 139, 252}: "mixi,Inc.",
+ [3]byte{0, 140, 16}: "Black Box Corp.",
+ [3]byte{0, 140, 84}: "ADB Broadband Italia",
+ [3]byte{0, 140, 250}: "INVENTEC Corporation",
+ [3]byte{0, 141, 78}: "CJSC NII STT",
+ [3]byte{0, 141, 218}: "Link One Co., Ltd.",
+ [3]byte{0, 142, 115}: "Cisco Systems, Inc",
+ [3]byte{0, 142, 242}: "NETGEAR",
+ [3]byte{0, 144, 0}: "DIAMOND MULTIMEDIA",
+ [3]byte{0, 144, 1}: "NISHIMU ELECTRONICS INDUSTRIES CO., LTD.",
+ [3]byte{0, 144, 2}: "ALLGON AB",
+ [3]byte{0, 144, 3}: "APLIO",
+ [3]byte{0, 144, 4}: "3COM EUROPE LTD.",
+ [3]byte{0, 144, 5}: "PROTECH SYSTEMS CO., LTD.",
+ [3]byte{0, 144, 6}: "Hamamatsu Photonics K.K.",
+ [3]byte{0, 144, 7}: "DOMEX TECHNOLOGY CORP.",
+ [3]byte{0, 144, 8}: "HanA Systems Inc.",
+ [3]byte{0, 144, 9}: "I Controls, Inc.",
+ [3]byte{0, 144, 10}: "PROTON ELECTRONIC INDUSTRIAL CO., LTD.",
+ [3]byte{0, 144, 11}: "LANNER ELECTRONICS, INC.",
+ [3]byte{0, 144, 12}: "Cisco Systems, Inc",
+ [3]byte{0, 144, 13}: "Overland Storage Inc.",
+ [3]byte{0, 144, 14}: "HANDLINK TECHNOLOGIES, INC.",
+ [3]byte{0, 144, 15}: "KAWASAKI HEAVY INDUSTRIES, LTD",
+ [3]byte{0, 144, 16}: "SIMULATION LABORATORIES, INC.",
+ [3]byte{0, 144, 17}: "WAVTrace, Inc.",
+ [3]byte{0, 144, 18}: "GLOBESPAN SEMICONDUCTOR, INC.",
+ [3]byte{0, 144, 19}: "SAMSAN CORP.",
+ [3]byte{0, 144, 20}: "ROTORK INSTRUMENTS, LTD.",
+ [3]byte{0, 144, 21}: "CENTIGRAM COMMUNICATIONS CORP.",
+ [3]byte{0, 144, 22}: "ZAC",
+ [3]byte{0, 144, 23}: "Zypcom, Inc",
+ [3]byte{0, 144, 24}: "ITO ELECTRIC INDUSTRY CO, LTD.",
+ [3]byte{0, 144, 25}: "HERMES ELECTRONICS CO., LTD.",
+ [3]byte{0, 144, 26}: "UNISPHERE SOLUTIONS",
+ [3]byte{0, 144, 27}: "DIGITAL CONTROLS",
+ [3]byte{0, 144, 28}: "mps Software Gmbh",
+ [3]byte{0, 144, 29}: "PEC (NZ) LTD.",
+ [3]byte{0, 144, 30}: "Selesta Ingegneria S.p.A.",
+ [3]byte{0, 144, 31}: "ADTEC PRODUCTIONS, INC.",
+ [3]byte{0, 144, 32}: "PHILIPS ANALYTICAL X-RAY B.V.",
+ [3]byte{0, 144, 33}: "Cisco Systems, Inc",
+ [3]byte{0, 144, 34}: "IVEX",
+ [3]byte{0, 144, 35}: "ZILOG INC.",
+ [3]byte{0, 144, 36}: "PIPELINKS, INC.",
+ [3]byte{0, 144, 37}: "BAE Systems Australia (Electronic Systems) Pty Ltd",
+ [3]byte{0, 144, 38}: "ADVANCED SWITCHING COMMUNICATIONS, INC.",
+ [3]byte{0, 144, 39}: "Intel Corporation",
+ [3]byte{0, 144, 40}: "NIPPON SIGNAL CO., LTD.",
+ [3]byte{0, 144, 41}: "CRYPTO AG",
+ [3]byte{0, 144, 42}: "COMMUNICATION DEVICES, INC.",
+ [3]byte{0, 144, 43}: "Cisco Systems, Inc",
+ [3]byte{0, 144, 44}: "DATA & CONTROL EQUIPMENT LTD.",
+ [3]byte{0, 144, 45}: "DATA ELECTRONICS (AUST.) PTY, LTD.",
+ [3]byte{0, 144, 46}: "NAMCO LIMITED",
+ [3]byte{0, 144, 47}: "NETCORE SYSTEMS, INC.",
+ [3]byte{0, 144, 48}: "HONEYWELL-DATING",
+ [3]byte{0, 144, 49}: "MYSTICOM, LTD.",
+ [3]byte{0, 144, 50}: "PELCOMBE GROUP LTD.",
+ [3]byte{0, 144, 51}: "INNOVAPHONE AG",
+ [3]byte{0, 144, 52}: "IMAGIC, INC.",
+ [3]byte{0, 144, 53}: "ALPHA TELECOM, INC.",
+ [3]byte{0, 144, 54}: "ens, inc.",
+ [3]byte{0, 144, 55}: "ACUCOMM, INC.",
+ [3]byte{0, 144, 56}: "FOUNTAIN TECHNOLOGIES, INC.",
+ [3]byte{0, 144, 57}: "SHASTA NETWORKS",
+ [3]byte{0, 144, 58}: "NIHON MEDIA TOOL INC.",
+ [3]byte{0, 144, 59}: "TriEMS Research Lab, Inc.",
+ [3]byte{0, 144, 60}: "ATLANTIC NETWORK SYSTEMS",
+ [3]byte{0, 144, 61}: "BIOPAC SYSTEMS, INC.",
+ [3]byte{0, 144, 62}: "N.V. PHILIPS INDUSTRIAL ACTIVITIES",
+ [3]byte{0, 144, 63}: "AZTEC RADIOMEDIA",
+ [3]byte{0, 144, 64}: "Siemens Network Convergence LLC",
+ [3]byte{0, 144, 65}: "APPLIED DIGITAL ACCESS",
+ [3]byte{0, 144, 66}: "ECCS, Inc.",
+ [3]byte{0, 144, 67}: "Tattile SRL",
+ [3]byte{0, 144, 68}: "ASSURED DIGITAL, INC.",
+ [3]byte{0, 144, 69}: "Marconi Communications",
+ [3]byte{0, 144, 70}: "DEXDYNE, LTD.",
+ [3]byte{0, 144, 71}: "GIGA FAST E. LTD.",
+ [3]byte{0, 144, 72}: "ZEAL CORPORATION",
+ [3]byte{0, 144, 73}: "ENTRIDIA CORPORATION",
+ [3]byte{0, 144, 74}: "CONCUR SYSTEM TECHNOLOGIES",
+ [3]byte{0, 144, 75}: "Gemtek Technology Co., Ltd.",
+ [3]byte{0, 144, 76}: "Epigram, Inc.",
+ [3]byte{0, 144, 77}: "SPEC S.A.",
+ [3]byte{0, 144, 78}: "DELEM BV",
+ [3]byte{0, 144, 79}: "ABB POWER T&D COMPANY, INC.",
+ [3]byte{0, 144, 80}: "Teleste Corporation",
+ [3]byte{0, 144, 81}: "ULTIMATE TECHNOLOGY CORP.",
+ [3]byte{0, 144, 82}: "SELCOM ELETTRONICA S.R.L.",
+ [3]byte{0, 144, 83}: "DAEWOO ELECTRONICS CO., LTD.",
+ [3]byte{0, 144, 84}: "INNOVATIVE SEMICONDUCTORS, INC",
+ [3]byte{0, 144, 85}: "PARKER HANNIFIN CORPORATION COMPUMOTOR DIVISION",
+ [3]byte{0, 144, 86}: "TELESTREAM, INC.",
+ [3]byte{0, 144, 87}: "AANetcom, Inc.",
+ [3]byte{0, 144, 88}: "Ultra Electronics Command & Control Systems",
+ [3]byte{0, 144, 89}: "TELECOM DEVICE K.K.",
+ [3]byte{0, 144, 90}: "DEARBORN GROUP, INC.",
+ [3]byte{0, 144, 91}: "RAYMOND AND LAE ENGINEERING",
+ [3]byte{0, 144, 92}: "EDMI",
+ [3]byte{0, 144, 93}: "NETCOM SICHERHEITSTECHNIK GMBH",
+ [3]byte{0, 144, 94}: "RAULAND-BORG CORPORATION",
+ [3]byte{0, 144, 95}: "Cisco Systems, Inc",
+ [3]byte{0, 144, 96}: "SYSTEM CREATE CORP.",
+ [3]byte{0, 144, 97}: "PACIFIC RESEARCH & ENGINEERING CORPORATION",
+ [3]byte{0, 144, 98}: "ICP VORTEX COMPUTERSYSTEME GmbH",
+ [3]byte{0, 144, 99}: "COHERENT COMMUNICATIONS SYSTEMS CORPORATION",
+ [3]byte{0, 144, 100}: "Thomson Inc.",
+ [3]byte{0, 144, 101}: "FINISAR CORPORATION",
+ [3]byte{0, 144, 102}: "Troika Networks, Inc.",
+ [3]byte{0, 144, 103}: "WalkAbout Computers, Inc.",
+ [3]byte{0, 144, 104}: "DVT CORP.",
+ [3]byte{0, 144, 105}: "Juniper Networks",
+ [3]byte{0, 144, 106}: "TURNSTONE SYSTEMS, INC.",
+ [3]byte{0, 144, 107}: "APPLIED RESOURCES, INC.",
+ [3]byte{0, 144, 108}: "Sartorius Hamburg GmbH",
+ [3]byte{0, 144, 109}: "Cisco Systems, Inc",
+ [3]byte{0, 144, 110}: "PRAXON, INC.",
+ [3]byte{0, 144, 111}: "Cisco Systems, Inc",
+ [3]byte{0, 144, 112}: "NEO NETWORKS, INC.",
+ [3]byte{0, 144, 113}: "Applied Innovation Inc.",
+ [3]byte{0, 144, 114}: "SIMRAD AS",
+ [3]byte{0, 144, 115}: "GAIO TECHNOLOGY",
+ [3]byte{0, 144, 116}: "ARGON NETWORKS, INC.",
+ [3]byte{0, 144, 117}: "NEC DO BRASIL S.A.",
+ [3]byte{0, 144, 118}: "FMT AIRCRAFT GATE SUPPORT SYSTEMS AB",
+ [3]byte{0, 144, 119}: "ADVANCED FIBRE COMMUNICATIONS",
+ [3]byte{0, 144, 120}: "MER TELEMANAGEMENT SOLUTIONS, LTD.",
+ [3]byte{0, 144, 121}: "ClearOne, Inc.",
+ [3]byte{0, 144, 122}: "Spectralink, Inc",
+ [3]byte{0, 144, 123}: "E-TECH, INC.",
+ [3]byte{0, 144, 124}: "DIGITALCAST, INC.",
+ [3]byte{0, 144, 125}: "Lake Communications",
+ [3]byte{0, 144, 126}: "VETRONIX CORP.",
+ [3]byte{0, 144, 127}: "WatchGuard Technologies, Inc.",
+ [3]byte{0, 144, 128}: "NOT LIMITED, INC.",
+ [3]byte{0, 144, 129}: "ALOHA NETWORKS, INC.",
+ [3]byte{0, 144, 130}: "FORCE INSTITUTE",
+ [3]byte{0, 144, 131}: "TURBO COMMUNICATION, INC.",
+ [3]byte{0, 144, 132}: "ATECH SYSTEM",
+ [3]byte{0, 144, 133}: "GOLDEN ENTERPRISES, INC.",
+ [3]byte{0, 144, 134}: "Cisco Systems, Inc",
+ [3]byte{0, 144, 135}: "ITIS",
+ [3]byte{0, 144, 136}: "BAXALL SECURITY LTD.",
+ [3]byte{0, 144, 137}: "SOFTCOM MICROSYSTEMS, INC.",
+ [3]byte{0, 144, 138}: "BAYLY COMMUNICATIONS, INC.",
+ [3]byte{0, 144, 139}: "Tattile SRL",
+ [3]byte{0, 144, 140}: "ETREND ELECTRONICS, INC.",
+ [3]byte{0, 144, 141}: "VICKERS ELECTRONICS SYSTEMS",
+ [3]byte{0, 144, 142}: "Nortel Networks Broadband Access",
+ [3]byte{0, 144, 143}: "AUDIO CODES LTD.",
+ [3]byte{0, 144, 144}: "I-BUS",
+ [3]byte{0, 144, 145}: "DigitalScape, Inc.",
+ [3]byte{0, 144, 146}: "Cisco Systems, Inc",
+ [3]byte{0, 144, 147}: "NANAO CORPORATION",
+ [3]byte{0, 144, 148}: "OSPREY TECHNOLOGIES, INC.",
+ [3]byte{0, 144, 149}: "UNIVERSAL AVIONICS",
+ [3]byte{0, 144, 150}: "ASKEY COMPUTER CORP",
+ [3]byte{0, 144, 151}: "Sycamore Networks",
+ [3]byte{0, 144, 152}: "SBC DESIGNS, INC.",
+ [3]byte{0, 144, 153}: "ALLIED TELESIS, K.K.",
+ [3]byte{0, 144, 154}: "ONE WORLD SYSTEMS, INC.",
+ [3]byte{0, 144, 155}: "MARKEM-IMAJE",
+ [3]byte{0, 144, 156}: "ARRIS Group, Inc.",
+ [3]byte{0, 144, 157}: "NovaTech Process Solutions, LLC",
+ [3]byte{0, 144, 158}: "Critical IO, LLC",
+ [3]byte{0, 144, 159}: "DIGI-DATA CORPORATION",
+ [3]byte{0, 144, 160}: "8X8 INC.",
+ [3]byte{0, 144, 161}: "Flying Pig Systems/High End Systems Inc.",
+ [3]byte{0, 144, 162}: "CyberTAN Technology Inc.",
+ [3]byte{0, 144, 163}: "Corecess Inc.",
+ [3]byte{0, 144, 164}: "ALTIGA NETWORKS",
+ [3]byte{0, 144, 165}: "SPECTRA LOGIC",
+ [3]byte{0, 144, 166}: "Cisco Systems, Inc",
+ [3]byte{0, 144, 167}: "CLIENTEC CORPORATION",
+ [3]byte{0, 144, 168}: "NineTiles Networks, Ltd.",
+ [3]byte{0, 144, 169}: "WESTERN DIGITAL",
+ [3]byte{0, 144, 170}: "INDIGO ACTIVE VISION SYSTEMS LIMITED",
+ [3]byte{0, 144, 171}: "Cisco Systems, Inc",
+ [3]byte{0, 144, 172}: "OPTIVISION, INC.",
+ [3]byte{0, 144, 173}: "ASPECT ELECTRONICS, INC.",
+ [3]byte{0, 144, 174}: "ITALTEL S.p.A/RF-UP-I",
+ [3]byte{0, 144, 175}: "J. MORITA MFG. CORP.",
+ [3]byte{0, 144, 176}: "VADEM",
+ [3]byte{0, 144, 177}: "Cisco Systems, Inc",
+ [3]byte{0, 144, 178}: "AVICI SYSTEMS INC.",
+ [3]byte{0, 144, 179}: "AGRANAT SYSTEMS",
+ [3]byte{0, 144, 180}: "WILLOWBROOK TECHNOLOGIES",
+ [3]byte{0, 144, 181}: "NIKON CORPORATION",
+ [3]byte{0, 144, 182}: "FIBEX SYSTEMS",
+ [3]byte{0, 144, 183}: "DIGITAL LIGHTWAVE, INC.",
+ [3]byte{0, 144, 184}: "ROHDE & SCHWARZ GMBH & CO. KG",
+ [3]byte{0, 144, 185}: "BERAN INSTRUMENTS LTD.",
+ [3]byte{0, 144, 186}: "VALID NETWORKS, INC.",
+ [3]byte{0, 144, 187}: "TAINET COMMUNICATION SYSTEM Corp.",
+ [3]byte{0, 144, 188}: "TELEMANN CO., LTD.",
+ [3]byte{0, 144, 189}: "OMNIA COMMUNICATIONS, INC.",
+ [3]byte{0, 144, 190}: "IBC/INTEGRATED BUSINESS COMPUTERS",
+ [3]byte{0, 144, 191}: "Cisco Systems, Inc",
+ [3]byte{0, 144, 192}: "K.J. LAW ENGINEERS, INC.",
+ [3]byte{0, 144, 193}: "Peco II, Inc.",
+ [3]byte{0, 144, 194}: "JK microsystems, Inc.",
+ [3]byte{0, 144, 195}: "TOPIC SEMICONDUCTOR CORP.",
+ [3]byte{0, 144, 196}: "JAVELIN SYSTEMS, INC.",
+ [3]byte{0, 144, 197}: "INTERNET MAGIC, INC.",
+ [3]byte{0, 144, 198}: "OPTIM SYSTEMS, INC.",
+ [3]byte{0, 144, 199}: "ICOM INC.",
+ [3]byte{0, 144, 200}: "WAVERIDER COMMUNICATIONS (CANADA) INC.",
+ [3]byte{0, 144, 201}: "DPAC Technologies",
+ [3]byte{0, 144, 202}: "ACCORD VIDEO TELECOMMUNICATIONS, LTD.",
+ [3]byte{0, 144, 203}: "Wireless OnLine, Inc.",
+ [3]byte{0, 144, 204}: "PLANEX COMMUNICATIONS INC.",
+ [3]byte{0, 144, 205}: "ENT-EMPRESA NACIONAL DE TELECOMMUNICACOES, S.A.",
+ [3]byte{0, 144, 206}: "TETRA GmbH",
+ [3]byte{0, 144, 207}: "NORTEL",
+ [3]byte{0, 144, 208}: "Thomson Telecom Belgium",
+ [3]byte{0, 144, 209}: "LEICHU ENTERPRISE CO., LTD.",
+ [3]byte{0, 144, 210}: "ARTEL VIDEO SYSTEMS",
+ [3]byte{0, 144, 211}: "GIESECKE & DEVRIENT GmbH",
+ [3]byte{0, 144, 212}: "BindView Development Corp.",
+ [3]byte{0, 144, 213}: "EUPHONIX, INC.",
+ [3]byte{0, 144, 214}: "Crystal Group, Inc.",
+ [3]byte{0, 144, 215}: "NetBoost Corp.",
+ [3]byte{0, 144, 216}: "WHITECROSS SYSTEMS",
+ [3]byte{0, 144, 217}: "Cisco Systems, Inc",
+ [3]byte{0, 144, 218}: "DYNARC, INC.",
+ [3]byte{0, 144, 219}: "NEXT LEVEL COMMUNICATIONS",
+ [3]byte{0, 144, 220}: "TECO INFORMATION SYSTEMS",
+ [3]byte{0, 144, 221}: "MIHARU COMMUNICATIONS Inc",
+ [3]byte{0, 144, 222}: "CARDKEY SYSTEMS, INC.",
+ [3]byte{0, 144, 223}: "MITSUBISHI CHEMICAL AMERICA, INC.",
+ [3]byte{0, 144, 224}: "SYSTRAN CORP.",
+ [3]byte{0, 144, 225}: "TELENA S.P.A.",
+ [3]byte{0, 144, 226}: "DISTRIBUTED PROCESSING TECHNOLOGY",
+ [3]byte{0, 144, 227}: "AVEX ELECTRONICS INC.",
+ [3]byte{0, 144, 228}: "NEC AMERICA, INC.",
+ [3]byte{0, 144, 229}: "TEKNEMA, INC.",
+ [3]byte{0, 144, 230}: "ALi Corporation",
+ [3]byte{0, 144, 231}: "HORSCH ELEKTRONIK AG",
+ [3]byte{0, 144, 232}: "MOXA TECHNOLOGIES CORP., LTD.",
+ [3]byte{0, 144, 233}: "JANZ COMPUTER AG",
+ [3]byte{0, 144, 234}: "ALPHA TECHNOLOGIES, INC.",
+ [3]byte{0, 144, 235}: "SENTRY TELECOM SYSTEMS",
+ [3]byte{0, 144, 236}: "PYRESCOM",
+ [3]byte{0, 144, 237}: "CENTRAL SYSTEM RESEARCH CO., LTD.",
+ [3]byte{0, 144, 238}: "PERSONAL COMMUNICATIONS TECHNOLOGIES",
+ [3]byte{0, 144, 239}: "INTEGRIX, INC.",
+ [3]byte{0, 144, 240}: "Harmonic Video Systems Ltd.",
+ [3]byte{0, 144, 241}: "Seagate Cloud Systems Inc",
+ [3]byte{0, 144, 242}: "Cisco Systems, Inc",
+ [3]byte{0, 144, 243}: "ASPECT COMMUNICATIONS",
+ [3]byte{0, 144, 244}: "LIGHTNING INSTRUMENTATION",
+ [3]byte{0, 144, 245}: "CLEVO CO.",
+ [3]byte{0, 144, 246}: "ESCALATE NETWORKS, INC.",
+ [3]byte{0, 144, 247}: "NBASE COMMUNICATIONS LTD.",
+ [3]byte{0, 144, 248}: "MEDIATRIX TELECOM",
+ [3]byte{0, 144, 249}: "Imagine Communications",
+ [3]byte{0, 144, 250}: "Emulex Corporation",
+ [3]byte{0, 144, 251}: "PORTWELL, INC.",
+ [3]byte{0, 144, 252}: "NETWORK COMPUTING DEVICES",
+ [3]byte{0, 144, 253}: "CopperCom, Inc.",
+ [3]byte{0, 144, 254}: "ELECOM CO., LTD. (LANEED DIV.)",
+ [3]byte{0, 144, 255}: "TELLUS TECHNOLOGY INC.",
+ [3]byte{0, 145, 214}: "Crystal Group, Inc.",
+ [3]byte{0, 145, 250}: "Synapse Product Development",
+ [3]byte{0, 146, 250}: "SHENZHEN WISKY TECHNOLOGY CO.,LTD",
+ [3]byte{0, 147, 99}: "Uni-Link Technology Co., Ltd.",
+ [3]byte{0, 148, 161}: "F5 Networks, Inc.",
+ [3]byte{0, 149, 105}: "LSD Science and Technology Co.,Ltd.",
+ [3]byte{0, 151, 255}: "Heimann Sensor GmbH",
+ [3]byte{0, 154, 205}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{0, 154, 210}: "Cisco Systems, Inc",
+ [3]byte{0, 156, 2}: "Hewlett Packard",
+ [3]byte{0, 157, 142}: "CARDIAC RECORDERS, INC.",
+ [3]byte{0, 158, 30}: "Cisco Systems, Inc",
+ [3]byte{0, 158, 200}: "Xiaomi Communications Co Ltd",
+ [3]byte{0, 160, 0}: "CENTILLION NETWORKS, INC.",
+ [3]byte{0, 160, 1}: "DRS Signal Solutions",
+ [3]byte{0, 160, 2}: "LEEDS & NORTHRUP AUSTRALIA PTY LTD",
+ [3]byte{0, 160, 3}: "Siemens Switzerland Ltd., I B T HVP",
+ [3]byte{0, 160, 4}: "NETPOWER, INC.",
+ [3]byte{0, 160, 5}: "DANIEL INSTRUMENTS, LTD.",
+ [3]byte{0, 160, 6}: "IMAGE DATA PROCESSING SYSTEM GROUP",
+ [3]byte{0, 160, 7}: "APEXX TECHNOLOGY, INC.",
+ [3]byte{0, 160, 8}: "NETCORP",
+ [3]byte{0, 160, 9}: "WHITETREE NETWORK",
+ [3]byte{0, 160, 10}: "Airspan",
+ [3]byte{0, 160, 11}: "COMPUTEX CO., LTD.",
+ [3]byte{0, 160, 12}: "KINGMAX TECHNOLOGY, INC.",
+ [3]byte{0, 160, 13}: "THE PANDA PROJECT",
+ [3]byte{0, 160, 14}: "NetScout Systems, Inc.",
+ [3]byte{0, 160, 15}: "Broadband Technologies",
+ [3]byte{0, 160, 16}: "SYSLOGIC DATENTECHNIK AG",
+ [3]byte{0, 160, 17}: "MUTOH INDUSTRIES LTD.",
+ [3]byte{0, 160, 18}: "Telco Systems, Inc.",
+ [3]byte{0, 160, 19}: "TELTREND LTD.",
+ [3]byte{0, 160, 20}: "CSIR",
+ [3]byte{0, 160, 21}: "WYLE",
+ [3]byte{0, 160, 22}: "MICROPOLIS CORP.",
+ [3]byte{0, 160, 23}: "J B M CORPORATION",
+ [3]byte{0, 160, 24}: "CREATIVE CONTROLLERS, INC.",
+ [3]byte{0, 160, 25}: "NEBULA CONSULTANTS, INC.",
+ [3]byte{0, 160, 26}: "BINAR ELEKTRONIK AB",
+ [3]byte{0, 160, 27}: "PREMISYS COMMUNICATIONS, INC.",
+ [3]byte{0, 160, 28}: "NASCENT NETWORKS CORPORATION",
+ [3]byte{0, 160, 29}: "Red Lion Controls, LP",
+ [3]byte{0, 160, 30}: "EST CORPORATION",
+ [3]byte{0, 160, 31}: "TRICORD SYSTEMS, INC.",
+ [3]byte{0, 160, 32}: "CITICORP/TTI",
+ [3]byte{0, 160, 33}: "General Dynamics",
+ [3]byte{0, 160, 34}: "CENTRE FOR DEVELOPMENT OF ADVANCED COMPUTING",
+ [3]byte{0, 160, 35}: "APPLIED CREATIVE TECHNOLOGY, INC.",
+ [3]byte{0, 160, 36}: "3COM CORPORATION",
+ [3]byte{0, 160, 37}: "REDCOM LABS INC.",
+ [3]byte{0, 160, 38}: "TELDAT, S.A.",
+ [3]byte{0, 160, 39}: "FIREPOWER SYSTEMS, INC.",
+ [3]byte{0, 160, 40}: "CONNER PERIPHERALS",
+ [3]byte{0, 160, 41}: "COULTER CORPORATION",
+ [3]byte{0, 160, 42}: "TRANCELL SYSTEMS",
+ [3]byte{0, 160, 43}: "TRANSITIONS RESEARCH CORP.",
+ [3]byte{0, 160, 44}: "interWAVE Communications",
+ [3]byte{0, 160, 45}: "1394 Trade Association",
+ [3]byte{0, 160, 46}: "BRAND COMMUNICATIONS, LTD.",
+ [3]byte{0, 160, 47}: "ADB Broadband Italia",
+ [3]byte{0, 160, 48}: "CAPTOR NV/SA",
+ [3]byte{0, 160, 49}: "HAZELTINE CORPORATION, MS 1-17",
+ [3]byte{0, 160, 50}: "GES SINGAPORE PTE. LTD.",
+ [3]byte{0, 160, 51}: "imc MeBsysteme GmbH",
+ [3]byte{0, 160, 52}: "AXEL",
+ [3]byte{0, 160, 53}: "CYLINK CORPORATION",
+ [3]byte{0, 160, 54}: "APPLIED NETWORK TECHNOLOGY",
+ [3]byte{0, 160, 55}: "Mindray DS USA, Inc.",
+ [3]byte{0, 160, 56}: "EMAIL ELECTRONICS",
+ [3]byte{0, 160, 57}: "ROSS TECHNOLOGY, INC.",
+ [3]byte{0, 160, 58}: "KUBOTEK CORPORATION",
+ [3]byte{0, 160, 59}: "TOSHIN ELECTRIC CO., LTD.",
+ [3]byte{0, 160, 60}: "EG&G NUCLEAR INSTRUMENTS",
+ [3]byte{0, 160, 61}: "OPTO-22",
+ [3]byte{0, 160, 62}: "ATM FORUM",
+ [3]byte{0, 160, 63}: "COMPUTER SOCIETY MICROPROCESSOR & MICROPROCESSOR STANDARDS C",
+ [3]byte{0, 160, 64}: "Apple, Inc.",
+ [3]byte{0, 160, 65}: "INFICON",
+ [3]byte{0, 160, 66}: "SPUR PRODUCTS CORP.",
+ [3]byte{0, 160, 67}: "AMERICAN TECHNOLOGY LABS, INC.",
+ [3]byte{0, 160, 68}: "NTT IT CO., LTD.",
+ [3]byte{0, 160, 69}: "PHOENIX CONTACT Electronics GmbH",
+ [3]byte{0, 160, 70}: "SCITEX CORP. LTD.",
+ [3]byte{0, 160, 71}: "INTEGRATED FITNESS CORP.",
+ [3]byte{0, 160, 72}: "QUESTECH, LTD.",
+ [3]byte{0, 160, 73}: "DIGITECH INDUSTRIES, INC.",
+ [3]byte{0, 160, 74}: "NISSHIN ELECTRIC CO., LTD.",
+ [3]byte{0, 160, 75}: "TFL LAN INC.",
+ [3]byte{0, 160, 76}: "INNOVATIVE SYSTEMS & TECHNOLOGIES, INC.",
+ [3]byte{0, 160, 77}: "EDA INSTRUMENTS, INC.",
+ [3]byte{0, 160, 78}: "VOELKER TECHNOLOGIES, INC.",
+ [3]byte{0, 160, 79}: "AMERITEC CORP.",
+ [3]byte{0, 160, 80}: "CYPRESS SEMICONDUCTOR",
+ [3]byte{0, 160, 81}: "ANGIA COMMUNICATIONS. INC.",
+ [3]byte{0, 160, 82}: "STANILITE ELECTRONICS PTY. LTD",
+ [3]byte{0, 160, 83}: "COMPACT DEVICES, INC.",
+ [3]byte{0, 160, 84}: "Private",
+ [3]byte{0, 160, 85}: "Data Device Corporation",
+ [3]byte{0, 160, 86}: "MICROPROSS",
+ [3]byte{0, 160, 87}: "LANCOM Systems GmbH",
+ [3]byte{0, 160, 88}: "GLORY, LTD.",
+ [3]byte{0, 160, 89}: "HAMILTON HALLMARK",
+ [3]byte{0, 160, 90}: "KOFAX IMAGE PRODUCTS",
+ [3]byte{0, 160, 91}: "MARQUIP, INC.",
+ [3]byte{0, 160, 92}: "INVENTORY CONVERSION, INC./",
+ [3]byte{0, 160, 93}: "CS COMPUTER SYSTEME GmbH",
+ [3]byte{0, 160, 94}: "MYRIAD LOGIC INC.",
+ [3]byte{0, 160, 95}: "BTG Electronics Design BV",
+ [3]byte{0, 160, 96}: "ACER PERIPHERALS, INC.",
+ [3]byte{0, 160, 97}: "PURITAN BENNETT",
+ [3]byte{0, 160, 98}: "AES PRODATA",
+ [3]byte{0, 160, 99}: "JRL SYSTEMS, INC.",
+ [3]byte{0, 160, 100}: "KVB/ANALECT",
+ [3]byte{0, 160, 101}: "Symantec Corporation",
+ [3]byte{0, 160, 102}: "ISA CO., LTD.",
+ [3]byte{0, 160, 103}: "NETWORK SERVICES GROUP",
+ [3]byte{0, 160, 104}: "BHP LIMITED",
+ [3]byte{0, 160, 105}: "Symmetricom, Inc.",
+ [3]byte{0, 160, 106}: "Verilink Corporation",
+ [3]byte{0, 160, 107}: "DMS DORSCH MIKROSYSTEM GMBH",
+ [3]byte{0, 160, 108}: "SHINDENGEN ELECTRIC MFG. CO., LTD.",
+ [3]byte{0, 160, 109}: "MANNESMANN TALLY CORPORATION",
+ [3]byte{0, 160, 110}: "AUSTRON, INC.",
+ [3]byte{0, 160, 111}: "Color Sentinel Systems, LLC",
+ [3]byte{0, 160, 112}: "COASTCOM",
+ [3]byte{0, 160, 113}: "VIDEO LOTTERY TECHNOLOGIES,INC",
+ [3]byte{0, 160, 114}: "OVATION SYSTEMS LTD.",
+ [3]byte{0, 160, 115}: "COM21, INC.",
+ [3]byte{0, 160, 116}: "PERCEPTION TECHNOLOGY",
+ [3]byte{0, 160, 117}: "MICRON TECHNOLOGY, INC.",
+ [3]byte{0, 160, 118}: "CARDWARE LAB, INC.",
+ [3]byte{0, 160, 119}: "FUJITSU NEXION, INC.",
+ [3]byte{0, 160, 120}: "Marconi Communications",
+ [3]byte{0, 160, 121}: "ALPS ELECTRIC (USA), INC.",
+ [3]byte{0, 160, 122}: "ADVANCED PERIPHERALS TECHNOLOGIES, INC.",
+ [3]byte{0, 160, 123}: "DAWN COMPUTER INCORPORATION",
+ [3]byte{0, 160, 124}: "TONYANG NYLON CO., LTD.",
+ [3]byte{0, 160, 125}: "SEEQ TECHNOLOGY, INC.",
+ [3]byte{0, 160, 126}: "AVID TECHNOLOGY, INC.",
+ [3]byte{0, 160, 127}: "GSM-SYNTEL, LTD.",
+ [3]byte{0, 160, 128}: "Tattile SRL",
+ [3]byte{0, 160, 129}: "ALCATEL DATA NETWORKS",
+ [3]byte{0, 160, 130}: "NKT ELEKTRONIK A/S",
+ [3]byte{0, 160, 131}: "ASIMMPHONY TURKEY",
+ [3]byte{0, 160, 132}: "Dataplex Pty Ltd",
+ [3]byte{0, 160, 133}: "Private",
+ [3]byte{0, 160, 134}: "AMBER WAVE SYSTEMS, INC.",
+ [3]byte{0, 160, 135}: "Microsemi Corporation",
+ [3]byte{0, 160, 136}: "ESSENTIAL COMMUNICATIONS",
+ [3]byte{0, 160, 137}: "XPOINT TECHNOLOGIES, INC.",
+ [3]byte{0, 160, 138}: "BROOKTROUT TECHNOLOGY, INC.",
+ [3]byte{0, 160, 139}: "ASTON ELECTRONIC DESIGNS LTD.",
+ [3]byte{0, 160, 140}: "MultiMedia LANs, Inc.",
+ [3]byte{0, 160, 141}: "JACOMO CORPORATION",
+ [3]byte{0, 160, 142}: "Check Point Software Technologies",
+ [3]byte{0, 160, 143}: "DESKNET SYSTEMS, INC.",
+ [3]byte{0, 160, 144}: "TimeStep Corporation",
+ [3]byte{0, 160, 145}: "APPLICOM INTERNATIONAL",
+ [3]byte{0, 160, 146}: "H. BOLLMANN MANUFACTURERS, LTD",
+ [3]byte{0, 160, 147}: "B/E AEROSPACE, Inc.",
+ [3]byte{0, 160, 148}: "COMSAT CORPORATION",
+ [3]byte{0, 160, 149}: "ACACIA NETWORKS, INC.",
+ [3]byte{0, 160, 150}: "MITSUMI ELECTRIC CO.,LTD.",
+ [3]byte{0, 160, 151}: "JC INFORMATION SYSTEMS",
+ [3]byte{0, 160, 152}: "NetApp",
+ [3]byte{0, 160, 153}: "K-NET LTD.",
+ [3]byte{0, 160, 154}: "NIHON KOHDEN AMERICA",
+ [3]byte{0, 160, 155}: "QPSX COMMUNICATIONS, LTD.",
+ [3]byte{0, 160, 156}: "Xyplex, Inc.",
+ [3]byte{0, 160, 157}: "JOHNATHON FREEMAN TECHNOLOGIES",
+ [3]byte{0, 160, 158}: "ICTV",
+ [3]byte{0, 160, 159}: "COMMVISION CORP.",
+ [3]byte{0, 160, 160}: "COMPACT DATA, LTD.",
+ [3]byte{0, 160, 161}: "EPIC DATA INC.",
+ [3]byte{0, 160, 162}: "DIGICOM S.P.A.",
+ [3]byte{0, 160, 163}: "RELIABLE POWER METERS",
+ [3]byte{0, 160, 164}: "Oracle Corporation",
+ [3]byte{0, 160, 165}: "TEKNOR MICROSYSTEME, INC.",
+ [3]byte{0, 160, 166}: "M.I. SYSTEMS, K.K.",
+ [3]byte{0, 160, 167}: "VORAX CORPORATION",
+ [3]byte{0, 160, 168}: "RENEX CORPORATION",
+ [3]byte{0, 160, 169}: "NAVTEL COMMUNICATIONS INC.",
+ [3]byte{0, 160, 170}: "SPACELABS MEDICAL",
+ [3]byte{0, 160, 171}: "NETCS INFORMATIONSTECHNIK GMBH",
+ [3]byte{0, 160, 172}: "GILAT SATELLITE NETWORKS, LTD.",
+ [3]byte{0, 160, 173}: "MARCONI SPA",
+ [3]byte{0, 160, 174}: "NUCOM SYSTEMS, INC.",
+ [3]byte{0, 160, 175}: "WMS INDUSTRIES",
+ [3]byte{0, 160, 176}: "I-O DATA DEVICE, INC.",
+ [3]byte{0, 160, 177}: "FIRST VIRTUAL CORPORATION",
+ [3]byte{0, 160, 178}: "SHIMA SEIKI",
+ [3]byte{0, 160, 179}: "ZYKRONIX",
+ [3]byte{0, 160, 180}: "TEXAS MICROSYSTEMS, INC.",
+ [3]byte{0, 160, 181}: "3H TECHNOLOGY",
+ [3]byte{0, 160, 182}: "SANRITZ AUTOMATION CO., LTD.",
+ [3]byte{0, 160, 183}: "CORDANT, INC.",
+ [3]byte{0, 160, 184}: "NetApp",
+ [3]byte{0, 160, 185}: "EAGLE TECHNOLOGY, INC.",
+ [3]byte{0, 160, 186}: "PATTON ELECTRONICS CO.",
+ [3]byte{0, 160, 187}: "HILAN GMBH",
+ [3]byte{0, 160, 188}: "VIASAT, INCORPORATED",
+ [3]byte{0, 160, 189}: "I-TECH CORP.",
+ [3]byte{0, 160, 190}: "INTEGRATED CIRCUIT SYSTEMS, INC. COMMUNICATIONS GROUP",
+ [3]byte{0, 160, 191}: "WIRELESS DATA GROUP MOTOROLA",
+ [3]byte{0, 160, 192}: "DIGITAL LINK CORP.",
+ [3]byte{0, 160, 193}: "ORTIVUS MEDICAL AB",
+ [3]byte{0, 160, 194}: "R.A. SYSTEMS CO., LTD.",
+ [3]byte{0, 160, 195}: "UNICOMPUTER GMBH",
+ [3]byte{0, 160, 196}: "CRISTIE ELECTRONICS LTD.",
+ [3]byte{0, 160, 197}: "Zyxel Communications Corporation",
+ [3]byte{0, 160, 198}: "Qualcomm Inc.",
+ [3]byte{0, 160, 199}: "TADIRAN TELECOMMUNICATIONS",
+ [3]byte{0, 160, 200}: "Adtran Inc",
+ [3]byte{0, 160, 201}: "Intel Corporation",
+ [3]byte{0, 160, 202}: "FUJITSU DENSO LTD.",
+ [3]byte{0, 160, 203}: "ARK TELECOMMUNICATIONS, INC.",
+ [3]byte{0, 160, 204}: "LITE-ON COMMUNICATIONS, INC.",
+ [3]byte{0, 160, 205}: "DR. JOHANNES HEIDENHAIN GmbH",
+ [3]byte{0, 160, 206}: "Ecessa",
+ [3]byte{0, 160, 207}: "SOTAS, INC.",
+ [3]byte{0, 160, 208}: "TEN X TECHNOLOGY, INC.",
+ [3]byte{0, 160, 209}: "INVENTEC CORPORATION",
+ [3]byte{0, 160, 210}: "ALLIED TELESIS INTERNATIONAL CORPORATION",
+ [3]byte{0, 160, 211}: "INSTEM COMPUTER SYSTEMS, LTD.",
+ [3]byte{0, 160, 212}: "RADIOLAN, INC.",
+ [3]byte{0, 160, 213}: "SIERRA WIRELESS INC.",
+ [3]byte{0, 160, 214}: "SBE, Inc.",
+ [3]byte{0, 160, 215}: "KASTEN CHASE APPLIED RESEARCH",
+ [3]byte{0, 160, 216}: "SPECTRA - TEK",
+ [3]byte{0, 160, 217}: "CONVEX COMPUTER CORPORATION",
+ [3]byte{0, 160, 218}: "INTEGRATED SYSTEMS Technology, Inc.",
+ [3]byte{0, 160, 219}: "FISHER & PAYKEL PRODUCTION",
+ [3]byte{0, 160, 220}: "O.N. ELECTRONIC CO., LTD.",
+ [3]byte{0, 160, 221}: "AZONIX CORPORATION",
+ [3]byte{0, 160, 222}: "YAMAHA CORPORATION",
+ [3]byte{0, 160, 223}: "STS TECHNOLOGIES, INC.",
+ [3]byte{0, 160, 224}: "TENNYSON TECHNOLOGIES PTY LTD",
+ [3]byte{0, 160, 225}: "WESTPORT RESEARCH ASSOCIATES, INC.",
+ [3]byte{0, 160, 226}: "Keisokugiken Corporation",
+ [3]byte{0, 160, 227}: "XKL SYSTEMS CORP.",
+ [3]byte{0, 160, 228}: "OPTIQUEST",
+ [3]byte{0, 160, 229}: "NHC COMMUNICATIONS",
+ [3]byte{0, 160, 230}: "DIALOGIC CORPORATION",
+ [3]byte{0, 160, 231}: "CENTRAL DATA CORPORATION",
+ [3]byte{0, 160, 232}: "REUTERS HOLDINGS PLC",
+ [3]byte{0, 160, 233}: "ELECTRONIC RETAILING SYSTEMS INTERNATIONAL",
+ [3]byte{0, 160, 234}: "ETHERCOM CORP.",
+ [3]byte{0, 160, 235}: "Encore Networks, Inc.",
+ [3]byte{0, 160, 236}: "TRANSMITTON LTD.",
+ [3]byte{0, 160, 237}: "Brooks Automation, Inc.",
+ [3]byte{0, 160, 238}: "NASHOBA NETWORKS",
+ [3]byte{0, 160, 239}: "LUCIDATA LTD.",
+ [3]byte{0, 160, 240}: "TORONTO MICROELECTRONICS INC.",
+ [3]byte{0, 160, 241}: "MTI",
+ [3]byte{0, 160, 242}: "INFOTEK COMMUNICATIONS, INC.",
+ [3]byte{0, 160, 243}: "STAUBLI",
+ [3]byte{0, 160, 244}: "GE",
+ [3]byte{0, 160, 245}: "RADGUARD LTD.",
+ [3]byte{0, 160, 246}: "AutoGas Systems Inc.",
+ [3]byte{0, 160, 247}: "V.I COMPUTER CORP.",
+ [3]byte{0, 160, 248}: "Zebra Technologies Inc",
+ [3]byte{0, 160, 249}: "BINTEC COMMUNICATIONS GMBH",
+ [3]byte{0, 160, 250}: "Marconi Communication GmbH",
+ [3]byte{0, 160, 251}: "TORAY ENGINEERING CO., LTD.",
+ [3]byte{0, 160, 252}: "IMAGE SCIENCES, INC.",
+ [3]byte{0, 160, 253}: "SCITEX DIGITAL PRINTING, INC.",
+ [3]byte{0, 160, 254}: "BOSTON TECHNOLOGY, INC.",
+ [3]byte{0, 160, 255}: "TELLABS OPERATIONS, INC.",
+ [3]byte{0, 161, 222}: "ShenZhen ShiHua Technology CO.,LTD",
+ [3]byte{0, 162, 137}: "Cisco Systems, Inc",
+ [3]byte{0, 162, 218}: "INAT GmbH",
+ [3]byte{0, 162, 238}: "Cisco Systems, Inc",
+ [3]byte{0, 162, 245}: "Guangzhou Yuanyun Network Technology Co.,Ltd",
+ [3]byte{0, 162, 255}: "abatec group AG",
+ [3]byte{0, 163, 142}: "Cisco Systems, Inc",
+ [3]byte{0, 163, 209}: "Cisco Systems, Inc",
+ [3]byte{0, 165, 9}: "WigWag Inc.",
+ [3]byte{0, 166, 202}: "Cisco Systems, Inc",
+ [3]byte{0, 167, 66}: "Cisco Systems, Inc",
+ [3]byte{0, 167, 132}: "ITX security",
+ [3]byte{0, 170, 0}: "Intel Corporation",
+ [3]byte{0, 170, 1}: "Intel Corporation",
+ [3]byte{0, 170, 2}: "Intel Corporation",
+ [3]byte{0, 170, 60}: "OLIVETTI TELECOM SPA (OLTECO)",
+ [3]byte{0, 170, 112}: "LG Electronics (Mobile Communications)",
+ [3]byte{0, 172, 224}: "ARRIS Group, Inc.",
+ [3]byte{0, 174, 205}: "Pensando Systems",
+ [3]byte{0, 174, 250}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{0, 175, 31}: "Cisco Systems, Inc",
+ [3]byte{0, 176, 9}: "Grass Valley, A Belden Brand",
+ [3]byte{0, 176, 23}: "InfoGear Technology Corp.",
+ [3]byte{0, 176, 25}: "UTC CCS",
+ [3]byte{0, 176, 28}: "Westport Technologies",
+ [3]byte{0, 176, 30}: "Rantic Labs, Inc.",
+ [3]byte{0, 176, 42}: "ORSYS GmbH",
+ [3]byte{0, 176, 45}: "ViaGate Technologies, Inc.",
+ [3]byte{0, 176, 51}: "OAO Izhevskiy radiozavod",
+ [3]byte{0, 176, 59}: "HiQ Networks",
+ [3]byte{0, 176, 72}: "Marconi Communications Inc.",
+ [3]byte{0, 176, 74}: "Cisco Systems, Inc",
+ [3]byte{0, 176, 82}: "Atheros Communications",
+ [3]byte{0, 176, 100}: "Cisco Systems, Inc",
+ [3]byte{0, 176, 105}: "Honewell Oy",
+ [3]byte{0, 176, 109}: "Jones Futurex Inc.",
+ [3]byte{0, 176, 128}: "Mannesmann Ipulsys B.V.",
+ [3]byte{0, 176, 134}: "LocSoft Limited",
+ [3]byte{0, 176, 142}: "Cisco Systems, Inc",
+ [3]byte{0, 176, 145}: "Transmeta Corp.",
+ [3]byte{0, 176, 148}: "Alaris, Inc.",
+ [3]byte{0, 176, 154}: "Morrow Technologies Corp.",
+ [3]byte{0, 176, 157}: "Point Grey Research Inc.",
+ [3]byte{0, 176, 172}: "SIAE-Microelettronica S.p.A.",
+ [3]byte{0, 176, 174}: "Symmetricom",
+ [3]byte{0, 176, 179}: "XSTREAMIS PLC",
+ [3]byte{0, 176, 194}: "Cisco Systems, Inc",
+ [3]byte{0, 176, 199}: "Tellabs Operations, Inc.",
+ [3]byte{0, 176, 206}: "Viveris Technologies",
+ [3]byte{0, 176, 208}: "Dell Inc.",
+ [3]byte{0, 176, 219}: "Nextcell, Inc.",
+ [3]byte{0, 176, 223}: "Starboard Storage Systems",
+ [3]byte{0, 176, 225}: "Cisco Systems, Inc",
+ [3]byte{0, 176, 231}: "British Federal Ltd.",
+ [3]byte{0, 176, 236}: "EACEM",
+ [3]byte{0, 176, 238}: "Ajile Systems, Inc.",
+ [3]byte{0, 176, 240}: "CALY NETWORKS",
+ [3]byte{0, 176, 245}: "NetWorth Technologies, Inc.",
+ [3]byte{0, 179, 56}: "Kontron Design Manufacturing Services (M) Sdn. Bhd",
+ [3]byte{0, 179, 66}: "MacroSAN Technologies Co., Ltd.",
+ [3]byte{0, 179, 98}: "Apple, Inc.",
+ [3]byte{0, 181, 109}: "David Electronics Co., LTD.",
+ [3]byte{0, 181, 214}: "Omnibit Inc.",
+ [3]byte{0, 182, 159}: "Latch",
+ [3]byte{0, 183, 141}: "Nanjing Shining Electric Automation Co., Ltd",
+ [3]byte{0, 185, 246}: "Shenzhen Super Rich Electronics Co.,Ltd",
+ [3]byte{0, 186, 192}: "Biometric Access Company",
+ [3]byte{0, 187, 1}: "OCTOTHORPE CORP.",
+ [3]byte{0, 187, 58}: "Private",
+ [3]byte{0, 187, 142}: "HME Co., Ltd.",
+ [3]byte{0, 187, 193}: "CANON INC.",
+ [3]byte{0, 187, 240}: "UNGERMANN-BASS INC.",
+ [3]byte{0, 189, 39}: "Exar Corp.",
+ [3]byte{0, 189, 58}: "Nokia Corporation",
+ [3]byte{0, 189, 130}: "Shenzhen YOUHUA Technology Co., Ltd",
+ [3]byte{0, 190, 158}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{0, 191, 21}: "Genetec Inc.",
+ [3]byte{0, 191, 97}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 192, 0}: "LANOPTICS, LTD.",
+ [3]byte{0, 192, 1}: "DIATEK PATIENT MANAGMENT",
+ [3]byte{0, 192, 2}: "SERCOMM CORPORATION",
+ [3]byte{0, 192, 3}: "GLOBALNET COMMUNICATIONS",
+ [3]byte{0, 192, 4}: "JAPAN BUSINESS COMPUTER CO.LTD",
+ [3]byte{0, 192, 5}: "LIVINGSTON ENTERPRISES, INC.",
+ [3]byte{0, 192, 6}: "NIPPON AVIONICS CO., LTD.",
+ [3]byte{0, 192, 7}: "PINNACLE DATA SYSTEMS, INC.",
+ [3]byte{0, 192, 8}: "SECO SRL",
+ [3]byte{0, 192, 9}: "KT TECHNOLOGY (S) PTE LTD",
+ [3]byte{0, 192, 10}: "MICRO CRAFT",
+ [3]byte{0, 192, 11}: "NORCONTROL A.S.",
+ [3]byte{0, 192, 12}: "RELIA TECHNOLGIES",
+ [3]byte{0, 192, 13}: "ADVANCED LOGIC RESEARCH, INC.",
+ [3]byte{0, 192, 14}: "PSITECH, INC.",
+ [3]byte{0, 192, 15}: "QUANTUM SOFTWARE SYSTEMS LTD.",
+ [3]byte{0, 192, 16}: "HIRAKAWA HEWTECH CORP.",
+ [3]byte{0, 192, 17}: "INTERACTIVE COMPUTING DEVICES",
+ [3]byte{0, 192, 18}: "NETSPAN CORPORATION",
+ [3]byte{0, 192, 19}: "NETRIX",
+ [3]byte{0, 192, 20}: "TELEMATICS CALABASAS INT'L,INC",
+ [3]byte{0, 192, 21}: "NEW MEDIA CORPORATION",
+ [3]byte{0, 192, 22}: "ELECTRONIC THEATRE CONTROLS",
+ [3]byte{0, 192, 23}: "NetScout Systems, Inc.",
+ [3]byte{0, 192, 24}: "LANART CORPORATION",
+ [3]byte{0, 192, 25}: "LEAP TECHNOLOGY, INC.",
+ [3]byte{0, 192, 26}: "COROMETRICS MEDICAL SYSTEMS",
+ [3]byte{0, 192, 27}: "SOCKET COMMUNICATIONS, INC.",
+ [3]byte{0, 192, 28}: "INTERLINK COMMUNICATIONS LTD.",
+ [3]byte{0, 192, 29}: "GRAND JUNCTION NETWORKS, INC.",
+ [3]byte{0, 192, 30}: "LA FRANCAISE DES JEUX",
+ [3]byte{0, 192, 31}: "S.E.R.C.E.L.",
+ [3]byte{0, 192, 32}: "ARCO ELECTRONIC, CONTROL LTD.",
+ [3]byte{0, 192, 33}: "NETEXPRESS",
+ [3]byte{0, 192, 34}: "LASERMASTER TECHNOLOGIES, INC.",
+ [3]byte{0, 192, 35}: "TUTANKHAMON ELECTRONICS",
+ [3]byte{0, 192, 36}: "EDEN SISTEMAS DE COMPUTACAO SA",
+ [3]byte{0, 192, 37}: "DATAPRODUCTS CORPORATION",
+ [3]byte{0, 192, 38}: "LANS TECHNOLOGY CO., LTD.",
+ [3]byte{0, 192, 39}: "CIPHER SYSTEMS, INC.",
+ [3]byte{0, 192, 40}: "JASCO CORPORATION",
+ [3]byte{0, 192, 41}: "Nexans Deutschland GmbH - ANS",
+ [3]byte{0, 192, 42}: "OHKURA ELECTRIC CO., LTD.",
+ [3]byte{0, 192, 43}: "GERLOFF GESELLSCHAFT FUR",
+ [3]byte{0, 192, 44}: "CENTRUM COMMUNICATIONS, INC.",
+ [3]byte{0, 192, 45}: "FUJI PHOTO FILM CO., LTD.",
+ [3]byte{0, 192, 46}: "NETWIZ",
+ [3]byte{0, 192, 47}: "OKUMA CORPORATION",
+ [3]byte{0, 192, 48}: "INTEGRATED ENGINEERING B. V.",
+ [3]byte{0, 192, 49}: "DESIGN RESEARCH SYSTEMS, INC.",
+ [3]byte{0, 192, 50}: "I-CUBED LIMITED",
+ [3]byte{0, 192, 51}: "TELEBIT COMMUNICATIONS APS",
+ [3]byte{0, 192, 52}: "TRANSACTION NETWORK",
+ [3]byte{0, 192, 53}: "QUINTAR COMPANY",
+ [3]byte{0, 192, 54}: "RAYTECH ELECTRONIC CORP.",
+ [3]byte{0, 192, 55}: "DYNATEM",
+ [3]byte{0, 192, 56}: "RASTER IMAGE PROCESSING SYSTEM",
+ [3]byte{0, 192, 57}: "Teridian Semiconductor Corporation",
+ [3]byte{0, 192, 58}: "MEN-MIKRO ELEKTRONIK GMBH",
+ [3]byte{0, 192, 59}: "MULTIACCESS COMPUTING CORP.",
+ [3]byte{0, 192, 60}: "TOWER TECH S.R.L.",
+ [3]byte{0, 192, 61}: "WIESEMANN & THEIS GMBH",
+ [3]byte{0, 192, 62}: "FA. GEBR. HELLER GMBH",
+ [3]byte{0, 192, 63}: "STORES AUTOMATED SYSTEMS, INC.",
+ [3]byte{0, 192, 64}: "ECCI",
+ [3]byte{0, 192, 65}: "DIGITAL TRANSMISSION SYSTEMS",
+ [3]byte{0, 192, 66}: "DATALUX CORP.",
+ [3]byte{0, 192, 67}: "STRATACOM",
+ [3]byte{0, 192, 68}: "EMCOM CORPORATION",
+ [3]byte{0, 192, 69}: "ISOLATION SYSTEMS, LTD.",
+ [3]byte{0, 192, 70}: "Blue Chip Technology Ltd",
+ [3]byte{0, 192, 71}: "UNIMICRO SYSTEMS, INC.",
+ [3]byte{0, 192, 72}: "BAY TECHNICAL ASSOCIATES",
+ [3]byte{0, 192, 73}: "U.S. ROBOTICS, INC.",
+ [3]byte{0, 192, 74}: "GROUP 2000 AG",
+ [3]byte{0, 192, 75}: "CREATIVE MICROSYSTEMS",
+ [3]byte{0, 192, 76}: "DEPARTMENT OF FOREIGN AFFAIRS",
+ [3]byte{0, 192, 77}: "MITEC, INC.",
+ [3]byte{0, 192, 78}: "COMTROL CORPORATION",
+ [3]byte{0, 192, 79}: "Dell Inc.",
+ [3]byte{0, 192, 80}: "TOYO DENKI SEIZO K.K.",
+ [3]byte{0, 192, 81}: "ADVANCED INTEGRATION RESEARCH",
+ [3]byte{0, 192, 82}: "BURR-BROWN",
+ [3]byte{0, 192, 83}: "Aspect Software Inc.",
+ [3]byte{0, 192, 84}: "NETWORK PERIPHERALS, LTD.",
+ [3]byte{0, 192, 85}: "MODULAR COMPUTING TECHNOLOGIES",
+ [3]byte{0, 192, 86}: "SOMELEC",
+ [3]byte{0, 192, 87}: "MYCO ELECTRONICS",
+ [3]byte{0, 192, 88}: "DATAEXPERT CORP.",
+ [3]byte{0, 192, 89}: "DENSO CORPORATION",
+ [3]byte{0, 192, 90}: "SEMAPHORE COMMUNICATIONS CORP.",
+ [3]byte{0, 192, 91}: "NETWORKS NORTHWEST, INC.",
+ [3]byte{0, 192, 92}: "ELONEX PLC",
+ [3]byte{0, 192, 93}: "L&N TECHNOLOGIES",
+ [3]byte{0, 192, 94}: "VARI-LITE, INC.",
+ [3]byte{0, 192, 95}: "FINE-PAL COMPANY LIMITED",
+ [3]byte{0, 192, 96}: "ID SCANDINAVIA AS",
+ [3]byte{0, 192, 97}: "SOLECTEK CORPORATION",
+ [3]byte{0, 192, 98}: "IMPULSE TECHNOLOGY",
+ [3]byte{0, 192, 99}: "MORNING STAR TECHNOLOGIES, INC",
+ [3]byte{0, 192, 100}: "General Datacomm LLC",
+ [3]byte{0, 192, 101}: "SCOPE COMMUNICATIONS, INC.",
+ [3]byte{0, 192, 102}: "DOCUPOINT, INC.",
+ [3]byte{0, 192, 103}: "UNITED BARCODE INDUSTRIES",
+ [3]byte{0, 192, 104}: "HME Clear-Com LTD.",
+ [3]byte{0, 192, 105}: "Axxcelera Broadband Wireless",
+ [3]byte{0, 192, 106}: "ZAHNER-ELEKTRIK GMBH & CO. KG",
+ [3]byte{0, 192, 107}: "OSI PLUS CORPORATION",
+ [3]byte{0, 192, 108}: "SVEC COMPUTER CORP.",
+ [3]byte{0, 192, 109}: "BOCA RESEARCH, INC.",
+ [3]byte{0, 192, 110}: "HAFT TECHNOLOGY, INC.",
+ [3]byte{0, 192, 111}: "KOMATSU LTD.",
+ [3]byte{0, 192, 112}: "SECTRA SECURE-TRANSMISSION AB",
+ [3]byte{0, 192, 113}: "AREANEX COMMUNICATIONS, INC.",
+ [3]byte{0, 192, 114}: "KNX LTD.",
+ [3]byte{0, 192, 115}: "XEDIA CORPORATION",
+ [3]byte{0, 192, 116}: "TOYODA AUTOMATIC LOOM",
+ [3]byte{0, 192, 117}: "XANTE CORPORATION",
+ [3]byte{0, 192, 118}: "I-DATA INTERNATIONAL A-S",
+ [3]byte{0, 192, 119}: "DAEWOO TELECOM LTD.",
+ [3]byte{0, 192, 120}: "COMPUTER SYSTEMS ENGINEERING",
+ [3]byte{0, 192, 121}: "FONSYS CO.,LTD.",
+ [3]byte{0, 192, 122}: "PRIVA B.V.",
+ [3]byte{0, 192, 123}: "ASCEND COMMUNICATIONS, INC.",
+ [3]byte{0, 192, 124}: "HIGHTECH INFORMATION",
+ [3]byte{0, 192, 125}: "RISC DEVELOPMENTS LTD.",
+ [3]byte{0, 192, 126}: "KUBOTA CORPORATION ELECTRONIC",
+ [3]byte{0, 192, 127}: "NUPON COMPUTING CORP.",
+ [3]byte{0, 192, 128}: "NETSTAR, INC.",
+ [3]byte{0, 192, 129}: "METRODATA LTD.",
+ [3]byte{0, 192, 130}: "MOORE PRODUCTS CO.",
+ [3]byte{0, 192, 131}: "TRACE MOUNTAIN PRODUCTS, INC.",
+ [3]byte{0, 192, 132}: "DATA LINK CORP. LTD.",
+ [3]byte{0, 192, 133}: "ELECTRONICS FOR IMAGING, INC.",
+ [3]byte{0, 192, 134}: "THE LYNK CORPORATION",
+ [3]byte{0, 192, 135}: "UUNET TECHNOLOGIES, INC.",
+ [3]byte{0, 192, 136}: "EKF ELEKTRONIK GMBH",
+ [3]byte{0, 192, 137}: "TELINDUS DISTRIBUTION",
+ [3]byte{0, 192, 138}: "Lauterbach GmbH",
+ [3]byte{0, 192, 139}: "RISQ MODULAR SYSTEMS, INC.",
+ [3]byte{0, 192, 140}: "PERFORMANCE TECHNOLOGIES, INC.",
+ [3]byte{0, 192, 141}: "TRONIX PRODUCT DEVELOPMENT",
+ [3]byte{0, 192, 142}: "NETWORK INFORMATION TECHNOLOGY",
+ [3]byte{0, 192, 143}: "Panasonic Electric Works Co., Ltd.",
+ [3]byte{0, 192, 144}: "PRAIM S.R.L.",
+ [3]byte{0, 192, 145}: "JABIL CIRCUIT, INC.",
+ [3]byte{0, 192, 146}: "MENNEN MEDICAL INC.",
+ [3]byte{0, 192, 147}: "ALTA RESEARCH CORP.",
+ [3]byte{0, 192, 148}: "VMX INC.",
+ [3]byte{0, 192, 149}: "ZNYX Networks, Inc.",
+ [3]byte{0, 192, 150}: "TAMURA CORPORATION",
+ [3]byte{0, 192, 151}: "ARCHIPEL SA",
+ [3]byte{0, 192, 152}: "CHUNTEX ELECTRONIC CO., LTD.",
+ [3]byte{0, 192, 153}: "YOSHIKI INDUSTRIAL CO.,LTD.",
+ [3]byte{0, 192, 154}: "PHOTONICS CORPORATION",
+ [3]byte{0, 192, 155}: "RELIANCE COMM/TEC, R-TEC",
+ [3]byte{0, 192, 156}: "HIOKI E.E. CORPORATION",
+ [3]byte{0, 192, 157}: "DISTRIBUTED SYSTEMS INT'L, INC",
+ [3]byte{0, 192, 158}: "CACHE COMPUTERS, INC.",
+ [3]byte{0, 192, 159}: "QUANTA COMPUTER INC.",
+ [3]byte{0, 192, 160}: "ADVANCE MICRO RESEARCH, INC.",
+ [3]byte{0, 192, 161}: "TOKYO DENSHI SEKEI CO.",
+ [3]byte{0, 192, 162}: "INTERMEDIUM A/S",
+ [3]byte{0, 192, 163}: "DUAL ENTERPRISES CORPORATION",
+ [3]byte{0, 192, 164}: "UNIGRAF OY",
+ [3]byte{0, 192, 165}: "DICKENS DATA SYSTEMS",
+ [3]byte{0, 192, 166}: "EXICOM AUSTRALIA PTY. LTD",
+ [3]byte{0, 192, 167}: "SEEL LTD.",
+ [3]byte{0, 192, 168}: "GVC CORPORATION",
+ [3]byte{0, 192, 169}: "BARRON MCCANN LTD.",
+ [3]byte{0, 192, 170}: "SILICON VALLEY COMPUTER",
+ [3]byte{0, 192, 171}: "Telco Systems, Inc.",
+ [3]byte{0, 192, 172}: "GAMBIT COMPUTER COMMUNICATIONS",
+ [3]byte{0, 192, 173}: "MARBEN COMMUNICATION SYSTEMS",
+ [3]byte{0, 192, 174}: "TOWERCOM CO. INC. DBA PC HOUSE",
+ [3]byte{0, 192, 175}: "TEKLOGIX INC.",
+ [3]byte{0, 192, 176}: "GCC TECHNOLOGIES,INC.",
+ [3]byte{0, 192, 177}: "GENIUS NET CO.",
+ [3]byte{0, 192, 178}: "NORAND CORPORATION",
+ [3]byte{0, 192, 179}: "COMSTAT DATACOMM CORPORATION",
+ [3]byte{0, 192, 180}: "MYSON TECHNOLOGY, INC.",
+ [3]byte{0, 192, 181}: "CORPORATE NETWORK SYSTEMS,INC.",
+ [3]byte{0, 192, 182}: "Overland Storage, Inc.",
+ [3]byte{0, 192, 183}: "AMERICAN POWER CONVERSION CORP",
+ [3]byte{0, 192, 184}: "FRASER'S HILL LTD.",
+ [3]byte{0, 192, 185}: "FUNK SOFTWARE, INC.",
+ [3]byte{0, 192, 186}: "NETVANTAGE",
+ [3]byte{0, 192, 187}: "FORVAL CREATIVE, INC.",
+ [3]byte{0, 192, 188}: "TELECOM AUSTRALIA/CSSC",
+ [3]byte{0, 192, 189}: "INEX TECHNOLOGIES, INC.",
+ [3]byte{0, 192, 190}: "ALCATEL - SEL",
+ [3]byte{0, 192, 191}: "TECHNOLOGY CONCEPTS, LTD.",
+ [3]byte{0, 192, 192}: "SHORE MICROSYSTEMS, INC.",
+ [3]byte{0, 192, 193}: "QUAD/GRAPHICS, INC.",
+ [3]byte{0, 192, 194}: "INFINITE NETWORKS LTD.",
+ [3]byte{0, 192, 195}: "ACUSON COMPUTED SONOGRAPHY",
+ [3]byte{0, 192, 196}: "COMPUTER OPERATIONAL",
+ [3]byte{0, 192, 197}: "SID INFORMATICA",
+ [3]byte{0, 192, 198}: "PERSONAL MEDIA CORP.",
+ [3]byte{0, 192, 199}: "SPARKTRUM MICROSYSTEMS, INC.",
+ [3]byte{0, 192, 200}: "MICRO BYTE PTY. LTD.",
+ [3]byte{0, 192, 201}: "ELSAG BAILEY PROCESS",
+ [3]byte{0, 192, 202}: "ALFA, INC.",
+ [3]byte{0, 192, 203}: "CONTROL TECHNOLOGY CORPORATION",
+ [3]byte{0, 192, 204}: "TELESCIENCES CO SYSTEMS, INC.",
+ [3]byte{0, 192, 205}: "COMELTA, S.A.",
+ [3]byte{0, 192, 206}: "CEI SYSTEMS & ENGINEERING PTE",
+ [3]byte{0, 192, 207}: "IMATRAN VOIMA OY",
+ [3]byte{0, 192, 208}: "RATOC SYSTEM INC.",
+ [3]byte{0, 192, 209}: "COMTREE TECHNOLOGY CORPORATION",
+ [3]byte{0, 192, 210}: "SYNTELLECT, INC.",
+ [3]byte{0, 192, 211}: "OLYMPUS IMAGE SYSTEMS, INC.",
+ [3]byte{0, 192, 212}: "AXON NETWORKS, INC.",
+ [3]byte{0, 192, 213}: "Werbeagentur Jürgen Siebert",
+ [3]byte{0, 192, 214}: "J1 SYSTEMS, INC.",
+ [3]byte{0, 192, 215}: "TAIWAN TRADING CENTER DBA",
+ [3]byte{0, 192, 216}: "UNIVERSAL DATA SYSTEMS",
+ [3]byte{0, 192, 217}: "QUINTE NETWORK CONFIDENTIALITY",
+ [3]byte{0, 192, 218}: "NICE SYSTEMS LTD.",
+ [3]byte{0, 192, 219}: "IPC CORPORATION (PTE) LTD.",
+ [3]byte{0, 192, 220}: "EOS TECHNOLOGIES, INC.",
+ [3]byte{0, 192, 221}: "QLogic Corporation",
+ [3]byte{0, 192, 222}: "ZCOMM, INC.",
+ [3]byte{0, 192, 223}: "KYE Systems Corp.",
+ [3]byte{0, 192, 224}: "DSC COMMUNICATION CORP.",
+ [3]byte{0, 192, 225}: "SONIC SOLUTIONS",
+ [3]byte{0, 192, 226}: "CALCOMP, INC.",
+ [3]byte{0, 192, 227}: "OSITECH COMMUNICATIONS, INC.",
+ [3]byte{0, 192, 228}: "SIEMENS BUILDING",
+ [3]byte{0, 192, 229}: "GESPAC, S.A.",
+ [3]byte{0, 192, 230}: "Verilink Corporation",
+ [3]byte{0, 192, 231}: "FIBERDATA AB",
+ [3]byte{0, 192, 232}: "PLEXCOM, INC.",
+ [3]byte{0, 192, 233}: "OAK SOLUTIONS, LTD.",
+ [3]byte{0, 192, 234}: "ARRAY TECHNOLOGY LTD.",
+ [3]byte{0, 192, 235}: "SEH COMPUTERTECHNIK GMBH",
+ [3]byte{0, 192, 236}: "DAUPHIN TECHNOLOGY",
+ [3]byte{0, 192, 237}: "US ARMY ELECTRONIC",
+ [3]byte{0, 192, 238}: "KYOCERA Display Corporation",
+ [3]byte{0, 192, 239}: "ABIT CORPORATION",
+ [3]byte{0, 192, 240}: "Kingston Technology Company, Inc.",
+ [3]byte{0, 192, 241}: "SHINKO ELECTRIC CO., LTD.",
+ [3]byte{0, 192, 242}: "TRANSITION NETWORKS",
+ [3]byte{0, 192, 243}: "NETWORK COMMUNICATIONS CORP.",
+ [3]byte{0, 192, 244}: "INTERLINK SYSTEM CO., LTD.",
+ [3]byte{0, 192, 245}: "METACOMP, INC.",
+ [3]byte{0, 192, 246}: "CELAN TECHNOLOGY INC.",
+ [3]byte{0, 192, 247}: "ENGAGE COMMUNICATION, INC.",
+ [3]byte{0, 192, 248}: "ABOUT COMPUTING INC.",
+ [3]byte{0, 192, 249}: "Artesyn Embedded Technologies",
+ [3]byte{0, 192, 250}: "CANARY COMMUNICATIONS, INC.",
+ [3]byte{0, 192, 251}: "ADVANCED TECHNOLOGY LABS",
+ [3]byte{0, 192, 252}: "ELASTIC REALITY, INC.",
+ [3]byte{0, 192, 253}: "PROSUM",
+ [3]byte{0, 192, 254}: "APTEC COMPUTER SYSTEMS, INC.",
+ [3]byte{0, 192, 255}: "Seagate Cloud Systems Inc",
+ [3]byte{0, 193, 79}: "DDL Co,.ltd.",
+ [3]byte{0, 193, 100}: "Cisco Systems, Inc",
+ [3]byte{0, 193, 177}: "Cisco Systems, Inc",
+ [3]byte{0, 194, 198}: "Intel Corporate",
+ [3]byte{0, 197, 219}: "Datatech Sistemas Digitales Avanzados SL",
+ [3]byte{0, 198, 16}: "Apple, Inc.",
+ [3]byte{0, 200, 139}: "Cisco Systems, Inc",
+ [3]byte{0, 202, 229}: "Cisco Systems, Inc",
+ [3]byte{0, 203, 0}: "Private",
+ [3]byte{0, 203, 189}: "Cambridge Broadband Networks Ltd.",
+ [3]byte{0, 204, 252}: "Cisco Systems, Inc",
+ [3]byte{0, 205, 144}: "MAS Elektronik AG",
+ [3]byte{0, 205, 254}: "Apple, Inc.",
+ [3]byte{0, 207, 28}: "Communication Machinery Corporation",
+ [3]byte{0, 208, 0}: "FERRAN SCIENTIFIC, INC.",
+ [3]byte{0, 208, 1}: "VST TECHNOLOGIES, INC.",
+ [3]byte{0, 208, 2}: "DITECH CORPORATION",
+ [3]byte{0, 208, 3}: "COMDA ENTERPRISES CORP.",
+ [3]byte{0, 208, 4}: "PENTACOM LTD.",
+ [3]byte{0, 208, 5}: "ZHS ZEITMANAGEMENTSYSTEME",
+ [3]byte{0, 208, 6}: "Cisco Systems, Inc",
+ [3]byte{0, 208, 7}: "MIC ASSOCIATES, INC.",
+ [3]byte{0, 208, 8}: "MACTELL CORPORATION",
+ [3]byte{0, 208, 9}: "HSING TECH. ENTERPRISE CO. LTD",
+ [3]byte{0, 208, 10}: "LANACCESS TELECOM S.A.",
+ [3]byte{0, 208, 11}: "RHK TECHNOLOGY, INC.",
+ [3]byte{0, 208, 12}: "SNIJDER MICRO SYSTEMS",
+ [3]byte{0, 208, 13}: "MICROMERITICS INSTRUMENT",
+ [3]byte{0, 208, 14}: "PLURIS, INC.",
+ [3]byte{0, 208, 15}: "SPEECH DESIGN GMBH",
+ [3]byte{0, 208, 16}: "CONVERGENT NETWORKS, INC.",
+ [3]byte{0, 208, 17}: "PRISM VIDEO, INC.",
+ [3]byte{0, 208, 18}: "GATEWORKS CORP.",
+ [3]byte{0, 208, 19}: "PRIMEX AEROSPACE COMPANY",
+ [3]byte{0, 208, 20}: "ROOT, INC.",
+ [3]byte{0, 208, 21}: "UNIVEX MICROTECHNOLOGY CORP.",
+ [3]byte{0, 208, 22}: "SCM MICROSYSTEMS, INC.",
+ [3]byte{0, 208, 23}: "SYNTECH INFORMATION CO., LTD.",
+ [3]byte{0, 208, 24}: "QWES. COM, INC.",
+ [3]byte{0, 208, 25}: "DAINIPPON SCREEN CORPORATE",
+ [3]byte{0, 208, 26}: "URMET TLC S.P.A.",
+ [3]byte{0, 208, 27}: "MIMAKI ENGINEERING CO., LTD.",
+ [3]byte{0, 208, 28}: "SBS TECHNOLOGIES,",
+ [3]byte{0, 208, 29}: "FURUNO ELECTRIC CO., LTD.",
+ [3]byte{0, 208, 30}: "PINGTEL CORP.",
+ [3]byte{0, 208, 31}: "Senetas Corporation Ltd",
+ [3]byte{0, 208, 32}: "AIM SYSTEM, INC.",
+ [3]byte{0, 208, 33}: "REGENT ELECTRONICS CORP.",
+ [3]byte{0, 208, 34}: "INCREDIBLE TECHNOLOGIES, INC.",
+ [3]byte{0, 208, 35}: "INFORTREND TECHNOLOGY, INC.",
+ [3]byte{0, 208, 36}: "Cognex Corporation",
+ [3]byte{0, 208, 37}: "XROSSTECH, INC.",
+ [3]byte{0, 208, 38}: "HIRSCHMANN AUSTRIA GMBH",
+ [3]byte{0, 208, 39}: "APPLIED AUTOMATION, INC.",
+ [3]byte{0, 208, 40}: "Harmonic, Inc",
+ [3]byte{0, 208, 41}: "WAKEFERN FOOD CORPORATION",
+ [3]byte{0, 208, 42}: "Voxent Systems Ltd.",
+ [3]byte{0, 208, 43}: "JETCELL, INC.",
+ [3]byte{0, 208, 44}: "CAMPBELL SCIENTIFIC, INC.",
+ [3]byte{0, 208, 45}: "ADEMCO",
+ [3]byte{0, 208, 46}: "COMMUNICATION AUTOMATION CORP.",
+ [3]byte{0, 208, 47}: "VLSI TECHNOLOGY INC.",
+ [3]byte{0, 208, 48}: "Safetran Systems Corp",
+ [3]byte{0, 208, 49}: "INDUSTRIAL LOGIC CORPORATION",
+ [3]byte{0, 208, 50}: "YANO ELECTRIC CO., LTD.",
+ [3]byte{0, 208, 51}: "DALIAN DAXIAN NETWORK",
+ [3]byte{0, 208, 52}: "ORMEC SYSTEMS CORP.",
+ [3]byte{0, 208, 53}: "BEHAVIOR TECH. COMPUTER CORP.",
+ [3]byte{0, 208, 54}: "TECHNOLOGY ATLANTA CORP.",
+ [3]byte{0, 208, 55}: "ARRIS Group, Inc.",
+ [3]byte{0, 208, 56}: "FIVEMERE, LTD.",
+ [3]byte{0, 208, 57}: "UTILICOM, INC.",
+ [3]byte{0, 208, 58}: "ZONEWORX, INC.",
+ [3]byte{0, 208, 59}: "VISION PRODUCTS PTY. LTD.",
+ [3]byte{0, 208, 60}: "Vieo, Inc.",
+ [3]byte{0, 208, 61}: "GALILEO TECHNOLOGY, LTD.",
+ [3]byte{0, 208, 62}: "ROCKETCHIPS, INC.",
+ [3]byte{0, 208, 63}: "AMERICAN COMMUNICATION",
+ [3]byte{0, 208, 64}: "SYSMATE CO., LTD.",
+ [3]byte{0, 208, 65}: "AMIGO TECHNOLOGY CO., LTD.",
+ [3]byte{0, 208, 66}: "MAHLO GMBH & CO. UG",
+ [3]byte{0, 208, 67}: "ZONAL RETAIL DATA SYSTEMS",
+ [3]byte{0, 208, 68}: "ALIDIAN NETWORKS, INC.",
+ [3]byte{0, 208, 69}: "KVASER AB",
+ [3]byte{0, 208, 70}: "DOLBY LABORATORIES, INC.",
+ [3]byte{0, 208, 71}: "XN TECHNOLOGIES",
+ [3]byte{0, 208, 72}: "ECTON, INC.",
+ [3]byte{0, 208, 73}: "IMPRESSTEK CO., LTD.",
+ [3]byte{0, 208, 74}: "PRESENCE TECHNOLOGY GMBH",
+ [3]byte{0, 208, 75}: "LA CIE GROUP S.A.",
+ [3]byte{0, 208, 76}: "EUROTEL TELECOM LTD.",
+ [3]byte{0, 208, 77}: "DIV OF RESEARCH & STATISTICS",
+ [3]byte{0, 208, 78}: "LOGIBAG",
+ [3]byte{0, 208, 79}: "BITRONICS, INC.",
+ [3]byte{0, 208, 80}: "ISKRATEL",
+ [3]byte{0, 208, 81}: "O2 MICRO, INC.",
+ [3]byte{0, 208, 82}: "ASCEND COMMUNICATIONS, INC.",
+ [3]byte{0, 208, 83}: "CONNECTED SYSTEMS",
+ [3]byte{0, 208, 84}: "SAS INSTITUTE INC.",
+ [3]byte{0, 208, 85}: "KATHREIN-WERKE KG",
+ [3]byte{0, 208, 86}: "SOMAT CORPORATION",
+ [3]byte{0, 208, 87}: "ULTRAK, INC.",
+ [3]byte{0, 208, 88}: "Cisco Systems, Inc",
+ [3]byte{0, 208, 89}: "AMBIT MICROSYSTEMS CORP.",
+ [3]byte{0, 208, 90}: "SYMBIONICS, LTD.",
+ [3]byte{0, 208, 91}: "ACROLOOP MOTION CONTROL",
+ [3]byte{0, 208, 92}: "KATHREIN TechnoTrend GmbH",
+ [3]byte{0, 208, 93}: "INTELLIWORXX, INC.",
+ [3]byte{0, 208, 94}: "STRATABEAM TECHNOLOGY, INC.",
+ [3]byte{0, 208, 95}: "VALCOM, INC.",
+ [3]byte{0, 208, 96}: "Panasonic Europe Ltd.",
+ [3]byte{0, 208, 97}: "TREMON ENTERPRISES CO., LTD.",
+ [3]byte{0, 208, 98}: "DIGIGRAM",
+ [3]byte{0, 208, 99}: "Cisco Systems, Inc",
+ [3]byte{0, 208, 100}: "MULTITEL",
+ [3]byte{0, 208, 101}: "TOKO ELECTRIC",
+ [3]byte{0, 208, 102}: "WINTRISS ENGINEERING CORP.",
+ [3]byte{0, 208, 103}: "CAMPIO COMMUNICATIONS",
+ [3]byte{0, 208, 104}: "IWILL CORPORATION",
+ [3]byte{0, 208, 105}: "TECHNOLOGIC SYSTEMS",
+ [3]byte{0, 208, 106}: "LINKUP SYSTEMS CORPORATION",
+ [3]byte{0, 208, 107}: "SR TELECOM INC.",
+ [3]byte{0, 208, 108}: "SHAREWAVE, INC.",
+ [3]byte{0, 208, 109}: "ACRISON, INC.",
+ [3]byte{0, 208, 110}: "TRENDVIEW RECORDERS LTD.",
+ [3]byte{0, 208, 111}: "KMC CONTROLS",
+ [3]byte{0, 208, 112}: "LONG WELL ELECTRONICS CORP.",
+ [3]byte{0, 208, 113}: "ECHELON CORP.",
+ [3]byte{0, 208, 114}: "BROADLOGIC",
+ [3]byte{0, 208, 115}: "ACN ADVANCED COMMUNICATIONS",
+ [3]byte{0, 208, 116}: "TAQUA SYSTEMS, INC.",
+ [3]byte{0, 208, 117}: "ALARIS MEDICAL SYSTEMS, INC.",
+ [3]byte{0, 208, 118}: "Bank of America",
+ [3]byte{0, 208, 119}: "LUCENT TECHNOLOGIES",
+ [3]byte{0, 208, 120}: "Eltex of Sweden AB",
+ [3]byte{0, 208, 121}: "Cisco Systems, Inc",
+ [3]byte{0, 208, 122}: "AMAQUEST COMPUTER CORP.",
+ [3]byte{0, 208, 123}: "COMCAM INTERNATIONAL INC",
+ [3]byte{0, 208, 124}: "KOYO ELECTRONICS INC. CO.,LTD.",
+ [3]byte{0, 208, 125}: "COSINE COMMUNICATIONS",
+ [3]byte{0, 208, 126}: "KEYCORP LTD.",
+ [3]byte{0, 208, 127}: "STRATEGY & TECHNOLOGY, LIMITED",
+ [3]byte{0, 208, 128}: "EXABYTE CORPORATION",
+ [3]byte{0, 208, 129}: "RTD Embedded Technologies, Inc.",
+ [3]byte{0, 208, 130}: "IOWAVE INC.",
+ [3]byte{0, 208, 131}: "INVERTEX, INC.",
+ [3]byte{0, 208, 132}: "NEXCOMM SYSTEMS, INC.",
+ [3]byte{0, 208, 133}: "OTIS ELEVATOR COMPANY",
+ [3]byte{0, 208, 134}: "FOVEON, INC.",
+ [3]byte{0, 208, 135}: "MICROFIRST INC.",
+ [3]byte{0, 208, 136}: "ARRIS Group, Inc.",
+ [3]byte{0, 208, 137}: "DYNACOLOR, INC.",
+ [3]byte{0, 208, 138}: "PHOTRON USA",
+ [3]byte{0, 208, 139}: "ADVA Optical Networking Ltd.",
+ [3]byte{0, 208, 140}: "GENOA TECHNOLOGY, INC.",
+ [3]byte{0, 208, 141}: "PHOENIX GROUP, INC.",
+ [3]byte{0, 208, 142}: "Grass Valley, A Belden Brand",
+ [3]byte{0, 208, 143}: "ARDENT TECHNOLOGIES, INC.",
+ [3]byte{0, 208, 144}: "Cisco Systems, Inc",
+ [3]byte{0, 208, 145}: "SMARTSAN SYSTEMS, INC.",
+ [3]byte{0, 208, 146}: "GLENAYRE WESTERN MULTIPLEX",
+ [3]byte{0, 208, 147}: "TQ - COMPONENTS GMBH",
+ [3]byte{0, 208, 148}: "Seeion Control LLC",
+ [3]byte{0, 208, 149}: "Alcatel-Lucent Enterprise",
+ [3]byte{0, 208, 150}: "3COM EUROPE LTD.",
+ [3]byte{0, 208, 151}: "Cisco Systems, Inc",
+ [3]byte{0, 208, 152}: "Photon Dynamics Canada Inc.",
+ [3]byte{0, 208, 153}: "Elcard Wireless Systems Oy",
+ [3]byte{0, 208, 154}: "FILANET CORPORATION",
+ [3]byte{0, 208, 155}: "SPECTEL LTD.",
+ [3]byte{0, 208, 156}: "KAPADIA COMMUNICATIONS",
+ [3]byte{0, 208, 157}: "VERIS INDUSTRIES",
+ [3]byte{0, 208, 158}: "2Wire Inc",
+ [3]byte{0, 208, 159}: "NOVTEK TEST SYSTEMS",
+ [3]byte{0, 208, 160}: "MIPS DENMARK",
+ [3]byte{0, 208, 161}: "OSKAR VIERLING GMBH + CO. KG",
+ [3]byte{0, 208, 162}: "INTEGRATED DEVICE",
+ [3]byte{0, 208, 163}: "VOCAL DATA, INC.",
+ [3]byte{0, 208, 164}: "ALANTRO COMMUNICATIONS",
+ [3]byte{0, 208, 165}: "AMERICAN ARIUM",
+ [3]byte{0, 208, 166}: "LANBIRD TECHNOLOGY CO., LTD.",
+ [3]byte{0, 208, 167}: "TOKYO SOKKI KENKYUJO CO., LTD.",
+ [3]byte{0, 208, 168}: "NETWORK ENGINES, INC.",
+ [3]byte{0, 208, 169}: "SHINANO KENSHI CO., LTD.",
+ [3]byte{0, 208, 170}: "CHASE COMMUNICATIONS",
+ [3]byte{0, 208, 171}: "DELTAKABEL TELECOM CV",
+ [3]byte{0, 208, 172}: "Commscope, Inc",
+ [3]byte{0, 208, 173}: "TL INDUSTRIES",
+ [3]byte{0, 208, 174}: "ORESIS COMMUNICATIONS, INC.",
+ [3]byte{0, 208, 175}: "CUTLER-HAMMER, INC.",
+ [3]byte{0, 208, 176}: "BITSWITCH LTD.",
+ [3]byte{0, 208, 177}: "OMEGA ELECTRONICS SA",
+ [3]byte{0, 208, 178}: "Xiotech Corporation",
+ [3]byte{0, 208, 179}: "DRS Technologies Canada Ltd",
+ [3]byte{0, 208, 180}: "KATSUJIMA CO., LTD.",
+ [3]byte{0, 208, 181}: "IPricot formerly DotCom",
+ [3]byte{0, 208, 182}: "CRESCENT NETWORKS, INC.",
+ [3]byte{0, 208, 183}: "Intel Corporation",
+ [3]byte{0, 208, 184}: "Iomega Corporation",
+ [3]byte{0, 208, 185}: "MICROTEK INTERNATIONAL, INC.",
+ [3]byte{0, 208, 186}: "Cisco Systems, Inc",
+ [3]byte{0, 208, 187}: "Cisco Systems, Inc",
+ [3]byte{0, 208, 188}: "Cisco Systems, Inc",
+ [3]byte{0, 208, 189}: "Lattice Semiconductor Corp. (LPA)",
+ [3]byte{0, 208, 190}: "EMUTEC INC.",
+ [3]byte{0, 208, 191}: "PIVOTAL TECHNOLOGIES",
+ [3]byte{0, 208, 192}: "Cisco Systems, Inc",
+ [3]byte{0, 208, 193}: "HARMONIC DATA SYSTEMS, LTD.",
+ [3]byte{0, 208, 194}: "BALTHAZAR TECHNOLOGY AB",
+ [3]byte{0, 208, 195}: "VIVID TECHNOLOGY PTE, LTD.",
+ [3]byte{0, 208, 196}: "TERATECH CORPORATION",
+ [3]byte{0, 208, 197}: "COMPUTATIONAL SYSTEMS, INC.",
+ [3]byte{0, 208, 198}: "THOMAS & BETTS CORP.",
+ [3]byte{0, 208, 199}: "PATHWAY, INC.",
+ [3]byte{0, 208, 200}: "Prevas A/S",
+ [3]byte{0, 208, 201}: "ADVANTECH CO., LTD.",
+ [3]byte{0, 208, 202}: "Intrinsyc Software International Inc.",
+ [3]byte{0, 208, 203}: "DASAN CO., LTD.",
+ [3]byte{0, 208, 204}: "TECHNOLOGIES LYRE INC.",
+ [3]byte{0, 208, 205}: "ATAN TECHNOLOGY INC.",
+ [3]byte{0, 208, 206}: "ASYST ELECTRONIC",
+ [3]byte{0, 208, 207}: "MORETON BAY",
+ [3]byte{0, 208, 208}: "ZHONGXING TELECOM LTD.",
+ [3]byte{0, 208, 209}: "Sycamore Networks",
+ [3]byte{0, 208, 210}: "EPILOG CORPORATION",
+ [3]byte{0, 208, 211}: "Cisco Systems, Inc",
+ [3]byte{0, 208, 212}: "V-BITS, INC.",
+ [3]byte{0, 208, 213}: "GRUNDIG AG",
+ [3]byte{0, 208, 214}: "AETHRA TELECOMUNICAZIONI",
+ [3]byte{0, 208, 215}: "B2C2, INC.",
+ [3]byte{0, 208, 216}: "3Com Corporation",
+ [3]byte{0, 208, 217}: "DEDICATED MICROCOMPUTERS",
+ [3]byte{0, 208, 218}: "TAICOM DATA SYSTEMS CO., LTD.",
+ [3]byte{0, 208, 219}: "MCQUAY INTERNATIONAL",
+ [3]byte{0, 208, 220}: "MODULAR MINING SYSTEMS, INC.",
+ [3]byte{0, 208, 221}: "SUNRISE TELECOM, INC.",
+ [3]byte{0, 208, 222}: "PHILIPS MULTIMEDIA NETWORK",
+ [3]byte{0, 208, 223}: "KUZUMI ELECTRONICS, INC.",
+ [3]byte{0, 208, 224}: "DOOIN ELECTRONICS CO.",
+ [3]byte{0, 208, 225}: "AVIONITEK ISRAEL INC.",
+ [3]byte{0, 208, 226}: "MRT MICRO, INC.",
+ [3]byte{0, 208, 227}: "ELE-CHEM ENGINEERING CO., LTD.",
+ [3]byte{0, 208, 228}: "Cisco Systems, Inc",
+ [3]byte{0, 208, 229}: "SOLIDUM SYSTEMS CORP.",
+ [3]byte{0, 208, 230}: "IBOND INC.",
+ [3]byte{0, 208, 231}: "VCON TELECOMMUNICATION LTD.",
+ [3]byte{0, 208, 232}: "MAC SYSTEM CO., LTD.",
+ [3]byte{0, 208, 233}: "Advantage Century Telecommunication Corp.",
+ [3]byte{0, 208, 234}: "NEXTONE COMMUNICATIONS, INC.",
+ [3]byte{0, 208, 235}: "LIGHTERA NETWORKS, INC.",
+ [3]byte{0, 208, 236}: "NAKAYO Inc",
+ [3]byte{0, 208, 237}: "XIOX",
+ [3]byte{0, 208, 238}: "DICTAPHONE CORPORATION",
+ [3]byte{0, 208, 239}: "IGT",
+ [3]byte{0, 208, 240}: "CONVISION TECHNOLOGY GMBH",
+ [3]byte{0, 208, 241}: "SEGA ENTERPRISES, LTD.",
+ [3]byte{0, 208, 242}: "MONTEREY NETWORKS",
+ [3]byte{0, 208, 243}: "SOLARI DI UDINE SPA",
+ [3]byte{0, 208, 244}: "CARINTHIAN TECH INSTITUTE",
+ [3]byte{0, 208, 245}: "ORANGE MICRO, INC.",
+ [3]byte{0, 208, 246}: "Nokia",
+ [3]byte{0, 208, 247}: "NEXT NETS CORPORATION",
+ [3]byte{0, 208, 248}: "FUJIAN STAR TERMINAL",
+ [3]byte{0, 208, 249}: "ACUTE COMMUNICATIONS CORP.",
+ [3]byte{0, 208, 250}: "Thales e-Security Ltd.",
+ [3]byte{0, 208, 251}: "TEK MICROSYSTEMS, INCORPORATED",
+ [3]byte{0, 208, 252}: "GRANITE MICROSYSTEMS",
+ [3]byte{0, 208, 253}: "OPTIMA TELE.COM, INC.",
+ [3]byte{0, 208, 254}: "ASTRAL POINT",
+ [3]byte{0, 208, 255}: "Cisco Systems, Inc",
+ [3]byte{0, 209, 28}: "ACETEL",
+ [3]byte{0, 211, 24}: "SPG Controls",
+ [3]byte{0, 211, 141}: "Hotel Technology Next Generation",
+ [3]byte{0, 214, 50}: "GE Energy",
+ [3]byte{0, 215, 143}: "Cisco Systems, Inc",
+ [3]byte{0, 217, 209}: "Sony Interactive Entertainment Inc.",
+ [3]byte{0, 218, 85}: "Cisco Systems, Inc",
+ [3]byte{0, 219, 30}: "Albedo Telecom SL",
+ [3]byte{0, 219, 69}: "THAMWAY CO.,LTD.",
+ [3]byte{0, 219, 112}: "Apple, Inc.",
+ [3]byte{0, 219, 223}: "Intel Corporate",
+ [3]byte{0, 221, 0}: "UNGERMANN-BASS INC.",
+ [3]byte{0, 221, 1}: "UNGERMANN-BASS INC.",
+ [3]byte{0, 221, 2}: "UNGERMANN-BASS INC.",
+ [3]byte{0, 221, 3}: "UNGERMANN-BASS INC.",
+ [3]byte{0, 221, 4}: "UNGERMANN-BASS INC.",
+ [3]byte{0, 221, 5}: "UNGERMANN-BASS INC.",
+ [3]byte{0, 221, 6}: "UNGERMANN-BASS INC.",
+ [3]byte{0, 221, 7}: "UNGERMANN-BASS INC.",
+ [3]byte{0, 221, 8}: "UNGERMANN-BASS INC.",
+ [3]byte{0, 221, 9}: "UNGERMANN-BASS INC.",
+ [3]byte{0, 221, 10}: "UNGERMANN-BASS INC.",
+ [3]byte{0, 221, 11}: "UNGERMANN-BASS INC.",
+ [3]byte{0, 221, 12}: "UNGERMANN-BASS INC.",
+ [3]byte{0, 221, 13}: "UNGERMANN-BASS INC.",
+ [3]byte{0, 221, 14}: "UNGERMANN-BASS INC.",
+ [3]byte{0, 221, 15}: "UNGERMANN-BASS INC.",
+ [3]byte{0, 222, 251}: "Cisco Systems, Inc",
+ [3]byte{0, 224, 0}: "FUJITSU LIMITED",
+ [3]byte{0, 224, 1}: "STRAND LIGHTING LIMITED",
+ [3]byte{0, 224, 2}: "CROSSROADS SYSTEMS, INC.",
+ [3]byte{0, 224, 3}: "NOKIA WIRELESS BUSINESS COMMUN",
+ [3]byte{0, 224, 4}: "PMC-SIERRA, INC.",
+ [3]byte{0, 224, 5}: "TECHNICAL CORP.",
+ [3]byte{0, 224, 6}: "SILICON INTEGRATED SYS. CORP.",
+ [3]byte{0, 224, 7}: "Avaya ECS Ltd",
+ [3]byte{0, 224, 8}: "AMAZING CONTROLS! INC.",
+ [3]byte{0, 224, 9}: "MARATHON TECHNOLOGIES CORP.",
+ [3]byte{0, 224, 10}: "DIBA, INC.",
+ [3]byte{0, 224, 11}: "ROOFTOP COMMUNICATIONS CORP.",
+ [3]byte{0, 224, 12}: "MOTOROLA",
+ [3]byte{0, 224, 13}: "RADIANT SYSTEMS",
+ [3]byte{0, 224, 14}: "AVALON IMAGING SYSTEMS, INC.",
+ [3]byte{0, 224, 15}: "Shanghai Baud Data Communication Co.,Ltd.",
+ [3]byte{0, 224, 16}: "HESS SB-AUTOMATENBAU GmbH",
+ [3]byte{0, 224, 17}: "UNIDEN CORPORATION",
+ [3]byte{0, 224, 18}: "PLUTO TECHNOLOGIES INTERNATIONAL INC.",
+ [3]byte{0, 224, 19}: "EASTERN ELECTRONIC CO., LTD.",
+ [3]byte{0, 224, 20}: "Cisco Systems, Inc",
+ [3]byte{0, 224, 21}: "HEIWA CORPORATION",
+ [3]byte{0, 224, 22}: "RAPID CITY COMMUNICATIONS",
+ [3]byte{0, 224, 23}: "EXXACT GmbH",
+ [3]byte{0, 224, 24}: "ASUSTek COMPUTER INC.",
+ [3]byte{0, 224, 25}: "ING. GIORDANO ELETTRONICA",
+ [3]byte{0, 224, 26}: "COMTEC SYSTEMS. CO., LTD.",
+ [3]byte{0, 224, 27}: "SPHERE COMMUNICATIONS, INC.",
+ [3]byte{0, 224, 28}: "Cradlepoint, Inc",
+ [3]byte{0, 224, 29}: "WebTV NETWORKS, INC.",
+ [3]byte{0, 224, 30}: "Cisco Systems, Inc",
+ [3]byte{0, 224, 31}: "AVIDIA Systems, Inc.",
+ [3]byte{0, 224, 32}: "TECNOMEN OY",
+ [3]byte{0, 224, 33}: "FREEGATE CORP.",
+ [3]byte{0, 224, 34}: "Analog Devices, Inc.",
+ [3]byte{0, 224, 35}: "TELRAD",
+ [3]byte{0, 224, 36}: "GADZOOX NETWORKS",
+ [3]byte{0, 224, 37}: "dit Co., Ltd.",
+ [3]byte{0, 224, 38}: "Redlake MASD LLC",
+ [3]byte{0, 224, 39}: "DUX, INC.",
+ [3]byte{0, 224, 40}: "APTIX CORPORATION",
+ [3]byte{0, 224, 41}: "STANDARD MICROSYSTEMS CORP.",
+ [3]byte{0, 224, 42}: "TANDBERG TELEVISION AS",
+ [3]byte{0, 224, 43}: "Extreme Networks, Inc.",
+ [3]byte{0, 224, 44}: "AST COMPUTER",
+ [3]byte{0, 224, 45}: "InnoMediaLogic, Inc.",
+ [3]byte{0, 224, 46}: "SPC ELECTRONICS CORPORATION",
+ [3]byte{0, 224, 47}: "MCNS HOLDINGS, L.P.",
+ [3]byte{0, 224, 48}: "MELITA INTERNATIONAL CORP.",
+ [3]byte{0, 224, 49}: "HAGIWARA ELECTRIC CO., LTD.",
+ [3]byte{0, 224, 50}: "MISYS FINANCIAL SYSTEMS, LTD.",
+ [3]byte{0, 224, 51}: "E.E.P.D. GmbH",
+ [3]byte{0, 224, 52}: "Cisco Systems, Inc",
+ [3]byte{0, 224, 53}: "Artesyn Embedded Technologies",
+ [3]byte{0, 224, 54}: "PIONEER CORPORATION",
+ [3]byte{0, 224, 55}: "CENTURY CORPORATION",
+ [3]byte{0, 224, 56}: "PROXIMA CORPORATION",
+ [3]byte{0, 224, 57}: "PARADYNE CORP.",
+ [3]byte{0, 224, 58}: "Cabletron Systems, Inc.",
+ [3]byte{0, 224, 59}: "PROMINET CORPORATION",
+ [3]byte{0, 224, 60}: "AdvanSys",
+ [3]byte{0, 224, 61}: "FOCON ELECTRONIC SYSTEMS A/S",
+ [3]byte{0, 224, 62}: "ALFATECH, INC.",
+ [3]byte{0, 224, 63}: "JATON CORPORATION",
+ [3]byte{0, 224, 64}: "DeskStation Technology, Inc.",
+ [3]byte{0, 224, 65}: "CSPI",
+ [3]byte{0, 224, 66}: "Pacom Systems Ltd.",
+ [3]byte{0, 224, 67}: "VitalCom",
+ [3]byte{0, 224, 68}: "LSICS CORPORATION",
+ [3]byte{0, 224, 69}: "TOUCHWAVE, INC.",
+ [3]byte{0, 224, 70}: "BENTLY NEVADA CORP.",
+ [3]byte{0, 224, 71}: "InFocus Corporation",
+ [3]byte{0, 224, 72}: "SDL COMMUNICATIONS, INC.",
+ [3]byte{0, 224, 73}: "MICROWI ELECTRONIC GmbH",
+ [3]byte{0, 224, 74}: "ZX Technologies, Inc",
+ [3]byte{0, 224, 75}: "JUMP INDUSTRIELLE COMPUTERTECHNIK GmbH",
+ [3]byte{0, 224, 76}: "REALTEK SEMICONDUCTOR CORP.",
+ [3]byte{0, 224, 77}: "INTERNET INITIATIVE JAPAN, INC",
+ [3]byte{0, 224, 78}: "SANYO DENKI CO., LTD.",
+ [3]byte{0, 224, 79}: "Cisco Systems, Inc",
+ [3]byte{0, 224, 80}: "EXECUTONE INFORMATION SYSTEMS, INC.",
+ [3]byte{0, 224, 81}: "TALX CORPORATION",
+ [3]byte{0, 224, 82}: "Brocade Communications Systems, Inc.",
+ [3]byte{0, 224, 83}: "CELLPORT LABS, INC.",
+ [3]byte{0, 224, 84}: "KODAI HITEC CO., LTD.",
+ [3]byte{0, 224, 85}: "INGENIERIA ELECTRONICA COMERCIAL INELCOM S.A.",
+ [3]byte{0, 224, 86}: "HOLONTECH CORPORATION",
+ [3]byte{0, 224, 87}: "HAN MICROTELECOM. CO., LTD.",
+ [3]byte{0, 224, 88}: "PHASE ONE DENMARK A/S",
+ [3]byte{0, 224, 89}: "CONTROLLED ENVIRONMENTS, LTD.",
+ [3]byte{0, 224, 90}: "GALEA NETWORK SECURITY",
+ [3]byte{0, 224, 91}: "WEST END SYSTEMS CORP.",
+ [3]byte{0, 224, 92}: "Panasonic Healthcare Co., Ltd.",
+ [3]byte{0, 224, 93}: "UNITEC CO., LTD.",
+ [3]byte{0, 224, 94}: "JAPAN AVIATION ELECTRONICS INDUSTRY, LTD.",
+ [3]byte{0, 224, 95}: "e-Net, Inc.",
+ [3]byte{0, 224, 96}: "SHERWOOD",
+ [3]byte{0, 224, 97}: "EdgePoint Networks, Inc.",
+ [3]byte{0, 224, 98}: "HOST ENGINEERING",
+ [3]byte{0, 224, 99}: "Cabletron Systems, Inc.",
+ [3]byte{0, 224, 100}: "SAMSUNG ELECTRONICS",
+ [3]byte{0, 224, 101}: "OPTICAL ACCESS INTERNATIONAL",
+ [3]byte{0, 224, 102}: "ProMax Systems, Inc.",
+ [3]byte{0, 224, 103}: "eac AUTOMATION-CONSULTING GmbH",
+ [3]byte{0, 224, 104}: "MERRIMAC SYSTEMS INC.",
+ [3]byte{0, 224, 105}: "JAYCOR",
+ [3]byte{0, 224, 106}: "KAPSCH AG",
+ [3]byte{0, 224, 107}: "W&G SPECIAL PRODUCTS",
+ [3]byte{0, 224, 108}: "Ultra Electronics Command & Control Systems",
+ [3]byte{0, 224, 109}: "COMPUWARE CORPORATION",
+ [3]byte{0, 224, 110}: "FAR SYSTEMS S.p.A.",
+ [3]byte{0, 224, 111}: "ARRIS Group, Inc.",
+ [3]byte{0, 224, 112}: "DH TECHNOLOGY",
+ [3]byte{0, 224, 113}: "EPIS MICROCOMPUTER",
+ [3]byte{0, 224, 114}: "LYNK",
+ [3]byte{0, 224, 115}: "NATIONAL AMUSEMENT NETWORK, INC.",
+ [3]byte{0, 224, 116}: "TIERNAN COMMUNICATIONS, INC.",
+ [3]byte{0, 224, 117}: "Verilink Corporation",
+ [3]byte{0, 224, 118}: "DEVELOPMENT CONCEPTS, INC.",
+ [3]byte{0, 224, 119}: "WEBGEAR, INC.",
+ [3]byte{0, 224, 120}: "BERKELEY NETWORKS",
+ [3]byte{0, 224, 121}: "A.T.N.R.",
+ [3]byte{0, 224, 122}: "MIKRODIDAKT AB",
+ [3]byte{0, 224, 123}: "BAY NETWORKS",
+ [3]byte{0, 224, 124}: "METTLER-TOLEDO, INC.",
+ [3]byte{0, 224, 125}: "NETRONIX, INC.",
+ [3]byte{0, 224, 126}: "WALT DISNEY IMAGINEERING",
+ [3]byte{0, 224, 127}: "LOGISTISTEM s.r.l.",
+ [3]byte{0, 224, 128}: "CONTROL RESOURCES CORPORATION",
+ [3]byte{0, 224, 129}: "TYAN COMPUTER CORP.",
+ [3]byte{0, 224, 130}: "ANERMA",
+ [3]byte{0, 224, 131}: "JATO TECHNOLOGIES, INC.",
+ [3]byte{0, 224, 132}: "COMPULITE R&D",
+ [3]byte{0, 224, 133}: "GLOBAL MAINTECH, INC.",
+ [3]byte{0, 224, 134}: "Emerson Network Power, Avocent Division",
+ [3]byte{0, 224, 135}: "LeCroy - Networking Productions Division",
+ [3]byte{0, 224, 136}: "LTX-Credence CORPORATION",
+ [3]byte{0, 224, 137}: "ION Networks, Inc.",
+ [3]byte{0, 224, 138}: "GEC AVERY, LTD.",
+ [3]byte{0, 224, 139}: "QLogic Corporation",
+ [3]byte{0, 224, 140}: "NEOPARADIGM LABS, INC.",
+ [3]byte{0, 224, 141}: "PRESSURE SYSTEMS, INC.",
+ [3]byte{0, 224, 142}: "UTSTARCOM",
+ [3]byte{0, 224, 143}: "Cisco Systems, Inc",
+ [3]byte{0, 224, 144}: "BECKMAN LAB. AUTOMATION DIV.",
+ [3]byte{0, 224, 145}: "LG Electronics",
+ [3]byte{0, 224, 146}: "ADMTEK INCORPORATED",
+ [3]byte{0, 224, 147}: "ACKFIN NETWORKS",
+ [3]byte{0, 224, 148}: "OSAI SRL",
+ [3]byte{0, 224, 149}: "ADVANCED-VISION TECHNOLGIES CORP.",
+ [3]byte{0, 224, 150}: "SHIMADZU CORPORATION",
+ [3]byte{0, 224, 151}: "CARRIER ACCESS CORPORATION",
+ [3]byte{0, 224, 152}: "AboCom",
+ [3]byte{0, 224, 153}: "SAMSON AG",
+ [3]byte{0, 224, 154}: "Positron Inc.",
+ [3]byte{0, 224, 155}: "ENGAGE NETWORKS, INC.",
+ [3]byte{0, 224, 156}: "MII",
+ [3]byte{0, 224, 157}: "SARNOFF CORPORATION",
+ [3]byte{0, 224, 158}: "Quantum Corporation",
+ [3]byte{0, 224, 159}: "PIXEL VISION",
+ [3]byte{0, 224, 160}: "WILTRON CO.",
+ [3]byte{0, 224, 161}: "HIMA PAUL HILDEBRANDT GmbH Co. KG",
+ [3]byte{0, 224, 162}: "MICROSLATE INC.",
+ [3]byte{0, 224, 163}: "Cisco Systems, Inc",
+ [3]byte{0, 224, 164}: "ESAOTE S.p.A.",
+ [3]byte{0, 224, 165}: "ComCore Semiconductor, Inc.",
+ [3]byte{0, 224, 166}: "TELOGY NETWORKS, INC.",
+ [3]byte{0, 224, 167}: "IPC INFORMATION SYSTEMS, INC.",
+ [3]byte{0, 224, 168}: "SAT GmbH & Co.",
+ [3]byte{0, 224, 169}: "FUNAI ELECTRIC CO., LTD.",
+ [3]byte{0, 224, 170}: "ELECTROSONIC LTD.",
+ [3]byte{0, 224, 171}: "DIMAT S.A.",
+ [3]byte{0, 224, 172}: "MIDSCO, INC.",
+ [3]byte{0, 224, 173}: "EES TECHNOLOGY, LTD.",
+ [3]byte{0, 224, 174}: "XAQTI CORPORATION",
+ [3]byte{0, 224, 175}: "GENERAL DYNAMICS INFORMATION SYSTEMS",
+ [3]byte{0, 224, 176}: "Cisco Systems, Inc",
+ [3]byte{0, 224, 177}: "Alcatel-Lucent Enterprise",
+ [3]byte{0, 224, 178}: "TELMAX COMMUNICATIONS CORP.",
+ [3]byte{0, 224, 179}: "EtherWAN Systems, Inc.",
+ [3]byte{0, 224, 180}: "TECHNO SCOPE CO., LTD.",
+ [3]byte{0, 224, 181}: "ARDENT COMMUNICATIONS CORP.",
+ [3]byte{0, 224, 182}: "Entrada Networks",
+ [3]byte{0, 224, 183}: "PI GROUP, LTD.",
+ [3]byte{0, 224, 184}: "GATEWAY 2000",
+ [3]byte{0, 224, 185}: "BYAS SYSTEMS",
+ [3]byte{0, 224, 186}: "BERGHOF AUTOMATIONSTECHNIK GmbH",
+ [3]byte{0, 224, 187}: "NBX CORPORATION",
+ [3]byte{0, 224, 188}: "SYMON COMMUNICATIONS, INC.",
+ [3]byte{0, 224, 189}: "INTERFACE SYSTEMS, INC.",
+ [3]byte{0, 224, 190}: "GENROCO INTERNATIONAL, INC.",
+ [3]byte{0, 224, 191}: "TORRENT NETWORKING TECHNOLOGIES CORP.",
+ [3]byte{0, 224, 192}: "SEIWA ELECTRIC MFG. CO., LTD.",
+ [3]byte{0, 224, 193}: "MEMOREX TELEX JAPAN, LTD.",
+ [3]byte{0, 224, 194}: "NECSY S.p.A.",
+ [3]byte{0, 224, 195}: "SAKAI SYSTEM DEVELOPMENT CORP.",
+ [3]byte{0, 224, 196}: "HORNER ELECTRIC, INC.",
+ [3]byte{0, 224, 197}: "BCOM ELECTRONICS INC.",
+ [3]byte{0, 224, 198}: "LINK2IT, L.L.C.",
+ [3]byte{0, 224, 199}: "EUROTECH SRL",
+ [3]byte{0, 224, 200}: "VIRTUAL ACCESS, LTD.",
+ [3]byte{0, 224, 201}: "AutomatedLogic Corporation",
+ [3]byte{0, 224, 202}: "BEST DATA PRODUCTS",
+ [3]byte{0, 224, 203}: "RESON, INC.",
+ [3]byte{0, 224, 204}: "HERO SYSTEMS, LTD.",
+ [3]byte{0, 224, 205}: "SAAB SENSIS CORPORATION",
+ [3]byte{0, 224, 206}: "ARN",
+ [3]byte{0, 224, 207}: "INTEGRATED DEVICE",
+ [3]byte{0, 224, 208}: "NETSPEED, INC.",
+ [3]byte{0, 224, 209}: "TELSIS LIMITED",
+ [3]byte{0, 224, 210}: "VERSANET COMMUNICATIONS, INC.",
+ [3]byte{0, 224, 211}: "DATENTECHNIK GmbH",
+ [3]byte{0, 224, 212}: "EXCELLENT COMPUTER",
+ [3]byte{0, 224, 213}: "Emulex Corporation",
+ [3]byte{0, 224, 214}: "COMPUTER & COMMUNICATION RESEARCH LAB.",
+ [3]byte{0, 224, 215}: "SUNSHINE ELECTRONICS, INC.",
+ [3]byte{0, 224, 216}: "LANBit Computer, Inc.",
+ [3]byte{0, 224, 217}: "TAZMO CO., LTD.",
+ [3]byte{0, 224, 218}: "Alcatel-Lucent Enterprise",
+ [3]byte{0, 224, 219}: "ViaVideo Communications, Inc.",
+ [3]byte{0, 224, 220}: "NEXWARE CORP.",
+ [3]byte{0, 224, 221}: "Zenith Electronics Corporation",
+ [3]byte{0, 224, 222}: "DATAX NV",
+ [3]byte{0, 224, 223}: "KEYMILE GmbH",
+ [3]byte{0, 224, 224}: "SI ELECTRONICS, LTD.",
+ [3]byte{0, 224, 225}: "G2 NETWORKS, INC.",
+ [3]byte{0, 224, 226}: "INNOVA CORP.",
+ [3]byte{0, 224, 227}: "SK-ELEKTRONIK GMBH",
+ [3]byte{0, 224, 228}: "FANUC ROBOTICS NORTH AMERICA, Inc.",
+ [3]byte{0, 224, 229}: "CINCO NETWORKS, INC.",
+ [3]byte{0, 224, 230}: "INCAA Computers",
+ [3]byte{0, 224, 231}: "RAYTHEON E-SYSTEMS, INC.",
+ [3]byte{0, 224, 232}: "GRETACODER Data Systems AG",
+ [3]byte{0, 224, 233}: "DATA LABS, INC.",
+ [3]byte{0, 224, 234}: "INNOVAT COMMUNICATIONS, INC.",
+ [3]byte{0, 224, 235}: "DIGICOM SYSTEMS, INCORPORATED",
+ [3]byte{0, 224, 236}: "CELESTICA INC.",
+ [3]byte{0, 224, 237}: "SILICOM, LTD.",
+ [3]byte{0, 224, 238}: "MAREL HF",
+ [3]byte{0, 224, 239}: "DIONEX",
+ [3]byte{0, 224, 240}: "ABLER TECHNOLOGY, INC.",
+ [3]byte{0, 224, 241}: "THAT CORPORATION",
+ [3]byte{0, 224, 242}: "ARLOTTO COMNET, INC.",
+ [3]byte{0, 224, 243}: "WebSprint Communications, Inc.",
+ [3]byte{0, 224, 244}: "INSIDE Technology A/S",
+ [3]byte{0, 224, 245}: "TELES AG",
+ [3]byte{0, 224, 246}: "DECISION EUROPE",
+ [3]byte{0, 224, 247}: "Cisco Systems, Inc",
+ [3]byte{0, 224, 248}: "DICNA CONTROL AB",
+ [3]byte{0, 224, 249}: "Cisco Systems, Inc",
+ [3]byte{0, 224, 250}: "TRL TECHNOLOGY, LTD.",
+ [3]byte{0, 224, 251}: "LEIGHTRONIX, INC.",
+ [3]byte{0, 224, 252}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{0, 224, 253}: "A-TREND TECHNOLOGY CO., LTD.",
+ [3]byte{0, 224, 254}: "Cisco Systems, Inc",
+ [3]byte{0, 224, 255}: "SECURITY DYNAMICS TECHNOLOGIES, Inc.",
+ [3]byte{0, 225, 109}: "Cisco Systems, Inc",
+ [3]byte{0, 225, 117}: "AK-Systems Ltd",
+ [3]byte{0, 225, 140}: "Intel Corporate",
+ [3]byte{0, 227, 178}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 228, 0}: "Sichuan Changhong Electric Ltd.",
+ [3]byte{0, 230, 102}: "ARIMA Communications Corp.",
+ [3]byte{0, 230, 211}: "NIXDORF COMPUTER CORP.",
+ [3]byte{0, 230, 232}: "Netzin Technology Corporation,.Ltd.",
+ [3]byte{0, 232, 171}: "Meggitt Training Systems, Inc.",
+ [3]byte{0, 235, 45}: "Sony Mobile Communications AB",
+ [3]byte{0, 235, 213}: "Cisco Systems, Inc",
+ [3]byte{0, 236, 10}: "Xiaomi Communications Co Ltd",
+ [3]byte{0, 238, 189}: "HTC Corporation",
+ [3]byte{0, 240, 81}: "KWB Gmbh",
+ [3]byte{0, 242, 44}: "Shanghai B-star Technology Co.,Ltd.",
+ [3]byte{0, 242, 139}: "Cisco Systems, Inc",
+ [3]byte{0, 243, 219}: "WOO Sports",
+ [3]byte{0, 244, 3}: "Orbis Systems Oy",
+ [3]byte{0, 244, 111}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 244, 185}: "Apple, Inc.",
+ [3]byte{0, 246, 99}: "Cisco Systems, Inc",
+ [3]byte{0, 247, 111}: "Apple, Inc.",
+ [3]byte{0, 248, 28}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{0, 248, 44}: "Cisco Systems, Inc",
+ [3]byte{0, 248, 96}: "PT. Panggung Electric Citrabuana",
+ [3]byte{0, 248, 113}: "DGS Denmark A/S",
+ [3]byte{0, 250, 59}: "CLOOS ELECTRONIC GMBH",
+ [3]byte{0, 252, 88}: "WebSilicon Ltd.",
+ [3]byte{0, 252, 112}: "Intrepid Control Systems, Inc.",
+ [3]byte{0, 252, 139}: "Amazon Technologies Inc.",
+ [3]byte{0, 252, 141}: "Hitron Technologies. Inc",
+ [3]byte{0, 253, 69}: "Hewlett Packard Enterprise",
+ [3]byte{0, 253, 76}: "NEVATEC",
+ [3]byte{0, 254, 200}: "Cisco Systems, Inc",
+ [3]byte{2, 7, 1}: "RACAL-DATACOM",
+ [3]byte{2, 28, 124}: "PERQ SYSTEMS CORPORATION",
+ [3]byte{2, 96, 134}: "LOGIC REPLACEMENT TECH. LTD.",
+ [3]byte{2, 96, 140}: "3COM CORPORATION",
+ [3]byte{2, 112, 1}: "RACAL-DATACOM",
+ [3]byte{2, 112, 176}: "M/A-COM INC. COMPANIES",
+ [3]byte{2, 112, 179}: "DATA RECALL LTD.",
+ [3]byte{2, 157, 142}: "CARDIAC RECORDERS, INC.",
+ [3]byte{2, 170, 60}: "OLIVETTI TELECOMM SPA (OLTECO)",
+ [3]byte{2, 187, 1}: "OCTOTHORPE CORP.",
+ [3]byte{2, 192, 140}: "3COM CORPORATION",
+ [3]byte{2, 207, 28}: "Communication Machinery Corporation",
+ [3]byte{2, 230, 211}: "NIXDORF COMPUTER CORP.",
+ [3]byte{4, 2, 31}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{4, 3, 214}: "Nintendo Co.,Ltd",
+ [3]byte{4, 4, 234}: "Valens Semiconductor Ltd.",
+ [3]byte{4, 10, 131}: "Alcatel-Lucent",
+ [3]byte{4, 10, 224}: "XMIT AG COMPUTER NETWORKS",
+ [3]byte{4, 12, 206}: "Apple, Inc.",
+ [3]byte{4, 14, 194}: "ViewSonic Mobile China Limited",
+ [3]byte{4, 21, 82}: "Apple, Inc.",
+ [3]byte{4, 24, 15}: "Samsung Electronics Co.,Ltd",
+ [3]byte{4, 24, 182}: "Private",
+ [3]byte{4, 24, 214}: "Ubiquiti Networks Inc.",
+ [3]byte{4, 25, 127}: "Grasphere Japan",
+ [3]byte{4, 26, 4}: "WaveIP",
+ [3]byte{4, 27, 109}: "LG Electronics (Mobile Communications)",
+ [3]byte{4, 27, 148}: "Host Mobility AB",
+ [3]byte{4, 27, 186}: "Samsung Electronics Co.,Ltd",
+ [3]byte{4, 29, 16}: "Dream Ware Inc.",
+ [3]byte{4, 30, 100}: "Apple, Inc.",
+ [3]byte{4, 30, 122}: "DSPWorks",
+ [3]byte{4, 32, 154}: "Panasonic Corporation AVC Networks Company",
+ [3]byte{4, 33, 76}: "Insight Energy Ventures LLC",
+ [3]byte{4, 34, 52}: "Wireless Standard Extensions",
+ [3]byte{4, 37, 197}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{4, 38, 5}: "GFR Gesellschaft für Regelungstechnik und Energieeinsparung mbH",
+ [3]byte{4, 38, 101}: "Apple, Inc.",
+ [3]byte{4, 39, 88}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{4, 42, 226}: "Cisco Systems, Inc",
+ [3]byte{4, 43, 187}: "PicoCELA, Inc.",
+ [3]byte{4, 45, 180}: "First Property (Beijing) Co., Ltd Modern MOMA Branch",
+ [3]byte{4, 47, 86}: "ATOCS (Shenzhen) LTD",
+ [3]byte{4, 49, 16}: "Inspur Group Co., Ltd.",
+ [3]byte{4, 50, 244}: "Partron",
+ [3]byte{4, 51, 137}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{4, 54, 4}: "Gyeyoung I&T",
+ [3]byte{4, 58, 13}: "SM Optics S.r.l.",
+ [3]byte{4, 61, 152}: "ChongQing QingJia Electronics CO.,LTD",
+ [3]byte{4, 65, 105}: "GoPro",
+ [3]byte{4, 68, 161}: "TELECON GALICIA,S.A.",
+ [3]byte{4, 70, 101}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{4, 72, 154}: "Apple, Inc.",
+ [3]byte{4, 74, 80}: "Ramaxel Technology (Shenzhen) limited company",
+ [3]byte{4, 75, 237}: "Apple, Inc.",
+ [3]byte{4, 75, 255}: "GuangZhou Hedy Digital Technology Co., Ltd",
+ [3]byte{4, 76, 239}: "Fujian Sanao Technology Co.,Ltd",
+ [3]byte{4, 78, 6}: "Ericsson AB",
+ [3]byte{4, 78, 90}: "ARRIS Group, Inc.",
+ [3]byte{4, 79, 76}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{4, 79, 139}: "Adapteva, Inc.",
+ [3]byte{4, 79, 170}: "Ruckus Wireless",
+ [3]byte{4, 80, 218}: "Qiku Internet Network Scientific (Shenzhen) Co., Ltd",
+ [3]byte{4, 82, 199}: "Bose Corporation",
+ [3]byte{4, 82, 243}: "Apple, Inc.",
+ [3]byte{4, 83, 213}: "Sysorex Global Holdings",
+ [3]byte{4, 84, 83}: "Apple, Inc.",
+ [3]byte{4, 85, 202}: "BriView (Xiamen) Corp.",
+ [3]byte{4, 86, 4}: "Gionee Communication Equipment Co.,Ltd.",
+ [3]byte{4, 87, 47}: "Sertel Electronics UK Ltd",
+ [3]byte{4, 88, 111}: "Sichuan Whayer information industry Co.,LTD",
+ [3]byte{4, 90, 149}: "Nokia Corporation",
+ [3]byte{4, 92, 6}: "Zmodo Technology Corporation",
+ [3]byte{4, 92, 142}: "gosund GROUP CO.,LTD",
+ [3]byte{4, 93, 75}: "Sony Corporation",
+ [3]byte{4, 93, 86}: "camtron industrial inc.",
+ [3]byte{4, 95, 167}: "Shenzhen Yichen Technology Development Co.,LTD",
+ [3]byte{4, 97, 105}: "MEDIA GLOBAL LINKS CO., LTD.",
+ [3]byte{4, 98, 115}: "Cisco Systems, Inc",
+ [3]byte{4, 98, 215}: "ALSTOM HYDRO FRANCE",
+ [3]byte{4, 99, 224}: "Nome Oy",
+ [3]byte{4, 101, 101}: "Testop",
+ [3]byte{4, 103, 133}: "scemtec Hard- und Software fuer Mess- und Steuerungstechnik GmbH",
+ [3]byte{4, 105, 248}: "Apple, Inc.",
+ [3]byte{4, 108, 157}: "Cisco Systems, Inc",
+ [3]byte{4, 109, 66}: "Bryston Ltd.",
+ [3]byte{4, 110, 2}: "OpenRTLS Group",
+ [3]byte{4, 110, 73}: "TaiYear Electronic Technology (Suzhou) Co., Ltd",
+ [3]byte{4, 112, 188}: "Globalstar Inc.",
+ [3]byte{4, 113, 75}: "IEEE Registration Authority",
+ [3]byte{4, 116, 161}: "Aligera Equipamentos Digitais Ltda",
+ [3]byte{4, 117, 3}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{4, 117, 245}: "CSST",
+ [3]byte{4, 118, 110}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{4, 120, 99}: "Shanghai MXCHIP Information Technology Co., Ltd.",
+ [3]byte{4, 125, 80}: "Shenzhen Kang Ying Technology Co.Ltd.",
+ [3]byte{4, 125, 123}: "QUANTA COMPUTER INC.",
+ [3]byte{4, 126, 74}: "moobox CO., Ltd.",
+ [3]byte{4, 129, 174}: "Clack Corporation",
+ [3]byte{4, 132, 138}: "7INOVA TECHNOLOGY LIMITED",
+ [3]byte{4, 136, 140}: "Eifelwerk Butler Systeme GmbH",
+ [3]byte{4, 136, 226}: "Beats Electronics LLC",
+ [3]byte{4, 138, 21}: "Avaya Inc",
+ [3]byte{4, 139, 66}: "Skspruce Technologies",
+ [3]byte{4, 140, 3}: "ThinPAD Technology (Shenzhen)CO.,LTD",
+ [3]byte{4, 141, 56}: "Netcore Technology Inc.",
+ [3]byte{4, 146, 238}: "iway AG",
+ [3]byte{4, 148, 107}: "TECNO MOBILE LIMITED",
+ [3]byte{4, 148, 161}: "CATCH THE WIND INC",
+ [3]byte{4, 149, 115}: "zte corporation",
+ [3]byte{4, 149, 230}: "Tenda Technology Co.,Ltd.Dongguan branch",
+ [3]byte{4, 150, 69}: "WUXI SKY CHIP INTERCONNECTION TECHNOLOGY CO.,LTD.",
+ [3]byte{4, 151, 144}: "Lartech telecom LLC",
+ [3]byte{4, 152, 243}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{4, 153, 230}: "Shenzhen Yoostar Technology Co., Ltd",
+ [3]byte{4, 155, 156}: "Eadingcore Intelligent Technology Co., Ltd.",
+ [3]byte{4, 156, 98}: "BMT Medical Technology s.r.o.",
+ [3]byte{4, 159, 6}: "Smobile Co., Ltd.",
+ [3]byte{4, 159, 129}: "NetScout Systems, Inc.",
+ [3]byte{4, 159, 202}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{4, 161, 81}: "NETGEAR",
+ [3]byte{4, 163, 22}: "Texas Instruments",
+ [3]byte{4, 163, 243}: "Emicon",
+ [3]byte{4, 168, 42}: "Nokia Corporation",
+ [3]byte{4, 176, 231}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{4, 177, 103}: "Xiaomi Communications Co Ltd",
+ [3]byte{4, 179, 182}: "Seamap (UK) Ltd",
+ [3]byte{4, 180, 102}: "BSP Co., Ltd.",
+ [3]byte{4, 182, 72}: "ZENNER",
+ [3]byte{4, 186, 54}: "Li Seng Technology Ltd",
+ [3]byte{4, 187, 249}: "Pavilion Data Systems Inc",
+ [3]byte{4, 189, 112}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{4, 189, 136}: "Aruba Networks",
+ [3]byte{4, 191, 109}: "Zyxel Communications Corporation",
+ [3]byte{4, 191, 168}: "ISB Corporation",
+ [3]byte{4, 192, 91}: "Tigo Energy",
+ [3]byte{4, 192, 111}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{4, 192, 156}: "Tellabs Inc.",
+ [3]byte{4, 193, 3}: "Clover Network, Inc.",
+ [3]byte{4, 193, 185}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{4, 194, 62}: "HTC Corporation",
+ [3]byte{4, 197, 164}: "Cisco Systems, Inc",
+ [3]byte{4, 200, 128}: "Samtec Inc",
+ [3]byte{4, 201, 145}: "Phistek INC.",
+ [3]byte{4, 201, 217}: "Echostar Technologies Corp",
+ [3]byte{4, 203, 29}: "Traka plc",
+ [3]byte{4, 206, 20}: "Wilocity LTD.",
+ [3]byte{4, 207, 37}: "MANYCOLORS, INC.",
+ [3]byte{4, 211, 207}: "Apple, Inc.",
+ [3]byte{4, 212, 55}: "ZNV",
+ [3]byte{4, 214, 170}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{4, 215, 131}: "Y&H E&C Co.,LTD.",
+ [3]byte{4, 218, 210}: "Cisco Systems, Inc",
+ [3]byte{4, 219, 86}: "Apple, Inc.",
+ [3]byte{4, 219, 138}: "Suntech International Ltd.",
+ [3]byte{4, 221, 76}: "Velocytech",
+ [3]byte{4, 222, 219}: "Rockport Networks Inc",
+ [3]byte{4, 222, 242}: "Shenzhen ECOM Technology Co. Ltd",
+ [3]byte{4, 223, 105}: "Car Connectivity Consortium",
+ [3]byte{4, 224, 176}: "Shenzhen YOUHUA Technology Co., Ltd",
+ [3]byte{4, 224, 196}: "TRIUMPH-ADLER AG",
+ [3]byte{4, 225, 200}: "IMS Soluções em Energia Ltda.",
+ [3]byte{4, 226, 248}: "AEP Ticketing solutions srl",
+ [3]byte{4, 228, 81}: "Texas Instruments",
+ [3]byte{4, 229, 54}: "Apple, Inc.",
+ [3]byte{4, 229, 72}: "Cohda Wireless Pty Ltd",
+ [3]byte{4, 230, 98}: "Acroname Inc.",
+ [3]byte{4, 230, 118}: "AMPAK Technology, Inc.",
+ [3]byte{4, 233, 229}: "PJRC.COM, LLC",
+ [3]byte{4, 238, 145}: "x-fabric GmbH",
+ [3]byte{4, 240, 33}: "Compex Systems Pte Ltd",
+ [3]byte{4, 241, 40}: "HMD Global Oy",
+ [3]byte{4, 241, 62}: "Apple, Inc.",
+ [3]byte{4, 241, 125}: "Tarana Wireless",
+ [3]byte{4, 244, 188}: "Xena Networks",
+ [3]byte{4, 247, 228}: "Apple, Inc.",
+ [3]byte{4, 248, 194}: "Flaircomm Microelectronics, Inc.",
+ [3]byte{4, 249, 56}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{4, 250, 63}: "Opticore Inc.",
+ [3]byte{4, 254, 49}: "Samsung Electronics Co.,Ltd",
+ [3]byte{4, 254, 127}: "Cisco Systems, Inc",
+ [3]byte{4, 254, 141}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{4, 254, 161}: "Fihonest communication co.,Ltd",
+ [3]byte{4, 255, 81}: "NOVAMEDIA INNOVISION SP. Z O.O.",
+ [3]byte{8, 0, 1}: "COMPUTERVISION CORPORATION",
+ [3]byte{8, 0, 2}: "BRIDGE COMMUNICATIONS INC.",
+ [3]byte{8, 0, 3}: "ADVANCED COMPUTER COMM.",
+ [3]byte{8, 0, 4}: "CROMEMCO INCORPORATED",
+ [3]byte{8, 0, 5}: "SYMBOLICS INC.",
+ [3]byte{8, 0, 6}: "SIEMENS AG",
+ [3]byte{8, 0, 7}: "Apple, Inc.",
+ [3]byte{8, 0, 8}: "BOLT BERANEK AND NEWMAN INC.",
+ [3]byte{8, 0, 9}: "Hewlett Packard",
+ [3]byte{8, 0, 10}: "NESTAR SYSTEMS INCORPORATED",
+ [3]byte{8, 0, 11}: "UNISYS CORPORATION",
+ [3]byte{8, 0, 12}: "MIKLYN DEVELOPMENT CO.",
+ [3]byte{8, 0, 13}: "International Computers, Ltd",
+ [3]byte{8, 0, 14}: "NCR CORPORATION",
+ [3]byte{8, 0, 15}: "MITEL CORPORATION",
+ [3]byte{8, 0, 17}: "TEKTRONIX INC.",
+ [3]byte{8, 0, 18}: "BELL ATLANTIC INTEGRATED SYST.",
+ [3]byte{8, 0, 19}: "Exxon",
+ [3]byte{8, 0, 20}: "EXCELAN",
+ [3]byte{8, 0, 21}: "STC BUSINESS SYSTEMS",
+ [3]byte{8, 0, 22}: "BARRISTER INFO SYS CORP",
+ [3]byte{8, 0, 23}: "NATIONAL SEMICONDUCTOR",
+ [3]byte{8, 0, 24}: "PIRELLI FOCOM NETWORKS",
+ [3]byte{8, 0, 25}: "GENERAL ELECTRIC CORPORATION",
+ [3]byte{8, 0, 26}: "TIARA/ 10NET",
+ [3]byte{8, 0, 27}: "Dell EMC",
+ [3]byte{8, 0, 28}: "KDD-KOKUSAI DEBNSIN DENWA CO.",
+ [3]byte{8, 0, 29}: "ABLE COMMUNICATIONS INC.",
+ [3]byte{8, 0, 30}: "APOLLO COMPUTER INC.",
+ [3]byte{8, 0, 31}: "SHARP CORPORATION",
+ [3]byte{8, 0, 32}: "Oracle Corporation",
+ [3]byte{8, 0, 33}: "3M COMPANY",
+ [3]byte{8, 0, 34}: "NBI INC.",
+ [3]byte{8, 0, 35}: "Panasonic Communications Co., Ltd.",
+ [3]byte{8, 0, 36}: "10NET COMMUNICATIONS/DCA",
+ [3]byte{8, 0, 37}: "CONTROL DATA",
+ [3]byte{8, 0, 38}: "NORSK DATA A.S.",
+ [3]byte{8, 0, 39}: "PCS Systemtechnik GmbH",
+ [3]byte{8, 0, 40}: "Texas Instruments",
+ [3]byte{8, 0, 41}: "Megatek Corporation",
+ [3]byte{8, 0, 42}: "MOSAIC TECHNOLOGIES INC.",
+ [3]byte{8, 0, 43}: "DIGITAL EQUIPMENT CORPORATION",
+ [3]byte{8, 0, 44}: "BRITTON LEE INC.",
+ [3]byte{8, 0, 45}: "LAN-TEC INC.",
+ [3]byte{8, 0, 46}: "METAPHOR COMPUTER SYSTEMS",
+ [3]byte{8, 0, 47}: "PRIME COMPUTER INC.",
+ [3]byte{8, 0, 48}: "CERN",
+ [3]byte{8, 0, 48}: "NETWORK RESEARCH CORPORATION",
+ [3]byte{8, 0, 48}: "ROYAL MELBOURNE INST OF TECH",
+ [3]byte{8, 0, 49}: "LITTLE MACHINES INC.",
+ [3]byte{8, 0, 50}: "TIGAN INCORPORATED",
+ [3]byte{8, 0, 51}: "BAUSCH & LOMB",
+ [3]byte{8, 0, 52}: "FILENET CORPORATION",
+ [3]byte{8, 0, 53}: "MICROFIVE CORPORATION",
+ [3]byte{8, 0, 54}: "INTERGRAPH CORPORATION",
+ [3]byte{8, 0, 55}: "FUJI-XEROX CO. LTD.",
+ [3]byte{8, 0, 56}: "BULL S.A.S.",
+ [3]byte{8, 0, 57}: "SPIDER SYSTEMS LIMITED",
+ [3]byte{8, 0, 58}: "ORCATECH INC.",
+ [3]byte{8, 0, 59}: "TORUS SYSTEMS LIMITED",
+ [3]byte{8, 0, 60}: "SCHLUMBERGER WELL SERVICES",
+ [3]byte{8, 0, 61}: "CADNETIX CORPORATIONS",
+ [3]byte{8, 0, 62}: "CODEX CORPORATION",
+ [3]byte{8, 0, 63}: "FRED KOSCHARA ENTERPRISES",
+ [3]byte{8, 0, 64}: "FERRANTI COMPUTER SYS. LIMITED",
+ [3]byte{8, 0, 65}: "RACAL-MILGO INFORMATION SYS..",
+ [3]byte{8, 0, 66}: "JAPAN MACNICS CORP.",
+ [3]byte{8, 0, 67}: "PIXEL COMPUTER INC.",
+ [3]byte{8, 0, 68}: "DAVID SYSTEMS INC.",
+ [3]byte{8, 0, 69}: "CONCURRENT COMPUTER CORP.",
+ [3]byte{8, 0, 70}: "Sony Corporation",
+ [3]byte{8, 0, 71}: "SEQUENT COMPUTER SYSTEMS INC.",
+ [3]byte{8, 0, 72}: "EUROTHERM GAUGING SYSTEMS",
+ [3]byte{8, 0, 73}: "UNIVATION",
+ [3]byte{8, 0, 74}: "BANYAN SYSTEMS INC.",
+ [3]byte{8, 0, 75}: "Planning Research Corp.",
+ [3]byte{8, 0, 76}: "HYDRA COMPUTER SYSTEMS INC.",
+ [3]byte{8, 0, 77}: "CORVUS SYSTEMS INC.",
+ [3]byte{8, 0, 78}: "3COM EUROPE LTD.",
+ [3]byte{8, 0, 79}: "CYGNET SYSTEMS",
+ [3]byte{8, 0, 80}: "DAISY SYSTEMS CORP.",
+ [3]byte{8, 0, 81}: "ExperData",
+ [3]byte{8, 0, 82}: "INSYSTEC",
+ [3]byte{8, 0, 83}: "MIDDLE EAST TECH. UNIVERSITY",
+ [3]byte{8, 0, 85}: "STANFORD TELECOMM. INC.",
+ [3]byte{8, 0, 86}: "STANFORD LINEAR ACCEL. CENTER",
+ [3]byte{8, 0, 87}: "Evans & Sutherland",
+ [3]byte{8, 0, 88}: "SYSTEMS CONCEPTS",
+ [3]byte{8, 0, 89}: "A/S MYCRON",
+ [3]byte{8, 0, 90}: "IBM Corp",
+ [3]byte{8, 0, 91}: "VTA TECHNOLOGIES INC.",
+ [3]byte{8, 0, 92}: "FOUR PHASE SYSTEMS",
+ [3]byte{8, 0, 93}: "GOULD INC.",
+ [3]byte{8, 0, 94}: "COUNTERPOINT COMPUTER INC.",
+ [3]byte{8, 0, 95}: "SABER TECHNOLOGY CORP.",
+ [3]byte{8, 0, 96}: "INDUSTRIAL NETWORKING INC.",
+ [3]byte{8, 0, 97}: "JAROGATE LTD.",
+ [3]byte{8, 0, 98}: "General Dynamics",
+ [3]byte{8, 0, 99}: "PLESSEY",
+ [3]byte{8, 0, 100}: "Sitasys AG",
+ [3]byte{8, 0, 101}: "GENRAD INC.",
+ [3]byte{8, 0, 102}: "AGFA CORPORATION",
+ [3]byte{8, 0, 103}: "ComDesign",
+ [3]byte{8, 0, 104}: "RIDGE COMPUTERS",
+ [3]byte{8, 0, 105}: "SILICON GRAPHICS INC.",
+ [3]byte{8, 0, 106}: "AT&T",
+ [3]byte{8, 0, 107}: "ACCEL TECHNOLOGIES INC.",
+ [3]byte{8, 0, 108}: "SUNTEK TECHNOLOGY INT'L",
+ [3]byte{8, 0, 109}: "WHITECHAPEL COMPUTER WORKS",
+ [3]byte{8, 0, 110}: "MASSCOMP",
+ [3]byte{8, 0, 111}: "PHILIPS APELDOORN B.V.",
+ [3]byte{8, 0, 112}: "Mitsubishi Precision Co.,LTd.",
+ [3]byte{8, 0, 113}: "MATRA (DSIE)",
+ [3]byte{8, 0, 114}: "XEROX CORP UNIV GRANT PROGRAM",
+ [3]byte{8, 0, 115}: "TECMAR INC.",
+ [3]byte{8, 0, 116}: "CASIO COMPUTER CO. LTD.",
+ [3]byte{8, 0, 117}: "DANSK DATA ELECTRONIK",
+ [3]byte{8, 0, 118}: "PC LAN TECHNOLOGIES",
+ [3]byte{8, 0, 119}: "TSL COMMUNICATIONS LTD.",
+ [3]byte{8, 0, 120}: "ACCELL CORPORATION",
+ [3]byte{8, 0, 121}: "THE DROID WORKS",
+ [3]byte{8, 0, 122}: "INDATA",
+ [3]byte{8, 0, 123}: "SANYO ELECTRIC CO. LTD.",
+ [3]byte{8, 0, 124}: "VITALINK COMMUNICATIONS CORP.",
+ [3]byte{8, 0, 126}: "AMALGAMATED WIRELESS(AUS) LTD",
+ [3]byte{8, 0, 127}: "CARNEGIE-MELLON UNIVERSITY",
+ [3]byte{8, 0, 128}: "AES DATA INC.",
+ [3]byte{8, 0, 129}: "ASTECH INC.",
+ [3]byte{8, 0, 130}: "VERITAS SOFTWARE",
+ [3]byte{8, 0, 131}: "Seiko Instruments Inc.",
+ [3]byte{8, 0, 132}: "TOMEN ELECTRONICS CORP.",
+ [3]byte{8, 0, 133}: "ELXSI",
+ [3]byte{8, 0, 134}: "KONICA MINOLTA HOLDINGS, INC.",
+ [3]byte{8, 0, 135}: "Xyplex, Inc.",
+ [3]byte{8, 0, 136}: "Brocade Communications Systems, Inc.",
+ [3]byte{8, 0, 137}: "Kinetics",
+ [3]byte{8, 0, 138}: "PerfTech, Inc.",
+ [3]byte{8, 0, 139}: "PYRAMID TECHNOLOGY CORP.",
+ [3]byte{8, 0, 140}: "NETWORK RESEARCH CORPORATION",
+ [3]byte{8, 0, 141}: "XYVISION INC.",
+ [3]byte{8, 0, 142}: "Tandem Computers",
+ [3]byte{8, 0, 143}: "CHIPCOM CORPORATION",
+ [3]byte{8, 0, 144}: "SONOMA SYSTEMS",
+ [3]byte{8, 1, 15}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+ [3]byte{8, 2, 142}: "NETGEAR",
+ [3]byte{8, 3, 113}: "KRG CORPORATE",
+ [3]byte{8, 5, 129}: "Roku, Inc.",
+ [3]byte{8, 5, 205}: "DongGuang EnMai Electronic Product Co.Ltd.",
+ [3]byte{8, 8, 194}: "Samsung Electronics Co.,Ltd",
+ [3]byte{8, 8, 234}: "AMSC",
+ [3]byte{8, 9, 182}: "Masimo Corp",
+ [3]byte{8, 10, 78}: "Planet Bingo® — 3rd Rock Gaming®",
+ [3]byte{8, 12, 11}: "SysMik GmbH Dresden",
+ [3]byte{8, 12, 201}: "Mission Technology Group, dba Magma",
+ [3]byte{8, 13, 132}: "GECO, Inc.",
+ [3]byte{8, 14, 168}: "Velex s.r.l.",
+ [3]byte{8, 15, 250}: "KSP INC.",
+ [3]byte{8, 17, 94}: "Bitel Co., Ltd.",
+ [3]byte{8, 17, 150}: "Intel Corporate",
+ [3]byte{8, 20, 67}: "UNIBRAIN S.A.",
+ [3]byte{8, 21, 47}: "Samsung Electronics Co., Ltd. ARTIK",
+ [3]byte{8, 22, 81}: "SHENZHEN SEA STAR TECHNOLOGY CO.,LTD",
+ [3]byte{8, 23, 53}: "Cisco Systems, Inc",
+ [3]byte{8, 23, 244}: "IBM Corp",
+ [3]byte{8, 24, 26}: "zte corporation",
+ [3]byte{8, 24, 76}: "A. S. Thomas, Inc.",
+ [3]byte{8, 25, 166}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{8, 29, 251}: "Shanghai Mexon Communication Technology Co.,Ltd",
+ [3]byte{8, 31, 63}: "WondaLink Inc.",
+ [3]byte{8, 31, 113}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{8, 31, 235}: "BinCube",
+ [3]byte{8, 31, 243}: "Cisco Systems, Inc",
+ [3]byte{8, 33, 239}: "Samsung Electronics Co.,Ltd",
+ [3]byte{8, 35, 178}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{8, 37, 34}: "ADVANSEE",
+ [3]byte{8, 39, 25}: "APS systems/electronic AG",
+ [3]byte{8, 39, 206}: "NAGANO KEIKI CO., LTD.",
+ [3]byte{8, 42, 208}: "SRD Innovations Inc.",
+ [3]byte{8, 44, 176}: "Network Instruments",
+ [3]byte{8, 46, 95}: "Hewlett Packard",
+ [3]byte{8, 48, 107}: "Palo Alto Networks",
+ [3]byte{8, 53, 113}: "CASwell INC.",
+ [3]byte{8, 53, 178}: "CoreEdge Networks Co., Ltd",
+ [3]byte{8, 55, 61}: "Samsung Electronics Co.,Ltd",
+ [3]byte{8, 55, 156}: "Topaz Co. LTD.",
+ [3]byte{8, 56, 165}: "Funkwerk plettac electronic GmbH",
+ [3]byte{8, 58, 92}: "Junilab, Inc.",
+ [3]byte{8, 58, 184}: "Shinoda Plasma Co., Ltd.",
+ [3]byte{8, 61, 136}: "Samsung Electronics Co.,Ltd",
+ [3]byte{8, 62, 12}: "ARRIS Group, Inc.",
+ [3]byte{8, 62, 93}: "Sagemcom Broadband SAS",
+ [3]byte{8, 62, 142}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{8, 63, 62}: "WSH GmbH",
+ [3]byte{8, 63, 118}: "Intellian Technologies, Inc.",
+ [3]byte{8, 63, 188}: "zte corporation",
+ [3]byte{8, 64, 39}: "Gridstore Inc.",
+ [3]byte{8, 64, 243}: "Tenda Technology Co.,Ltd.Dongguan branch",
+ [3]byte{8, 70, 86}: "VEO-LABS",
+ [3]byte{8, 72, 44}: "Raycore Taiwan Co., LTD.",
+ [3]byte{8, 74, 207}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{8, 78, 28}: "H2A Systems, LLC",
+ [3]byte{8, 78, 191}: "Broad Net Mux Corporation",
+ [3]byte{8, 81, 20}: "QINGDAO TOPSCOMM COMMUNICATION CO., LTD",
+ [3]byte{8, 81, 46}: "Orion Diagnostica Oy",
+ [3]byte{8, 82, 64}: "EbV Elektronikbau- und Vertriebs GmbH",
+ [3]byte{8, 87, 0}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{8, 90, 224}: "Recovision Technology Co., Ltd.",
+ [3]byte{8, 91, 14}: "Fortinet, Inc.",
+ [3]byte{8, 91, 218}: "CliniCare LTD",
+ [3]byte{8, 93, 221}: "MERCURY CORPORATION",
+ [3]byte{8, 96, 110}: "ASUSTek COMPUTER INC.",
+ [3]byte{8, 98, 102}: "ASUSTek COMPUTER INC.",
+ [3]byte{8, 99, 97}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{8, 102, 31}: "Palo Alto Networks",
+ [3]byte{8, 102, 152}: "Apple, Inc.",
+ [3]byte{8, 103, 78}: "Hisense broadband multimedia technology Co.,Ltd",
+ [3]byte{8, 104, 208}: "Japan System Design",
+ [3]byte{8, 104, 234}: "EITO ELECTRONICS CO., LTD.",
+ [3]byte{8, 106, 10}: "ASKEY COMPUTER CORP",
+ [3]byte{8, 109, 65}: "Apple, Inc.",
+ [3]byte{8, 109, 242}: "Shenzhen MIMOWAVE Technology Co.,Ltd",
+ [3]byte{8, 112, 69}: "Apple, Inc.",
+ [3]byte{8, 116, 2}: "Apple, Inc.",
+ [3]byte{8, 116, 246}: "Winterhalter Gastronom GmbH",
+ [3]byte{8, 117, 114}: "Obelux Oy",
+ [3]byte{8, 118, 24}: "ViE Technologies Sdn. Bhd.",
+ [3]byte{8, 118, 149}: "Auto Industrial Co., Ltd.",
+ [3]byte{8, 118, 255}: "Thomson Telecom Belgium",
+ [3]byte{8, 120, 8}: "Samsung Electronics Co.,Ltd",
+ [3]byte{8, 121, 153}: "AIM GmbH",
+ [3]byte{8, 122, 76}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{8, 123, 170}: "SVYAZKOMPLEKTSERVICE, LLC",
+ [3]byte{8, 124, 190}: "Quintic Corp.",
+ [3]byte{8, 125, 33}: "Altasec technology corporation",
+ [3]byte{8, 128, 57}: "Cisco SPVTG",
+ [3]byte{8, 129, 188}: "HongKong Ipro Technology Co., Limited",
+ [3]byte{8, 129, 244}: "Juniper Networks",
+ [3]byte{8, 132, 102}: "Novartis Pharma AG",
+ [3]byte{8, 134, 32}: "TECNO MOBILE LIMITED",
+ [3]byte{8, 134, 59}: "Belkin International Inc.",
+ [3]byte{8, 140, 44}: "Samsung Electronics Co.,Ltd",
+ [3]byte{8, 141, 200}: "Ryowa Electronics Co.,Ltd",
+ [3]byte{8, 142, 79}: "SF Software Solutions",
+ [3]byte{8, 143, 44}: "Hills Sound Vision & Lighting",
+ [3]byte{8, 148, 239}: "Wistron Infocomm (Zhongshan) Corporation",
+ [3]byte{8, 149, 42}: "Technicolor CH USA Inc.",
+ [3]byte{8, 150, 173}: "Cisco Systems, Inc",
+ [3]byte{8, 150, 215}: "AVM GmbH",
+ [3]byte{8, 151, 88}: "Shenzhen Strong Rising Electronics Co.,Ltd DongGuan Subsidiary",
+ [3]byte{8, 155, 75}: "iKuai Networks",
+ [3]byte{8, 158, 1}: "QUANTA COMPUTER INC.",
+ [3]byte{8, 158, 8}: "Google, Inc.",
+ [3]byte{8, 159, 151}: "LEROY AUTOMATION",
+ [3]byte{8, 161, 43}: "ShenZhen EZL Technology Co., Ltd",
+ [3]byte{8, 165, 200}: "Sunnovo International Limited",
+ [3]byte{8, 168, 161}: "Cyclotronics Power Concepts, Inc",
+ [3]byte{8, 169, 90}: "AzureWave Technology Inc.",
+ [3]byte{8, 172, 165}: "Benu Video, Inc.",
+ [3]byte{8, 175, 120}: "Totus Solutions, Inc.",
+ [3]byte{8, 178, 88}: "Juniper Networks",
+ [3]byte{8, 178, 163}: "Cynny Italia S.r.L.",
+ [3]byte{8, 180, 207}: "Abicom International",
+ [3]byte{8, 183, 56}: "Lite-On Technogy Corp.",
+ [3]byte{8, 183, 236}: "Wireless Seismic",
+ [3]byte{8, 186, 34}: "Swaive Corporation",
+ [3]byte{8, 187, 204}: "AK-NORD EDV VERTRIEBSGES. mbH",
+ [3]byte{8, 188, 32}: "Hangzhou Royal Cloud Technology Co., Ltd",
+ [3]byte{8, 189, 67}: "NETGEAR",
+ [3]byte{8, 190, 9}: "Astrol Electronic AG",
+ [3]byte{8, 190, 119}: "Green Electronics",
+ [3]byte{8, 190, 172}: "Edimax Technology Co. Ltd.",
+ [3]byte{8, 192, 33}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{8, 198, 179}: "QTECH LLC",
+ [3]byte{8, 202, 69}: "Toyou Feiji Electronics Co., Ltd.",
+ [3]byte{8, 204, 104}: "Cisco Systems, Inc",
+ [3]byte{8, 204, 167}: "Cisco Systems, Inc",
+ [3]byte{8, 205, 155}: "samtec automotive electronics & software GmbH",
+ [3]byte{8, 208, 159}: "Cisco Systems, Inc",
+ [3]byte{8, 208, 183}: "Qingdao Hisense Communications Co.,Ltd.",
+ [3]byte{8, 210, 154}: "Proformatique",
+ [3]byte{8, 211, 75}: "Techman Electronics (Changshu) Co., Ltd.",
+ [3]byte{8, 212, 12}: "Intel Corporate",
+ [3]byte{8, 212, 43}: "Samsung Electronics Co.,Ltd",
+ [3]byte{8, 213, 192}: "Seers Technology Co., Ltd",
+ [3]byte{8, 216, 51}: "Shenzhen RF Technology Co., Ltd",
+ [3]byte{8, 223, 31}: "Bose Corporation",
+ [3]byte{8, 229, 218}: "NANJING FUJITSU COMPUTER PRODUCTS CO.,LTD.",
+ [3]byte{8, 230, 114}: "JEBSEE ELECTRONICS CO.,LTD.",
+ [3]byte{8, 232, 79}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{8, 234, 64}: "SHENZHEN BILIAN ELECTRONIC CO.,LTD",
+ [3]byte{8, 234, 68}: "Aerohive Networks Inc.",
+ [3]byte{8, 235, 41}: "Jiangsu Huitong Group Co.,Ltd.",
+ [3]byte{8, 235, 116}: "HUMAX Co., Ltd.",
+ [3]byte{8, 235, 237}: "World Elite Technology Co.,LTD",
+ [3]byte{8, 236, 169}: "Samsung Electronics Co.,Ltd",
+ [3]byte{8, 237, 2}: "IEEE Registration Authority",
+ [3]byte{8, 237, 185}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{8, 238, 139}: "Samsung Electronics Co.,Ltd",
+ [3]byte{8, 239, 59}: "MCS Logic Inc.",
+ [3]byte{8, 239, 171}: "SAYME WIRELESS SENSOR NETWORK",
+ [3]byte{8, 241, 183}: "Towerstream Corpration",
+ [3]byte{8, 242, 244}: "Net One Partners Co.,Ltd.",
+ [3]byte{8, 244, 171}: "Apple, Inc.",
+ [3]byte{8, 246, 248}: "GET Engineering",
+ [3]byte{8, 247, 40}: "GLOBO Multimedia Sp. z o.o. Sp.k.",
+ [3]byte{8, 250, 224}: "Fohhn Audio AG",
+ [3]byte{8, 252, 82}: "OpenXS BV",
+ [3]byte{8, 252, 136}: "Samsung Electronics Co.,Ltd",
+ [3]byte{8, 253, 14}: "Samsung Electronics Co.,Ltd",
+ [3]byte{12, 2, 39}: "Technicolor CH USA Inc.",
+ [3]byte{12, 4, 0}: "Jantar d.o.o.",
+ [3]byte{12, 5, 53}: "Juniper Systems",
+ [3]byte{12, 17, 5}: "Ringslink (Xiamen) Network Communication Technologies Co., Ltd",
+ [3]byte{12, 17, 103}: "Cisco Systems, Inc",
+ [3]byte{12, 18, 98}: "zte corporation",
+ [3]byte{12, 19, 11}: "Uniqoteq Ltd.",
+ [3]byte{12, 20, 32}: "Samsung Electronics Co.,Ltd",
+ [3]byte{12, 21, 57}: "Apple, Inc.",
+ [3]byte{12, 21, 197}: "SDTEC Co., Ltd.",
+ [3]byte{12, 23, 241}: "TELECSYS",
+ [3]byte{12, 25, 31}: "Inform Electronik",
+ [3]byte{12, 26, 16}: "Acoustic Stream",
+ [3]byte{12, 28, 32}: "Kakao Corp",
+ [3]byte{12, 29, 175}: "Xiaomi Communications Co Ltd",
+ [3]byte{12, 29, 194}: "SeAH Networks",
+ [3]byte{12, 32, 38}: "noax Technologies AG",
+ [3]byte{12, 37, 118}: "LONGCHEER TELECOMMUNICATION LIMITED",
+ [3]byte{12, 39, 36}: "Cisco Systems, Inc",
+ [3]byte{12, 39, 85}: "Valuable Techologies Limited",
+ [3]byte{12, 42, 105}: "electric imp, incorporated",
+ [3]byte{12, 42, 231}: "Beijing General Research Institute of Mining and Metallurgy",
+ [3]byte{12, 45, 137}: "QiiQ Communications Inc.",
+ [3]byte{12, 48, 33}: "Apple, Inc.",
+ [3]byte{12, 55, 71}: "zte corporation",
+ [3]byte{12, 55, 220}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{12, 56, 62}: "Fanvil Technology Co., Ltd.",
+ [3]byte{12, 57, 86}: "Observator instruments",
+ [3]byte{12, 60, 101}: "Dome Imaging Inc",
+ [3]byte{12, 60, 205}: "Universal Global Scientific Industrial Co., Ltd.",
+ [3]byte{12, 62, 159}: "Apple, Inc.",
+ [3]byte{12, 65, 62}: "Microsoft Corporation",
+ [3]byte{12, 69, 186}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{12, 70, 157}: "MS Sedco",
+ [3]byte{12, 71, 61}: "Hitron Technologies. Inc",
+ [3]byte{12, 71, 201}: "Amazon Technologies Inc.",
+ [3]byte{12, 72, 133}: "LG Electronics (Mobile Communications)",
+ [3]byte{12, 73, 51}: "Sichuan Jiuzhou Electronic Technology Co., Ltd.",
+ [3]byte{12, 75, 84}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{12, 76, 57}: "MitraStar Technology Corp.",
+ [3]byte{12, 77, 233}: "Apple, Inc.",
+ [3]byte{12, 79, 90}: "ASA-RT s.r.l.",
+ [3]byte{12, 81, 1}: "Apple, Inc.",
+ [3]byte{12, 81, 247}: "CHAUVIN ARNOUX",
+ [3]byte{12, 82, 3}: "AGM GROUP LIMITED",
+ [3]byte{12, 84, 165}: "PEGATRON CORPORATION",
+ [3]byte{12, 84, 185}: "Nokia",
+ [3]byte{12, 85, 33}: "Axiros GmbH",
+ [3]byte{12, 86, 92}: "HyBroad Vision (Hong Kong) Technology Co Ltd",
+ [3]byte{12, 87, 235}: "Mueller Systems",
+ [3]byte{12, 88, 66}: "DME Micro",
+ [3]byte{12, 90, 25}: "Axtion Sdn Bhd",
+ [3]byte{12, 90, 158}: "Wi-SUN Alliance",
+ [3]byte{12, 92, 216}: "DOLI Elektronik GmbH",
+ [3]byte{12, 95, 53}: "Niagara Video Corporation",
+ [3]byte{12, 96, 118}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{12, 97, 17}: "Anda Technologies SAC",
+ [3]byte{12, 97, 39}: "Actiontec Electronics, Inc",
+ [3]byte{12, 97, 207}: "Texas Instruments",
+ [3]byte{12, 99, 252}: "Nanjing Signway Technology Co., Ltd",
+ [3]byte{12, 104, 3}: "Cisco Systems, Inc",
+ [3]byte{12, 106, 230}: "Stanley Security Solutions",
+ [3]byte{12, 110, 79}: "PrimeVOLT Co., Ltd.",
+ [3]byte{12, 111, 156}: "Shaw Communications Inc.",
+ [3]byte{12, 113, 93}: "Samsung Electronics Co.,Ltd",
+ [3]byte{12, 114, 44}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{12, 114, 217}: "zte corporation",
+ [3]byte{12, 115, 190}: "Dongguan Haimai Electronie Technology Co.,Ltd",
+ [3]byte{12, 116, 194}: "Apple, Inc.",
+ [3]byte{12, 117, 35}: "BEIJING GEHUA CATV NETWORK CO.,LTD",
+ [3]byte{12, 117, 108}: "Anaren Microwave, Inc.",
+ [3]byte{12, 117, 189}: "Cisco Systems, Inc",
+ [3]byte{12, 119, 26}: "Apple, Inc.",
+ [3]byte{12, 125, 124}: "Kexiang Information Technology Co, Ltd.",
+ [3]byte{12, 129, 18}: "Private",
+ [3]byte{12, 130, 48}: "SHENZHEN MAGNUS TECHNOLOGIES CO.,LTD",
+ [3]byte{12, 130, 104}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{12, 130, 106}: "Wuhan Huagong Genuine Optics Technology Co., Ltd",
+ [3]byte{12, 132, 17}: "A.O. Smith Water Products",
+ [3]byte{12, 132, 132}: "Zenovia Electronics Inc.",
+ [3]byte{12, 132, 220}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{12, 133, 37}: "Cisco Systems, Inc",
+ [3]byte{12, 134, 16}: "Juniper Networks",
+ [3]byte{12, 137, 16}: "Samsung Electronics Co.,Ltd",
+ [3]byte{12, 138, 135}: "AgLogica Holdings, Inc",
+ [3]byte{12, 139, 253}: "Intel Corporate",
+ [3]byte{12, 140, 143}: "Kamo Technology Limited",
+ [3]byte{12, 140, 220}: "Suunto Oy",
+ [3]byte{12, 141, 152}: "TOP EIGHT IND CORP",
+ [3]byte{12, 141, 219}: "Cisco Meraki",
+ [3]byte{12, 143, 255}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{12, 145, 96}: "Hui Zhou Gaoshengda Technology Co.,LTD",
+ [3]byte{12, 146, 78}: "Rice Lake Weighing Systems",
+ [3]byte{12, 147, 1}: "PT. Prasimax Inovasi Teknologi",
+ [3]byte{12, 147, 251}: "BNS Solutions",
+ [3]byte{12, 150, 191}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{12, 152, 56}: "Xiaomi Communications Co Ltd",
+ [3]byte{12, 155, 19}: "Shanghai Magic Mobile Telecommunication Co.Ltd.",
+ [3]byte{12, 157, 86}: "Consort Controls Ltd",
+ [3]byte{12, 158, 145}: "Sankosha Corporation",
+ [3]byte{12, 161, 56}: "Blinq Wireless Inc.",
+ [3]byte{12, 162, 244}: "Chameleon Technology (UK) Limited",
+ [3]byte{12, 164, 2}: "Alcatel-Lucent IPD",
+ [3]byte{12, 164, 42}: "OB Telecom Electronic Technology Co., Ltd",
+ [3]byte{12, 166, 148}: "Sunitec Enterprise Co.,Ltd",
+ [3]byte{12, 172, 5}: "Unitend Technologies Inc.",
+ [3]byte{12, 175, 90}: "GENUS POWER INFRASTRUCTURES LIMITED",
+ [3]byte{12, 178, 183}: "Texas Instruments",
+ [3]byte{12, 179, 25}: "Samsung Electronics Co.,Ltd",
+ [3]byte{12, 180, 89}: "Marketech International Corp.",
+ [3]byte{12, 180, 239}: "Digience Co.,Ltd.",
+ [3]byte{12, 181, 222}: "Alcatel Lucent",
+ [3]byte{12, 185, 18}: "JM-DATA GmbH",
+ [3]byte{12, 185, 55}: "Ubee Interactive Co., Limited",
+ [3]byte{12, 188, 159}: "Apple, Inc.",
+ [3]byte{12, 189, 81}: "TCT mobile ltd",
+ [3]byte{12, 191, 21}: "Genetec Inc.",
+ [3]byte{12, 191, 63}: "Shenzhen Lencotion Technology Co.,Ltd",
+ [3]byte{12, 192, 192}: "MAGNETI MARELLI SISTEMAS ELECTRONICOS MEXICO",
+ [3]byte{12, 195, 167}: "Meritec",
+ [3]byte{12, 196, 122}: "Super Micro Computer, Inc.",
+ [3]byte{12, 196, 126}: "EUCAST Co., Ltd.",
+ [3]byte{12, 198, 85}: "Wuxi YSTen Technology Co.,Ltd.",
+ [3]byte{12, 198, 106}: "Nokia Corporation",
+ [3]byte{12, 198, 172}: "DAGS",
+ [3]byte{12, 199, 49}: "Currant, Inc.",
+ [3]byte{12, 200, 31}: "Summer Infant, Inc.",
+ [3]byte{12, 201, 198}: "Samwin Hong Kong Limited",
+ [3]byte{12, 203, 141}: "ASCO Numatics GmbH",
+ [3]byte{12, 204, 38}: "Airenetworks",
+ [3]byte{12, 205, 211}: "EASTRIVER TECHNOLOGY CO., LTD.",
+ [3]byte{12, 205, 251}: "EDIC Systems Inc.",
+ [3]byte{12, 206, 246}: "Guizhou Fortuneship Technology Co., Ltd",
+ [3]byte{12, 207, 209}: "SPRINGWAVE Co., Ltd",
+ [3]byte{12, 210, 146}: "Intel Corporate",
+ [3]byte{12, 210, 181}: "Binatone Telecommunication Pvt. Ltd",
+ [3]byte{12, 213, 2}: "Westell Technologies Inc.",
+ [3]byte{12, 214, 150}: "Amimon Ltd",
+ [3]byte{12, 214, 189}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{12, 215, 70}: "Apple, Inc.",
+ [3]byte{12, 215, 194}: "Axium Technologies, Inc.",
+ [3]byte{12, 216, 108}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+ [3]byte{12, 217, 150}: "Cisco Systems, Inc",
+ [3]byte{12, 217, 193}: "Visteon Corporation",
+ [3]byte{12, 218, 65}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{12, 220, 204}: "Inala Technologies",
+ [3]byte{12, 221, 239}: "Nokia Corporation",
+ [3]byte{12, 223, 164}: "Samsung Electronics Co.,Ltd",
+ [3]byte{12, 224, 228}: "PLANTRONICS, INC.",
+ [3]byte{12, 229, 211}: "DH electronics GmbH",
+ [3]byte{12, 231, 9}: "Fox Crypto B.V.",
+ [3]byte{12, 231, 37}: "Microsoft Corporation",
+ [3]byte{12, 232, 47}: "Bonfiglioli Vectron GmbH",
+ [3]byte{12, 233, 54}: "ELIMOS srl",
+ [3]byte{12, 234, 201}: "ARRIS Group, Inc.",
+ [3]byte{12, 238, 230}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{12, 239, 124}: "AnaCom Inc",
+ [3]byte{12, 239, 175}: "IEEE Registration Authority",
+ [3]byte{12, 240, 25}: "Malgn Technology Co., Ltd.",
+ [3]byte{12, 240, 180}: "Globalsat International Technology Ltd",
+ [3]byte{12, 243, 97}: "Java Information",
+ [3]byte{12, 243, 238}: "EM Microelectronic",
+ [3]byte{12, 244, 5}: "Beijing Signalway Technologies Co.,Ltd",
+ [3]byte{12, 244, 213}: "Ruckus Wireless",
+ [3]byte{12, 245, 164}: "Cisco Systems, Inc",
+ [3]byte{12, 248, 147}: "ARRIS Group, Inc.",
+ [3]byte{12, 249, 192}: "BSkyB Ltd",
+ [3]byte{12, 252, 131}: "Airoha Technology Corp.,",
+ [3]byte{12, 253, 55}: "SUSE Linux GmbH",
+ [3]byte{12, 254, 69}: "Sony Interactive Entertainment Inc.",
+ [3]byte{16, 0, 0}: "Private",
+ [3]byte{16, 0, 90}: "IBM Corp",
+ [3]byte{16, 0, 232}: "NATIONAL SEMICONDUCTOR",
+ [3]byte{16, 0, 253}: "LaonPeople",
+ [3]byte{16, 1, 202}: "Ashley Butterworth",
+ [3]byte{16, 2, 181}: "Intel Corporate",
+ [3]byte{16, 5, 1}: "PEGATRON CORPORATION",
+ [3]byte{16, 5, 177}: "ARRIS Group, Inc.",
+ [3]byte{16, 5, 202}: "Cisco Systems, Inc",
+ [3]byte{16, 7, 35}: "IEEE Registration Authority",
+ [3]byte{16, 7, 182}: "Samsung Electronics Co.,Ltd",
+ [3]byte{16, 8, 177}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{16, 9, 12}: "Janome Sewing Machine Co., Ltd.",
+ [3]byte{16, 11, 169}: "Intel Corporate",
+ [3]byte{16, 12, 36}: "pomdevices, LLC",
+ [3]byte{16, 13, 47}: "Online Security Pty. Ltd.",
+ [3]byte{16, 13, 50}: "Embedian, Inc.",
+ [3]byte{16, 13, 127}: "NETGEAR",
+ [3]byte{16, 14, 43}: "NEC CASIO Mobile Communications",
+ [3]byte{16, 14, 126}: "Juniper Networks",
+ [3]byte{16, 15, 24}: "Fu Gang Electronic(KunShan)CO.,LTD",
+ [3]byte{16, 16, 182}: "McCain Inc",
+ [3]byte{16, 18, 18}: "Vivo International Corporation Pty Ltd",
+ [3]byte{16, 18, 24}: "Korins Inc.",
+ [3]byte{16, 18, 72}: "ITG, Inc.",
+ [3]byte{16, 18, 80}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+ [3]byte{16, 19, 49}: "Technicolor",
+ [3]byte{16, 19, 238}: "Justec International Technology INC.",
+ [3]byte{16, 24, 158}: "Elmo Motion Control",
+ [3]byte{16, 27, 84}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{16, 28, 12}: "Apple, Inc.",
+ [3]byte{16, 29, 81}: "ON-Q LLC dba ON-Q Mesh Networks",
+ [3]byte{16, 29, 192}: "Samsung Electronics Co.,Ltd",
+ [3]byte{16, 31, 116}: "Hewlett Packard",
+ [3]byte{16, 34, 121}: "ZeroDesktop, Inc.",
+ [3]byte{16, 39, 190}: "TVIP",
+ [3]byte{16, 40, 49}: "Morion Inc.",
+ [3]byte{16, 42, 179}: "Xiaomi Communications Co Ltd",
+ [3]byte{16, 44, 131}: "XIMEA",
+ [3]byte{16, 45, 150}: "Looxcie Inc.",
+ [3]byte{16, 46, 175}: "Texas Instruments",
+ [3]byte{16, 47, 107}: "Microsoft Corporation",
+ [3]byte{16, 48, 52}: "Cara Systems",
+ [3]byte{16, 48, 71}: "Samsung Electronics Co.,Ltd",
+ [3]byte{16, 51, 120}: "FLECTRON Co., LTD",
+ [3]byte{16, 55, 17}: "Simlink AS",
+ [3]byte{16, 59, 89}: "Samsung Electronics Co.,Ltd",
+ [3]byte{16, 61, 234}: "HFC Technology (Beijing) Ltd. Co.",
+ [3]byte{16, 64, 243}: "Apple, Inc.",
+ [3]byte{16, 65, 127}: "Apple, Inc.",
+ [3]byte{16, 67, 105}: "Soundmax Electronic Limited",
+ [3]byte{16, 68, 0}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{16, 68, 90}: "Shaanxi Hitech Electronic Co., LTD",
+ [3]byte{16, 69, 190}: "Norphonic AS",
+ [3]byte{16, 69, 248}: "LNT-Automation GmbH",
+ [3]byte{16, 70, 180}: "FormericaOE",
+ [3]byte{16, 71, 128}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{16, 72, 177}: "Beijing Duokan Technology Limited",
+ [3]byte{16, 73, 99}: "HARTING K.K.",
+ [3]byte{16, 74, 125}: "Intel Corporate",
+ [3]byte{16, 75, 70}: "Mitsubishi Electric Corporation",
+ [3]byte{16, 77, 119}: "Innovative Computer Engineering",
+ [3]byte{16, 78, 7}: "Shanghai Genvision Industries Co.,Ltd",
+ [3]byte{16, 78, 137}: "Garmin International",
+ [3]byte{16, 79, 168}: "Sony Corporation",
+ [3]byte{16, 81, 114}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{16, 86, 17}: "ARRIS Group, Inc.",
+ [3]byte{16, 86, 202}: "Peplink International Ltd.",
+ [3]byte{16, 88, 135}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{16, 90, 247}: "ADB Italia",
+ [3]byte{16, 92, 59}: "Perma-Pipe, Inc.",
+ [3]byte{16, 92, 191}: "DuroByte Inc",
+ [3]byte{16, 95, 6}: "Actiontec Electronics, Inc",
+ [3]byte{16, 95, 73}: "Cisco SPVTG",
+ [3]byte{16, 96, 75}: "Hewlett Packard",
+ [3]byte{16, 98, 201}: "Adatis GmbH & Co. KG",
+ [3]byte{16, 98, 208}: "Technicolor CH USA Inc.",
+ [3]byte{16, 98, 235}: "D-Link International",
+ [3]byte{16, 100, 226}: "ADFweb.com s.r.l.",
+ [3]byte{16, 101, 163}: "Core Brands LLC",
+ [3]byte{16, 101, 207}: "IQSIM",
+ [3]byte{16, 102, 130}: "NEC Platforms, Ltd.",
+ [3]byte{16, 104, 63}: "LG Electronics (Mobile Communications)",
+ [3]byte{16, 111, 63}: "BUFFALO.INC",
+ [3]byte{16, 111, 239}: "Ad-Sol Nissin Corp",
+ [3]byte{16, 113, 249}: "Cloud Telecomputers, LLC",
+ [3]byte{16, 114, 35}: "TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO",
+ [3]byte{16, 118, 138}: "EoCell",
+ [3]byte{16, 119, 176}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{16, 119, 177}: "Samsung Electronics Co.,Ltd",
+ [3]byte{16, 120, 91}: "Actiontec Electronics, Inc",
+ [3]byte{16, 120, 115}: "Shenzhen Jinkeyi Communication Co., Ltd.",
+ [3]byte{16, 120, 206}: "Hanvit SI, Inc.",
+ [3]byte{16, 120, 210}: "Elitegroup Computer Systems Co.,Ltd.",
+ [3]byte{16, 122, 134}: "U&U ENGINEERING INC.",
+ [3]byte{16, 123, 68}: "ASUSTek COMPUTER INC.",
+ [3]byte{16, 123, 239}: "Zyxel Communications Corporation",
+ [3]byte{16, 125, 26}: "Dell Inc.",
+ [3]byte{16, 131, 210}: "Microseven Systems, LLC",
+ [3]byte{16, 134, 140}: "ARRIS Group, Inc.",
+ [3]byte{16, 136, 15}: "Daruma Telecomunicações e Informática S.A.",
+ [3]byte{16, 136, 206}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{16, 138, 27}: "RAONIX Inc.",
+ [3]byte{16, 140, 207}: "Cisco Systems, Inc",
+ [3]byte{16, 146, 102}: "Samsung Electronics Co.,Ltd",
+ [3]byte{16, 147, 233}: "Apple, Inc.",
+ [3]byte{16, 149, 75}: "Megabyte Ltd.",
+ [3]byte{16, 152, 54}: "Dell Inc.",
+ [3]byte{16, 154, 185}: "Tosibox Oy",
+ [3]byte{16, 154, 221}: "Apple, Inc.",
+ [3]byte{16, 159, 169}: "Actiontec Electronics, Inc",
+ [3]byte{16, 161, 59}: "FUJIKURA RUBBER LTD.",
+ [3]byte{16, 164, 190}: "SHENZHEN BILIAN ELECTRONIC CO.,LTD",
+ [3]byte{16, 165, 208}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{16, 166, 89}: "Mobile Create Co.,Ltd.",
+ [3]byte{16, 167, 67}: "SK Mtek Limited",
+ [3]byte{16, 169, 50}: "Beijing Cyber Cloud Technology Co. ,Ltd.",
+ [3]byte{16, 174, 96}: "Private",
+ [3]byte{16, 175, 120}: "Shenzhen ATUE Technology Co., Ltd",
+ [3]byte{16, 177, 248}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{16, 178, 107}: "base Co.,Ltd.",
+ [3]byte{16, 183, 19}: "Private",
+ [3]byte{16, 183, 246}: "Plastoform Industries Ltd.",
+ [3]byte{16, 185, 254}: "Lika srl",
+ [3]byte{16, 186, 165}: "GANA I&C CO., LTD",
+ [3]byte{16, 189, 24}: "Cisco Systems, Inc",
+ [3]byte{16, 189, 85}: "Q-Lab Corporation",
+ [3]byte{16, 190, 245}: "D-Link International",
+ [3]byte{16, 191, 72}: "ASUSTek COMPUTER INC.",
+ [3]byte{16, 192, 124}: "Blu-ray Disc Association",
+ [3]byte{16, 194, 186}: "UTT Co., Ltd.",
+ [3]byte{16, 195, 123}: "ASUSTek COMPUTER INC.",
+ [3]byte{16, 197, 134}: "BIO SOUND LAB CO., LTD.",
+ [3]byte{16, 198, 12}: "Domino UK Ltd",
+ [3]byte{16, 198, 31}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{16, 198, 126}: "SHENZHEN JUCHIN TECHNOLOGY CO., LTD",
+ [3]byte{16, 198, 252}: "Garmin International",
+ [3]byte{16, 199, 63}: "Midas Klark Teknik Ltd",
+ [3]byte{16, 202, 129}: "PRECIA",
+ [3]byte{16, 204, 27}: "Liverock technologies,INC",
+ [3]byte{16, 204, 219}: "AXIMUM PRODUITS ELECTRONIQUES",
+ [3]byte{16, 205, 174}: "Avaya Inc",
+ [3]byte{16, 205, 182}: "Essential Products, Inc.",
+ [3]byte{16, 206, 169}: "Texas Instruments",
+ [3]byte{16, 208, 122}: "AMPAK Technology, Inc.",
+ [3]byte{16, 208, 171}: "zte corporation",
+ [3]byte{16, 209, 220}: "INSTAR Deutschland GmbH",
+ [3]byte{16, 211, 138}: "Samsung Electronics Co.,Ltd",
+ [3]byte{16, 213, 66}: "Samsung Electronics Co.,Ltd",
+ [3]byte{16, 218, 67}: "NETGEAR",
+ [3]byte{16, 221, 177}: "Apple, Inc.",
+ [3]byte{16, 221, 244}: "Maxway Electronics CO.,LTD",
+ [3]byte{16, 222, 228}: "automationNEXT GmbH",
+ [3]byte{16, 223, 139}: "Shenzhen CareDear Communication Technology Co.,Ltd",
+ [3]byte{16, 226, 213}: "Qi Hardware Inc.",
+ [3]byte{16, 227, 199}: "Seohwa Telecom",
+ [3]byte{16, 228, 175}: "APR, LLC",
+ [3]byte{16, 230, 143}: "KWANGSUNG ELECTRONICS KOREA CO.,LTD.",
+ [3]byte{16, 230, 174}: "Source Technologies, LLC",
+ [3]byte{16, 232, 120}: "Nokia",
+ [3]byte{16, 232, 238}: "PhaseSpace",
+ [3]byte{16, 234, 89}: "Cisco SPVTG",
+ [3]byte{16, 238, 217}: "Canoga Perkins Corporation",
+ [3]byte{16, 240, 5}: "Intel Corporate",
+ [3]byte{16, 241, 99}: "TNK CO.,LTD",
+ [3]byte{16, 241, 242}: "LG Electronics (Mobile Communications)",
+ [3]byte{16, 243, 17}: "Cisco Systems, Inc",
+ [3]byte{16, 243, 219}: "Gridco Systems, Inc.",
+ [3]byte{16, 244, 154}: "T3 Innovation",
+ [3]byte{16, 246, 129}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{16, 249, 111}: "LG Electronics (Mobile Communications)",
+ [3]byte{16, 249, 238}: "Nokia Corporation",
+ [3]byte{16, 250, 206}: "Reacheng Communication Technology Co.,Ltd",
+ [3]byte{16, 251, 240}: "KangSheng LTD.",
+ [3]byte{16, 252, 84}: "Shany Electronic Co., Ltd.",
+ [3]byte{16, 252, 182}: "mirusystems CO.,LTD",
+ [3]byte{16, 254, 237}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{17, 0, 170}: "Private",
+ [3]byte{17, 17, 17}: "Private",
+ [3]byte{20, 2, 236}: "Hewlett Packard Enterprise",
+ [3]byte{20, 4, 103}: "SNK Technologies Co.,Ltd.",
+ [3]byte{20, 7, 8}: "Private",
+ [3]byte{20, 7, 224}: "Abrantix AG",
+ [3]byte{20, 12, 91}: "PLNetworks",
+ [3]byte{20, 12, 118}: "FREEBOX SAS",
+ [3]byte{20, 13, 79}: "Flextronics International",
+ [3]byte{20, 16, 159}: "Apple, Inc.",
+ [3]byte{20, 19, 48}: "Anakreon UK LLP",
+ [3]byte{20, 19, 87}: "ATP Electronics, Inc.",
+ [3]byte{20, 20, 75}: "Ruijie Networks Co.,LTD",
+ [3]byte{20, 20, 230}: "Ningbo Sanhe Digital Co.,Ltd",
+ [3]byte{20, 21, 124}: "TOKYO COSMOS ELECTRIC CO.,LTD.",
+ [3]byte{20, 24, 119}: "Dell Inc.",
+ [3]byte{20, 26, 81}: "Treetech Sistemas Digitais",
+ [3]byte{20, 26, 163}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{20, 27, 189}: "Volex Inc.",
+ [3]byte{20, 27, 240}: "Intellimedia Systems Ltd",
+ [3]byte{20, 31, 120}: "Samsung Electronics Co.,Ltd",
+ [3]byte{20, 31, 186}: "IEEE Registration Authority",
+ [3]byte{20, 34, 219}: "eero inc.",
+ [3]byte{20, 35, 215}: "EUTRONIX CO., LTD.",
+ [3]byte{20, 40, 130}: "MIDICOM ELECTRONICS CO.LTD",
+ [3]byte{20, 41, 113}: "NEMOA ELECTRONICS (HK) CO. LTD",
+ [3]byte{20, 43, 210}: "Armtel Ltd.",
+ [3]byte{20, 43, 214}: "Guangdong Appscomm Co.,Ltd",
+ [3]byte{20, 45, 39}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{20, 45, 139}: "Incipio Technologies, Inc",
+ [3]byte{20, 45, 245}: "Amphitech",
+ [3]byte{20, 47, 253}: "LT SECURITY INC",
+ [3]byte{20, 48, 4}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{20, 48, 122}: "Avermetrics",
+ [3]byte{20, 48, 198}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{20, 50, 209}: "Samsung Electronics Co.,Ltd",
+ [3]byte{20, 51, 101}: "TEM Mobile Limited",
+ [3]byte{20, 53, 139}: "Mediabridge Products, LLC.",
+ [3]byte{20, 53, 179}: "Future Designs, Inc.",
+ [3]byte{20, 54, 5}: "Nokia Corporation",
+ [3]byte{20, 54, 198}: "Lenovo Mobile Communication Technology Ltd.",
+ [3]byte{20, 55, 59}: "PROCOM Systems",
+ [3]byte{20, 58, 234}: "Dynapower Company LLC",
+ [3]byte{20, 61, 242}: "Beijing Shidai Hongyuan Network Communication Co.,Ltd",
+ [3]byte{20, 62, 96}: "Nokia",
+ [3]byte{20, 62, 191}: "zte corporation",
+ [3]byte{20, 63, 39}: "Noccela Oy",
+ [3]byte{20, 65, 70}: "Honeywell (China) Co., LTD",
+ [3]byte{20, 65, 226}: "Monaco Enterprises, Inc.",
+ [3]byte{20, 67, 25}: "Creative&Link Technology Limited",
+ [3]byte{20, 68, 74}: "Apollo Seiko Ltd.",
+ [3]byte{20, 70, 228}: "AVISTEL",
+ [3]byte{20, 72, 139}: "Shenzhen Doov Technology Co.,Ltd",
+ [3]byte{20, 73, 120}: "Digital Control Incorporated",
+ [3]byte{20, 73, 224}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{20, 76, 26}: "Max Communication GmbH",
+ [3]byte{20, 77, 103}: "Zioncom Electronics (Shenzhen) Ltd.",
+ [3]byte{20, 79, 215}: "IEEE Registration Authority",
+ [3]byte{20, 84, 18}: "Entis Co., Ltd.",
+ [3]byte{20, 86, 69}: "Savitech Corp.",
+ [3]byte{20, 86, 142}: "Samsung Electronics Co.,Ltd",
+ [3]byte{20, 88, 208}: "Hewlett Packard",
+ [3]byte{20, 90, 5}: "Apple, Inc.",
+ [3]byte{20, 90, 131}: "Logi-D inc",
+ [3]byte{20, 91, 209}: "ARRIS Group, Inc.",
+ [3]byte{20, 91, 225}: "nyantec GmbH",
+ [3]byte{20, 94, 69}: "Kaleao Limited",
+ [3]byte{20, 95, 148}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{20, 96, 128}: "zte corporation",
+ [3]byte{20, 97, 2}: "Alpine Electronics, Inc.",
+ [3]byte{20, 97, 47}: "Avaya Inc",
+ [3]byte{20, 99, 8}: "JABIL CIRCUIT (SHANGHAI) LTD.",
+ [3]byte{20, 106, 11}: "Cypress Electronics Limited",
+ [3]byte{20, 107, 114}: "Shenzhen Fortune Ship Technology Co., Ltd.",
+ [3]byte{20, 110, 10}: "Private",
+ [3]byte{20, 115, 115}: "TUBITAK UEKAE",
+ [3]byte{20, 116, 17}: "RIM",
+ [3]byte{20, 117, 144}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{20, 120, 11}: "PerkinElmer Technologies GmbH & Co. KG",
+ [3]byte{20, 121, 243}: "China Mobile Group Device Co.,Ltd.",
+ [3]byte{20, 125, 179}: "JOA TELECOM.CO.,LTD",
+ [3]byte{20, 125, 197}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{20, 130, 91}: "Hefei Radio Communication Technology Co., Ltd",
+ [3]byte{20, 134, 146}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{20, 137, 62}: "VIXTEL TECHNOLOGIES LIMTED",
+ [3]byte{20, 137, 81}: "LCFC(HeFei) Electronics Technology co., ltd",
+ [3]byte{20, 137, 253}: "Samsung Electronics Co.,Ltd",
+ [3]byte{20, 138, 112}: "ADS GmbH",
+ [3]byte{20, 143, 33}: "Garmin International",
+ [3]byte{20, 143, 198}: "Apple, Inc.",
+ [3]byte{20, 144, 144}: "KongTop industrial(shen zhen)CO.,LTD",
+ [3]byte{20, 145, 130}: "Belkin International Inc.",
+ [3]byte{20, 147, 70}: "PNI sensor corporation",
+ [3]byte{20, 148, 72}: "BLU CASTLE S.A.",
+ [3]byte{20, 152, 125}: "Technicolor CH USA Inc.",
+ [3]byte{20, 153, 226}: "Apple, Inc.",
+ [3]byte{20, 154, 16}: "Microsoft Corporation",
+ [3]byte{20, 157, 9}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{20, 158, 207}: "Dell Inc.",
+ [3]byte{20, 159, 60}: "Samsung Electronics Co.,Ltd",
+ [3]byte{20, 159, 182}: "GUANGDONG GENIUS TECHNOLOGY CO.,LTD.",
+ [3]byte{20, 159, 232}: "Lenovo Mobile Communication Technology Ltd.",
+ [3]byte{20, 160, 248}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{20, 163, 100}: "Samsung Electronics Co.,Ltd",
+ [3]byte{20, 165, 26}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{20, 166, 44}: "S.M. Dezac S.A.",
+ [3]byte{20, 167, 139}: "Zhejiang Dahua Technology Co., Ltd.",
+ [3]byte{20, 168, 107}: "ShenZhen Telacom Science&Technology Co., Ltd",
+ [3]byte{20, 169, 227}: "MST CORPORATION",
+ [3]byte{20, 171, 197}: "Intel Corporate",
+ [3]byte{20, 171, 240}: "ARRIS Group, Inc.",
+ [3]byte{20, 174, 219}: "VTech Telecommunications Ltd.",
+ [3]byte{20, 177, 38}: "Industrial Software Co",
+ [3]byte{20, 177, 200}: "InfiniWing, Inc.",
+ [3]byte{20, 179, 31}: "Dell Inc.",
+ [3]byte{20, 179, 112}: "Gigaset Digital Technology (Shenzhen) Co., Ltd.",
+ [3]byte{20, 180, 132}: "Samsung Electronics Co.,Ltd",
+ [3]byte{20, 183, 61}: "ARCHEAN Technologies",
+ [3]byte{20, 183, 248}: "Technicolor CH USA Inc.",
+ [3]byte{20, 184, 55}: "Shenzhen YOUHUA Technology Co., Ltd",
+ [3]byte{20, 185, 104}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{20, 187, 110}: "Samsung Electronics Co.,Ltd",
+ [3]byte{20, 189, 97}: "Apple, Inc.",
+ [3]byte{20, 192, 137}: "DUNE HD LTD",
+ [3]byte{20, 193, 38}: "Nokia Corporation",
+ [3]byte{20, 193, 255}: "ShenZhen QianHai Comlan communication Co.,LTD",
+ [3]byte{20, 194, 29}: "Sabtech Industries",
+ [3]byte{20, 195, 194}: "K.A. Schmersal GmbH & Co. KG",
+ [3]byte{20, 201, 19}: "LG Electronics",
+ [3]byte{20, 204, 32}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{20, 207, 141}: "OHSUNG",
+ [3]byte{20, 207, 146}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{20, 207, 226}: "ARRIS Group, Inc.",
+ [3]byte{20, 209, 31}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{20, 212, 254}: "ARRIS Group, Inc.",
+ [3]byte{20, 214, 77}: "D-Link International",
+ [3]byte{20, 215, 110}: "CONCH ELECTRONIC Co.,Ltd",
+ [3]byte{20, 218, 233}: "ASUSTek COMPUTER INC.",
+ [3]byte{20, 219, 133}: "S NET MEDIA",
+ [3]byte{20, 221, 169}: "ASUSTek COMPUTER INC.",
+ [3]byte{20, 221, 229}: "MPMKVVCL",
+ [3]byte{20, 228, 236}: "mLogic LLC",
+ [3]byte{20, 230, 228}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{20, 231, 200}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+ [3]byte{20, 235, 51}: "BSMediasoft Co., Ltd.",
+ [3]byte{20, 237, 165}: "Wächter GmbH Sicherheitssysteme",
+ [3]byte{20, 237, 187}: "2Wire Inc",
+ [3]byte{20, 237, 228}: "Kaiam Corporation",
+ [3]byte{20, 238, 157}: "AirNav Systems LLC",
+ [3]byte{20, 240, 197}: "Xtremio Ltd.",
+ [3]byte{20, 242, 142}: "ShenYang ZhongKe-Allwin Technology Co.LTD",
+ [3]byte{20, 244, 42}: "Samsung Electronics Co.,Ltd",
+ [3]byte{20, 246, 90}: "Xiaomi Communications Co Ltd",
+ [3]byte{20, 248, 147}: "Wuhan FiberHome Digital Technology Co.,Ltd.",
+ [3]byte{20, 254, 175}: "SAGITTAR LIMITED",
+ [3]byte{20, 254, 181}: "Dell Inc.",
+ [3]byte{24, 0, 45}: "Sony Mobile Communications AB",
+ [3]byte{24, 0, 219}: "Fitbit Inc.",
+ [3]byte{24, 1, 125}: "Harbin Arteor technology co., LTD",
+ [3]byte{24, 1, 227}: "Bittium Wireless Ltd",
+ [3]byte{24, 3, 115}: "Dell Inc.",
+ [3]byte{24, 3, 250}: "IBT Interfaces",
+ [3]byte{24, 6, 117}: "Dilax Intelcom GmbH",
+ [3]byte{24, 6, 255}: "Acer Computer(Shanghai) Limited.",
+ [3]byte{24, 11, 82}: "Nanotron Technologies GmbH",
+ [3]byte{24, 12, 20}: "iSonea Limited",
+ [3]byte{24, 12, 119}: "Westinghouse Electric Company, LLC",
+ [3]byte{24, 12, 172}: "CANON INC.",
+ [3]byte{24, 16, 78}: "CEDINT-UPM",
+ [3]byte{24, 18, 18}: "Cepton Technologies",
+ [3]byte{24, 20, 32}: "TEB SAS",
+ [3]byte{24, 20, 86}: "Nokia Corporation",
+ [3]byte{24, 22, 201}: "Samsung Electronics Co.,Ltd",
+ [3]byte{24, 23, 20}: "DAEWOOIS",
+ [3]byte{24, 23, 37}: "Cameo Communications, Inc.",
+ [3]byte{24, 25, 63}: "Tamtron Oy",
+ [3]byte{24, 27, 235}: "Actiontec Electronics, Inc",
+ [3]byte{24, 30, 120}: "Sagemcom Broadband SAS",
+ [3]byte{24, 30, 176}: "Samsung Electronics Co.,Ltd",
+ [3]byte{24, 32, 18}: "Aztech Associates Inc.",
+ [3]byte{24, 32, 50}: "Apple, Inc.",
+ [3]byte{24, 32, 76}: "Kummler+Matter AG",
+ [3]byte{24, 32, 166}: "Sage Co., Ltd.",
+ [3]byte{24, 33, 149}: "Samsung Electronics Co.,Ltd",
+ [3]byte{24, 34, 126}: "Samsung Electronics Co.,Ltd",
+ [3]byte{24, 38, 102}: "Samsung Electronics Co.,Ltd",
+ [3]byte{24, 40, 97}: "AirTies Wireless Networks",
+ [3]byte{24, 42, 123}: "Nintendo Co., Ltd.",
+ [3]byte{24, 43, 5}: "8D Technologies",
+ [3]byte{24, 44, 145}: "Concept Development, Inc.",
+ [3]byte{24, 44, 180}: "Nectarsoft Co., Ltd.",
+ [3]byte{24, 45, 152}: "Jinwoo Industrial system",
+ [3]byte{24, 48, 9}: "Woojin Industrial Systems Co., Ltd.",
+ [3]byte{24, 50, 162}: "LAON TECHNOLOGY CO., LTD.",
+ [3]byte{24, 51, 157}: "Cisco Systems, Inc",
+ [3]byte{24, 52, 81}: "Apple, Inc.",
+ [3]byte{24, 53, 209}: "ARRIS Group, Inc.",
+ [3]byte{24, 54, 252}: "Elecsys International Corporation",
+ [3]byte{24, 56, 37}: "Wuhan Lingjiu High-tech Co.,Ltd.",
+ [3]byte{24, 56, 100}: "CAP-TECH INTERNATIONAL CO., LTD.",
+ [3]byte{24, 57, 25}: "Unicoi Systems",
+ [3]byte{24, 57, 110}: "SUNSEA TELECOMMUNICATIONS CO.,LTD.",
+ [3]byte{24, 58, 45}: "Samsung Electronics Co.,Ltd",
+ [3]byte{24, 59, 210}: "BYD Precision Manufacture Company Ltd.",
+ [3]byte{24, 61, 162}: "Intel Corporate",
+ [3]byte{24, 63, 71}: "Samsung Electronics Co.,Ltd",
+ [3]byte{24, 64, 164}: "Shenzhen Trylong Smart Science and Technology Co., Ltd.",
+ [3]byte{24, 66, 29}: "Private",
+ [3]byte{24, 66, 47}: "Alcatel Lucent",
+ [3]byte{24, 68, 98}: "Riava Networks, Inc.",
+ [3]byte{24, 68, 230}: "zte corporation",
+ [3]byte{24, 70, 23}: "Samsung Electronics Co.,Ltd",
+ [3]byte{24, 72, 216}: "Fastback Networks",
+ [3]byte{24, 74, 111}: "Alcatel-Lucent Shanghai Bell Co., Ltd",
+ [3]byte{24, 78, 148}: "MESSOA TECHNOLOGIES INC.",
+ [3]byte{24, 79, 50}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{24, 82, 7}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+ [3]byte{24, 82, 83}: "Pixord Corporation",
+ [3]byte{24, 82, 130}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{24, 83, 224}: "Hanyang Digitech Co.Ltd",
+ [3]byte{24, 85, 15}: "Cisco SPVTG",
+ [3]byte{24, 89, 51}: "Cisco SPVTG",
+ [3]byte{24, 89, 54}: "Xiaomi Communications Co Ltd",
+ [3]byte{24, 90, 232}: "Zenotech.Co.,Ltd",
+ [3]byte{24, 93, 154}: "BobjGear LLC",
+ [3]byte{24, 94, 15}: "Intel Corporate",
+ [3]byte{24, 96, 36}: "Hewlett Packard",
+ [3]byte{24, 97, 199}: "lemonbeat GmbH",
+ [3]byte{24, 98, 44}: "Sagemcom Broadband SAS",
+ [3]byte{24, 100, 114}: "Aruba Networks",
+ [3]byte{24, 101, 113}: "Top Victory Electronics (Taiwan) Co., Ltd.",
+ [3]byte{24, 101, 144}: "Apple, Inc.",
+ [3]byte{24, 102, 218}: "Dell Inc.",
+ [3]byte{24, 102, 227}: "Veros Systems, Inc.",
+ [3]byte{24, 103, 63}: "Hanover Displays Limited",
+ [3]byte{24, 103, 81}: "KOMEG Industrielle Messtechnik GmbH",
+ [3]byte{24, 103, 176}: "Samsung Electronics Co.,Ltd",
+ [3]byte{24, 104, 106}: "zte corporation",
+ [3]byte{24, 104, 130}: "Beward R&D Co., Ltd.",
+ [3]byte{24, 104, 203}: "Hangzhou Hikvision Digital Technology Co.,Ltd.",
+ [3]byte{24, 109, 153}: "Adanis Inc.",
+ [3]byte{24, 113, 23}: "eta plus electronic gmbh",
+ [3]byte{24, 116, 46}: "Amazon Technologies Inc.",
+ [3]byte{24, 117, 50}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+ [3]byte{24, 121, 162}: "GMJ ELECTRIC LIMITED",
+ [3]byte{24, 122, 147}: "AMICCOM Electronics Corporation",
+ [3]byte{24, 124, 129}: "Valeo Vision Systems",
+ [3]byte{24, 126, 213}: "shenzhen kaism technology Co. Ltd",
+ [3]byte{24, 128, 144}: "Cisco Systems, Inc",
+ [3]byte{24, 128, 206}: "Barberry Solutions Ltd",
+ [3]byte{24, 128, 245}: "Alcatel-Lucent Shanghai Bell Co., Ltd",
+ [3]byte{24, 130, 25}: "Alibaba Cloud Computing Ltd.",
+ [3]byte{24, 131, 49}: "Samsung Electronics Co.,Ltd",
+ [3]byte{24, 131, 191}: "Arcadyan Technology Corporation",
+ [3]byte{24, 132, 16}: "CoreTrust Inc.",
+ [3]byte{24, 134, 58}: "DIGITAL ART SYSTEM",
+ [3]byte{24, 134, 172}: "Nokia Danmark A/S",
+ [3]byte{24, 135, 150}: "HTC Corporation",
+ [3]byte{24, 136, 87}: "Beijing Jinhong Xi-Dian Information Technology Corp.",
+ [3]byte{24, 137, 91}: "Samsung Electronics Co.,Ltd",
+ [3]byte{24, 137, 223}: "CerebrEX Inc.",
+ [3]byte{24, 139, 21}: "ShenZhen ZhongRuiJing Technology co.,LTD",
+ [3]byte{24, 139, 69}: "Cisco Systems, Inc",
+ [3]byte{24, 139, 157}: "Cisco Systems, Inc",
+ [3]byte{24, 142, 213}: "TP Vision Belgium N.V. - innovation site Brugge",
+ [3]byte{24, 142, 249}: "G2C Co. Ltd.",
+ [3]byte{24, 144, 216}: "Sagemcom Broadband SAS",
+ [3]byte{24, 146, 44}: "Virtual Instruments",
+ [3]byte{24, 147, 215}: "Texas Instruments",
+ [3]byte{24, 151, 255}: "TechFaith Wireless Technology Limited",
+ [3]byte{24, 153, 245}: "Sichuan Changhong Electric Ltd.",
+ [3]byte{24, 154, 103}: "CSE-Servelec Limited",
+ [3]byte{24, 155, 165}: "IEEE Registration Authority",
+ [3]byte{24, 156, 93}: "Cisco Systems, Inc",
+ [3]byte{24, 158, 252}: "Apple, Inc.",
+ [3]byte{24, 163, 232}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{24, 166, 247}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{24, 169, 5}: "Hewlett Packard",
+ [3]byte{24, 169, 88}: "PROVISION THAI CO., LTD.",
+ [3]byte{24, 169, 155}: "Dell Inc.",
+ [3]byte{24, 170, 69}: "Fon Technology",
+ [3]byte{24, 171, 245}: "Ultra Electronics Electrics",
+ [3]byte{24, 173, 77}: "Polostar Technology Corporation",
+ [3]byte{24, 174, 187}: "Siemens Convergence Creators GmbH&Co.KG",
+ [3]byte{24, 175, 97}: "Apple, Inc.",
+ [3]byte{24, 175, 143}: "Apple, Inc.",
+ [3]byte{24, 175, 159}: "DIGITRONIC Automationsanlagen GmbH",
+ [3]byte{24, 177, 105}: "Sonicwall",
+ [3]byte{24, 178, 9}: "Torrey Pines Logic, Inc",
+ [3]byte{24, 179, 186}: "Netlogic AB",
+ [3]byte{24, 180, 48}: "Nest Labs Inc.",
+ [3]byte{24, 181, 145}: "I-Storm",
+ [3]byte{24, 183, 158}: "Invoxia",
+ [3]byte{24, 184, 31}: "ARRIS Group, Inc.",
+ [3]byte{24, 188, 90}: "Zhejiang Tmall Technology Co., Ltd.",
+ [3]byte{24, 189, 173}: "L-TECH CORPORATION",
+ [3]byte{24, 192, 134}: "Broadcom",
+ [3]byte{24, 193, 157}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+ [3]byte{24, 196, 81}: "Tucson Embedded Systems",
+ [3]byte{24, 197, 1}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+ [3]byte{24, 197, 138}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{24, 200, 231}: "Shenzhen Hualistone Technology Co.,Ltd",
+ [3]byte{24, 204, 35}: "Philio Technology Corporation",
+ [3]byte{24, 204, 136}: "Hitachi Johnson Controls Air",
+ [3]byte{24, 207, 94}: "Liteon Technology Corporation",
+ [3]byte{24, 208, 113}: "DASAN CO., LTD.",
+ [3]byte{24, 210, 37}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{24, 210, 118}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{24, 213, 182}: "SMG Holdings LLC",
+ [3]byte{24, 214, 106}: "Inmarsat",
+ [3]byte{24, 214, 199}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{24, 214, 207}: "Kurth Electronic GmbH",
+ [3]byte{24, 217, 73}: "Qvis Labs, LLC",
+ [3]byte{24, 219, 242}: "Dell Inc.",
+ [3]byte{24, 220, 86}: "Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd",
+ [3]byte{24, 222, 215}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{24, 226, 136}: "STT Condigi",
+ [3]byte{24, 226, 159}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{24, 226, 194}: "Samsung Electronics Co.,Ltd",
+ [3]byte{24, 227, 188}: "TCT mobile ltd",
+ [3]byte{24, 231, 40}: "Cisco Systems, Inc",
+ [3]byte{24, 231, 244}: "Apple, Inc.",
+ [3]byte{24, 232, 15}: "Viking Electronics Inc.",
+ [3]byte{24, 232, 221}: "MODULETEK",
+ [3]byte{24, 238, 105}: "Apple, Inc.",
+ [3]byte{24, 239, 99}: "Cisco Systems, Inc",
+ [3]byte{24, 240, 228}: "Xiaomi Communications Co Ltd",
+ [3]byte{24, 241, 69}: "NetComm Wireless Limited",
+ [3]byte{24, 242, 146}: "Shannon Systems",
+ [3]byte{24, 244, 106}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{24, 246, 67}: "Apple, Inc.",
+ [3]byte{24, 246, 80}: "Multimedia Pacific Limited",
+ [3]byte{24, 247, 107}: "Zhejiang Winsight Technology CO.,LTD",
+ [3]byte{24, 248, 122}: "i3 International Inc.",
+ [3]byte{24, 250, 111}: "ISC applied systems corp",
+ [3]byte{24, 251, 123}: "Dell Inc.",
+ [3]byte{24, 252, 159}: "Changhe Electronics Co., Ltd.",
+ [3]byte{24, 254, 52}: "Espressif Inc.",
+ [3]byte{24, 255, 15}: "Intel Corporate",
+ [3]byte{24, 255, 46}: "Shenzhen Rui Ying Da Technology Co., Ltd",
+ [3]byte{28, 6, 86}: "IDY Corporation",
+ [3]byte{28, 8, 193}: "Lg Innotek",
+ [3]byte{28, 11, 82}: "EPICOM S.A",
+ [3]byte{28, 15, 175}: "Lucid Vision Labs",
+ [3]byte{28, 15, 207}: "Sypro Optics GmbH",
+ [3]byte{28, 17, 225}: "Wartsila Finland Oy",
+ [3]byte{28, 18, 157}: "IEEE PES PSRC/SUB",
+ [3]byte{28, 20, 72}: "ARRIS Group, Inc.",
+ [3]byte{28, 20, 179}: "Airwire Technologies",
+ [3]byte{28, 21, 31}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{28, 23, 211}: "Cisco Systems, Inc",
+ [3]byte{28, 24, 74}: "ShenZhen RicherLink Technologies Co.,LTD",
+ [3]byte{28, 25, 222}: "eyevis GmbH",
+ [3]byte{28, 26, 192}: "Apple, Inc.",
+ [3]byte{28, 27, 13}: "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+ [3]byte{28, 27, 104}: "ARRIS Group, Inc.",
+ [3]byte{28, 28, 253}: "Dalian Hi-Think Computer Technology, Corp",
+ [3]byte{28, 29, 103}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{28, 29, 134}: "Cisco Systems, Inc",
+ [3]byte{28, 30, 227}: "Hui Zhou Gaoshengda Technology Co.,LTD",
+ [3]byte{28, 31, 212}: "LifeBEAM Technologies LTD",
+ [3]byte{28, 33, 209}: "IEEE Registration Authority",
+ [3]byte{28, 35, 44}: "Samsung Electronics Co.,Ltd",
+ [3]byte{28, 35, 79}: "EDMI Europe Ltd",
+ [3]byte{28, 37, 225}: "China Mobile IOT Company Limited",
+ [3]byte{28, 39, 221}: "Datang Gohighsec(zhejiang)Information Technology Co.,Ltd.",
+ [3]byte{28, 51, 14}: "PernixData",
+ [3]byte{28, 51, 77}: "ITS Telecom",
+ [3]byte{28, 52, 119}: "Innovation Wireless",
+ [3]byte{28, 53, 241}: "NEW Lift Neue Elektronische Wege Steuerungsbau GmbH",
+ [3]byte{28, 54, 187}: "Apple, Inc.",
+ [3]byte{28, 55, 191}: "Cloudium Systems Ltd.",
+ [3]byte{28, 57, 71}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+ [3]byte{28, 57, 138}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{28, 58, 79}: "AccuSpec Electronics, LLC",
+ [3]byte{28, 58, 222}: "Samsung Electronics Co.,Ltd",
+ [3]byte{28, 61, 231}: "Sigma Koki Co.,Ltd.",
+ [3]byte{28, 62, 132}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{28, 64, 36}: "Dell Inc.",
+ [3]byte{28, 64, 232}: "SHENZHEN PROGRESS&WIN TECHNOLOGY CO.,LTD",
+ [3]byte{28, 65, 88}: "Gemalto M2M GmbH",
+ [3]byte{28, 67, 236}: "JAPAN CIRCUIT CO.,LTD",
+ [3]byte{28, 68, 25}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{28, 69, 147}: "Texas Instruments",
+ [3]byte{28, 72, 64}: "IMS Messsysteme GmbH",
+ [3]byte{28, 72, 206}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{28, 72, 249}: "GN Netcom A/S",
+ [3]byte{28, 73, 123}: "Gemtek Technology Co., Ltd.",
+ [3]byte{28, 74, 247}: "AMON INC",
+ [3]byte{28, 75, 185}: "SMG ENTERPRISE, LLC",
+ [3]byte{28, 75, 214}: "AzureWave Technology Inc.",
+ [3]byte{28, 77, 112}: "Intel Corporate",
+ [3]byte{28, 81, 181}: "Techaya LTD",
+ [3]byte{28, 82, 22}: "DONGGUAN HELE ELECTRONICS CO., LTD",
+ [3]byte{28, 82, 214}: "FLAT DISPLAY TECHNOLOGY CORPORATION",
+ [3]byte{28, 85, 58}: "QianGua Corp.",
+ [3]byte{28, 86, 254}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{28, 87, 216}: "Kraftway Corporation PLC",
+ [3]byte{28, 90, 11}: "Tegile Systems",
+ [3]byte{28, 90, 62}: "Samsung Electronics Co.,Ltd",
+ [3]byte{28, 90, 107}: "Philips Electronics Nederland BV",
+ [3]byte{28, 92, 85}: "PRIMA Cinema, Inc",
+ [3]byte{28, 92, 96}: "Shenzhen Belzon Technology Co.,LTD.",
+ [3]byte{28, 92, 242}: "Apple, Inc.",
+ [3]byte{28, 95, 43}: "D-Link International",
+ [3]byte{28, 95, 255}: "Beijing Ereneben Information Technology Co.,Ltd Shenzhen Branch",
+ [3]byte{28, 96, 222}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+ [3]byte{28, 98, 184}: "Samsung Electronics Co.,Ltd",
+ [3]byte{28, 99, 183}: "OpenProducts 237 AB",
+ [3]byte{28, 101, 157}: "Liteon Technology Corporation",
+ [3]byte{28, 102, 109}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{28, 102, 170}: "Samsung Electronics Co.,Ltd",
+ [3]byte{28, 103, 88}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{28, 105, 165}: "BlackBerry RTS",
+ [3]byte{28, 106, 122}: "Cisco Systems, Inc",
+ [3]byte{28, 107, 202}: "Mitsunami Co., Ltd.",
+ [3]byte{28, 110, 76}: "Logistic Service & Engineering Co.,Ltd",
+ [3]byte{28, 110, 118}: "Quarion Technology Inc",
+ [3]byte{28, 111, 101}: "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+ [3]byte{28, 112, 34}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{28, 115, 40}: "Connected Home",
+ [3]byte{28, 115, 112}: "Neotech",
+ [3]byte{28, 116, 13}: "Zyxel Communications Corporation",
+ [3]byte{28, 117, 8}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+ [3]byte{28, 118, 202}: "Terasic Technologies Inc.",
+ [3]byte{28, 119, 246}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{28, 120, 57}: "Shenzhen Tencent Computer System Co., Ltd.",
+ [3]byte{28, 123, 33}: "Sony Mobile Communications AB",
+ [3]byte{28, 123, 35}: "Qingdao Hisense Communications Co.,Ltd.",
+ [3]byte{28, 124, 17}: "EID",
+ [3]byte{28, 124, 69}: "Vitek Industrial Video Products, Inc.",
+ [3]byte{28, 124, 199}: "Coriant GmbH",
+ [3]byte{28, 125, 34}: "Fuji Xerox Co., Ltd.",
+ [3]byte{28, 126, 81}: "3bumen.com",
+ [3]byte{28, 126, 229}: "D-Link International",
+ [3]byte{28, 131, 65}: "Hefei Bitland Information Technology Co.Ltd",
+ [3]byte{28, 131, 176}: "Linked IP GmbH",
+ [3]byte{28, 132, 100}: "FORMOSA WIRELESS COMMUNICATION CORP.",
+ [3]byte{28, 134, 173}: "MCT CO., LTD.",
+ [3]byte{28, 135, 44}: "ASUSTek COMPUTER INC.",
+ [3]byte{28, 142, 92}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{28, 142, 142}: "DB Communication & Systems Co., ltd.",
+ [3]byte{28, 143, 138}: "Phase Motion Control SpA",
+ [3]byte{28, 145, 72}: "Apple, Inc.",
+ [3]byte{28, 145, 121}: "Integrated System Technologies Ltd",
+ [3]byte{28, 148, 146}: "RUAG Schweiz AG",
+ [3]byte{28, 149, 93}: "I-LAX ELECTRONICS INC.",
+ [3]byte{28, 149, 159}: "Veethree Electronics And Marine LLC",
+ [3]byte{28, 150, 90}: "Weifang GoerTek Technology Co.,Ltd.",
+ [3]byte{28, 151, 61}: "PRICOM Design",
+ [3]byte{28, 152, 236}: "Hewlett Packard Enterprise",
+ [3]byte{28, 153, 76}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{28, 156, 38}: "Zoovel Technologies",
+ [3]byte{28, 157, 62}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+ [3]byte{28, 158, 70}: "Apple, Inc.",
+ [3]byte{28, 158, 203}: "Beijing Nari Smartchip Microelectronics Company Limited",
+ [3]byte{28, 160, 211}: "IEEE Registration Authority",
+ [3]byte{28, 162, 177}: "ruwido austria gmbh",
+ [3]byte{28, 165, 50}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+ [3]byte{28, 167, 112}: "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD",
+ [3]byte{28, 170, 7}: "Cisco Systems, Inc",
+ [3]byte{28, 171, 1}: "Innovolt",
+ [3]byte{28, 171, 52}: "New H3C Technologies Co., Ltd",
+ [3]byte{28, 171, 167}: "Apple, Inc.",
+ [3]byte{28, 171, 192}: "Hitron Technologies. Inc",
+ [3]byte{28, 173, 209}: "Bosung Electronics Co., Ltd.",
+ [3]byte{28, 175, 5}: "Samsung Electronics Co.,Ltd",
+ [3]byte{28, 175, 247}: "D-Link International",
+ [3]byte{28, 176, 148}: "HTC Corporation",
+ [3]byte{28, 177, 127}: "NEC Platforms, Ltd.",
+ [3]byte{28, 178, 67}: "TDC A/S",
+ [3]byte{28, 183, 44}: "ASUSTek COMPUTER INC.",
+ [3]byte{28, 184, 87}: "Becon Technologies Co,.Ltd.",
+ [3]byte{28, 185, 196}: "Ruckus Wireless",
+ [3]byte{28, 186, 140}: "Texas Instruments",
+ [3]byte{28, 187, 168}: "OJSC Ufimskiy Zavod Promsvyaz",
+ [3]byte{28, 189, 14}: "Amplified Engineering Pty Ltd",
+ [3]byte{28, 189, 185}: "D-Link International",
+ [3]byte{28, 192, 53}: "PLANEX COMMUNICATIONS INC.",
+ [3]byte{28, 192, 225}: "IEEE Registration Authority",
+ [3]byte{28, 193, 26}: "Wavetronix",
+ [3]byte{28, 193, 222}: "Hewlett Packard",
+ [3]byte{28, 195, 22}: "MileSight Technology Co., Ltd.",
+ [3]byte{28, 197, 134}: "Absolute Acoustics",
+ [3]byte{28, 198, 60}: "Arcadyan Technology Corporation",
+ [3]byte{28, 199, 45}: "Shenzhen Huapu Digital CO.,Ltd",
+ [3]byte{28, 202, 227}: "IEEE Registration Authority",
+ [3]byte{28, 203, 153}: "TCT mobile ltd",
+ [3]byte{28, 205, 229}: "Shanghai Wind Technologies Co.,Ltd",
+ [3]byte{28, 212, 12}: "Kriwan Industrie-Elektronik GmbH",
+ [3]byte{28, 214, 189}: "LEEDARSON LIGHTING CO., LTD.",
+ [3]byte{28, 218, 39}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{28, 221, 234}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{28, 222, 167}: "Cisco Systems, Inc",
+ [3]byte{28, 223, 15}: "Cisco Systems, Inc",
+ [3]byte{28, 223, 82}: "Texas Instruments",
+ [3]byte{28, 225, 101}: "Marshal Corporation",
+ [3]byte{28, 225, 146}: "Qisda Corporation",
+ [3]byte{28, 226, 204}: "Texas Instruments",
+ [3]byte{28, 230, 43}: "Apple, Inc.",
+ [3]byte{28, 230, 199}: "Cisco Systems, Inc",
+ [3]byte{28, 232, 93}: "Cisco Systems, Inc",
+ [3]byte{28, 234, 27}: "Nokia",
+ [3]byte{28, 238, 201}: "Elo touch solutions",
+ [3]byte{28, 238, 232}: "Ilshin Elecom",
+ [3]byte{28, 239, 206}: "bebro electronic GmbH",
+ [3]byte{28, 240, 62}: "Wearhaus Inc.",
+ [3]byte{28, 240, 97}: "SCAPS GmbH",
+ [3]byte{28, 244, 202}: "Private",
+ [3]byte{28, 245, 231}: "Turtle Industry Co., Ltd.",
+ [3]byte{28, 250, 104}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{28, 252, 187}: "Realfiction ApS",
+ [3]byte{28, 254, 167}: "IDentytech Solutins Ltd.",
+ [3]byte{32, 1, 79}: "Linea Research Ltd",
+ [3]byte{32, 2, 175}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{32, 4, 15}: "Dell Inc.",
+ [3]byte{32, 5, 5}: "RADMAX COMMUNICATION PRIVATE LIMITED",
+ [3]byte{32, 5, 232}: "OOO InProMedia",
+ [3]byte{32, 8, 237}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{32, 10, 94}: "Xiangshan Giant Eagle Technology Developing Co., Ltd.",
+ [3]byte{32, 11, 199}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{32, 12, 200}: "NETGEAR",
+ [3]byte{32, 14, 149}: "IEC – TC9 WG43",
+ [3]byte{32, 16, 122}: "Gemtek Technology Co., Ltd.",
+ [3]byte{32, 18, 87}: "Most Lucky Trading Ltd",
+ [3]byte{32, 18, 213}: "Scientech Materials Corporation",
+ [3]byte{32, 19, 224}: "Samsung Electronics Co.,Ltd",
+ [3]byte{32, 22, 216}: "Liteon Technology Corporation",
+ [3]byte{32, 24, 14}: "Shenzhen Sunchip Technology Co., Ltd",
+ [3]byte{32, 26, 6}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+ [3]byte{32, 29, 3}: "Elatec GmbH",
+ [3]byte{32, 33, 165}: "LG Electronics (Mobile Communications)",
+ [3]byte{32, 37, 100}: "PEGATRON CORPORATION",
+ [3]byte{32, 37, 152}: "Teleview",
+ [3]byte{32, 40, 188}: "Visionscape Co,. Ltd.",
+ [3]byte{32, 43, 193}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{32, 44, 183}: "Kong Yue Electronics & Information Industry (Xinhui) Ltd.",
+ [3]byte{32, 45, 7}: "Samsung Electronics Co.,Ltd",
+ [3]byte{32, 45, 248}: "Digital Media Cartridge Ltd.",
+ [3]byte{32, 49, 235}: "HDSN",
+ [3]byte{32, 55, 6}: "Cisco Systems, Inc",
+ [3]byte{32, 55, 188}: "Kuipers Electronic Engineering BV",
+ [3]byte{32, 58, 7}: "Cisco Systems, Inc",
+ [3]byte{32, 58, 239}: "Sivantos GmbH",
+ [3]byte{32, 60, 174}: "Apple, Inc.",
+ [3]byte{32, 61, 102}: "ARRIS Group, Inc.",
+ [3]byte{32, 61, 178}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{32, 64, 5}: "feno GmbH",
+ [3]byte{32, 65, 90}: "Smarteh d.o.o.",
+ [3]byte{32, 68, 58}: "Schneider Electric Asia Pacific Ltd",
+ [3]byte{32, 70, 161}: "VECOW Co., Ltd",
+ [3]byte{32, 70, 249}: "Advanced Network Devices (dba:AND)",
+ [3]byte{32, 71, 71}: "Dell Inc.",
+ [3]byte{32, 71, 237}: "BSkyB Ltd",
+ [3]byte{32, 74, 170}: "Hanscan Spain S.A.",
+ [3]byte{32, 76, 3}: "Aruba Networks",
+ [3]byte{32, 76, 109}: "Hugo Brennenstuhl Gmbh & Co. KG.",
+ [3]byte{32, 76, 158}: "Cisco Systems, Inc",
+ [3]byte{32, 78, 107}: "Axxana(israel) ltd",
+ [3]byte{32, 78, 113}: "Juniper Networks",
+ [3]byte{32, 78, 127}: "NETGEAR",
+ [3]byte{32, 83, 202}: "Risk Technology Ltd",
+ [3]byte{32, 84, 118}: "Sony Mobile Communications AB",
+ [3]byte{32, 84, 250}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{32, 85, 49}: "Samsung Electronics Co.,Ltd",
+ [3]byte{32, 85, 50}: "Gotech International Technology Limited",
+ [3]byte{32, 87, 33}: "Salix Technology CO., Ltd.",
+ [3]byte{32, 87, 175}: "Shenzhen FH-NET OPTOELECTRONICS CO.,LTD",
+ [3]byte{32, 89, 160}: "Paragon Technologies Inc.",
+ [3]byte{32, 90, 0}: "Coval",
+ [3]byte{32, 91, 42}: "Private",
+ [3]byte{32, 91, 94}: "Shenzhen Wonhe Technology Co., Ltd",
+ [3]byte{32, 92, 250}: "Yangzhou ChangLian Network Technology Co,ltd.",
+ [3]byte{32, 93, 71}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{32, 94, 247}: "Samsung Electronics Co.,Ltd",
+ [3]byte{32, 98, 116}: "Microsoft Corporation",
+ [3]byte{32, 99, 95}: "Abeeway",
+ [3]byte{32, 100, 50}: "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+ [3]byte{32, 103, 177}: "Pluto inc.",
+ [3]byte{32, 104, 157}: "Liteon Technology Corporation",
+ [3]byte{32, 106, 138}: "Wistron Infocomm (Zhongshan) Corporation",
+ [3]byte{32, 106, 255}: "Atlas Elektronik UK Limited",
+ [3]byte{32, 107, 231}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{32, 108, 138}: "Aerohive Networks Inc.",
+ [3]byte{32, 110, 156}: "Samsung Electronics Co.,Ltd",
+ [3]byte{32, 111, 236}: "Braemac CA LLC",
+ [3]byte{32, 113, 158}: "SF Technology Co.,Ltd",
+ [3]byte{32, 115, 85}: "ARRIS Group, Inc.",
+ [3]byte{32, 116, 207}: "Shenzhen Voxtech Co.,Ltd",
+ [3]byte{32, 118, 0}: "Actiontec Electronics, Inc",
+ [3]byte{32, 118, 143}: "Apple, Inc.",
+ [3]byte{32, 118, 147}: "Lenovo (Beijing) Limited.",
+ [3]byte{32, 120, 11}: "Delta Faucet Company",
+ [3]byte{32, 120, 82}: "Nokia",
+ [3]byte{32, 120, 240}: "Apple, Inc.",
+ [3]byte{32, 124, 143}: "Quanta Microsystems,Inc.",
+ [3]byte{32, 125, 116}: "Apple, Inc.",
+ [3]byte{32, 130, 192}: "Xiaomi Communications Co Ltd",
+ [3]byte{32, 133, 140}: "Assa",
+ [3]byte{32, 135, 86}: "SIEMENS AG",
+ [3]byte{32, 135, 172}: "AES motomation",
+ [3]byte{32, 137, 111}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{32, 137, 132}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+ [3]byte{32, 137, 134}: "zte corporation",
+ [3]byte{32, 139, 55}: "Skyworth Digital Technology(Shenzhen) Co.,Ltd",
+ [3]byte{32, 144, 111}: "Shenzhen Tencent Computer System Co., Ltd.",
+ [3]byte{32, 145, 72}: "Texas Instruments",
+ [3]byte{32, 145, 138}: "PROFALUX",
+ [3]byte{32, 145, 217}: "I'M SPA",
+ [3]byte{32, 147, 77}: "FUJIAN STAR-NET COMMUNICATION CO.,LTD",
+ [3]byte{32, 154, 233}: "Volacomm Co., Ltd",
+ [3]byte{32, 155, 165}: "JIAXING GLEAD Electronics Co.,Ltd",
+ [3]byte{32, 155, 205}: "Apple, Inc.",
+ [3]byte{32, 162, 228}: "Apple, Inc.",
+ [3]byte{32, 162, 231}: "Lee-Dickens Ltd",
+ [3]byte{32, 166, 128}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{32, 166, 205}: "Hewlett Packard Enterprise",
+ [3]byte{32, 167, 131}: "miControl GmbH",
+ [3]byte{32, 167, 135}: "Bointec Taiwan Corporation Limited",
+ [3]byte{32, 168, 185}: "Siemens",
+ [3]byte{32, 169, 14}: "TCT mobile ltd",
+ [3]byte{32, 169, 155}: "Microsoft Corporation",
+ [3]byte{32, 170, 37}: "IP-NET LLC",
+ [3]byte{32, 170, 75}: "Cisco-Linksys, LLC",
+ [3]byte{32, 171, 55}: "Apple, Inc.",
+ [3]byte{32, 176, 247}: "Enclustra GmbH",
+ [3]byte{32, 179, 153}: "Enterasys",
+ [3]byte{32, 181, 198}: "Mimosa Networks",
+ [3]byte{32, 183, 192}: "OMICRON electronics GmbH",
+ [3]byte{32, 187, 118}: "COL GIOVANNI PAOLO SpA",
+ [3]byte{32, 187, 192}: "Cisco Systems, Inc",
+ [3]byte{32, 187, 198}: "Jabil Circuit Hungary Ltd.",
+ [3]byte{32, 191, 219}: "DVL",
+ [3]byte{32, 192, 71}: "Verizon",
+ [3]byte{32, 192, 109}: "SHENZHEN SPACETEK TECHNOLOGY CO.,LTD",
+ [3]byte{32, 193, 175}: "i Wit Digital Co., Limited",
+ [3]byte{32, 195, 143}: "Texas Instruments",
+ [3]byte{32, 195, 164}: "RetailNext",
+ [3]byte{32, 198, 13}: "Shanghai annijie Information technology Co.,LTD",
+ [3]byte{32, 198, 235}: "Panasonic Corporation AVC Networks Company",
+ [3]byte{32, 200, 179}: "SHENZHEN BUL-TECH CO.,LTD.",
+ [3]byte{32, 201, 208}: "Apple, Inc.",
+ [3]byte{32, 205, 57}: "Texas Instruments",
+ [3]byte{32, 206, 196}: "Peraso Technologies",
+ [3]byte{32, 207, 48}: "ASUSTek COMPUTER INC.",
+ [3]byte{32, 209, 96}: "Private",
+ [3]byte{32, 210, 31}: "Wincal Technology Corp.",
+ [3]byte{32, 210, 95}: "SmartCap Technologies",
+ [3]byte{32, 211, 144}: "Samsung Electronics Co.,Ltd",
+ [3]byte{32, 213, 171}: "Korea Infocom Co.,Ltd.",
+ [3]byte{32, 213, 191}: "Samsung Electronics Co.,Ltd",
+ [3]byte{32, 214, 7}: "Nokia Corporation",
+ [3]byte{32, 215, 90}: "Posh Mobile Limited",
+ [3]byte{32, 217, 6}: "Iota, Inc.",
+ [3]byte{32, 219, 171}: "Samsung Electronics Co., Ltd.",
+ [3]byte{32, 220, 147}: "Cheetah Hi-Tech, Inc.",
+ [3]byte{32, 220, 230}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{32, 223, 63}: "Nanjing SAC Power Grid Automation Co., Ltd.",
+ [3]byte{32, 223, 185}: "Google, Inc.",
+ [3]byte{32, 224, 156}: "Nokia",
+ [3]byte{32, 228, 7}: "Spark srl",
+ [3]byte{32, 229, 42}: "NETGEAR",
+ [3]byte{32, 229, 100}: "ARRIS Group, Inc.",
+ [3]byte{32, 231, 145}: "Siemens Healthcare Diagnostics, Inc",
+ [3]byte{32, 234, 199}: "SHENZHEN RIOPINE ELECTRONICS CO., LTD",
+ [3]byte{32, 237, 116}: "Ability enterprise co.,Ltd.",
+ [3]byte{32, 238, 40}: "Apple, Inc.",
+ [3]byte{32, 238, 198}: "Elefirst Science & Tech Co ., ltd",
+ [3]byte{32, 240, 2}: "MTData Developments Pty. Ltd.",
+ [3]byte{32, 241, 124}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{32, 241, 158}: "ARRIS Group, Inc.",
+ [3]byte{32, 243, 163}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{32, 244, 27}: "Shenzhen Bilian electronic CO.,LTD",
+ [3]byte{32, 244, 82}: "Shanghai IUV Software Development Co. Ltd",
+ [3]byte{32, 245, 16}: "Codex Digital Limited",
+ [3]byte{32, 245, 67}: "Hui Zhou Gaoshengda Technology Co.,LTD",
+ [3]byte{32, 248, 94}: "Delta Electronics",
+ [3]byte{32, 250, 187}: "Cambridge Executive Limited",
+ [3]byte{32, 253, 241}: "3COM EUROPE LTD",
+ [3]byte{32, 254, 205}: "System In Frontier Inc.",
+ [3]byte{32, 254, 219}: "M2M Solution S.A.S.",
+ [3]byte{36, 0, 186}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{36, 1, 199}: "Cisco Systems, Inc",
+ [3]byte{36, 5, 15}: "MTN Electronic Co. Ltd",
+ [3]byte{36, 5, 245}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+ [3]byte{36, 9, 23}: "Devlin Electronics Limited",
+ [3]byte{36, 9, 149}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{36, 10, 17}: "TCT mobile ltd",
+ [3]byte{36, 10, 100}: "AzureWave Technology Inc.",
+ [3]byte{36, 10, 196}: "Espressif Inc.",
+ [3]byte{36, 11, 10}: "Palo Alto Networks",
+ [3]byte{36, 11, 42}: "Viettel Group",
+ [3]byte{36, 11, 177}: "KOSTAL Industrie Elektrik GmbH",
+ [3]byte{36, 13, 101}: "Shenzhen Vsun Communication Technology Co., Ltd.",
+ [3]byte{36, 13, 108}: "SMND",
+ [3]byte{36, 13, 194}: "TCT mobile ltd",
+ [3]byte{36, 16, 100}: "Shenzhen Ecsino Tecnical Co. Ltd",
+ [3]byte{36, 17, 37}: "Hutek Co., Ltd.",
+ [3]byte{36, 17, 72}: "Entropix, LLC",
+ [3]byte{36, 17, 208}: "Chongqing Ehs Science and Technology Development Co.,Ltd.",
+ [3]byte{36, 26, 140}: "Squarehead Technology AS",
+ [3]byte{36, 27, 19}: "Shanghai Nutshell Electronic Co., Ltd.",
+ [3]byte{36, 27, 68}: "Hangzhou Tuners Electronics Co., Ltd",
+ [3]byte{36, 28, 4}: "SHENZHEN JEHE TECHNOLOGY DEVELOPMENT CO., LTD.",
+ [3]byte{36, 30, 235}: "Apple, Inc.",
+ [3]byte{36, 31, 44}: "Calsys, Inc.",
+ [3]byte{36, 31, 160}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{36, 32, 199}: "Sagemcom Broadband SAS",
+ [3]byte{36, 33, 171}: "Sony Mobile Communications AB",
+ [3]byte{36, 36, 14}: "Apple, Inc.",
+ [3]byte{36, 38, 66}: "SHARP Corporation.",
+ [3]byte{36, 47, 250}: "Toshiba Global Commerce Solutions",
+ [3]byte{36, 49, 132}: "SHARP Corporation",
+ [3]byte{36, 51, 108}: "Private",
+ [3]byte{36, 53, 204}: "Zhongshan Scinan Internet of Things Co.,Ltd.",
+ [3]byte{36, 55, 76}: "Cisco SPVTG",
+ [3]byte{36, 55, 239}: "EMC Electronic Media Communication SA",
+ [3]byte{36, 60, 32}: "Dynamode Group",
+ [3]byte{36, 66, 188}: "Alinco,incorporated",
+ [3]byte{36, 68, 39}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{36, 69, 151}: "GEMUE Gebr. Mueller Apparatebau",
+ [3]byte{36, 71, 14}: "PentronicAB",
+ [3]byte{36, 73, 123}: "Innovative Converged Devices Inc",
+ [3]byte{36, 75, 3}: "Samsung Electronics Co.,Ltd",
+ [3]byte{36, 75, 129}: "Samsung Electronics Co.,Ltd",
+ [3]byte{36, 76, 7}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{36, 78, 123}: "IEEE Registration Authority",
+ [3]byte{36, 79, 29}: "iRule LLC",
+ [3]byte{36, 88, 128}: "VIZEO",
+ [3]byte{36, 89, 11}: "White Sky Inc. Limited",
+ [3]byte{36, 91, 167}: "Apple, Inc.",
+ [3]byte{36, 91, 240}: "Liteon, Inc.",
+ [3]byte{36, 92, 191}: "NCSE",
+ [3]byte{36, 92, 203}: "AXIe Consortium, Inc.",
+ [3]byte{36, 94, 190}: "QNAP Systems, Inc.",
+ [3]byte{36, 95, 223}: "KYOCERA CORPORATION",
+ [3]byte{36, 96, 129}: "razberi technologies",
+ [3]byte{36, 97, 90}: "China Mobile Group Device Co.,Ltd.",
+ [3]byte{36, 98, 120}: "sysmocom - systems for mobile communications GmbH",
+ [3]byte{36, 100, 239}: "CYG SUNRI CO.,LTD.",
+ [3]byte{36, 101, 17}: "AVM GmbH",
+ [3]byte{36, 104, 128}: "Braveridge.co.,ltd.",
+ [3]byte{36, 105, 62}: "innodisk Corporation",
+ [3]byte{36, 105, 74}: "Jasmine Systems Inc.",
+ [3]byte{36, 105, 104}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{36, 105, 165}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{36, 106, 171}: "IT-IS International",
+ [3]byte{36, 108, 138}: "YUKAI Engineering",
+ [3]byte{36, 110, 150}: "Dell Inc.",
+ [3]byte{36, 113, 137}: "Texas Instruments",
+ [3]byte{36, 114, 96}: "IOTTECH Corp",
+ [3]byte{36, 118, 86}: "Shanghai Net Miles Fiber Optics Technology Co., LTD.",
+ [3]byte{36, 118, 125}: "Cisco SPVTG",
+ [3]byte{36, 119, 3}: "Intel Corporate",
+ [3]byte{36, 121, 42}: "Ruckus Wireless",
+ [3]byte{36, 124, 76}: "Herman Miller",
+ [3]byte{36, 127, 32}: "Sagemcom Broadband SAS",
+ [3]byte{36, 127, 60}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{36, 128, 0}: "Westcontrol AS",
+ [3]byte{36, 129, 170}: "KSH International Co., Ltd.",
+ [3]byte{36, 130, 138}: "Prowave Technologies Ltd.",
+ [3]byte{36, 134, 244}: "Ctek, Inc.",
+ [3]byte{36, 135, 7}: "SEnergy Corporation",
+ [3]byte{36, 136, 148}: "shenzhen lensun Communication Technology LTD",
+ [3]byte{36, 138, 7}: "Mellanox Technologies, Inc.",
+ [3]byte{36, 139, 224}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+ [3]byte{36, 146, 14}: "Samsung Electronics Co.,Ltd",
+ [3]byte{36, 147, 202}: "Voxtronic Technology Computer-Systeme GmbH",
+ [3]byte{36, 148, 66}: "OPEN ROAD SOLUTIONS , INC.",
+ [3]byte{36, 149, 4}: "SFR",
+ [3]byte{36, 151, 237}: "Techvision Intelligent Technology Limited",
+ [3]byte{36, 158, 171}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{36, 160, 116}: "Apple, Inc.",
+ [3]byte{36, 162, 225}: "Apple, Inc.",
+ [3]byte{36, 164, 44}: "KOUKAAM a.s.",
+ [3]byte{36, 164, 60}: "Ubiquiti Networks Inc.",
+ [3]byte{36, 164, 149}: "Thales Canada Inc.",
+ [3]byte{36, 165, 52}: "SynTrust Tech International Ltd.",
+ [3]byte{36, 167, 220}: "BSkyB Ltd",
+ [3]byte{36, 168, 125}: "Panasonic Automotive Systems Asia Pacific(Thailand)Co.,Ltd.",
+ [3]byte{36, 169, 55}: "PURE Storage",
+ [3]byte{36, 171, 129}: "Apple, Inc.",
+ [3]byte{36, 175, 74}: "Alcatel-Lucent IPD",
+ [3]byte{36, 175, 84}: "NEXGEN Mediatech Inc.",
+ [3]byte{36, 176, 169}: "Shanghai Mobiletek Communication Ltd.",
+ [3]byte{36, 178, 9}: "Avaya Inc",
+ [3]byte{36, 178, 222}: "Espressif Inc.",
+ [3]byte{36, 182, 87}: "Cisco Systems, Inc",
+ [3]byte{36, 182, 184}: "FRIEM SPA",
+ [3]byte{36, 182, 253}: "Dell Inc.",
+ [3]byte{36, 184, 140}: "Crenus Co.,Ltd.",
+ [3]byte{36, 184, 210}: "Opzoon Technology Co.,Ltd.",
+ [3]byte{36, 186, 19}: "RISO KAGAKU CORPORATION",
+ [3]byte{36, 186, 48}: "Technical Consumer Products, Inc.",
+ [3]byte{36, 187, 193}: "Absolute Analysis",
+ [3]byte{36, 188, 130}: "Dali Wireless, Inc.",
+ [3]byte{36, 188, 248}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{36, 190, 5}: "Hewlett Packard",
+ [3]byte{36, 191, 116}: "Private",
+ [3]byte{36, 192, 179}: "RSF",
+ [3]byte{36, 193, 189}: "CRRC DALIAN R&D CO.,LTD.",
+ [3]byte{36, 195, 249}: "Securitas Direct AB",
+ [3]byte{36, 196, 47}: "Philips Lifeline",
+ [3]byte{36, 196, 74}: "zte corporation",
+ [3]byte{36, 198, 150}: "Samsung Electronics Co.,Ltd",
+ [3]byte{36, 200, 72}: "mywerk system GmbH",
+ [3]byte{36, 200, 110}: "Chaney Instrument Co.",
+ [3]byte{36, 201, 161}: "Ruckus Wireless",
+ [3]byte{36, 201, 222}: "Genoray",
+ [3]byte{36, 203, 231}: "MYK, Inc.",
+ [3]byte{36, 207, 33}: "Shenzhen State Micro Technology Co., Ltd",
+ [3]byte{36, 209, 63}: "MEXUS CO.,LTD",
+ [3]byte{36, 210, 204}: "SmartDrive Systems Inc.",
+ [3]byte{36, 213, 28}: "Zhongtian broadband technology co., LTD",
+ [3]byte{36, 217, 33}: "Avaya Inc",
+ [3]byte{36, 218, 17}: "NO NDA Inc",
+ [3]byte{36, 218, 155}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{36, 218, 182}: "Sistemas de Gestión Energética S.A. de C.V",
+ [3]byte{36, 219, 172}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{36, 219, 173}: "ShopperTrak RCT Corporation",
+ [3]byte{36, 219, 237}: "Samsung Electronics Co.,Ltd",
+ [3]byte{36, 222, 198}: "Aruba Networks",
+ [3]byte{36, 223, 106}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{36, 225, 36}: "Xiamen Ursaconn Technology Co. , Ltd.",
+ [3]byte{36, 226, 113}: "Qingdao Hisense Communications Co.,Ltd.",
+ [3]byte{36, 227, 20}: "Apple, Inc.",
+ [3]byte{36, 228, 63}: "Wenzhou Kunmei Communication Technology Co.,Ltd.",
+ [3]byte{36, 229, 170}: "Philips Oral Healthcare, Inc.",
+ [3]byte{36, 230, 186}: "JSC Zavod im. Kozitsky",
+ [3]byte{36, 233, 179}: "Cisco Systems, Inc",
+ [3]byte{36, 234, 64}: "Helmholz GmbH & Co. KG",
+ [3]byte{36, 235, 101}: "SAET I.S. S.r.l.",
+ [3]byte{36, 236, 153}: "ASKEY COMPUTER CORP",
+ [3]byte{36, 236, 214}: "CSG Science & Technology Co.,Ltd.Hefei",
+ [3]byte{36, 238, 58}: "Chengdu Yingji Electronic Hi-tech Co Ltd",
+ [3]byte{36, 240, 148}: "Apple, Inc.",
+ [3]byte{36, 240, 255}: "GHT Co., Ltd.",
+ [3]byte{36, 242, 127}: "Hewlett Packard Enterprise",
+ [3]byte{36, 242, 221}: "Radiant Zemax LLC",
+ [3]byte{36, 245, 126}: "HWH CO., LTD.",
+ [3]byte{36, 245, 162}: "Belkin International Inc.",
+ [3]byte{36, 245, 170}: "Samsung Electronics Co.,Ltd",
+ [3]byte{36, 246, 119}: "Apple, Inc.",
+ [3]byte{36, 253, 82}: "Liteon Technology Corporation",
+ [3]byte{36, 253, 91}: "SmartThings, Inc.",
+ [3]byte{40, 4, 224}: "FERMAX ELECTRONICA S.A.U.",
+ [3]byte{40, 6, 30}: "NINGBO GLOBAL USEFUL ELECTRIC CO.,LTD",
+ [3]byte{40, 6, 141}: "ITL, LLC",
+ [3]byte{40, 7, 13}: "GUANGZHOU WINSOUND INFORMATION TECHNOLOGY CO.,LTD.",
+ [3]byte{40, 11, 92}: "Apple, Inc.",
+ [3]byte{40, 12, 40}: "Unigen DataStorage Corporation",
+ [3]byte{40, 12, 184}: "Mikrosay Yazilim ve Elektronik A.S.",
+ [3]byte{40, 13, 252}: "Sony Interactive Entertainment Inc.",
+ [3]byte{40, 14, 139}: "Beijing Spirit Technology Development Co., Ltd.",
+ [3]byte{40, 16, 27}: "MagnaCom",
+ [3]byte{40, 16, 123}: "D-Link International",
+ [3]byte{40, 20, 113}: "Lantis co., LTD.",
+ [3]byte{40, 22, 46}: "2Wire Inc",
+ [3]byte{40, 22, 173}: "Intel Corporate",
+ [3]byte{40, 23, 206}: "Omnisense Ltd",
+ [3]byte{40, 24, 120}: "Microsoft Corporation",
+ [3]byte{40, 24, 253}: "Aditya Infotech Ltd.",
+ [3]byte{40, 34, 70}: "Beijing Sinoix Communication Co., LTD",
+ [3]byte{40, 35, 115}: "Digita",
+ [3]byte{40, 36, 255}: "Wistron Neweb Corporation",
+ [3]byte{40, 37, 54}: "SHENZHEN HOLATEK CO.,LTD",
+ [3]byte{40, 38, 166}: "PBR electronics GmbH",
+ [3]byte{40, 39, 191}: "Samsung Electronics Co.,Ltd",
+ [3]byte{40, 40, 93}: "Zyxel Communications Corporation",
+ [3]byte{40, 41, 134}: "APC by Schneider Electric",
+ [3]byte{40, 41, 204}: "Corsa Technology Incorporated",
+ [3]byte{40, 41, 217}: "GlobalBeiMing technology (Beijing)Co. Ltd",
+ [3]byte{40, 44, 178}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{40, 47, 194}: "Automotive Data Solutions",
+ [3]byte{40, 48, 172}: "Frontiir Co. Ltd.",
+ [3]byte{40, 49, 82}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{40, 50, 197}: "HUMAX Co., Ltd.",
+ [3]byte{40, 52, 16}: "Enigma Diagnostics Limited",
+ [3]byte{40, 52, 162}: "Cisco Systems, Inc",
+ [3]byte{40, 53, 69}: "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD",
+ [3]byte{40, 54, 56}: "IEEE Registration Authority",
+ [3]byte{40, 55, 19}: "Shenzhen 3Nod Digital Technology Co., Ltd.",
+ [3]byte{40, 55, 55}: "Apple, Inc.",
+ [3]byte{40, 56, 207}: "Gen2wave",
+ [3]byte{40, 57, 94}: "Samsung Electronics Co.,Ltd",
+ [3]byte{40, 57, 231}: "Preceno Technology Pte.Ltd.",
+ [3]byte{40, 59, 150}: "Cool Control LTD",
+ [3]byte{40, 60, 228}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{40, 63, 105}: "Sony Mobile Communications AB",
+ [3]byte{40, 64, 26}: "C8 MediSensors, Inc.",
+ [3]byte{40, 65, 33}: "OptiSense Network, LLC",
+ [3]byte{40, 68, 48}: "GenesisTechnical Systems (UK) Ltd",
+ [3]byte{40, 71, 170}: "Nokia Corporation",
+ [3]byte{40, 72, 70}: "GridCentric Inc.",
+ [3]byte{40, 76, 83}: "Intune Networks",
+ [3]byte{40, 77, 146}: "Luminator",
+ [3]byte{40, 78, 215}: "OutSmart Power Systems, Inc.",
+ [3]byte{40, 79, 206}: "Liaoning Wontel Science and Technology Development Co.,Ltd.",
+ [3]byte{40, 81, 50}: "Shenzhen Prayfly Technology Co.,Ltd",
+ [3]byte{40, 82, 97}: "Cisco Systems, Inc",
+ [3]byte{40, 82, 224}: "Layon international Electronic & Telecom Co.,Ltd",
+ [3]byte{40, 86, 90}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{40, 86, 193}: "Harman International",
+ [3]byte{40, 87, 103}: "Echostar Technologies Corp",
+ [3]byte{40, 87, 190}: "Hangzhou Hikvision Digital Technology Co.,Ltd.",
+ [3]byte{40, 90, 235}: "Apple, Inc.",
+ [3]byte{40, 95, 47}: "RNware Co.,Ltd.",
+ [3]byte{40, 95, 219}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{40, 96, 70}: "Lantech Communications Global, Inc.",
+ [3]byte{40, 96, 148}: "CAPELEC",
+ [3]byte{40, 99, 54}: "Siemens AG - Industrial Automation - EWA",
+ [3]byte{40, 101, 107}: "Keystone Microtech Corporation",
+ [3]byte{40, 106, 184}: "Apple, Inc.",
+ [3]byte{40, 106, 186}: "Apple, Inc.",
+ [3]byte{40, 108, 7}: "XIAOMI Electronics,CO.,LTD",
+ [3]byte{40, 109, 151}: "SAMJIN Co., Ltd.",
+ [3]byte{40, 110, 212}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{40, 111, 127}: "Cisco Systems, Inc",
+ [3]byte{40, 113, 132}: "Spire Payments",
+ [3]byte{40, 114, 197}: "Smartmatic Corp",
+ [3]byte{40, 114, 240}: "ATHENA",
+ [3]byte{40, 118, 16}: "IgniteNet",
+ [3]byte{40, 118, 205}: "Funshion Online Technologies Co.,Ltd",
+ [3]byte{40, 121, 148}: "Realplay Digital Technology(Shenzhen) Co.,Ltd",
+ [3]byte{40, 122, 238}: "ARRIS Group, Inc.",
+ [3]byte{40, 123, 9}: "zte corporation",
+ [3]byte{40, 124, 219}: "Hefei Toycloud Technology Co.,ltd",
+ [3]byte{40, 128, 35}: "Hewlett Packard",
+ [3]byte{40, 128, 162}: "Novatel Wireless Solutions, Inc.",
+ [3]byte{40, 131, 53}: "Samsung Electronics Co.,Ltd",
+ [3]byte{40, 132, 14}: "silicon valley immigration service",
+ [3]byte{40, 132, 250}: "SHARP Corporation",
+ [3]byte{40, 133, 45}: "Touch Networks",
+ [3]byte{40, 137, 21}: "CashGuard Sverige AB",
+ [3]byte{40, 138, 28}: "Juniper Networks",
+ [3]byte{40, 140, 184}: "zte corporation",
+ [3]byte{40, 145, 208}: "Stage Tec Entwicklungsgesellschaft für professionelle Audiotechnik mbH",
+ [3]byte{40, 146, 74}: "Hewlett Packard",
+ [3]byte{40, 147, 254}: "Cisco Systems, Inc",
+ [3]byte{40, 148, 15}: "Cisco Systems, Inc",
+ [3]byte{40, 148, 175}: "Samhwa Telecom",
+ [3]byte{40, 152, 123}: "Samsung Electronics Co.,Ltd",
+ [3]byte{40, 153, 58}: "Arista Networks",
+ [3]byte{40, 154, 75}: "SteelSeries ApS",
+ [3]byte{40, 154, 250}: "TCT mobile ltd",
+ [3]byte{40, 158, 223}: "Danfoss Turbocor Compressors, Inc",
+ [3]byte{40, 160, 43}: "Apple, Inc.",
+ [3]byte{40, 161, 131}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{40, 161, 134}: "enblink",
+ [3]byte{40, 161, 146}: "GERP Solution",
+ [3]byte{40, 161, 235}: "ETEK TECHNOLOGY (SHENZHEN) CO.,LTD",
+ [3]byte{40, 162, 65}: "exlar corp",
+ [3]byte{40, 162, 75}: "Juniper Networks",
+ [3]byte{40, 165, 116}: "Miller Electric Mfg. Co.",
+ [3]byte{40, 165, 238}: "Shenzhen SDGI CATV Co., Ltd",
+ [3]byte{40, 166, 172}: "seca gmbh & co. kg",
+ [3]byte{40, 166, 219}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{40, 172, 103}: "Mach Power, Rappresentanze Internazionali s.r.l.",
+ [3]byte{40, 173, 62}: "Shenzhen TONG BO WEI Technology CO.,LTD",
+ [3]byte{40, 175, 10}: "Sirius XM Radio Inc",
+ [3]byte{40, 176, 204}: "Xenya d.o.o.",
+ [3]byte{40, 178, 189}: "Intel Corporate",
+ [3]byte{40, 179, 171}: "Genmark Automation",
+ [3]byte{40, 180, 72}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{40, 185, 217}: "Radisys Corporation",
+ [3]byte{40, 186, 24}: "NextNav, LLC",
+ [3]byte{40, 186, 181}: "Samsung Electronics Co.,Ltd",
+ [3]byte{40, 187, 89}: "RNET Technologies, Inc.",
+ [3]byte{40, 188, 24}: "SourcingOverseas Co. Ltd",
+ [3]byte{40, 188, 86}: "EMAC, Inc.",
+ [3]byte{40, 190, 3}: "TCT mobile ltd",
+ [3]byte{40, 190, 155}: "Technicolor CH USA Inc.",
+ [3]byte{40, 191, 137}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{40, 192, 218}: "Juniper Networks",
+ [3]byte{40, 193, 60}: "Hon Hai Precision Ind. Co., Ltd.",
+ [3]byte{40, 194, 221}: "AzureWave Technology Inc.",
+ [3]byte{40, 198, 63}: "Intel Corporate",
+ [3]byte{40, 198, 113}: "Yota Devices OY",
+ [3]byte{40, 198, 142}: "NETGEAR",
+ [3]byte{40, 199, 24}: "Altierre",
+ [3]byte{40, 199, 206}: "Cisco Systems, Inc",
+ [3]byte{40, 200, 37}: "DellKing Industrial Co., Ltd",
+ [3]byte{40, 200, 122}: "ARRIS Group, Inc.",
+ [3]byte{40, 201, 20}: "Taimag Corporation",
+ [3]byte{40, 202, 9}: "ThyssenKrupp Elevators (Shanghai) Co.,Ltd",
+ [3]byte{40, 203, 235}: "One",
+ [3]byte{40, 204, 1}: "Samsung Electronics Co.,Ltd",
+ [3]byte{40, 204, 255}: "Corporacion Empresarial Altra SL",
+ [3]byte{40, 205, 28}: "Espotel Oy",
+ [3]byte{40, 205, 76}: "Individual Computers GmbH",
+ [3]byte{40, 205, 156}: "Shenzhen Dynamax Software Development Co.,Ltd.",
+ [3]byte{40, 207, 8}: "ESSYS",
+ [3]byte{40, 207, 218}: "Apple, Inc.",
+ [3]byte{40, 207, 233}: "Apple, Inc.",
+ [3]byte{40, 209, 175}: "Nokia Corporation",
+ [3]byte{40, 210, 68}: "LCFC(HeFei) Electronics Technology Co., Ltd.",
+ [3]byte{40, 212, 54}: "Jiangsu dewosi electric co., LTD",
+ [3]byte{40, 213, 118}: "Premier Wireless, Inc.",
+ [3]byte{40, 217, 62}: "Telecor Inc.",
+ [3]byte{40, 217, 138}: "Hangzhou Konke Technology Co.,Ltd.",
+ [3]byte{40, 217, 151}: "Yuduan Mobile Co., Ltd.",
+ [3]byte{40, 219, 129}: "Shanghai Guao Electronic Technology Co., Ltd",
+ [3]byte{40, 222, 246}: "bioMerieux Inc.",
+ [3]byte{40, 224, 44}: "Apple, Inc.",
+ [3]byte{40, 225, 76}: "Apple, Inc.",
+ [3]byte{40, 226, 151}: "Shanghai InfoTM Microelectronics Co.,Ltd.",
+ [3]byte{40, 227, 31}: "Xiaomi Communications Co Ltd",
+ [3]byte{40, 227, 71}: "Liteon Technology Corporation",
+ [3]byte{40, 228, 118}: "Pi-Coral",
+ [3]byte{40, 230, 8}: "Tokheim",
+ [3]byte{40, 230, 233}: "SIS Sat Internet Services GmbH",
+ [3]byte{40, 231, 148}: "Microtime Computer Inc.",
+ [3]byte{40, 231, 207}: "Apple, Inc.",
+ [3]byte{40, 237, 88}: "JAG Jakob AG",
+ [3]byte{40, 237, 106}: "Apple, Inc.",
+ [3]byte{40, 238, 44}: "Frontline Test Equipment",
+ [3]byte{40, 238, 82}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{40, 238, 211}: "Shenzhen Super D Technology Co., Ltd",
+ [3]byte{40, 239, 1}: "Private",
+ [3]byte{40, 240, 118}: "Apple, Inc.",
+ [3]byte{40, 241, 14}: "Dell Inc.",
+ [3]byte{40, 243, 88}: "2C - Trifonov & Co",
+ [3]byte{40, 243, 102}: "Shenzhen Bilian electronic CO.,LTD",
+ [3]byte{40, 245, 50}: "ADD-Engineering BV",
+ [3]byte{40, 245, 55}: "IEEE Registration Authority",
+ [3]byte{40, 246, 6}: "Syes srl",
+ [3]byte{40, 250, 160}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{40, 251, 211}: "Ragentek Technology Group",
+ [3]byte{40, 252, 81}: "The Electric Controller and Manufacturing Co., LLC",
+ [3]byte{40, 252, 246}: "Shenzhen Xin KingBrand enterprises Co.,Ltd",
+ [3]byte{40, 253, 128}: "IEEE Registration Authority",
+ [3]byte{40, 254, 205}: "Lemobile Information Technology (Beijing) Co., Ltd.",
+ [3]byte{40, 255, 62}: "zte corporation",
+ [3]byte{44, 0, 44}: "UNOWHY",
+ [3]byte{44, 0, 51}: "EControls, LLC",
+ [3]byte{44, 0, 247}: "XOS",
+ [3]byte{44, 1, 11}: "NASCENT Technology, LLC - RemKon",
+ [3]byte{44, 2, 159}: "3ALogics",
+ [3]byte{44, 6, 35}: "Win Leader Inc.",
+ [3]byte{44, 7, 60}: "DEVLINE LIMITED",
+ [3]byte{44, 8, 28}: "OVH",
+ [3]byte{44, 8, 140}: "HUMAX Co., Ltd.",
+ [3]byte{44, 9, 77}: "Raptor Engineering, LLC",
+ [3]byte{44, 9, 203}: "COBS AB",
+ [3]byte{44, 11, 233}: "Cisco Systems, Inc",
+ [3]byte{44, 14, 61}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{44, 16, 193}: "Nintendo Co., Ltd.",
+ [3]byte{44, 24, 174}: "Trend Electronics Co., Ltd.",
+ [3]byte{44, 25, 132}: "IDN Telecom, Inc.",
+ [3]byte{44, 26, 49}: "Electronics Company Limited",
+ [3]byte{44, 27, 200}: "Hunan Topview Network System CO.,LTD",
+ [3]byte{44, 29, 184}: "ARRIS Group, Inc.",
+ [3]byte{44, 30, 234}: "AERODEV",
+ [3]byte{44, 31, 35}: "Apple, Inc.",
+ [3]byte{44, 32, 11}: "Apple, Inc.",
+ [3]byte{44, 33, 49}: "Juniper Networks",
+ [3]byte{44, 33, 114}: "Juniper Networks",
+ [3]byte{44, 33, 215}: "IMAX Corporation",
+ [3]byte{44, 34, 139}: "CTR SRL",
+ [3]byte{44, 35, 58}: "Hewlett Packard",
+ [3]byte{44, 36, 95}: "Babolat VS",
+ [3]byte{44, 38, 23}: "Oculus VR, LLC",
+ [3]byte{44, 38, 95}: "IEEE Registration Authority",
+ [3]byte{44, 38, 197}: "zte corporation",
+ [3]byte{44, 39, 158}: "IEEE Registration Authority",
+ [3]byte{44, 39, 215}: "Hewlett Packard",
+ [3]byte{44, 40, 45}: "BBK EDUCATIONAL ELECTRONICS CORP.,LTD.",
+ [3]byte{44, 41, 151}: "Microsoft Corporation",
+ [3]byte{44, 45, 72}: "bct electronic GesmbH",
+ [3]byte{44, 48, 51}: "NETGEAR",
+ [3]byte{44, 48, 104}: "Pantech Co.,Ltd",
+ [3]byte{44, 49, 36}: "Cisco Systems, Inc",
+ [3]byte{44, 51, 17}: "Cisco Systems, Inc",
+ [3]byte{44, 51, 97}: "Apple, Inc.",
+ [3]byte{44, 51, 122}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{44, 52, 39}: "ERCO & GENER",
+ [3]byte{44, 53, 87}: "ELLIY Power CO..Ltd",
+ [3]byte{44, 54, 160}: "Capisco Limited",
+ [3]byte{44, 54, 248}: "Cisco Systems, Inc",
+ [3]byte{44, 55, 49}: "SHENZHEN YIFANG DIGITAL TECHNOLOGY CO.,LTD.",
+ [3]byte{44, 55, 150}: "CYBO CO.,LTD.",
+ [3]byte{44, 55, 197}: "Qingdao Haier Intelligent Home Appliance Technology Co.,Ltd",
+ [3]byte{44, 57, 150}: "Sagemcom Broadband SAS",
+ [3]byte{44, 57, 193}: "Ciena Corporation",
+ [3]byte{44, 58, 40}: "Fagor Electrónica",
+ [3]byte{44, 58, 232}: "Espressif Inc.",
+ [3]byte{44, 59, 253}: "Netstor Technology Co., Ltd.",
+ [3]byte{44, 62, 207}: "Cisco Systems, Inc",
+ [3]byte{44, 63, 56}: "Cisco Systems, Inc",
+ [3]byte{44, 63, 62}: "Alge-Timing GmbH",
+ [3]byte{44, 64, 43}: "Smart iBlue Technology Limited",
+ [3]byte{44, 64, 83}: "Samsung Electronics Co.,Ltd",
+ [3]byte{44, 65, 56}: "Hewlett Packard",
+ [3]byte{44, 65, 161}: "Bose Corporation",
+ [3]byte{44, 66, 5}: "Lytx",
+ [3]byte{44, 67, 26}: "Shenzhen YOUHUA Technology Co., Ltd",
+ [3]byte{44, 68, 1}: "Samsung Electronics Co.,Ltd",
+ [3]byte{44, 68, 27}: "Spectrum Medical Limited",
+ [3]byte{44, 68, 253}: "Hewlett Packard",
+ [3]byte{44, 77, 84}: "ASUSTek COMPUTER INC.",
+ [3]byte{44, 77, 121}: "Weifang GoerTek Technology Co.,Ltd.",
+ [3]byte{44, 80, 137}: "Shenzhen Kaixuan Visual Technology Co.,Limited",
+ [3]byte{44, 83, 74}: "Shenzhen Winyao Electronic Limited",
+ [3]byte{44, 84, 45}: "Cisco Systems, Inc",
+ [3]byte{44, 84, 145}: "Microsoft Corporation",
+ [3]byte{44, 84, 207}: "LG Electronics (Mobile Communications)",
+ [3]byte{44, 85, 60}: "Gainspeed, Inc.",
+ [3]byte{44, 85, 211}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{44, 86, 220}: "ASUSTek COMPUTER INC.",
+ [3]byte{44, 87, 49}: "Wingtech Group (HongKong)Limited",
+ [3]byte{44, 89, 138}: "LG Electronics (Mobile Communications)",
+ [3]byte{44, 89, 229}: "Hewlett Packard",
+ [3]byte{44, 90, 5}: "Nokia Corporation",
+ [3]byte{44, 90, 15}: "Cisco Systems, Inc",
+ [3]byte{44, 90, 141}: "SYSTRONIK Elektronik u. Systemtechnik GmbH",
+ [3]byte{44, 90, 163}: "PROMATE ELECTRONIC CO.LTD",
+ [3]byte{44, 91, 184}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{44, 91, 225}: "Centripetal Networks, Inc",
+ [3]byte{44, 93, 147}: "Ruckus Wireless",
+ [3]byte{44, 95, 243}: "Pertronic Industries",
+ [3]byte{44, 96, 12}: "QUANTA COMPUTER INC.",
+ [3]byte{44, 98, 90}: "Finest Security Systems Co., Ltd",
+ [3]byte{44, 98, 137}: "Regenersis (Glenrothes) Ltd",
+ [3]byte{44, 99, 115}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+ [3]byte{44, 103, 152}: "InTalTech Ltd.",
+ [3]byte{44, 103, 251}: "ShenZhen Zhengjili Electronics Co., LTD",
+ [3]byte{44, 105, 186}: "RF Controls, LLC",
+ [3]byte{44, 106, 111}: "IEEE Registration Authority",
+ [3]byte{44, 107, 125}: "Texas Instruments",
+ [3]byte{44, 107, 245}: "Juniper Networks",
+ [3]byte{44, 110, 133}: "Intel Corporate",
+ [3]byte{44, 111, 201}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{44, 113, 85}: "HiveMotion",
+ [3]byte{44, 114, 195}: "Soundmatters",
+ [3]byte{44, 115, 96}: "Earda Technologies co Ltd",
+ [3]byte{44, 117, 15}: "Shanghai Dongzhou-Lawton Communication Technology Co. Ltd.",
+ [3]byte{44, 118, 138}: "Hewlett Packard",
+ [3]byte{44, 123, 90}: "Milper Ltd",
+ [3]byte{44, 123, 132}: "OOO Petr Telegin",
+ [3]byte{44, 126, 129}: "ARRIS Group, Inc.",
+ [3]byte{44, 126, 207}: "Onzo Ltd",
+ [3]byte{44, 128, 101}: "HARTING Inc. of North America",
+ [3]byte{44, 129, 88}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{44, 134, 210}: "Cisco Systems, Inc",
+ [3]byte{44, 138, 114}: "HTC Corporation",
+ [3]byte{44, 139, 242}: "Hitachi Metals America Ltd",
+ [3]byte{44, 145, 39}: "Eintechno Corporation",
+ [3]byte{44, 146, 44}: "Kishu Giken Kogyou Company Ltd,.",
+ [3]byte{44, 148, 100}: "Cincoze Co., Ltd.",
+ [3]byte{44, 149, 127}: "zte corporation",
+ [3]byte{44, 150, 98}: "Invenit BV",
+ [3]byte{44, 151, 23}: "I.C.Y. B.V.",
+ [3]byte{44, 153, 36}: "ARRIS Group, Inc.",
+ [3]byte{44, 154, 164}: "Eolo SpA",
+ [3]byte{44, 157, 30}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{44, 158, 95}: "ARRIS Group, Inc.",
+ [3]byte{44, 158, 236}: "Jabil Circuit Penang",
+ [3]byte{44, 158, 252}: "CANON INC.",
+ [3]byte{44, 161, 87}: "acromate, Inc.",
+ [3]byte{44, 161, 125}: "ARRIS Group, Inc.",
+ [3]byte{44, 162, 180}: "Fortify Technologies, LLC",
+ [3]byte{44, 163, 14}: "POWER DRAGON DEVELOPMENT LIMITED",
+ [3]byte{44, 165, 57}: "Parallel Wireless, Inc",
+ [3]byte{44, 167, 128}: "True Technologies Inc.",
+ [3]byte{44, 168, 53}: "RIM",
+ [3]byte{44, 171, 0}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{44, 171, 37}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+ [3]byte{44, 171, 164}: "Cisco SPVTG",
+ [3]byte{44, 171, 235}: "Cisco Systems, Inc",
+ [3]byte{44, 172, 68}: "CONEXTOP",
+ [3]byte{44, 173, 19}: "SHENZHEN ZHILU TECHNOLOGY CO.,LTD",
+ [3]byte{44, 174, 43}: "Samsung Electronics Co.,Ltd",
+ [3]byte{44, 176, 93}: "NETGEAR",
+ [3]byte{44, 176, 223}: "Soliton Technologies Pvt Ltd",
+ [3]byte{44, 177, 21}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+ [3]byte{44, 178, 26}: "Phicomm (Shanghai) Co., Ltd.",
+ [3]byte{44, 180, 58}: "Apple, Inc.",
+ [3]byte{44, 182, 147}: "Radware",
+ [3]byte{44, 182, 157}: "RED Digital Cinema",
+ [3]byte{44, 186, 186}: "Samsung Electronics Co.,Ltd",
+ [3]byte{44, 190, 8}: "Apple, Inc.",
+ [3]byte{44, 190, 151}: "Ingenieurbuero Bickele und Buehler GmbH",
+ [3]byte{44, 194, 96}: "Oracle Corporation",
+ [3]byte{44, 197, 72}: "IAdea Corporation",
+ [3]byte{44, 197, 211}: "Ruckus Wireless",
+ [3]byte{44, 204, 21}: "Nokia Corporation",
+ [3]byte{44, 205, 39}: "Precor Inc",
+ [3]byte{44, 205, 67}: "Summit Technology Group",
+ [3]byte{44, 205, 105}: "Aqavi.com",
+ [3]byte{44, 207, 88}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{44, 208, 45}: "Cisco Systems, Inc",
+ [3]byte{44, 208, 90}: "Liteon Technology Corporation",
+ [3]byte{44, 209, 65}: "IEEE Registration Authority",
+ [3]byte{44, 209, 218}: "Sanjole, Inc.",
+ [3]byte{44, 210, 231}: "Nokia Corporation",
+ [3]byte{44, 212, 68}: "FUJITSU LIMITED",
+ [3]byte{44, 220, 173}: "Wistron Neweb Corporation",
+ [3]byte{44, 221, 12}: "Discovergy GmbH",
+ [3]byte{44, 221, 149}: "Taicang T&W Electronics",
+ [3]byte{44, 221, 163}: "Point Grey Research Inc.",
+ [3]byte{44, 226, 168}: "DeviceDesign",
+ [3]byte{44, 228, 18}: "Sagemcom Broadband SAS",
+ [3]byte{44, 230, 204}: "Ruckus Wireless",
+ [3]byte{44, 232, 113}: "Alert Metalguard ApS",
+ [3]byte{44, 237, 235}: "Alpheus Digital Company Limited",
+ [3]byte{44, 238, 38}: "Petroleum Geo-Services",
+ [3]byte{44, 240, 162}: "Apple, Inc.",
+ [3]byte{44, 240, 238}: "Apple, Inc.",
+ [3]byte{44, 242, 3}: "EMKO ELEKTRONIK SAN VE TIC AS",
+ [3]byte{44, 244, 197}: "Avaya Inc",
+ [3]byte{44, 247, 241}: "Seeed Technology Inc.",
+ [3]byte{44, 250, 162}: "Alcatel-Lucent Enterprise",
+ [3]byte{44, 252, 228}: "CTEK Sweden AB",
+ [3]byte{44, 253, 55}: "Blue Calypso, Inc.",
+ [3]byte{44, 253, 161}: "ASUSTek COMPUTER INC.",
+ [3]byte{44, 253, 171}: "Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.",
+ [3]byte{44, 255, 101}: "Oki Electric Industry Co., Ltd.",
+ [3]byte{48, 5, 63}: "JTI Co.,Ltd.",
+ [3]byte{48, 5, 92}: "Brother industries, LTD.",
+ [3]byte{48, 7, 77}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{48, 11, 156}: "Delta Mobile Systems, Inc.",
+ [3]byte{48, 12, 35}: "zte corporation",
+ [3]byte{48, 13, 42}: "Zhejiang Wellcom Technology Co.,Ltd.",
+ [3]byte{48, 13, 67}: "Microsoft Mobile Oy",
+ [3]byte{48, 14, 213}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{48, 14, 227}: "Aquantia Corporation",
+ [3]byte{48, 16, 179}: "Liteon Technology Corporation",
+ [3]byte{48, 16, 228}: "Apple, Inc.",
+ [3]byte{48, 20, 45}: "Piciorgros GmbH",
+ [3]byte{48, 20, 74}: "Wistron Neweb Corporation",
+ [3]byte{48, 21, 24}: "Ubiquitous Communication Co. ltd.",
+ [3]byte{48, 22, 141}: "ProLon",
+ [3]byte{48, 23, 200}: "Sony Mobile Communications AB",
+ [3]byte{48, 24, 207}: "DEOS control systems GmbH",
+ [3]byte{48, 25, 102}: "Samsung Electronics Co.,Ltd",
+ [3]byte{48, 26, 40}: "Mako Networks Ltd",
+ [3]byte{48, 33, 91}: "Shenzhen Ostar Display Electronic Co.,Ltd",
+ [3]byte{48, 41, 190}: "Shanghai MRDcom Co.,Ltd",
+ [3]byte{48, 45, 232}: "JDA, LLC (JDA Systems)",
+ [3]byte{48, 50, 148}: "W-IE-NE-R Plein & Baus GmbH",
+ [3]byte{48, 50, 212}: "Hanilstm Co., Ltd.",
+ [3]byte{48, 51, 53}: "Boosty",
+ [3]byte{48, 52, 210}: "Availink, Inc.",
+ [3]byte{48, 53, 173}: "Apple, Inc.",
+ [3]byte{48, 55, 166}: "Cisco Systems, Inc",
+ [3]byte{48, 56, 85}: "Nokia Corporation",
+ [3]byte{48, 57, 38}: "Sony Mobile Communications AB",
+ [3]byte{48, 57, 85}: "Shenzhen Jinhengjia Electronic Co., Ltd.",
+ [3]byte{48, 57, 242}: "ADB Broadband Italia",
+ [3]byte{48, 58, 100}: "Intel Corporate",
+ [3]byte{48, 61, 8}: "GLINTT TES S.A.",
+ [3]byte{48, 62, 173}: "Sonavox Canada Inc",
+ [3]byte{48, 65, 116}: "ALTEC LANSING LLC",
+ [3]byte{48, 66, 37}: "BURG-WÄCHTER KG",
+ [3]byte{48, 68, 73}: "PLATH GmbH",
+ [3]byte{48, 68, 135}: "Hefei Radio Communication Technology Co., Ltd",
+ [3]byte{48, 68, 161}: "Shanghai Nanchao Information Technology",
+ [3]byte{48, 70, 154}: "NETGEAR",
+ [3]byte{48, 73, 59}: "Nanjing Z-Com Wireless Co.,Ltd",
+ [3]byte{48, 76, 126}: "Panasonic Electric Works Automation Controls Techno Co.,Ltd.",
+ [3]byte{48, 78, 195}: "Tianjin Techua Technology Co., Ltd.",
+ [3]byte{48, 81, 248}: "BYK-Gardner GmbH",
+ [3]byte{48, 82, 90}: "NST Co., LTD",
+ [3]byte{48, 82, 203}: "Liteon Technology Corporation",
+ [3]byte{48, 85, 237}: "Trex Network LLC",
+ [3]byte{48, 87, 172}: "IRLAB LTD.",
+ [3]byte{48, 88, 144}: "Frontier Silicon Ltd",
+ [3]byte{48, 89, 91}: "streamnow AG",
+ [3]byte{48, 89, 183}: "Microsoft",
+ [3]byte{48, 90, 58}: "ASUSTek COMPUTER INC.",
+ [3]byte{48, 93, 56}: "Beissbarth",
+ [3]byte{48, 96, 35}: "ARRIS Group, Inc.",
+ [3]byte{48, 97, 18}: "PAV GmbH",
+ [3]byte{48, 97, 24}: "Paradom Inc.",
+ [3]byte{48, 99, 107}: "Apple, Inc.",
+ [3]byte{48, 101, 236}: "Wistron (ChongQing)",
+ [3]byte{48, 104, 140}: "Reach Technology Inc.",
+ [3]byte{48, 105, 75}: "RIM",
+ [3]byte{48, 108, 190}: "Skymotion Technology (HK) Limited",
+ [3]byte{48, 110, 92}: "Validus Technologies",
+ [3]byte{48, 113, 178}: "Hangzhou Prevail Optoelectronic Equipment Co.,LTD.",
+ [3]byte{48, 115, 80}: "Inpeco SA",
+ [3]byte{48, 116, 150}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{48, 117, 18}: "Sony Mobile Communications AB",
+ [3]byte{48, 118, 111}: "LG Electronics (Mobile Communications)",
+ [3]byte{48, 119, 203}: "Maike Industry(Shenzhen)CO.,LTD",
+ [3]byte{48, 120, 92}: "Partow Tamas Novin (Parman)",
+ [3]byte{48, 120, 107}: "TIANJIN Golden Pentagon Electronics Co., Ltd.",
+ [3]byte{48, 120, 194}: "Innowireless, Co. Ltd.",
+ [3]byte{48, 124, 48}: "RIM",
+ [3]byte{48, 124, 94}: "Juniper Networks",
+ [3]byte{48, 124, 178}: "ANOV FRANCE",
+ [3]byte{48, 126, 203}: "SFR",
+ [3]byte{48, 132, 84}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{48, 133, 169}: "ASUSTek COMPUTER INC.",
+ [3]byte{48, 135, 48}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{48, 135, 217}: "Ruckus Wireless",
+ [3]byte{48, 137, 118}: "DALIAN LAMBA TECHNOLOGY CO.,LTD",
+ [3]byte{48, 137, 153}: "Guangdong East Power Co.,",
+ [3]byte{48, 137, 211}: "HONGKONG UCLOUDLINK NETWORK TECHNOLOGY LIMITED",
+ [3]byte{48, 140, 251}: "Dropcam",
+ [3]byte{48, 141, 153}: "Hewlett Packard",
+ [3]byte{48, 144, 171}: "Apple, Inc.",
+ [3]byte{48, 145, 143}: "Technicolor",
+ [3]byte{48, 146, 246}: "SHANGHAI SUNMON COMMUNICATION TECHNOGY CO.,LTD",
+ [3]byte{48, 149, 227}: "SHANGHAI SIMCOM LIMITED",
+ [3]byte{48, 150, 251}: "Samsung Electronics Co.,Ltd",
+ [3]byte{48, 153, 53}: "zte corporation",
+ [3]byte{48, 155, 173}: "BBK EDUCATIONAL ELECTRONICS CORP.,LTD.",
+ [3]byte{48, 156, 35}: "Micro-Star INTL CO., LTD.",
+ [3]byte{48, 159, 251}: "Ardomus Networks Corporation",
+ [3]byte{48, 162, 32}: "ARG Telecom",
+ [3]byte{48, 162, 67}: "Shenzhen Prifox Innovation Technology Co., Ltd.",
+ [3]byte{48, 168, 219}: "Sony Mobile Communications AB",
+ [3]byte{48, 169, 222}: "LG Innotek",
+ [3]byte{48, 170, 189}: "Shanghai Reallytek Information Technology Co.,Ltd",
+ [3]byte{48, 174, 123}: "Deqing Dusun Electron CO., LTD",
+ [3]byte{48, 174, 164}: "Espressif Inc.",
+ [3]byte{48, 174, 246}: "Radio Mobile Access",
+ [3]byte{48, 177, 100}: "Power Electronics International Inc.",
+ [3]byte{48, 178, 22}: "Hytec Geraetebau GmbH",
+ [3]byte{48, 179, 162}: "Shenzhen Heguang Measurement & Control Technology Co.,Ltd",
+ [3]byte{48, 180, 158}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{48, 180, 184}: "LG Electronics",
+ [3]byte{48, 181, 194}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{48, 181, 241}: "Aitexin Technology Co., Ltd",
+ [3]byte{48, 182, 45}: "Mojo Networks, Inc.",
+ [3]byte{48, 182, 79}: "Juniper Networks",
+ [3]byte{48, 192, 27}: "Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd",
+ [3]byte{48, 195, 217}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{48, 197, 7}: "ECI Telecom Ltd.",
+ [3]byte{48, 199, 80}: "MIC Technology Group",
+ [3]byte{48, 199, 174}: "Samsung Electronics Co.,Ltd",
+ [3]byte{48, 200, 42}: "WI-BIZ srl",
+ [3]byte{48, 203, 248}: "Samsung Electronics Co.,Ltd",
+ [3]byte{48, 205, 167}: "Samsung Electronics Co.,Ltd",
+ [3]byte{48, 209, 126}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{48, 211, 45}: "devolo AG",
+ [3]byte{48, 211, 87}: "Logosol, Inc.",
+ [3]byte{48, 211, 134}: "zte corporation",
+ [3]byte{48, 212, 106}: "Autosales Incorporated",
+ [3]byte{48, 213, 135}: "Samsung Electronics Co.,Ltd",
+ [3]byte{48, 214, 201}: "Samsung Electronics Co.,Ltd",
+ [3]byte{48, 222, 134}: "Cedac Software S.r.l.",
+ [3]byte{48, 224, 144}: "Linctronix Ltd,",
+ [3]byte{48, 225, 113}: "Hewlett Packard",
+ [3]byte{48, 227, 122}: "Intel Corporate",
+ [3]byte{48, 228, 142}: "Vodafone UK",
+ [3]byte{48, 228, 219}: "Cisco Systems, Inc",
+ [3]byte{48, 235, 31}: "Skylab M&C Technology Co.,Ltd",
+ [3]byte{48, 235, 37}: "INTEK DIGITAL",
+ [3]byte{48, 239, 209}: "Alstom Strongwish (Shenzhen) Co., Ltd.",
+ [3]byte{48, 243, 29}: "zte corporation",
+ [3]byte{48, 243, 53}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{48, 243, 58}: "+plugg srl",
+ [3]byte{48, 244, 47}: "ESP",
+ [3]byte{48, 246, 185}: "Ecocentric Energy",
+ [3]byte{48, 247, 13}: "Cisco Systems, Inc",
+ [3]byte{48, 247, 114}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{48, 247, 127}: "S Mobile Devices Limited",
+ [3]byte{48, 247, 197}: "Apple, Inc.",
+ [3]byte{48, 247, 215}: "Thread Technology Co., Ltd",
+ [3]byte{48, 249, 237}: "Sony Corporation",
+ [3]byte{48, 250, 183}: "Tunai Creative",
+ [3]byte{48, 251, 148}: "Shanghai Fangzhiwei Information Technology CO.,Ltd.",
+ [3]byte{48, 252, 104}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{48, 253, 17}: "MACROTECH (USA) INC.",
+ [3]byte{48, 254, 49}: "Nokia",
+ [3]byte{48, 255, 246}: "HangZhou KuoHeng Technology Co.,ltd",
+ [3]byte{52, 0, 138}: "IEEE Registration Authority",
+ [3]byte{52, 0, 163}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{52, 2, 134}: "Intel Corporate",
+ [3]byte{52, 2, 155}: "CloudBerry Technologies Private Limited",
+ [3]byte{52, 4, 158}: "IEEE Registration Authority",
+ [3]byte{52, 7, 79}: "AccelStor, Inc.",
+ [3]byte{52, 7, 251}: "Ericsson AB",
+ [3]byte{52, 8, 4}: "D-Link Corporation",
+ [3]byte{52, 8, 188}: "Apple, Inc.",
+ [3]byte{52, 10, 34}: "TOP-ACCESS ELECTRONICS CO LTD",
+ [3]byte{52, 10, 255}: "Qingdao Hisense Communications Co.,Ltd.",
+ [3]byte{52, 11, 64}: "MIOS ELETTRONICA SRL",
+ [3]byte{52, 12, 237}: "Moduel AB",
+ [3]byte{52, 18, 144}: "Treeview Co.,Ltd.",
+ [3]byte{52, 18, 152}: "Apple, Inc.",
+ [3]byte{52, 19, 168}: "Mediplan Limited",
+ [3]byte{52, 19, 232}: "Intel Corporate",
+ [3]byte{52, 20, 95}: "Samsung Electronics Co.,Ltd",
+ [3]byte{52, 21, 19}: "Texas Instruments",
+ [3]byte{52, 21, 158}: "Apple, Inc.",
+ [3]byte{52, 23, 235}: "Dell Inc.",
+ [3]byte{52, 26, 53}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{52, 26, 76}: "SHENZHEN WEIBU ELECTRONICS CO.,LTD.",
+ [3]byte{52, 27, 34}: "Grandbeing Technology Co., Ltd",
+ [3]byte{52, 30, 107}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{52, 31, 228}: "ARRIS Group, Inc.",
+ [3]byte{52, 33, 9}: "Jensen Scandinavia AS",
+ [3]byte{52, 35, 135}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{52, 35, 186}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{52, 37, 93}: "Shenzhen Loadcom Technology Co.,Ltd",
+ [3]byte{52, 38, 6}: "CarePredict, Inc.",
+ [3]byte{52, 40, 240}: "ATN International Limited",
+ [3]byte{52, 41, 143}: "IEEE Registration Authority",
+ [3]byte{52, 41, 234}: "MCD ELECTRONICS SP. Z O.O.",
+ [3]byte{52, 42, 241}: "Texas Instruments",
+ [3]byte{52, 45, 13}: "Samsung Electronics Co.,Ltd",
+ [3]byte{52, 47, 110}: "Anywire corporation",
+ [3]byte{52, 49, 17}: "Samsung Electronics Co.,Ltd",
+ [3]byte{52, 49, 196}: "AVM GmbH",
+ [3]byte{52, 50, 230}: "Panasonic Industrial Devices Europe GmbH",
+ [3]byte{52, 54, 59}: "Apple, Inc.",
+ [3]byte{52, 55, 89}: "zte corporation",
+ [3]byte{52, 56, 175}: "Inlab Software GmbH",
+ [3]byte{52, 56, 183}: "HUMAX Co., Ltd.",
+ [3]byte{52, 61, 152}: "JinQianMao Technology Co.,Ltd.",
+ [3]byte{52, 61, 196}: "BUFFALO.INC",
+ [3]byte{52, 64, 181}: "IBM",
+ [3]byte{52, 65, 93}: "Intel Corporate",
+ [3]byte{52, 70, 111}: "HiTEM Engineering",
+ [3]byte{52, 75, 61}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{52, 75, 80}: "zte corporation",
+ [3]byte{52, 76, 164}: "amazipoint technology Ltd.",
+ [3]byte{52, 76, 200}: "Echodyne Corp",
+ [3]byte{52, 77, 234}: "zte corporation",
+ [3]byte{52, 77, 247}: "LG Electronics (Mobile Communications)",
+ [3]byte{52, 79, 63}: "IO-Power Technology Co., Ltd.",
+ [3]byte{52, 79, 92}: "R&amp;M AG",
+ [3]byte{52, 79, 105}: "EKINOPS SAS",
+ [3]byte{52, 81, 170}: "JID GLOBAL",
+ [3]byte{52, 81, 201}: "Apple, Inc.",
+ [3]byte{52, 84, 60}: "TAKAOKA TOKO CO.,LTD.",
+ [3]byte{52, 86, 254}: "Cisco Meraki",
+ [3]byte{52, 87, 96}: "MitraStar Technology Corp.",
+ [3]byte{52, 91, 17}: "EVI HEAT AB",
+ [3]byte{52, 91, 187}: "GD Midea Air-Conditioning Equipment Co.,Ltd.",
+ [3]byte{52, 92, 64}: "Cargt Holdings LLC",
+ [3]byte{52, 93, 16}: "Wytek",
+ [3]byte{52, 97, 120}: "The Boeing Company",
+ [3]byte{52, 98, 136}: "Cisco Systems, Inc",
+ [3]byte{52, 100, 169}: "Hewlett Packard",
+ [3]byte{52, 104, 74}: "Teraworks Co., Ltd.",
+ [3]byte{52, 104, 149}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{52, 105, 135}: "zte corporation",
+ [3]byte{52, 106, 194}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{52, 107, 211}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{52, 108, 15}: "Pramod Telecom Pvt. Ltd",
+ [3]byte{52, 110, 138}: "Ecosense",
+ [3]byte{52, 110, 157}: "Ericsson AB",
+ [3]byte{52, 111, 144}: "Cisco Systems, Inc",
+ [3]byte{52, 111, 146}: "White Rodgers Division",
+ [3]byte{52, 111, 237}: "Enovation Controls",
+ [3]byte{52, 117, 199}: "Avaya Inc",
+ [3]byte{52, 118, 197}: "I-O DATA DEVICE, INC.",
+ [3]byte{52, 120, 119}: "O-Net Communications (Shenzhen) Limited",
+ [3]byte{52, 120, 215}: "Gionee Communication Equipment Co.,Ltd.",
+ [3]byte{52, 122, 96}: "ARRIS Group, Inc.",
+ [3]byte{52, 126, 57}: "Nokia Danmark A/S",
+ [3]byte{52, 128, 179}: "Xiaomi Communications Co Ltd",
+ [3]byte{52, 129, 55}: "UNICARD SA",
+ [3]byte{52, 129, 196}: "AVM GmbH",
+ [3]byte{52, 129, 244}: "SST Taiwan Ltd.",
+ [3]byte{52, 130, 222}: "Kiio Inc",
+ [3]byte{52, 131, 2}: "iFORCOM Co., Ltd",
+ [3]byte{52, 132, 70}: "Ericsson AB",
+ [3]byte{52, 133, 132}: "Aerohive Networks Inc.",
+ [3]byte{52, 134, 42}: "Heinz Lackmann GmbH & Co KG",
+ [3]byte{52, 135, 61}: "Quectel Wireless Solution Co.,Ltd.",
+ [3]byte{52, 136, 93}: "Logitech Far East",
+ [3]byte{52, 138, 123}: "Samsung Electronics Co.,Ltd",
+ [3]byte{52, 138, 174}: "Sagemcom Broadband SAS",
+ [3]byte{52, 143, 39}: "Ruckus Wireless",
+ [3]byte{52, 149, 219}: "Logitec Corporation",
+ [3]byte{52, 150, 114}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{52, 151, 246}: "ASUSTek COMPUTER INC.",
+ [3]byte{52, 151, 251}: "ADVANCED RF TECHNOLOGIES INC",
+ [3]byte{52, 153, 111}: "VPI Engineering",
+ [3]byte{52, 153, 113}: "Quanta Storage Inc.",
+ [3]byte{52, 153, 215}: "Universal Flow Monitors, Inc.",
+ [3]byte{52, 154, 13}: "ZBD Displays Ltd",
+ [3]byte{52, 155, 91}: "Maquet GmbH",
+ [3]byte{52, 157, 144}: "Heinzmann GmbH & CO. KG",
+ [3]byte{52, 158, 52}: "Evervictory Electronic Co.Ltd",
+ [3]byte{52, 161, 131}: "AWare, Inc",
+ [3]byte{52, 162, 162}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{52, 163, 149}: "Apple, Inc.",
+ [3]byte{52, 163, 191}: "Terewave. Inc.",
+ [3]byte{52, 165, 93}: "TECHNOSOFT INTERNATIONAL SRL",
+ [3]byte{52, 165, 225}: "Sensorist ApS",
+ [3]byte{52, 166, 140}: "Shine Profit Development Limited",
+ [3]byte{52, 167, 9}: "Trevil srl",
+ [3]byte{52, 167, 186}: "Fischer International Systems Corporation",
+ [3]byte{52, 168, 67}: "KYOCERA Display Corporation",
+ [3]byte{52, 168, 78}: "Cisco Systems, Inc",
+ [3]byte{52, 170, 139}: "Samsung Electronics Co.,Ltd",
+ [3]byte{52, 170, 153}: "Nokia",
+ [3]byte{52, 170, 238}: "Mikrovisatos Servisas UAB",
+ [3]byte{52, 171, 55}: "Apple, Inc.",
+ [3]byte{52, 173, 228}: "Shanghai Chint Power Systems Co., Ltd.",
+ [3]byte{52, 175, 44}: "Nintendo Co., Ltd.",
+ [3]byte{52, 177, 247}: "Texas Instruments",
+ [3]byte{52, 179, 84}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{52, 181, 113}: "PLDS",
+ [3]byte{52, 183, 253}: "Guangzhou Younghead Electronic Technology Co.,Ltd",
+ [3]byte{52, 186, 56}: "PAL MOHAN ELECTRONICS PVT LTD",
+ [3]byte{52, 186, 81}: "Se-Kure Controls, Inc.",
+ [3]byte{52, 186, 117}: "Tembo Systems, Inc.",
+ [3]byte{52, 186, 154}: "Asiatelco Technologies Co.",
+ [3]byte{52, 187, 31}: "BlackBerry RTS",
+ [3]byte{52, 187, 38}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{52, 188, 166}: "Beijing Ding Qing Technology, Ltd.",
+ [3]byte{52, 189, 200}: "Cisco Systems, Inc",
+ [3]byte{52, 189, 249}: "Shanghai WDK Industrial Co.,Ltd.",
+ [3]byte{52, 189, 250}: "Cisco SPVTG",
+ [3]byte{52, 190, 0}: "Samsung Electronics Co.,Ltd",
+ [3]byte{52, 191, 144}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{52, 192, 89}: "Apple, Inc.",
+ [3]byte{52, 192, 249}: "Rockwell Automation",
+ [3]byte{52, 195, 172}: "Samsung Electronics Co.,Ltd",
+ [3]byte{52, 195, 210}: "FN-LINK TECHNOLOGY LIMITED",
+ [3]byte{52, 197, 208}: "Hagleitner Hygiene International GmbH",
+ [3]byte{52, 198, 154}: "Enecsys Ltd",
+ [3]byte{52, 199, 49}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{52, 200, 3}: "Nokia Corporation",
+ [3]byte{52, 201, 157}: "EIDOLON COMMUNICATIONS TECHNOLOGY CO. LTD.",
+ [3]byte{52, 201, 240}: "LM Technologies Ltd",
+ [3]byte{52, 204, 40}: "Nexpring Co. LTD.,",
+ [3]byte{52, 205, 109}: "CommSky Technologies",
+ [3]byte{52, 205, 190}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{52, 206, 0}: "XIAOMI Electronics,CO.,LTD",
+ [3]byte{52, 206, 148}: "Parsec (Pty) Ltd",
+ [3]byte{52, 208, 155}: "MobilMAX Technology Inc.",
+ [3]byte{52, 208, 184}: "IEEE Registration Authority",
+ [3]byte{52, 210, 112}: "Amazon Technologies Inc.",
+ [3]byte{52, 210, 196}: "RENA GmbH Print Systeme",
+ [3]byte{52, 215, 180}: "Tributary Systems, Inc.",
+ [3]byte{52, 217, 84}: "WiBotic Inc.",
+ [3]byte{52, 219, 253}: "Cisco Systems, Inc",
+ [3]byte{52, 222, 26}: "Intel Corporate",
+ [3]byte{52, 222, 52}: "zte corporation",
+ [3]byte{52, 223, 42}: "Fujikon Industrial Co.,Limited",
+ [3]byte{52, 224, 207}: "zte corporation",
+ [3]byte{52, 224, 215}: "DONGGUAN QISHENG ELECTRONICS INDUSTRIAL CO., LTD",
+ [3]byte{52, 226, 253}: "Apple, Inc.",
+ [3]byte{52, 227, 128}: "Genexis B.V.",
+ [3]byte{52, 228, 42}: "Automatic Bar Controls Inc.",
+ [3]byte{52, 230, 173}: "Intel Corporate",
+ [3]byte{52, 230, 215}: "Dell Inc.",
+ [3]byte{52, 231, 11}: "HAN Networks Co., Ltd",
+ [3]byte{52, 231, 28}: "Shenzhen YOUHUA Technology Co., Ltd",
+ [3]byte{52, 233, 17}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{52, 234, 52}: "HangZhou Gubei Electronics Technology Co.,Ltd",
+ [3]byte{52, 237, 11}: "Shanghai XZ-COM.CO.,Ltd.",
+ [3]byte{52, 239, 68}: "2Wire Inc",
+ [3]byte{52, 239, 139}: "NTT Communications Corporation",
+ [3]byte{52, 240, 202}: "Shenzhen Linghangyuan Digital Technology Co.,Ltd.",
+ [3]byte{52, 243, 154}: "Intel Corporate",
+ [3]byte{52, 243, 155}: "WizLAN Ltd.",
+ [3]byte{52, 246, 45}: "SHARP Corporation",
+ [3]byte{52, 246, 75}: "Intel Corporate",
+ [3]byte{52, 246, 210}: "Panasonic Taiwan Co.,Ltd.",
+ [3]byte{52, 249, 104}: "ATEK Products, LLC",
+ [3]byte{52, 250, 64}: "Guangzhou Robustel Technologies Co., Limited",
+ [3]byte{52, 250, 159}: "Ruckus Wireless",
+ [3]byte{52, 252, 111}: "ALCEA",
+ [3]byte{52, 252, 185}: "Hewlett Packard Enterprise",
+ [3]byte{52, 252, 239}: "LG Electronics (Mobile Communications)",
+ [3]byte{56, 1, 149}: "Samsung Electronics Co.,Ltd",
+ [3]byte{56, 1, 151}: "TSST Global,Inc",
+ [3]byte{56, 1, 159}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+ [3]byte{56, 5, 70}: "Foctek Photonics, Inc.",
+ [3]byte{56, 5, 172}: "Piller Group GmbH",
+ [3]byte{56, 6, 180}: "A.D.C. GmbH",
+ [3]byte{56, 7, 212}: "Zeppelin Systems GmbH",
+ [3]byte{56, 8, 253}: "Silca Spa",
+ [3]byte{56, 9, 164}: "Firefly Integrations",
+ [3]byte{56, 10, 10}: "Sky-City Communication and Electronics Limited Company",
+ [3]byte{56, 10, 148}: "Samsung Electronics Co.,Ltd",
+ [3]byte{56, 10, 171}: "Formlabs",
+ [3]byte{56, 11, 64}: "Samsung Electronics Co.,Ltd",
+ [3]byte{56, 13, 212}: "Primax Electronics Ltd.",
+ [3]byte{56, 14, 77}: "Cisco Systems, Inc",
+ [3]byte{56, 14, 123}: "V.P.S. Thai Co., Ltd",
+ [3]byte{56, 15, 74}: "Apple, Inc.",
+ [3]byte{56, 15, 228}: "Dedicated Network Partners Oy",
+ [3]byte{56, 16, 213}: "AVM Audiovisuelles Marketing und Computersysteme GmbH",
+ [3]byte{56, 22, 209}: "Samsung Electronics Co.,Ltd",
+ [3]byte{56, 23, 102}: "PROMZAKAZ LTD.",
+ [3]byte{56, 23, 195}: "Hewlett Packard Enterprise",
+ [3]byte{56, 23, 225}: "Technicolor CH USA Inc.",
+ [3]byte{56, 25, 47}: "Nokia Corporation",
+ [3]byte{56, 28, 26}: "Cisco Systems, Inc",
+ [3]byte{56, 28, 35}: "Hilan Technology CO.,LTD",
+ [3]byte{56, 28, 74}: "SIMCom Wireless Solutions Co.,Ltd.",
+ [3]byte{56, 29, 217}: "FN-LINK TECHNOLOGY LIMITED",
+ [3]byte{56, 32, 86}: "Cisco Systems, Inc",
+ [3]byte{56, 32, 168}: "ColorTokens, Inc.",
+ [3]byte{56, 33, 135}: "Midea Group Co., Ltd.",
+ [3]byte{56, 34, 157}: "ADB Broadband Italia",
+ [3]byte{56, 34, 214}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{56, 37, 107}: "Microsoft Mobile Oy",
+ [3]byte{56, 38, 43}: "UTran Technology",
+ [3]byte{56, 38, 205}: "ANDTEK",
+ [3]byte{56, 40, 234}: "Fujian Netcom Technology Co., LTD",
+ [3]byte{56, 41, 90}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{56, 41, 221}: "ONvocal Inc",
+ [3]byte{56, 43, 120}: "ECO PLUGS ENTERPRISE CO., LTD",
+ [3]byte{56, 44, 74}: "ASUSTek COMPUTER INC.",
+ [3]byte{56, 45, 209}: "Samsung Electronics Co.,Ltd",
+ [3]byte{56, 45, 232}: "Samsung Electronics Co.,Ltd",
+ [3]byte{56, 49, 172}: "WEG",
+ [3]byte{56, 55, 139}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{56, 58, 33}: "IEEE Registration Authority",
+ [3]byte{56, 59, 200}: "2Wire Inc",
+ [3]byte{56, 63, 16}: "DBL Technology Ltd.",
+ [3]byte{56, 66, 51}: "Wildeboer Bauteile GmbH",
+ [3]byte{56, 66, 166}: "Ingenieurbuero Stahlkopf",
+ [3]byte{56, 67, 105}: "Patrol Products Consortium LLC",
+ [3]byte{56, 67, 125}: "Compal Broadband Networks, Inc.",
+ [3]byte{56, 69, 76}: "Light Labs, Inc.",
+ [3]byte{56, 69, 140}: "MyCloud Technology corporation",
+ [3]byte{56, 70, 8}: "zte corporation",
+ [3]byte{56, 72, 76}: "Apple, Inc.",
+ [3]byte{56, 75, 118}: "AIRTAME ApS",
+ [3]byte{56, 76, 79}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{56, 76, 144}: "ARRIS Group, Inc.",
+ [3]byte{56, 79, 73}: "Juniper Networks",
+ [3]byte{56, 79, 240}: "AzureWave Technology Inc.",
+ [3]byte{56, 82, 26}: "Nokia",
+ [3]byte{56, 86, 16}: "CANDY HOUSE, Inc.",
+ [3]byte{56, 88, 12}: "Panaccess Systems GmbH",
+ [3]byte{56, 89, 248}: "MindMade Sp. z o.o.",
+ [3]byte{56, 89, 249}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{56, 90, 168}: "Beijing Zhongdun Security Technology Development Co.",
+ [3]byte{56, 95, 102}: "Cisco SPVTG",
+ [3]byte{56, 95, 195}: "Yu Jeong System, Co.Ltd",
+ [3]byte{56, 96, 119}: "PEGATRON CORPORATION",
+ [3]byte{56, 99, 187}: "Hewlett Packard",
+ [3]byte{56, 99, 246}: "3NOD MULTIMEDIA(SHENZHEN)CO.,LTD",
+ [3]byte{56, 102, 69}: "OOSIC Technology CO.,Ltd",
+ [3]byte{56, 102, 240}: "Apple, Inc.",
+ [3]byte{56, 103, 147}: "Asia Optical Co., Inc.",
+ [3]byte{56, 107, 28}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+ [3]byte{56, 107, 187}: "ARRIS Group, Inc.",
+ [3]byte{56, 108, 155}: "Ivy Biomedical",
+ [3]byte{56, 110, 33}: "Wasion Group Ltd.",
+ [3]byte{56, 110, 162}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{56, 112, 12}: "ARRIS Group, Inc.",
+ [3]byte{56, 113, 222}: "Apple, Inc.",
+ [3]byte{56, 114, 192}: "Comtrend Corporation",
+ [3]byte{56, 115, 234}: "IEEE Registration Authority",
+ [3]byte{56, 118, 202}: "Shenzhen Smart Intelligent Technology Co.Ltd",
+ [3]byte{56, 118, 209}: "Euronda SpA",
+ [3]byte{56, 123, 71}: "AKELA, Inc.",
+ [3]byte{56, 131, 69}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{56, 134, 2}: "Flexoptix GmbH",
+ [3]byte{56, 137, 220}: "Opticon Sensors Europe B.V.",
+ [3]byte{56, 138, 183}: "ITC Networks",
+ [3]byte{56, 140, 80}: "LG Electronics",
+ [3]byte{56, 142, 231}: "Fanhattan LLC",
+ [3]byte{56, 144, 165}: "Cisco Systems, Inc",
+ [3]byte{56, 145, 213}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{56, 145, 251}: "Xenox Holding BV",
+ [3]byte{56, 148, 150}: "Samsung Electronics Co.,Ltd",
+ [3]byte{56, 148, 224}: "Syrotech Networks. Ltd.",
+ [3]byte{56, 149, 146}: "Beijing Tendyron Corporation",
+ [3]byte{56, 151, 214}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{56, 152, 216}: "MERITECH CO.,LTD",
+ [3]byte{56, 154, 246}: "Samsung Electronics Co.,Ltd",
+ [3]byte{56, 157, 146}: "Seiko Epson Corporation",
+ [3]byte{56, 159, 90}: "C-Kur TV Inc.",
+ [3]byte{56, 159, 131}: "OTN Systems N.V.",
+ [3]byte{56, 162, 140}: "SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.",
+ [3]byte{56, 164, 237}: "Xiaomi Communications Co Ltd",
+ [3]byte{56, 165, 60}: "COMECER Netherlands",
+ [3]byte{56, 165, 182}: "SHENZHEN MEGMEET ELECTRICAL CO.,LTD",
+ [3]byte{56, 166, 206}: "BSkyB Ltd",
+ [3]byte{56, 168, 81}: "Moog, Ing",
+ [3]byte{56, 168, 107}: "Orga BV",
+ [3]byte{56, 169, 95}: "Actifio Inc",
+ [3]byte{56, 170, 60}: "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+ [3]byte{56, 172, 61}: "Nephos Inc",
+ [3]byte{56, 173, 142}: "New H3C Technologies Co., Ltd",
+ [3]byte{56, 173, 190}: "New H3C Technologies Co., Ltd",
+ [3]byte{56, 175, 215}: "FUJITSU LIMITED",
+ [3]byte{56, 177, 45}: "Sonotronic Nagel GmbH",
+ [3]byte{56, 177, 219}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{56, 181, 77}: "Apple, Inc.",
+ [3]byte{56, 181, 189}: "E.G.O. Elektro-Ger",
+ [3]byte{56, 183, 37}: "Wistron Infocomm (Zhongshan) Corporation",
+ [3]byte{56, 183, 77}: "Fijowave Limited",
+ [3]byte{56, 184, 235}: "IEEE Registration Authority",
+ [3]byte{56, 187, 35}: "OzVision America LLC",
+ [3]byte{56, 187, 60}: "Avaya Inc",
+ [3]byte{56, 188, 1}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{56, 188, 26}: "MEIZU Technology Co., Ltd.",
+ [3]byte{56, 191, 47}: "Espec Corp.",
+ [3]byte{56, 191, 51}: "NEC CASIO Mobile Communications",
+ [3]byte{56, 192, 150}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{56, 199, 10}: "WiFiSong",
+ [3]byte{56, 199, 186}: "CS Services Co.,Ltd.",
+ [3]byte{56, 200, 92}: "Cisco SPVTG",
+ [3]byte{56, 201, 134}: "Apple, Inc.",
+ [3]byte{56, 201, 169}: "SMART High Reliability Solutions, Inc.",
+ [3]byte{56, 202, 151}: "Contour Design LLC",
+ [3]byte{56, 202, 218}: "Apple, Inc.",
+ [3]byte{56, 205, 7}: "Beijing FaceCam Technology Co., Ltd.",
+ [3]byte{56, 209, 53}: "EasyIO Corporation Sdn. Bhd.",
+ [3]byte{56, 210, 105}: "Texas Instruments",
+ [3]byte{56, 212, 11}: "Samsung Electronics Co.,Ltd",
+ [3]byte{56, 213, 71}: "ASUSTek COMPUTER INC.",
+ [3]byte{56, 214, 32}: "Limidea Concept Pte. Ltd.",
+ [3]byte{56, 215, 202}: "7HUGS LABS",
+ [3]byte{56, 216, 47}: "zte corporation",
+ [3]byte{56, 219, 187}: "Sunbow Telecom Co., Ltd.",
+ [3]byte{56, 222, 96}: "Mohlenhoff GmbH",
+ [3]byte{56, 224, 142}: "Mitsubishi Electric Corporation",
+ [3]byte{56, 226, 221}: "zte corporation",
+ [3]byte{56, 227, 197}: "Taicang T&W Electronics",
+ [3]byte{56, 229, 149}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+ [3]byte{56, 231, 216}: "HTC Corporation",
+ [3]byte{56, 232, 223}: "b gmbh medien + datenbanken",
+ [3]byte{56, 233, 140}: "Reco S.p.A.",
+ [3]byte{56, 234, 167}: "Hewlett Packard",
+ [3]byte{56, 236, 17}: "Novatek Microelectronics Corp.",
+ [3]byte{56, 236, 228}: "Samsung Electronics Co.,Ltd",
+ [3]byte{56, 237, 24}: "Cisco Systems, Inc",
+ [3]byte{56, 238, 157}: "Anedo Ltd.",
+ [3]byte{56, 240, 152}: "Vapor Stone Rail Systems",
+ [3]byte{56, 240, 200}: "Livestream",
+ [3]byte{56, 241, 53}: "SensorTec-Canada",
+ [3]byte{56, 242, 62}: "Microsoft Mobile Oy",
+ [3]byte{56, 243, 63}: "TATSUNO CORPORATION",
+ [3]byte{56, 245, 87}: "JOLATA, INC.",
+ [3]byte{56, 245, 151}: "home2net GmbH",
+ [3]byte{56, 247, 8}: "National Resource Management, Inc.",
+ [3]byte{56, 247, 61}: "Amazon Technologies Inc.",
+ [3]byte{56, 247, 178}: "SEOJUN ELECTRIC",
+ [3]byte{56, 248, 137}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{56, 248, 183}: "V2COM PARTICIPACOES S.A.",
+ [3]byte{56, 248, 202}: "OWIN Inc.",
+ [3]byte{56, 250, 202}: "Skyworth Digital Technology(Shenzhen) Co.,Ltd",
+ [3]byte{56, 253, 254}: "IEEE Registration Authority",
+ [3]byte{56, 254, 197}: "Ellips B.V.",
+ [3]byte{56, 255, 54}: "Ruckus Wireless",
+ [3]byte{60, 2, 177}: "Creation Technologies LP",
+ [3]byte{60, 4, 191}: "PRAVIS SYSTEMS Co.Ltd.,",
+ [3]byte{60, 5, 24}: "Samsung Electronics Co.,Ltd",
+ [3]byte{60, 5, 171}: "Product Creation Studio",
+ [3]byte{60, 7, 84}: "Apple, Inc.",
+ [3]byte{60, 7, 113}: "Sony Corporation",
+ [3]byte{60, 8, 30}: "Beijing Yupont Electric Power Technology Co.,Ltd",
+ [3]byte{60, 8, 246}: "Cisco Systems, Inc",
+ [3]byte{60, 9, 109}: "Powerhouse Dynamics",
+ [3]byte{60, 12, 72}: "Servergy, Inc.",
+ [3]byte{60, 12, 219}: "UNIONMAN TECHNOLOGY CO.,LTD",
+ [3]byte{60, 14, 35}: "Cisco Systems, Inc",
+ [3]byte{60, 15, 193}: "KBC Networks",
+ [3]byte{60, 16, 64}: "daesung network",
+ [3]byte{60, 16, 111}: "ALBAHITH TECHNOLOGIES",
+ [3]byte{60, 16, 230}: "PHAZR Inc.",
+ [3]byte{60, 17, 178}: "Fraunhofer FIT",
+ [3]byte{60, 21, 194}: "Apple, Inc.",
+ [3]byte{60, 21, 234}: "TESCOM CO., LTD.",
+ [3]byte{60, 24, 159}: "Nokia Corporation",
+ [3]byte{60, 24, 160}: "Luxshare Precision Industry Company Limited",
+ [3]byte{60, 25, 21}: "GFI Chrono Time",
+ [3]byte{60, 25, 125}: "Ericsson AB",
+ [3]byte{60, 26, 15}: "ClearSky Data",
+ [3]byte{60, 26, 87}: "Cardiopulmonary Corp",
+ [3]byte{60, 26, 121}: "Huayuan Technology CO.,LTD",
+ [3]byte{60, 28, 190}: "JADAK LLC",
+ [3]byte{60, 30, 4}: "D-Link International",
+ [3]byte{60, 30, 19}: "HANGZHOU SUNRISE TECHNOLOGY CO., LTD",
+ [3]byte{60, 37, 215}: "Nokia Corporation",
+ [3]byte{60, 38, 213}: "Sotera Wireless",
+ [3]byte{60, 39, 99}: "SLE quality engineering GmbH & Co. KG",
+ [3]byte{60, 42, 244}: "Brother Industries, LTD.",
+ [3]byte{60, 44, 148}: "杭州德澜科技有限公司(HangZhou Delan Technology Co.,Ltd)",
+ [3]byte{60, 44, 153}: "Edgecore Networks Corporation",
+ [3]byte{60, 45, 183}: "Texas Instruments",
+ [3]byte{60, 46, 249}: "Apple, Inc.",
+ [3]byte{60, 46, 255}: "Apple, Inc.",
+ [3]byte{60, 47, 58}: "SFORZATO Corp.",
+ [3]byte{60, 48, 12}: "Dewar Electronics Pty Ltd",
+ [3]byte{60, 49, 120}: "Qolsys Inc.",
+ [3]byte{60, 51, 0}: "Shenzhen Bilian electronic CO.,LTD",
+ [3]byte{60, 53, 86}: "Cognitec Systems GmbH",
+ [3]byte{60, 54, 61}: "Nokia Corporation",
+ [3]byte{60, 54, 228}: "ARRIS Group, Inc.",
+ [3]byte{60, 56, 136}: "ConnectQuest, llc",
+ [3]byte{60, 57, 195}: "JW Electronics Co., Ltd.",
+ [3]byte{60, 57, 231}: "IEEE Registration Authority",
+ [3]byte{60, 58, 115}: "Avaya Inc",
+ [3]byte{60, 63, 81}: "2CRSI",
+ [3]byte{60, 64, 79}: "GUANGDONG PISEN ELECTRONICS CO.,LTD",
+ [3]byte{60, 67, 142}: "ARRIS Group, Inc.",
+ [3]byte{60, 70, 216}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{60, 71, 17}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{60, 73, 55}: "ASSMANN Electronic GmbH",
+ [3]byte{60, 74, 146}: "Hewlett Packard",
+ [3]byte{60, 76, 105}: "Infinity System S.L.",
+ [3]byte{60, 76, 208}: "CERAGON NETWORKS",
+ [3]byte{60, 78, 71}: "Etronic A/S",
+ [3]byte{60, 82, 130}: "Hewlett Packard",
+ [3]byte{60, 87, 189}: "Kessler Crane Inc.",
+ [3]byte{60, 87, 213}: "FiveCo",
+ [3]byte{60, 89, 30}: "TCL King Electrical Appliances (Huizhou) Co., Ltd",
+ [3]byte{60, 90, 55}: "Samsung Electronics Co.,Ltd",
+ [3]byte{60, 90, 180}: "Google, Inc.",
+ [3]byte{60, 92, 195}: "Shenzhen First Blue Chip Technology Ltd",
+ [3]byte{60, 94, 195}: "Cisco Systems, Inc",
+ [3]byte{60, 95, 1}: "Synerchip Co., Ltd.",
+ [3]byte{60, 97, 4}: "Juniper Networks",
+ [3]byte{60, 98, 0}: "Samsung Electronics Co.,Ltd",
+ [3]byte{60, 98, 120}: "SHENZHEN JETNET TECHNOLOGY CO.,LTD.",
+ [3]byte{60, 103, 22}: "Lily Robotics",
+ [3]byte{60, 103, 44}: "Sciovid Inc.",
+ [3]byte{60, 103, 140}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{60, 104, 22}: "VXi Corporation",
+ [3]byte{60, 106, 125}: "Niigata Power Systems Co., Ltd.",
+ [3]byte{60, 106, 157}: "Dexatek Technology LTD.",
+ [3]byte{60, 110, 99}: "Mitron OY",
+ [3]byte{60, 111, 69}: "Fiberpro Inc.",
+ [3]byte{60, 111, 234}: "Panasonic India Pvt. Ltd.",
+ [3]byte{60, 111, 247}: "EnTek Systems, Inc.",
+ [3]byte{60, 112, 89}: "MakerBot Industries",
+ [3]byte{60, 116, 55}: "RIM",
+ [3]byte{60, 117, 74}: "ARRIS Group, Inc.",
+ [3]byte{60, 119, 230}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{60, 120, 67}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{60, 120, 115}: "Airsonics",
+ [3]byte{60, 122, 138}: "ARRIS Group, Inc.",
+ [3]byte{60, 125, 177}: "Texas Instruments",
+ [3]byte{60, 127, 111}: "Telechips, Inc.",
+ [3]byte{60, 128, 170}: "Ransnet Singapore Pte Ltd",
+ [3]byte{60, 129, 216}: "Sagemcom Broadband SAS",
+ [3]byte{60, 131, 30}: "CKD Corporation",
+ [3]byte{60, 131, 117}: "Microsoft Corporation",
+ [3]byte{60, 131, 181}: "Advance Vision Electronics Co. Ltd.",
+ [3]byte{60, 134, 168}: "Sangshin elecom .co,, LTD",
+ [3]byte{60, 137, 112}: "Neosfar",
+ [3]byte{60, 137, 166}: "KAPELSE",
+ [3]byte{60, 138, 176}: "Juniper Networks",
+ [3]byte{60, 138, 229}: "Tensun Information Technology(Hangzhou) Co.,LTD",
+ [3]byte{60, 139, 205}: "Alcatel-Lucent Shanghai Bell Co., Ltd",
+ [3]byte{60, 139, 254}: "Samsung Electronics Co.,Ltd",
+ [3]byte{60, 140, 64}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{60, 140, 248}: "TRENDnet, Inc.",
+ [3]byte{60, 144, 102}: "SmartRG, Inc.",
+ [3]byte{60, 145, 43}: "Vexata Inc",
+ [3]byte{60, 145, 87}: "Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd",
+ [3]byte{60, 145, 116}: "ALONG COMMUNICATION TECHNOLOGY",
+ [3]byte{60, 146, 220}: "Octopod Technology Co. Ltd.",
+ [3]byte{60, 148, 213}: "Juniper Networks",
+ [3]byte{60, 149, 9}: "Liteon Technology Corporation",
+ [3]byte{60, 151, 14}: "Wistron InfoComm(Kunshan)Co.,Ltd.",
+ [3]byte{60, 151, 126}: "IPS Technology Limited",
+ [3]byte{60, 152, 191}: "Quest Controls, Inc.",
+ [3]byte{60, 153, 247}: "Lansentechnology AB",
+ [3]byte{60, 154, 119}: "Technicolor CH USA Inc.",
+ [3]byte{60, 159, 129}: "Shenzhen CATIC Bit Communications Technology Co.,Ltd",
+ [3]byte{60, 160, 103}: "Liteon Technology Corporation",
+ [3]byte{60, 161, 13}: "Samsung Electronics Co.,Ltd",
+ [3]byte{60, 163, 8}: "Texas Instruments",
+ [3]byte{60, 163, 21}: "Bless Information & Communications Co., Ltd",
+ [3]byte{60, 163, 26}: "Oilfind International LLC",
+ [3]byte{60, 163, 72}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{60, 165, 129}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{60, 166, 22}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{60, 167, 43}: "MRV Communications (Networks) LTD",
+ [3]byte{60, 168, 42}: "Hewlett Packard",
+ [3]byte{60, 169, 244}: "Intel Corporate",
+ [3]byte{60, 170, 63}: "iKey, Ltd.",
+ [3]byte{60, 171, 142}: "Apple, Inc.",
+ [3]byte{60, 174, 105}: "ESA Elektroschaltanlagen Grimma GmbH",
+ [3]byte{60, 177, 91}: "Avaya Inc",
+ [3]byte{60, 177, 127}: "Wattwatchers Pty Ld",
+ [3]byte{60, 182, 183}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{60, 183, 43}: "PLUMgrid Inc",
+ [3]byte{60, 183, 146}: "Hitachi Maxell, Ltd., Optronics Division",
+ [3]byte{60, 184, 122}: "Private",
+ [3]byte{60, 185, 166}: "Belden Deutschland GmbH",
+ [3]byte{60, 187, 115}: "Shenzhen Xinguodu Technology Co., Ltd.",
+ [3]byte{60, 187, 253}: "Samsung Electronics Co.,Ltd",
+ [3]byte{60, 189, 62}: "Beijing Xiaomi Electronics Co., Ltd.",
+ [3]byte{60, 189, 216}: "LG ELECTRONICS INC",
+ [3]byte{60, 190, 225}: "NIKON CORPORATION",
+ [3]byte{60, 192, 121}: "Shenzhen One-Nine Intelligent Electronic Science and Technology Co., Ltd",
+ [3]byte{60, 192, 198}: "d&b audiotechnik GmbH",
+ [3]byte{60, 193, 44}: "AES Corporation",
+ [3]byte{60, 193, 246}: "Melange Systems Pvt. Ltd.",
+ [3]byte{60, 194, 67}: "Nokia Corporation",
+ [3]byte{60, 194, 225}: "XINHUA CONTROL ENGINEERING CO.,LTD",
+ [3]byte{60, 201, 158}: "Huiyang Technology Co., Ltd",
+ [3]byte{60, 202, 135}: "Iders Incorporated",
+ [3]byte{60, 203, 124}: "TCT mobile ltd",
+ [3]byte{60, 205, 90}: "Technische Alternative GmbH",
+ [3]byte{60, 205, 147}: "LG ELECTRONICS INC",
+ [3]byte{60, 206, 21}: "Mercedes-Benz USA, LLC",
+ [3]byte{60, 206, 115}: "Cisco Systems, Inc",
+ [3]byte{60, 207, 91}: "ICOMM HK LIMITED",
+ [3]byte{60, 208, 248}: "Apple, Inc.",
+ [3]byte{60, 209, 110}: "Telepower Communication Co., Ltd",
+ [3]byte{60, 212, 214}: "WirelessWERX, Inc",
+ [3]byte{60, 215, 218}: "SK Mtek microelectronics(shenzhen)limited",
+ [3]byte{60, 217, 43}: "Hewlett Packard",
+ [3]byte{60, 217, 206}: "Eclipse WiFi",
+ [3]byte{60, 218, 42}: "zte corporation",
+ [3]byte{60, 221, 137}: "SOMO HOLDINGS & TECH. CO.,LTD.",
+ [3]byte{60, 223, 30}: "Cisco Systems, Inc",
+ [3]byte{60, 223, 169}: "ARRIS Group, Inc.",
+ [3]byte{60, 223, 189}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{60, 224, 114}: "Apple, Inc.",
+ [3]byte{60, 229, 166}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{60, 229, 180}: "KIDASEN INDUSTRIA E COMERCIO DE ANTENAS LTDA",
+ [3]byte{60, 230, 36}: "LG Display",
+ [3]byte{60, 234, 79}: "2Wire Inc",
+ [3]byte{60, 234, 251}: "NSE AG",
+ [3]byte{60, 239, 140}: "Zhejiang Dahua Technology Co., Ltd.",
+ [3]byte{60, 243, 146}: "Virtualtek. Co. Ltd",
+ [3]byte{60, 245, 44}: "DSPECIALISTS GmbH",
+ [3]byte{60, 245, 145}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{60, 247, 42}: "Nokia Corporation",
+ [3]byte{60, 247, 72}: "Shenzhen Linsn Technology Development Co.,Ltd",
+ [3]byte{60, 247, 164}: "Samsung Electronics Co.,Ltd",
+ [3]byte{60, 248, 8}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{60, 248, 98}: "Intel Corporate",
+ [3]byte{60, 250, 67}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{60, 251, 150}: "Emcraft Systems LLC",
+ [3]byte{60, 253, 254}: "Intel Corporate",
+ [3]byte{64, 0, 224}: "Derek(Shaoguan)Limited",
+ [3]byte{64, 1, 7}: "Arista Corp",
+ [3]byte{64, 1, 122}: "Cisco Systems, Inc",
+ [3]byte{64, 1, 198}: "3COM EUROPE LTD",
+ [3]byte{64, 4, 12}: "A&T",
+ [3]byte{64, 7, 192}: "Railtec Systems GmbH",
+ [3]byte{64, 13, 16}: "ARRIS Group, Inc.",
+ [3]byte{64, 14, 103}: "Tremol Ltd.",
+ [3]byte{64, 14, 133}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{64, 17, 220}: "Sonance",
+ [3]byte{64, 18, 228}: "Compass-EOS",
+ [3]byte{64, 19, 217}: "Global ES",
+ [3]byte{64, 21, 151}: "Protect America, Inc.",
+ [3]byte{64, 22, 59}: "Samsung Electronics Co.,Ltd",
+ [3]byte{64, 22, 126}: "ASUSTek COMPUTER INC.",
+ [3]byte{64, 22, 159}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{64, 22, 250}: "EKM Metering",
+ [3]byte{64, 24, 177}: "Aerohive Networks Inc.",
+ [3]byte{64, 24, 215}: "Smartronix, Inc.",
+ [3]byte{64, 27, 95}: "Weifang GoerTek Technology Co.,Ltd.",
+ [3]byte{64, 29, 89}: "Biometric Associates, LP",
+ [3]byte{64, 34, 237}: "Digital Projection Ltd",
+ [3]byte{64, 37, 194}: "Intel Corporate",
+ [3]byte{64, 39, 11}: "Mobileeco Co., Ltd",
+ [3]byte{64, 40, 20}: "RFI Engineering",
+ [3]byte{64, 43, 161}: "Sony Mobile Communications AB",
+ [3]byte{64, 44, 244}: "Universal Global Scientific Industrial Co., Ltd.",
+ [3]byte{64, 46, 40}: "MiXTelematics",
+ [3]byte{64, 48, 4}: "Apple, Inc.",
+ [3]byte{64, 48, 103}: "Conlog (Pty) Ltd",
+ [3]byte{64, 51, 26}: "Apple, Inc.",
+ [3]byte{64, 51, 108}: "Godrej & Boyce Mfg. co. ltd",
+ [3]byte{64, 55, 173}: "Macro Image Technology, Inc.",
+ [3]byte{64, 60, 252}: "Apple, Inc.",
+ [3]byte{64, 61, 236}: "HUMAX Co., Ltd.",
+ [3]byte{64, 63, 140}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{64, 64, 34}: "ZIV",
+ [3]byte{64, 64, 107}: "Icomera",
+ [3]byte{64, 64, 167}: "Sony Mobile Communications AB",
+ [3]byte{64, 66, 41}: "Layer3TV, Inc",
+ [3]byte{64, 69, 218}: "Spreadtrum Communications (Shanghai) Co., Ltd.",
+ [3]byte{64, 71, 106}: "AG Acquisition Corp. d.b.a. ASTRO Gaming",
+ [3]byte{64, 72, 253}: "IEEE Registration Authority",
+ [3]byte{64, 73, 15}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{64, 73, 138}: "Synapticon GmbH",
+ [3]byte{64, 74, 3}: "Zyxel Communications Corporation",
+ [3]byte{64, 74, 24}: "Addrek Smart Solutions",
+ [3]byte{64, 74, 212}: "Widex A/S",
+ [3]byte{64, 77, 127}: "Apple, Inc.",
+ [3]byte{64, 77, 142}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{64, 78, 54}: "HTC Corporation",
+ [3]byte{64, 78, 235}: "Higher Way Electronic Co., Ltd.",
+ [3]byte{64, 80, 224}: "Milton Security Group LLC",
+ [3]byte{64, 81, 108}: "Grandex International Corporation",
+ [3]byte{64, 82, 13}: "Pico Technology",
+ [3]byte{64, 84, 228}: "Wearsafe Labs Inc",
+ [3]byte{64, 85, 57}: "Cisco Systems, Inc",
+ [3]byte{64, 86, 12}: "In Home Displays Ltd",
+ [3]byte{64, 86, 45}: "Smartron India Pvt ltd",
+ [3]byte{64, 90, 155}: "ANOVO",
+ [3]byte{64, 92, 253}: "Dell Inc.",
+ [3]byte{64, 93, 130}: "NETGEAR",
+ [3]byte{64, 94, 225}: "Shenzhen H&T Intelligent Control Co.,Ltd.",
+ [3]byte{64, 95, 190}: "RIM",
+ [3]byte{64, 95, 194}: "Texas Instruments",
+ [3]byte{64, 96, 90}: "Hawkeye Tech Co. Ltd",
+ [3]byte{64, 97, 134}: "MICRO-STAR INT'L CO.,LTD",
+ [3]byte{64, 97, 142}: "Stella-Green Co",
+ [3]byte{64, 98, 182}: "Tele system communication",
+ [3]byte{64, 101, 163}: "Sagemcom Broadband SAS",
+ [3]byte{64, 102, 122}: "mediola - connected living AG",
+ [3]byte{64, 104, 38}: "Thales UK Limited",
+ [3]byte{64, 106, 142}: "Hangzhou Puwell OE Tech Ltd.",
+ [3]byte{64, 106, 171}: "RIM",
+ [3]byte{64, 108, 143}: "Apple, Inc.",
+ [3]byte{64, 111, 42}: "BlackBerry RTS",
+ [3]byte{64, 112, 9}: "ARRIS Group, Inc.",
+ [3]byte{64, 112, 74}: "Power Idea Technology Limited",
+ [3]byte{64, 112, 116}: "Life Technology (China) Co., Ltd",
+ [3]byte{64, 113, 131}: "Juniper Networks",
+ [3]byte{64, 116, 150}: "aFUN TECHNOLOGY INC.",
+ [3]byte{64, 120, 106}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{64, 120, 117}: "IMBEL - Industria de Material Belico do Brasil",
+ [3]byte{64, 122, 128}: "Nokia Corporation",
+ [3]byte{64, 123, 27}: "Mettle Networks Inc.",
+ [3]byte{64, 124, 125}: "Nokia",
+ [3]byte{64, 125, 15}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{64, 127, 224}: "Glory Star Technics (ShenZhen) Limited",
+ [3]byte{64, 130, 86}: "Continental Automotive GmbH",
+ [3]byte{64, 131, 222}: "Zebra Technologies Inc",
+ [3]byte{64, 132, 147}: "Clavister AB",
+ [3]byte{64, 134, 46}: "JDM MOBILE INTERNET SOLUTION CO., LTD.",
+ [3]byte{64, 136, 5}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{64, 136, 224}: "Beijing Ereneben Information Technology Limited Shenzhen Branch",
+ [3]byte{64, 138, 154}: "TITENG CO., Ltd.",
+ [3]byte{64, 139, 7}: "Actiontec Electronics, Inc",
+ [3]byte{64, 139, 246}: "Shenzhen TCL New Technology Co., Ltd",
+ [3]byte{64, 141, 92}: "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+ [3]byte{64, 149, 88}: "Aisino Corporation",
+ [3]byte{64, 149, 189}: "NTmore.Co.,Ltd",
+ [3]byte{64, 151, 209}: "BK Electronics cc",
+ [3]byte{64, 152, 76}: "Casacom Solutions AG",
+ [3]byte{64, 152, 78}: "Texas Instruments",
+ [3]byte{64, 152, 123}: "Aisino Corporation",
+ [3]byte{64, 153, 34}: "AzureWave Technology Inc.",
+ [3]byte{64, 155, 13}: "Shenzhen Yourf Kwan Industrial Co., Ltd",
+ [3]byte{64, 155, 205}: "D-Link International",
+ [3]byte{64, 156, 40}: "Apple, Inc.",
+ [3]byte{64, 159, 56}: "AzureWave Technology Inc.",
+ [3]byte{64, 159, 135}: "Jide Technology (Hong Kong) Limited",
+ [3]byte{64, 159, 199}: "BAEKCHUN I&C Co., Ltd.",
+ [3]byte{64, 163, 204}: "Intel Corporate",
+ [3]byte{64, 165, 239}: "Shenzhen Four Seas Global Link Network Technology Co., Ltd.",
+ [3]byte{64, 166, 119}: "Juniper Networks",
+ [3]byte{64, 166, 164}: "PassivSystems Ltd",
+ [3]byte{64, 166, 217}: "Apple, Inc.",
+ [3]byte{64, 166, 232}: "Cisco Systems, Inc",
+ [3]byte{64, 168, 240}: "Hewlett Packard",
+ [3]byte{64, 169, 63}: "Private",
+ [3]byte{64, 172, 141}: "Data Management, Inc.",
+ [3]byte{64, 176, 52}: "Hewlett Packard",
+ [3]byte{64, 176, 250}: "LG Electronics (Mobile Communications)",
+ [3]byte{64, 178, 200}: "Nortel Networks",
+ [3]byte{64, 179, 149}: "Apple, Inc.",
+ [3]byte{64, 179, 205}: "Chiyoda Electronics Co.,Ltd.",
+ [3]byte{64, 179, 252}: "Logital Co. Limited",
+ [3]byte{64, 180, 205}: "Amazon Technologies Inc.",
+ [3]byte{64, 180, 240}: "Juniper Networks",
+ [3]byte{64, 182, 136}: "LEGIC Identsystems AG",
+ [3]byte{64, 182, 177}: "SUNGSAM CO,.Ltd",
+ [3]byte{64, 183, 243}: "ARRIS Group, Inc.",
+ [3]byte{64, 184, 55}: "Sony Mobile Communications AB",
+ [3]byte{64, 184, 154}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{64, 185, 60}: "Hewlett Packard Enterprise",
+ [3]byte{64, 186, 97}: "ARIMA Communications Corp.",
+ [3]byte{64, 188, 115}: "Cronoplast S.L.",
+ [3]byte{64, 188, 139}: "itelio GmbH",
+ [3]byte{64, 189, 158}: "Physio-Control, Inc",
+ [3]byte{64, 191, 23}: "Digistar Telecom. SA",
+ [3]byte{64, 194, 69}: "Shenzhen Hexicom Technology Co., Ltd.",
+ [3]byte{64, 196, 214}: "ChongQing Camyu Technology Development Co.,Ltd.",
+ [3]byte{64, 198, 42}: "Shanghai Jing Ren Electronic Technology Co., Ltd.",
+ [3]byte{64, 199, 41}: "Sagemcom Broadband SAS",
+ [3]byte{64, 199, 201}: "Naviit Inc.",
+ [3]byte{64, 200, 203}: "AM Telecom co., Ltd.",
+ [3]byte{64, 203, 168}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{64, 205, 58}: "Z3 Technology",
+ [3]byte{64, 206, 36}: "Cisco Systems, Inc",
+ [3]byte{64, 210, 138}: "Nintendo Co., Ltd.",
+ [3]byte{64, 211, 45}: "Apple, Inc.",
+ [3]byte{64, 211, 87}: "Ison Technology Co., Ltd.",
+ [3]byte{64, 211, 174}: "Samsung Electronics Co.,Ltd",
+ [3]byte{64, 212, 14}: "Biodata Ltd",
+ [3]byte{64, 213, 89}: "MICRO S.E.R.I.",
+ [3]byte{64, 214, 60}: "Equitech Industrial(DongGuan)Co.,Ltd",
+ [3]byte{64, 216, 85}: "IEEE Registration Authority",
+ [3]byte{64, 226, 48}: "AzureWave Technology Inc.",
+ [3]byte{64, 227, 214}: "Aruba Networks",
+ [3]byte{64, 231, 48}: "DEY Storage Systems, Inc.",
+ [3]byte{64, 231, 147}: "Shenzhen Siviton Technology Co.,Ltd",
+ [3]byte{64, 234, 206}: "FOUNDER BROADBAND NETWORK SERVICE CO.,LTD",
+ [3]byte{64, 236, 248}: "Siemens AG",
+ [3]byte{64, 237, 152}: "IEEE Registration Authority",
+ [3]byte{64, 239, 76}: "Fihonest communication co.,Ltd",
+ [3]byte{64, 240, 47}: "Liteon Technology Corporation",
+ [3]byte{64, 241, 76}: "ISE Europe SPRL",
+ [3]byte{64, 242, 1}: "Sagemcom Broadband SAS",
+ [3]byte{64, 242, 233}: "IBM",
+ [3]byte{64, 243, 8}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{64, 243, 133}: "IEEE Registration Authority",
+ [3]byte{64, 244, 7}: "Nintendo Co., Ltd.",
+ [3]byte{64, 244, 19}: "Rubezh",
+ [3]byte{64, 244, 32}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+ [3]byte{64, 244, 236}: "Cisco Systems, Inc",
+ [3]byte{64, 245, 46}: "Leica Microsystems (Schweiz) AG",
+ [3]byte{64, 250, 127}: "Preh Car Connect GmbH",
+ [3]byte{64, 252, 137}: "ARRIS Group, Inc.",
+ [3]byte{64, 254, 13}: "MAXIO",
+ [3]byte{68, 0, 16}: "Apple, Inc.",
+ [3]byte{68, 3, 44}: "Intel Corporate",
+ [3]byte{68, 3, 167}: "Cisco Systems, Inc",
+ [3]byte{68, 4, 68}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{68, 9, 184}: "Salcomp (Shenzhen) CO., LTD.",
+ [3]byte{68, 12, 253}: "NetMan Co., Ltd.",
+ [3]byte{68, 17, 2}: "EDMI Europe Ltd",
+ [3]byte{68, 17, 194}: "Telegartner Karl Gartner GmbH",
+ [3]byte{68, 19, 25}: "WKK TECHNOLOGY LTD.",
+ [3]byte{68, 20, 65}: "AudioControl Inc.",
+ [3]byte{68, 24, 79}: "Fitview",
+ [3]byte{68, 25, 182}: "Hangzhou Hikvision Digital Technology Co.,Ltd.",
+ [3]byte{68, 28, 168}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{68, 30, 145}: "ARVIDA Intelligent Electronics Technology Co.,Ltd.",
+ [3]byte{68, 30, 161}: "Hewlett Packard",
+ [3]byte{68, 35, 170}: "Farmage Co., Ltd.",
+ [3]byte{68, 37, 187}: "Bamboo Entertainment Corporation",
+ [3]byte{68, 41, 56}: "NietZsche enterprise Co.Ltd.",
+ [3]byte{68, 42, 96}: "Apple, Inc.",
+ [3]byte{68, 42, 255}: "E3 Technology, Inc.",
+ [3]byte{68, 43, 3}: "Cisco Systems, Inc",
+ [3]byte{68, 44, 5}: "AMPAK Technology, Inc.",
+ [3]byte{68, 49, 146}: "Hewlett Packard",
+ [3]byte{68, 50, 42}: "Avaya Inc",
+ [3]byte{68, 50, 200}: "Technicolor CH USA Inc.",
+ [3]byte{68, 51, 76}: "Shenzhen Bilian electronic CO.,LTD",
+ [3]byte{68, 52, 143}: "MXT INDUSTRIAL LTDA",
+ [3]byte{68, 53, 111}: "Neterix",
+ [3]byte{68, 55, 8}: "MRV Comunications",
+ [3]byte{68, 55, 25}: "2 Save Energy Ltd",
+ [3]byte{68, 55, 111}: "Young Electric Sign Co",
+ [3]byte{68, 55, 230}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{68, 56, 57}: "Cumulus Networks, inc",
+ [3]byte{68, 57, 196}: "Universal Global Scientific Industrial Co., Ltd.",
+ [3]byte{68, 60, 156}: "Pintsch Tiefenbach GmbH",
+ [3]byte{68, 61, 33}: "Nuvolt",
+ [3]byte{68, 62, 178}: "DEOTRON Co., LTD.",
+ [3]byte{68, 68, 80}: "OttoQ",
+ [3]byte{68, 72, 145}: "HDMI Licensing, LLC",
+ [3]byte{68, 72, 193}: "Hewlett Packard Enterprise",
+ [3]byte{68, 74, 101}: "Silverflare Ltd.",
+ [3]byte{68, 74, 176}: "Zhejiang Moorgen Intelligence Technology Co., Ltd",
+ [3]byte{68, 76, 12}: "Apple, Inc.",
+ [3]byte{68, 76, 168}: "Arista Networks",
+ [3]byte{68, 78, 26}: "Samsung Electronics Co.,Ltd",
+ [3]byte{68, 78, 109}: "AVM Audiovisuelles Marketing und Computersysteme GmbH",
+ [3]byte{68, 79, 94}: "Pan Studios Co.,Ltd.",
+ [3]byte{68, 81, 219}: "Raytheon BBN Technologies",
+ [3]byte{68, 84, 192}: "Thompson Aerospace",
+ [3]byte{68, 85, 177}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{68, 86, 141}: "PNC Technologies Co., Ltd.",
+ [3]byte{68, 86, 183}: "Spawn Labs, Inc",
+ [3]byte{68, 88, 41}: "Cisco SPVTG",
+ [3]byte{68, 89, 159}: "Criticare Systems, Inc",
+ [3]byte{68, 94, 205}: "Razer Inc",
+ [3]byte{68, 94, 243}: "Tonalite Holding B.V.",
+ [3]byte{68, 95, 122}: "Shihlin Electric & Engineering Corp.",
+ [3]byte{68, 95, 140}: "Intercel Group Limited",
+ [3]byte{68, 97, 50}: "ecobee inc",
+ [3]byte{68, 97, 156}: "FONsystem co. ltd.",
+ [3]byte{68, 98, 70}: "Comat AG",
+ [3]byte{68, 101, 13}: "Amazon Technologies Inc.",
+ [3]byte{68, 101, 106}: "Mega Video Electronic(HK) Industry Co., Ltd",
+ [3]byte{68, 102, 110}: "IP-LINE",
+ [3]byte{68, 103, 85}: "Orbit Irrigation",
+ [3]byte{68, 104, 171}: "JUIN COMPANY, LIMITED",
+ [3]byte{68, 106, 46}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{68, 106, 183}: "ARRIS Group, Inc.",
+ [3]byte{68, 108, 36}: "Reallin Electronic Co.,Ltd",
+ [3]byte{68, 109, 87}: "Liteon Technology Corporation",
+ [3]byte{68, 109, 108}: "Samsung Electronics Co.,Ltd",
+ [3]byte{68, 110, 229}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{68, 112, 11}: "IFFU",
+ [3]byte{68, 112, 152}: "MING HONG TECHNOLOGY (SHEN ZHEN) LIMITED",
+ [3]byte{68, 115, 214}: "Logitech",
+ [3]byte{68, 116, 108}: "Sony Mobile Communications AB",
+ [3]byte{68, 120, 62}: "Samsung Electronics Co.,Ltd",
+ [3]byte{68, 123, 187}: "Shenzhen YOUHUA Technology Co., Ltd",
+ [3]byte{68, 123, 196}: "DualShine Technology(SZ)Co.,Ltd",
+ [3]byte{68, 124, 127}: "Innolight Technology Corporation",
+ [3]byte{68, 125, 165}: "VTION INFORMATION TECHNOLOGY (FUJIAN) CO.,LTD",
+ [3]byte{68, 126, 118}: "Trek Technology (S) Pte Ltd",
+ [3]byte{68, 126, 149}: "Alpha and Omega, Inc",
+ [3]byte{68, 127, 119}: "Connected Home",
+ [3]byte{68, 128, 235}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{68, 130, 229}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{68, 131, 18}: "Star-Net",
+ [3]byte{68, 133, 0}: "Intel Corporate",
+ [3]byte{68, 134, 193}: "Siemens Low Voltage & Products",
+ [3]byte{68, 135, 35}: "HOYA SERVICE CORPORATION",
+ [3]byte{68, 135, 252}: "Elitegroup Computer Systems Co.,Ltd.",
+ [3]byte{68, 136, 203}: "Camco Technologies NV",
+ [3]byte{68, 138, 91}: "Micro-Star INT'L CO., LTD.",
+ [3]byte{68, 140, 82}: "KTIS CO., Ltd",
+ [3]byte{68, 142, 18}: "DT Research, Inc.",
+ [3]byte{68, 142, 129}: "VIG",
+ [3]byte{68, 143, 23}: "Samsung Electronics Co., Ltd. ARTIK",
+ [3]byte{68, 145, 96}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{68, 145, 219}: "Shanghai Huaqin Telecom Technology Co.,Ltd",
+ [3]byte{68, 148, 252}: "NETGEAR",
+ [3]byte{68, 149, 250}: "Qingdao Santong Digital Technology Co.Ltd",
+ [3]byte{68, 150, 43}: "Aidon Oy",
+ [3]byte{68, 151, 90}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+ [3]byte{68, 155, 120}: "The Now Factory",
+ [3]byte{68, 156, 181}: "Alcomp, Inc",
+ [3]byte{68, 159, 127}: "DataCore Software Corporation",
+ [3]byte{68, 164, 45}: "TCT mobile ltd",
+ [3]byte{68, 166, 137}: "PROMAX ELECTRONICA SA",
+ [3]byte{68, 166, 229}: "THINKING TECHNOLOGY CO.,LTD",
+ [3]byte{68, 167, 207}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{68, 168, 66}: "Dell Inc.",
+ [3]byte{68, 168, 194}: "SEWOO TECH CO., LTD",
+ [3]byte{68, 170, 39}: "udworks Co., Ltd.",
+ [3]byte{68, 170, 80}: "Juniper Networks",
+ [3]byte{68, 170, 232}: "Nanotec Electronic GmbH & Co. KG",
+ [3]byte{68, 170, 245}: "ARRIS Group, Inc.",
+ [3]byte{68, 173, 25}: "XINGFEI (H.K)LIMITED",
+ [3]byte{68, 173, 217}: "Cisco Systems, Inc",
+ [3]byte{68, 179, 45}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{68, 179, 130}: "Kuang-chi Institute of Advanced Technology",
+ [3]byte{68, 180, 18}: "SIUS AG",
+ [3]byte{68, 186, 70}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+ [3]byte{68, 191, 227}: "Shenzhen Longtech Electronics Co.,Ltd",
+ [3]byte{68, 193, 92}: "Texas Instruments",
+ [3]byte{68, 194, 51}: "Guangzhou Comet Technology Development Co.Ltd",
+ [3]byte{68, 195, 6}: "SIFROM Inc.",
+ [3]byte{68, 195, 70}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{68, 195, 155}: "OOO RUBEZH NPO",
+ [3]byte{68, 196, 169}: "Opticom Communication, LLC",
+ [3]byte{68, 197, 111}: "NGN Easy Satfinder (Tianjin) Electronic Co., Ltd",
+ [3]byte{68, 198, 155}: "Wuhan Feng Tian Information Network CO.,LTD",
+ [3]byte{68, 200, 116}: "China Mobile Group Device Co.,Ltd.",
+ [3]byte{68, 201, 162}: "Greenwald Industries",
+ [3]byte{68, 205, 14}: "FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.",
+ [3]byte{68, 206, 125}: "SFR",
+ [3]byte{68, 209, 94}: "Shanghai Kingto Information Technology Ltd",
+ [3]byte{68, 209, 250}: "Shenzhen Yunlink Technology Co., Ltd",
+ [3]byte{68, 210, 68}: "Seiko Epson Corporation",
+ [3]byte{68, 210, 202}: "Anvia TV Oy",
+ [3]byte{68, 211, 202}: "Cisco Systems, Inc",
+ [3]byte{68, 212, 55}: "Inteno Broadband Technology AB",
+ [3]byte{68, 212, 224}: "Sony Mobile Communications AB",
+ [3]byte{68, 213, 165}: "AddOn Computer",
+ [3]byte{68, 214, 61}: "Talari Networks",
+ [3]byte{68, 214, 225}: "Snuza International Pty. Ltd.",
+ [3]byte{68, 216, 50}: "AzureWave Technology Inc.",
+ [3]byte{68, 216, 132}: "Apple, Inc.",
+ [3]byte{68, 217, 231}: "Ubiquiti Networks Inc.",
+ [3]byte{68, 220, 145}: "PLANEX COMMUNICATIONS INC.",
+ [3]byte{68, 220, 203}: "SEMINDIA SYSTEMS PVT LTD",
+ [3]byte{68, 224, 142}: "Cisco SPVTG",
+ [3]byte{68, 225, 55}: "ARRIS Group, Inc.",
+ [3]byte{68, 228, 154}: "OMNITRONICS PTY LTD",
+ [3]byte{68, 228, 217}: "Cisco Systems, Inc",
+ [3]byte{68, 232, 165}: "Myreka Technologies Sdn. Bhd.",
+ [3]byte{68, 233, 221}: "Sagemcom Broadband SAS",
+ [3]byte{68, 234, 75}: "Actlas Inc.",
+ [3]byte{68, 234, 216}: "Texas Instruments",
+ [3]byte{68, 237, 87}: "Longicorn, inc.",
+ [3]byte{68, 238, 2}: "MTI Ltd.",
+ [3]byte{68, 238, 48}: "Budelmann Elektronik GmbH",
+ [3]byte{68, 240, 52}: "Kaonmedia CO., LTD.",
+ [3]byte{68, 244, 54}: "zte corporation",
+ [3]byte{68, 244, 89}: "Samsung Electronics Co.,Ltd",
+ [3]byte{68, 244, 119}: "Juniper Networks",
+ [3]byte{68, 248, 73}: "Union Pacific Railroad",
+ [3]byte{68, 251, 66}: "Apple, Inc.",
+ [3]byte{68, 253, 163}: "Everysight LTD.",
+ [3]byte{72, 0, 49}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{72, 0, 51}: "Technicolor CH USA Inc.",
+ [3]byte{72, 2, 42}: "B-Link Electronic Limited",
+ [3]byte{72, 3, 98}: "DESAY ELECTRONICS(HUIZHOU)CO.,LTD",
+ [3]byte{72, 6, 106}: "Tempered Networks, Inc.",
+ [3]byte{72, 12, 73}: "NAKAYO Inc",
+ [3]byte{72, 14, 236}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{72, 15, 207}: "Hewlett Packard",
+ [3]byte{72, 16, 99}: "NTT Innovation Institute, Inc.",
+ [3]byte{72, 18, 73}: "Luxcom Technologies Inc.",
+ [3]byte{72, 19, 126}: "Samsung Electronics Co.,Ltd",
+ [3]byte{72, 19, 243}: "BBK EDUCATIONAL ELECTRONICS CORP.,LTD.",
+ [3]byte{72, 23, 76}: "MicroPower technologies",
+ [3]byte{72, 24, 66}: "Shanghai Winaas Co. Equipment Co. Ltd.",
+ [3]byte{72, 26, 132}: "Pointer Telocation Ltd",
+ [3]byte{72, 27, 210}: "Intron Scientific co., ltd.",
+ [3]byte{72, 29, 112}: "Cisco SPVTG",
+ [3]byte{72, 38, 232}: "Tek-Air Systems, Inc.",
+ [3]byte{72, 39, 234}: "Samsung Electronics Co.,Ltd",
+ [3]byte{72, 40, 47}: "zte corporation",
+ [3]byte{72, 44, 234}: "Motorola Inc Business Light Radios",
+ [3]byte{72, 51, 221}: "ZENNIO AVANCE Y TECNOLOGIA, S.L.",
+ [3]byte{72, 52, 61}: "IEP GmbH",
+ [3]byte{72, 54, 95}: "Wintecronics Ltd.",
+ [3]byte{72, 57, 116}: "Proware Technologies Co., Ltd.",
+ [3]byte{72, 59, 56}: "Apple, Inc.",
+ [3]byte{72, 60, 12}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{72, 61, 50}: "Syscor Controls &amp; Automation",
+ [3]byte{72, 67, 90}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{72, 67, 124}: "Apple, Inc.",
+ [3]byte{72, 68, 135}: "Cisco SPVTG",
+ [3]byte{72, 68, 247}: "Samsung Electronics Co.,Ltd",
+ [3]byte{72, 69, 32}: "Intel Corporate",
+ [3]byte{72, 70, 241}: "Uros Oy",
+ [3]byte{72, 70, 251}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{72, 73, 199}: "Samsung Electronics Co.,Ltd",
+ [3]byte{72, 75, 170}: "Apple, Inc.",
+ [3]byte{72, 77, 126}: "Dell Inc.",
+ [3]byte{72, 80, 115}: "Microsoft Corporation",
+ [3]byte{72, 81, 183}: "Intel Corporate",
+ [3]byte{72, 82, 97}: "SOREEL",
+ [3]byte{72, 84, 21}: "NET RULES TECNOLOGIA EIRELI",
+ [3]byte{72, 85, 92}: "Wu Qi Technologies,Inc.",
+ [3]byte{72, 85, 95}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{72, 87, 221}: "Facebook Inc",
+ [3]byte{72, 89, 41}: "LG Electronics (Mobile Communications)",
+ [3]byte{72, 89, 164}: "zte corporation",
+ [3]byte{72, 90, 63}: "WISOL",
+ [3]byte{72, 90, 182}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{72, 91, 57}: "ASUSTek COMPUTER INC.",
+ [3]byte{72, 93, 54}: "Verizon",
+ [3]byte{72, 93, 96}: "AzureWave Technology Inc.",
+ [3]byte{72, 96, 188}: "Apple, Inc.",
+ [3]byte{72, 97, 163}: "Concern Axion JSC",
+ [3]byte{72, 98, 118}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{72, 101, 238}: "IEEE Registration Authority",
+ [3]byte{72, 107, 44}: "BBK EDUCATIONAL ELECTRONICS CORP.,LTD.",
+ [3]byte{72, 107, 145}: "Fleetwood Group Inc.",
+ [3]byte{72, 109, 187}: "Vestel Elektronik San ve Tic. A.Ş.",
+ [3]byte{72, 110, 115}: "Pica8, Inc.",
+ [3]byte{72, 110, 251}: "Davit System Technology Co., Ltd.",
+ [3]byte{72, 111, 210}: "StorSimple Inc",
+ [3]byte{72, 113, 25}: "SGB GROUP LTD.",
+ [3]byte{72, 116, 110}: "Apple, Inc.",
+ [3]byte{72, 118, 4}: "Private",
+ [3]byte{72, 122, 85}: "ALE International",
+ [3]byte{72, 122, 218}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{72, 123, 107}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{72, 125, 46}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{72, 130, 68}: "Life Fitness / Div. of Brunswick",
+ [3]byte{72, 130, 242}: "Appel Elektronik GmbH",
+ [3]byte{72, 131, 199}: "Sagemcom Broadband SAS",
+ [3]byte{72, 134, 232}: "Microsoft Corporation",
+ [3]byte{72, 136, 3}: "ManTechnology Inc.",
+ [3]byte{72, 136, 202}: "Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.",
+ [3]byte{72, 138, 210}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+ [3]byte{72, 141, 54}: "Arcadyan Corporation",
+ [3]byte{72, 142, 66}: "DIGALOG GmbH",
+ [3]byte{72, 142, 239}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{72, 145, 83}: "Weinmann Geräte für Medizin GmbH + Co. KG",
+ [3]byte{72, 145, 246}: "Shenzhen Reach software technology CO.,LTD",
+ [3]byte{72, 154, 66}: "Technomate Ltd",
+ [3]byte{72, 155, 226}: "SCI Innovations Ltd",
+ [3]byte{72, 157, 24}: "Flashbay Limited",
+ [3]byte{72, 157, 36}: "BlackBerry RTS",
+ [3]byte{72, 161, 149}: "Apple, Inc.",
+ [3]byte{72, 162, 45}: "Shenzhen Huaxuchang Telecom Technology Co.,Ltd",
+ [3]byte{72, 162, 183}: "Kodofon JSC",
+ [3]byte{72, 163, 128}: "Gionee Communication Equipment Co.,Ltd.",
+ [3]byte{72, 166, 210}: "GJsun Optical Science and Tech Co.,Ltd.",
+ [3]byte{72, 167, 78}: "zte corporation",
+ [3]byte{72, 169, 210}: "Wistron Neweb Corporation",
+ [3]byte{72, 170, 93}: "Store Electronic Systems",
+ [3]byte{72, 173, 8}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{72, 178, 83}: "Marketaxess Corporation",
+ [3]byte{72, 181, 167}: "Glory Horse Industries Ltd.",
+ [3]byte{72, 182, 32}: "ROLI Ltd.",
+ [3]byte{72, 184, 222}: "HOMEWINS TECHNOLOGY CO.,LTD.",
+ [3]byte{72, 185, 119}: "PulseOn Oy",
+ [3]byte{72, 185, 194}: "Teletics Inc.",
+ [3]byte{72, 186, 78}: "Hewlett Packard",
+ [3]byte{72, 188, 166}: "\u200bASUNG TECHNO CO.,Ltd",
+ [3]byte{72, 190, 45}: "Symanitron",
+ [3]byte{72, 191, 107}: "Apple, Inc.",
+ [3]byte{72, 191, 116}: "Baicells Technologies Co.,LTD",
+ [3]byte{72, 192, 73}: "Broad Telecom SA",
+ [3]byte{72, 192, 147}: "Xirrus, Inc.",
+ [3]byte{72, 193, 172}: "PLANTRONICS, INC.",
+ [3]byte{72, 197, 141}: "Lear Corporation GmbH",
+ [3]byte{72, 198, 99}: "GTO Access Systems LLC",
+ [3]byte{72, 200, 98}: "Simo Wireless,Inc.",
+ [3]byte{72, 200, 182}: "SysTec GmbH",
+ [3]byte{72, 203, 110}: "Cello Electronics (UK) Ltd",
+ [3]byte{72, 208, 207}: "Universal Electronics, Inc.",
+ [3]byte{72, 209, 142}: "Metis Communication Co.,Ltd",
+ [3]byte{72, 210, 36}: "Liteon Technology Corporation",
+ [3]byte{72, 211, 67}: "ARRIS Group, Inc.",
+ [3]byte{72, 211, 93}: "Private",
+ [3]byte{72, 213, 57}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{72, 213, 76}: "Jeda Networks",
+ [3]byte{72, 214, 213}: "Google, Inc.",
+ [3]byte{72, 215, 5}: "Apple, Inc.",
+ [3]byte{72, 215, 255}: "BLANKOM Antennentechnik GmbH",
+ [3]byte{72, 216, 85}: "Telvent",
+ [3]byte{72, 216, 254}: "ClarIDy Solutions, Inc.",
+ [3]byte{72, 218, 150}: "Eddy Smart Home Solutions Inc.",
+ [3]byte{72, 219, 80}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{72, 220, 251}: "Nokia Corporation",
+ [3]byte{72, 223, 28}: "Wuhan NEC Fibre Optic Communications industry Co. Ltd",
+ [3]byte{72, 223, 55}: "Hewlett Packard Enterprise",
+ [3]byte{72, 225, 175}: "Vity",
+ [3]byte{72, 226, 68}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{72, 233, 241}: "Apple, Inc.",
+ [3]byte{72, 234, 99}: "Zhejiang Uniview Technologies Co., Ltd.",
+ [3]byte{72, 235, 48}: "ETERNA TECHNOLOGY, INC.",
+ [3]byte{72, 236, 91}: "Nokia",
+ [3]byte{72, 237, 128}: "daesung eltec",
+ [3]byte{72, 238, 7}: "Silver Palm Technologies LLC",
+ [3]byte{72, 238, 12}: "D-Link International",
+ [3]byte{72, 238, 134}: "UTStarcom (China) Co.,Ltd",
+ [3]byte{72, 240, 123}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{72, 242, 48}: "Ubizcore Co.,LTD",
+ [3]byte{72, 243, 23}: "Private",
+ [3]byte{72, 244, 125}: "TechVision Holding Internation Limited",
+ [3]byte{72, 247, 192}: "Technicolor CH USA Inc.",
+ [3]byte{72, 247, 241}: "Nokia",
+ [3]byte{72, 248, 179}: "Cisco-Linksys, LLC",
+ [3]byte{72, 248, 225}: "Nokia",
+ [3]byte{72, 249, 37}: "Maestronic",
+ [3]byte{72, 249, 124}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{72, 252, 182}: "LAVA INTERNATIONAL(H.K) LIMITED",
+ [3]byte{72, 252, 184}: "Woodstream Corporation",
+ [3]byte{72, 253, 142}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{72, 254, 234}: "HOMA B.V.",
+ [3]byte{76, 0, 130}: "Cisco Systems, Inc",
+ [3]byte{76, 2, 46}: "CMR KOREA CO., LTD",
+ [3]byte{76, 2, 137}: "LEX COMPUTECH CO., LTD",
+ [3]byte{76, 6, 138}: "Basler Electric Company",
+ [3]byte{76, 7, 201}: "COMPUTER OFFICE Co.,Ltd.",
+ [3]byte{76, 9, 180}: "zte corporation",
+ [3]byte{76, 9, 212}: "Arcadyan Technology Corporation",
+ [3]byte{76, 11, 58}: "TCT mobile ltd",
+ [3]byte{76, 11, 190}: "Microsoft",
+ [3]byte{76, 13, 238}: "JABIL CIRCUIT (SHANGHAI) LTD.",
+ [3]byte{76, 15, 110}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{76, 15, 199}: "Earda Electronics Co.,Ltd",
+ [3]byte{76, 17, 191}: "Zhejiang Dahua Technology Co., Ltd.",
+ [3]byte{76, 19, 101}: "Emplus Technologies",
+ [3]byte{76, 20, 128}: "NOREGON SYSTEMS, INC",
+ [3]byte{76, 20, 163}: "TCL Technoly Electronics (Huizhou) Co., Ltd.",
+ [3]byte{76, 22, 148}: "shenzhen sibituo Technology Co., Ltd",
+ [3]byte{76, 22, 241}: "zte corporation",
+ [3]byte{76, 22, 252}: "Juniper Networks",
+ [3]byte{76, 23, 235}: "Sagemcom Broadband SAS",
+ [3]byte{76, 24, 154}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{76, 26, 58}: "PRIMA Research And Production Enterprise Ltd.",
+ [3]byte{76, 26, 61}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{76, 26, 149}: "Novakon Co., Ltd.",
+ [3]byte{76, 31, 204}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{76, 33, 208}: "Sony Mobile Communications AB",
+ [3]byte{76, 34, 88}: "cozybit, Inc.",
+ [3]byte{76, 37, 120}: "Nokia Corporation",
+ [3]byte{76, 38, 231}: "Welgate Co., Ltd.",
+ [3]byte{76, 44, 128}: "Beijing Skyway Technologies Co.,Ltd",
+ [3]byte{76, 44, 131}: "Zhejiang KaNong Network Technology Co.,Ltd.",
+ [3]byte{76, 47, 157}: "ICM Controls",
+ [3]byte{76, 48, 137}: "Thales Transportation Systems GmbH",
+ [3]byte{76, 50, 45}: "TELEDATA NETWORKS",
+ [3]byte{76, 50, 117}: "Apple, Inc.",
+ [3]byte{76, 50, 217}: "M Rutty Holdings Pty. Ltd.",
+ [3]byte{76, 51, 78}: "HIGHTECH",
+ [3]byte{76, 52, 136}: "Intel Corporate",
+ [3]byte{76, 56, 213}: "MITAC COMPUTING TECHNOLOGY CORPORATION",
+ [3]byte{76, 56, 216}: "ARRIS Group, Inc.",
+ [3]byte{76, 57, 9}: "HPL Electric & Power Private Limited",
+ [3]byte{76, 57, 16}: "Newtek Electronics co., Ltd.",
+ [3]byte{76, 59, 116}: "VOGTEC(H.K.) Co., Ltd",
+ [3]byte{76, 60, 22}: "Samsung Electronics Co.,Ltd",
+ [3]byte{76, 72, 218}: "Beijing Autelan Technology Co.,Ltd",
+ [3]byte{76, 73, 227}: "Xiaomi Communications Co Ltd",
+ [3]byte{76, 75, 104}: "Mobile Device, Inc.",
+ [3]byte{76, 78, 3}: "TCT mobile ltd",
+ [3]byte{76, 78, 53}: "Cisco Systems, Inc",
+ [3]byte{76, 82, 98}: "Fujitsu Technology Solutions GmbH",
+ [3]byte{76, 84, 39}: "Linepro Sp. z o.o.",
+ [3]byte{76, 84, 153}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{76, 85, 133}: "Hamilton Systems",
+ [3]byte{76, 85, 184}: "Turkcell Teknoloji",
+ [3]byte{76, 85, 204}: "Zentri Pty Ltd",
+ [3]byte{76, 87, 202}: "Apple, Inc.",
+ [3]byte{76, 93, 205}: "Oy Finnish Electric Vehicle Technologies Ltd",
+ [3]byte{76, 94, 12}: "Routerboard.com",
+ [3]byte{76, 95, 210}: "Alcatel-Lucent",
+ [3]byte{76, 96, 213}: "airPointe of New Hampshire",
+ [3]byte{76, 96, 222}: "NETGEAR",
+ [3]byte{76, 98, 85}: "SANMINA-SCI SYSTEM DE MEXICO S.A. DE C.V.",
+ [3]byte{76, 99, 235}: "Application Solutions (Electronics and Vision) Ltd",
+ [3]byte{76, 100, 217}: "Guangdong Leawin Group Co., Ltd",
+ [3]byte{76, 101, 168}: "IEEE Registration Authority",
+ [3]byte{76, 102, 65}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{76, 110, 110}: "Comnect Technology CO.,LTD",
+ [3]byte{76, 114, 185}: "PEGATRON CORPORATION",
+ [3]byte{76, 115, 103}: "Genius Bytes Software Solutions GmbH",
+ [3]byte{76, 115, 165}: "KOVE",
+ [3]byte{76, 116, 3}: "BQ",
+ [3]byte{76, 116, 135}: "Leader Phone Communication Technology Co., Ltd.",
+ [3]byte{76, 116, 191}: "Apple, Inc.",
+ [3]byte{76, 118, 37}: "Dell Inc.",
+ [3]byte{76, 119, 79}: "Embedded Wireless Labs",
+ [3]byte{76, 120, 114}: "Cav. Uff. Giacomo Cimberio S.p.A.",
+ [3]byte{76, 120, 151}: "Arrowhead Alarm Products Ltd",
+ [3]byte{76, 121, 186}: "Intel Corporate",
+ [3]byte{76, 124, 95}: "Apple, Inc.",
+ [3]byte{76, 127, 98}: "Nokia Corporation",
+ [3]byte{76, 128, 79}: "Armstrong Monitoring Corp",
+ [3]byte{76, 128, 147}: "Intel Corporate",
+ [3]byte{76, 129, 32}: "Taicang T&W Electronics",
+ [3]byte{76, 130, 207}: "Echostar Technologies Corp",
+ [3]byte{76, 131, 222}: "Cisco SPVTG",
+ [3]byte{76, 139, 48}: "Actiontec Electronics, Inc",
+ [3]byte{76, 139, 85}: "Grupo Digicon",
+ [3]byte{76, 139, 239}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{76, 141, 121}: "Apple, Inc.",
+ [3]byte{76, 142, 204}: "SILKAN SA",
+ [3]byte{76, 143, 165}: "Jastec",
+ [3]byte{76, 145, 12}: "Lanix Internacional, S.A. de C.V.",
+ [3]byte{76, 150, 20}: "Juniper Networks",
+ [3]byte{76, 152, 239}: "Zeo",
+ [3]byte{76, 158, 128}: "KYOKKO ELECTRIC Co., Ltd.",
+ [3]byte{76, 158, 228}: "Hanyang Navicom Co.,Ltd.",
+ [3]byte{76, 158, 255}: "Zyxel Communications Corporation",
+ [3]byte{76, 160, 3}: "T-21 Technologies LLC",
+ [3]byte{76, 161, 97}: "Rain Bird Corporation",
+ [3]byte{76, 165, 21}: "Baikal Electronics JSC",
+ [3]byte{76, 165, 109}: "Samsung Electronics Co.,Ltd",
+ [3]byte{76, 167, 75}: "Alcatel Lucent",
+ [3]byte{76, 169, 40}: "Insensi",
+ [3]byte{76, 170, 22}: "AzureWave Technologies (Shanghai) Inc.",
+ [3]byte{76, 171, 51}: "KST technology",
+ [3]byte{76, 172, 10}: "zte corporation",
+ [3]byte{76, 174, 28}: "SaiNXT Technologies LLP",
+ [3]byte{76, 174, 49}: "ShengHai Electronics (Shenzhen) Ltd",
+ [3]byte{76, 176, 8}: "Shenzhen Gwelltimes Technology Co.,Ltd",
+ [3]byte{76, 176, 232}: "Beijing RongZhi xinghua technology co., LTD",
+ [3]byte{76, 177, 108}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{76, 177, 153}: "Apple, Inc.",
+ [3]byte{76, 178, 28}: "Maxphotonics Co.,Ltd",
+ [3]byte{76, 180, 74}: "NANOWAVE Technologies Inc.",
+ [3]byte{76, 180, 234}: "HRD (S) PTE., LTD.",
+ [3]byte{76, 183, 109}: "Novi Security",
+ [3]byte{76, 184, 28}: "SAM Electronics GmbH",
+ [3]byte{76, 184, 44}: "Cambridge Mobile Telematics, Inc.",
+ [3]byte{76, 184, 181}: "Shenzhen YOUHUA Technology Co., Ltd",
+ [3]byte{76, 185, 200}: "CONET CO., LTD.",
+ [3]byte{76, 186, 163}: "Bison Electronics Inc.",
+ [3]byte{76, 187, 88}: "Chicony Electronics Co., Ltd.",
+ [3]byte{76, 188, 66}: "Shenzhen Hangsheng Electronics Co.,Ltd.",
+ [3]byte{76, 188, 165}: "Samsung Electronics Co.,Ltd",
+ [3]byte{76, 189, 143}: "Hangzhou Hikvision Digital Technology Co.,Ltd.",
+ [3]byte{76, 196, 82}: "Shang Hai Tyd. Electon Technology Ltd.",
+ [3]byte{76, 198, 2}: "Radios, Inc.",
+ [3]byte{76, 198, 129}: "Shenzhen Aisat Electronic Co., Ltd.",
+ [3]byte{76, 201, 79}: "Nokia",
+ [3]byte{76, 202, 83}: "Skyera, Inc.",
+ [3]byte{76, 203, 245}: "zte corporation",
+ [3]byte{76, 204, 52}: "Motorola Solutions Inc.",
+ [3]byte{76, 204, 106}: "Micro-Star INTL CO., LTD.",
+ [3]byte{76, 208, 138}: "HUMAX Co., Ltd.",
+ [3]byte{76, 214, 55}: "Qsono Electronics Co., Ltd",
+ [3]byte{76, 215, 182}: "Helmer Scientific",
+ [3]byte{76, 217, 196}: "Magneti Marelli Automotive Electronics (Guangzhou) Co. Ltd",
+ [3]byte{76, 223, 61}: "TEAM ENGINEERS ADVANCE TECHNOLOGIES INDIA PVT LTD",
+ [3]byte{76, 225, 115}: "IEEE Registration Authority",
+ [3]byte{76, 225, 187}: "Zhuhai HiFocus Technology Co., Ltd.",
+ [3]byte{76, 226, 241}: "sclak srl",
+ [3]byte{76, 230, 118}: "BUFFALO.INC",
+ [3]byte{76, 233, 51}: "RailComm, LLC",
+ [3]byte{76, 235, 66}: "Intel Corporate",
+ [3]byte{76, 236, 239}: "Soraa, Inc.",
+ [3]byte{76, 237, 222}: "ASKEY COMPUTER CORP",
+ [3]byte{76, 238, 176}: "SHC Netzwerktechnik GmbH",
+ [3]byte{76, 240, 46}: "Vifa Denmark A/S",
+ [3]byte{76, 242, 191}: "Cambridge Industries(Group) Co.,Ltd.",
+ [3]byte{76, 244, 91}: "Blue Clover Devices",
+ [3]byte{76, 245, 160}: "Scalable Network Technologies Inc",
+ [3]byte{76, 247, 55}: "SamJi Electronics Co., Ltd",
+ [3]byte{76, 249, 93}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{76, 250, 202}: "Cambridge Industries(Group) Co.,Ltd.",
+ [3]byte{76, 251, 69}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{76, 255, 18}: "Fuze Entertainment Co., ltd",
+ [3]byte{80, 0, 140}: "Hong Kong Telecommunications (HKT) Limited",
+ [3]byte{80, 1, 107}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{80, 1, 187}: "Samsung Electronics Co.,Ltd",
+ [3]byte{80, 1, 217}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{80, 4, 184}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{80, 5, 61}: "CyWee Group Ltd",
+ [3]byte{80, 6, 4}: "Cisco Systems, Inc",
+ [3]byte{80, 6, 171}: "Cisco Systems, Inc",
+ [3]byte{80, 9, 89}: "Technicolor CH USA Inc.",
+ [3]byte{80, 11, 50}: "Foxda Technology Industrial(ShenZhen)Co.,LTD",
+ [3]byte{80, 11, 145}: "IEEE Registration Authority",
+ [3]byte{80, 14, 109}: "TrafficCast International",
+ [3]byte{80, 15, 128}: "Cisco Systems, Inc",
+ [3]byte{80, 15, 245}: "Tenda Technology Co.,Ltd.Dongguan branch",
+ [3]byte{80, 17, 235}: "SilverNet Ltd",
+ [3]byte{80, 20, 181}: "Richfit Information Technology Co., Ltd",
+ [3]byte{80, 23, 255}: "Cisco Systems, Inc",
+ [3]byte{80, 24, 76}: "Platina Systems Inc.",
+ [3]byte{80, 26, 165}: "GN Netcom A/S",
+ [3]byte{80, 26, 197}: "Microsoft",
+ [3]byte{80, 28, 191}: "Cisco Systems, Inc",
+ [3]byte{80, 30, 45}: "StreamUnlimited Engineering GmbH",
+ [3]byte{80, 32, 107}: "Emerson Climate Technologies Transportation Solutions",
+ [3]byte{80, 34, 103}: "PixeLINK",
+ [3]byte{80, 37, 43}: "Nethra Imaging Incorporated",
+ [3]byte{80, 38, 144}: "FUJITSU LIMITED",
+ [3]byte{80, 39, 199}: "TECHNART Co.,Ltd",
+ [3]byte{80, 41, 77}: "NANJING IOT SENSOR TECHNOLOGY CO,LTD",
+ [3]byte{80, 42, 126}: "Smart electronic GmbH",
+ [3]byte{80, 42, 139}: "Telekom Research and Development Sdn Bhd",
+ [3]byte{80, 43, 115}: "Tenda Technology Co.,Ltd.Dongguan branch",
+ [3]byte{80, 45, 29}: "Nokia Corporation",
+ [3]byte{80, 45, 162}: "Intel Corporate",
+ [3]byte{80, 45, 244}: "Phytec Messtechnik GmbH",
+ [3]byte{80, 46, 92}: "HTC Corporation",
+ [3]byte{80, 46, 206}: "Asahi Electronics Co.,Ltd",
+ [3]byte{80, 49, 173}: "ABB Global Industries and Services Private Limited",
+ [3]byte{80, 50, 55}: "Apple, Inc.",
+ [3]byte{80, 50, 117}: "Samsung Electronics Co.,Ltd",
+ [3]byte{80, 51, 139}: "Texas Instruments",
+ [3]byte{80, 51, 240}: "YICHEN (SHENZHEN) TECHNOLOGY CO.LTD",
+ [3]byte{80, 57, 85}: "Cisco SPVTG",
+ [3]byte{80, 58, 125}: "AlphaTech PLC Int’l Co., Ltd.",
+ [3]byte{80, 58, 160}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+ [3]byte{80, 60, 196}: "Lenovo Mobile Communication Technology Ltd.",
+ [3]byte{80, 60, 234}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{80, 61, 161}: "Samsung Electronics Co.,Ltd",
+ [3]byte{80, 61, 229}: "Cisco Systems, Inc",
+ [3]byte{80, 62, 170}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{80, 63, 86}: "Syncmold Enterprise Corp",
+ [3]byte{80, 63, 152}: "CMITECH",
+ [3]byte{80, 64, 97}: "Nokia",
+ [3]byte{80, 69, 247}: "Liuhe Intelligence Technology Ltd.",
+ [3]byte{80, 70, 93}: "ASUSTek COMPUTER INC.",
+ [3]byte{80, 72, 235}: "BEIJING HAIHEJINSHENG NETWORK TECHNOLOGY CO. LTD.",
+ [3]byte{80, 74, 94}: "Masimo Corporation",
+ [3]byte{80, 74, 110}: "NETGEAR",
+ [3]byte{80, 75, 91}: "CONTROLtronic GmbH",
+ [3]byte{80, 78, 220}: "Ping Communication",
+ [3]byte{80, 79, 148}: "Loxone Electronics GmbH",
+ [3]byte{80, 80, 42}: "Egardia",
+ [3]byte{80, 80, 101}: "TAKT Corporation",
+ [3]byte{80, 82, 210}: "Hangzhou Telin Technologies Co., Limited",
+ [3]byte{80, 85, 39}: "LG Electronics (Mobile Communications)",
+ [3]byte{80, 86, 99}: "Texas Instruments",
+ [3]byte{80, 86, 168}: "Jolla Ltd",
+ [3]byte{80, 86, 191}: "Samsung Electronics Co.,Ltd",
+ [3]byte{80, 87, 168}: "Cisco Systems, Inc",
+ [3]byte{80, 88, 0}: "WyTec International, Inc.",
+ [3]byte{80, 88, 79}: "waytotec,Inc.",
+ [3]byte{80, 90, 198}: "GUANGDONG SUPER TELECOM CO.,LTD.",
+ [3]byte{80, 96, 40}: "Xirrus Inc.",
+ [3]byte{80, 97, 132}: "Avaya Inc",
+ [3]byte{80, 97, 214}: "Indu-Sol GmbH",
+ [3]byte{80, 99, 19}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{80, 100, 43}: "XIAOMI Electronics,CO.,LTD",
+ [3]byte{80, 100, 65}: "Greenlee",
+ [3]byte{80, 101, 131}: "Texas Instruments",
+ [3]byte{80, 101, 243}: "Hewlett Packard",
+ [3]byte{80, 103, 135}: "Planet Networks",
+ [3]byte{80, 103, 174}: "Cisco Systems, Inc",
+ [3]byte{80, 103, 240}: "Zyxel Communications Corporation",
+ [3]byte{80, 104, 10}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{80, 106, 3}: "NETGEAR",
+ [3]byte{80, 107, 141}: "Nutanix",
+ [3]byte{80, 110, 146}: "Innocent Technology Co., Ltd.",
+ [3]byte{80, 111, 152}: "Sehaj Synergy Technologies Private Limited",
+ [3]byte{80, 111, 154}: "Wi-Fi Alliance",
+ [3]byte{80, 112, 229}: "He Shan World Fair Electronics Technology Limited",
+ [3]byte{80, 114, 36}: "Texas Instruments",
+ [3]byte{80, 114, 77}: "BEG Brueck Electronic GmbH",
+ [3]byte{80, 118, 145}: "Tekpea, Inc.",
+ [3]byte{80, 118, 166}: "Ecil Informatica Ind. Com. Ltda",
+ [3]byte{80, 119, 5}: "Samsung Electronics Co.,Ltd",
+ [3]byte{80, 121, 91}: "Interexport Telecomunicaciones S.A.",
+ [3]byte{80, 122, 85}: "Apple, Inc.",
+ [3]byte{80, 123, 157}: "LCFC(HeFei) Electronics Technology co., ltd",
+ [3]byte{80, 125, 2}: "BIODIT",
+ [3]byte{80, 126, 93}: "Arcadyan Technology Corporation",
+ [3]byte{80, 130, 213}: "Apple, Inc.",
+ [3]byte{80, 133, 105}: "Samsung Electronics Co.,Ltd",
+ [3]byte{80, 135, 137}: "Cisco Systems, Inc",
+ [3]byte{80, 135, 184}: "Nuvyyo Inc",
+ [3]byte{80, 137, 101}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+ [3]byte{80, 138, 15}: "SHENZHEN FISE TECHNOLOGY HOLDING CO.,LTD.",
+ [3]byte{80, 138, 66}: "Uptmate Technology Co., LTD",
+ [3]byte{80, 138, 203}: "SHENZHEN MAXMADE TECHNOLOGY CO., LTD.",
+ [3]byte{80, 140, 119}: "DIRMEIER Schanktechnik GmbH &Co KG",
+ [3]byte{80, 140, 177}: "Texas Instruments",
+ [3]byte{80, 141, 111}: "CHAHOO Limited",
+ [3]byte{80, 143, 76}: "Xiaomi Communications Co Ltd",
+ [3]byte{80, 146, 185}: "Samsung Electronics Co.,Ltd",
+ [3]byte{80, 147, 79}: "Gradual Tecnologia Ltda.",
+ [3]byte{80, 151, 114}: "Westinghouse Digital",
+ [3]byte{80, 152, 113}: "Inventum Technologies Private Limited",
+ [3]byte{80, 152, 243}: "Rheem Australia Pty Ltd",
+ [3]byte{80, 154, 76}: "Dell Inc.",
+ [3]byte{80, 158, 167}: "Samsung Electronics Co.,Ltd",
+ [3]byte{80, 159, 39}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{80, 159, 59}: "OI ELECTRIC CO.,LTD",
+ [3]byte{80, 160, 84}: "Actineon",
+ [3]byte{80, 160, 191}: "Alba Fiber Systems Inc.",
+ [3]byte{80, 164, 200}: "Samsung Electronics Co.,Ltd",
+ [3]byte{80, 164, 208}: "IEEE Registration Authority",
+ [3]byte{80, 166, 227}: "David Clark Company",
+ [3]byte{80, 167, 21}: "Aboundi, Inc.",
+ [3]byte{80, 167, 43}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{80, 167, 51}: "Ruckus Wireless",
+ [3]byte{80, 168, 58}: "S Mobile Devices Limited",
+ [3]byte{80, 169, 222}: "Smartcom - Bulgaria AD",
+ [3]byte{80, 171, 62}: "Qibixx AG",
+ [3]byte{80, 171, 191}: "Hoseo Telecom",
+ [3]byte{80, 173, 213}: "Dynalec Corporation",
+ [3]byte{80, 175, 115}: "Shenzhen Bitland Information Technology Co., Ltd.",
+ [3]byte{80, 179, 99}: "Digitron da Amazonia S/A",
+ [3]byte{80, 182, 149}: "Micropoint Biotechnologies,Inc.",
+ [3]byte{80, 183, 195}: "Samsung Electronics Co.,Ltd",
+ [3]byte{80, 184, 136}: "wi2be Tecnologia S/A",
+ [3]byte{80, 184, 162}: "ImTech Technologies LLC,",
+ [3]byte{80, 189, 95}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{80, 192, 6}: "Carmanah Signs",
+ [3]byte{80, 194, 113}: "SECURETECH INC",
+ [3]byte{80, 197, 141}: "Juniper Networks",
+ [3]byte{80, 199, 191}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{80, 200, 229}: "Samsung Electronics Co.,Ltd",
+ [3]byte{80, 201, 113}: "GN Netcom A/S",
+ [3]byte{80, 201, 160}: "SKIPPER AS",
+ [3]byte{80, 204, 248}: "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+ [3]byte{80, 205, 34}: "Avaya Inc",
+ [3]byte{80, 205, 50}: "NanJing Chaoran Science & Technology Co.,Ltd.",
+ [3]byte{80, 206, 117}: "Measy Electronics Co., Ltd.",
+ [3]byte{80, 210, 19}: "CviLux Corporation",
+ [3]byte{80, 210, 116}: "Steffes Corporation",
+ [3]byte{80, 211, 127}: "Yu Fly Mikly Way Science and Technology Co., Ltd.",
+ [3]byte{80, 213, 156}: "Thai Habel Industrial Co., Ltd.",
+ [3]byte{80, 214, 215}: "Takahata Precision",
+ [3]byte{80, 215, 83}: "CONELCOM GmbH",
+ [3]byte{80, 218, 0}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{80, 221, 79}: "Automation Components, Inc",
+ [3]byte{80, 223, 149}: "Lytx",
+ [3]byte{80, 224, 199}: "TurControlSystme AG",
+ [3]byte{80, 225, 74}: "Private",
+ [3]byte{80, 229, 73}: "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+ [3]byte{80, 230, 102}: "Shenzhen Techtion Electronics Co., Ltd.",
+ [3]byte{80, 233, 113}: "Jibo, Inc.",
+ [3]byte{80, 234, 214}: "Apple, Inc.",
+ [3]byte{80, 235, 26}: "Brocade Communications Systems, Inc.",
+ [3]byte{80, 237, 120}: "Changzhou Yongse Infotech Co.,Ltd",
+ [3]byte{80, 237, 148}: "EGATEL SL",
+ [3]byte{80, 240, 3}: "Open Stack, Inc.",
+ [3]byte{80, 240, 211}: "Samsung Electronics Co.,Ltd",
+ [3]byte{80, 241, 74}: "Texas Instruments",
+ [3]byte{80, 244, 60}: "Leeo Inc",
+ [3]byte{80, 245, 32}: "Samsung Electronics Co.,Ltd",
+ [3]byte{80, 245, 218}: "Amazon Technologies Inc.",
+ [3]byte{80, 246, 26}: "Kunshan JADE Technologies co., Ltd.",
+ [3]byte{80, 247, 34}: "Cisco Systems, Inc",
+ [3]byte{80, 250, 132}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{80, 250, 171}: "L-tek d.o.o.",
+ [3]byte{80, 252, 48}: "Treehouse Labs",
+ [3]byte{80, 252, 159}: "Samsung Electronics Co.,Ltd",
+ [3]byte{80, 254, 242}: "Sify Technologies Ltd",
+ [3]byte{80, 255, 32}: "Keenetic Limited",
+ [3]byte{80, 255, 153}: "IEEE Registration Authority",
+ [3]byte{84, 2, 55}: "Teltronic AG",
+ [3]byte{84, 3, 132}: "Hangkong Nano IC Technologies Co., Ltd",
+ [3]byte{84, 3, 245}: "EBN Technology Corp.",
+ [3]byte{84, 4, 150}: "Gigawave LTD",
+ [3]byte{84, 4, 166}: "ASUSTek COMPUTER INC.",
+ [3]byte{84, 5, 54}: "Vivago Oy",
+ [3]byte{84, 5, 95}: "Alcatel Lucent",
+ [3]byte{84, 5, 147}: "WOORI ELEC Co.,Ltd",
+ [3]byte{84, 9, 85}: "zte corporation",
+ [3]byte{84, 9, 141}: "deister electronic GmbH",
+ [3]byte{84, 16, 236}: "Microchip Technology Inc.",
+ [3]byte{84, 17, 47}: "Sulzer Pump Solutions Finland Oy",
+ [3]byte{84, 17, 95}: "Atamo Pty Ltd",
+ [3]byte{84, 19, 121}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{84, 20, 115}: "Wingtech Group (HongKong)Limited",
+ [3]byte{84, 20, 253}: "Orbbec 3D Technology International",
+ [3]byte{84, 25, 200}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{84, 27, 93}: "Techno-Innov",
+ [3]byte{84, 29, 251}: "Freestyle Energy Ltd",
+ [3]byte{84, 30, 86}: "Juniper Networks",
+ [3]byte{84, 31, 213}: "Advantage Electronics",
+ [3]byte{84, 32, 24}: "Tely Labs",
+ [3]byte{84, 33, 96}: "Resolution Products",
+ [3]byte{84, 34, 248}: "zte corporation",
+ [3]byte{84, 37, 234}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{84, 38, 150}: "Apple, Inc.",
+ [3]byte{84, 39, 30}: "AzureWave Technology Inc.",
+ [3]byte{84, 39, 88}: "Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.",
+ [3]byte{84, 39, 108}: "Jiangsu Houge Technology Corp.",
+ [3]byte{84, 42, 156}: "LSY Defense, LLC.",
+ [3]byte{84, 42, 162}: "Alpha Networks Inc.",
+ [3]byte{84, 43, 87}: "Night Owl SP",
+ [3]byte{84, 44, 234}: "PROTECTRON",
+ [3]byte{84, 47, 137}: "Euclid Laboratories, Inc.",
+ [3]byte{84, 47, 138}: "TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO",
+ [3]byte{84, 49, 49}: "Raster Vision Ltd",
+ [3]byte{84, 51, 203}: "Apple, Inc.",
+ [3]byte{84, 53, 48}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{84, 53, 223}: "Symeo GmbH",
+ [3]byte{84, 54, 155}: "1Verge Internet Technology (Beijing) Co., Ltd.",
+ [3]byte{84, 57, 104}: "Edgewater Networks Inc",
+ [3]byte{84, 57, 223}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{84, 59, 48}: "duagon AG",
+ [3]byte{84, 61, 55}: "Ruckus Wireless",
+ [3]byte{84, 64, 173}: "Samsung Electronics Co.,Ltd",
+ [3]byte{84, 66, 73}: "Sony Corporation",
+ [3]byte{84, 68, 8}: "Nokia Corporation",
+ [3]byte{84, 70, 107}: "Shenzhen CZTIC Electronic Technology Co., Ltd",
+ [3]byte{84, 72, 156}: "CDOUBLES ELECTRONICS CO. LTD.",
+ [3]byte{84, 74, 0}: "Cisco Systems, Inc",
+ [3]byte{84, 74, 5}: "wenglor sensoric gmbh",
+ [3]byte{84, 74, 22}: "Texas Instruments",
+ [3]byte{84, 75, 140}: "Juniper Networks",
+ [3]byte{84, 78, 69}: "Private",
+ [3]byte{84, 78, 144}: "Apple, Inc.",
+ [3]byte{84, 81, 27}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{84, 81, 70}: "AMG Systems Ltd.",
+ [3]byte{84, 83, 237}: "Sony Corporation",
+ [3]byte{84, 84, 20}: "Digital RF Corea, Inc",
+ [3]byte{84, 84, 207}: "PROBEDIGITAL CO.,LTD",
+ [3]byte{84, 90, 166}: "Espressif Inc.",
+ [3]byte{84, 94, 189}: "NL Technologies",
+ [3]byte{84, 95, 169}: "Teracom Limited",
+ [3]byte{84, 96, 9}: "Google, Inc.",
+ [3]byte{84, 97, 114}: "ZODIAC AEROSPACE SAS",
+ [3]byte{84, 97, 234}: "Zaplox AB",
+ [3]byte{84, 100, 217}: "Sagemcom Broadband SAS",
+ [3]byte{84, 101, 222}: "ARRIS Group, Inc.",
+ [3]byte{84, 102, 108}: "Shenzhen YOUHUA Technology Co., Ltd",
+ [3]byte{84, 103, 81}: "Compal Broadband Networks, Inc.",
+ [3]byte{84, 108, 14}: "Texas Instruments",
+ [3]byte{84, 109, 82}: "TOPVIEW OPTRONICS CORP.",
+ [3]byte{84, 114, 79}: "Apple, Inc.",
+ [3]byte{84, 115, 152}: "Toyo Electronics Corporation",
+ [3]byte{84, 116, 230}: "Webtech Wireless",
+ [3]byte{84, 117, 149}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{84, 117, 208}: "Cisco Systems, Inc",
+ [3]byte{84, 120, 26}: "Cisco Systems, Inc",
+ [3]byte{84, 121, 117}: "Nokia Corporation",
+ [3]byte{84, 122, 82}: "CTE International srl",
+ [3]byte{84, 124, 105}: "Cisco Systems, Inc",
+ [3]byte{84, 125, 205}: "Texas Instruments",
+ [3]byte{84, 127, 84}: "INGENICO",
+ [3]byte{84, 127, 168}: "TELCO systems, s.r.o.",
+ [3]byte{84, 127, 238}: "Cisco Systems, Inc",
+ [3]byte{84, 129, 173}: "Eagle Research Corporation",
+ [3]byte{84, 132, 123}: "Digital Devices GmbH",
+ [3]byte{84, 136, 14}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{84, 137, 34}: "Zelfy Inc",
+ [3]byte{84, 137, 152}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{84, 140, 160}: "Liteon Technology Corporation",
+ [3]byte{84, 146, 190}: "Samsung Electronics Co.,Ltd",
+ [3]byte{84, 147, 89}: "SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.",
+ [3]byte{84, 148, 120}: "Silvershore Technology Partners",
+ [3]byte{84, 154, 17}: "IEEE Registration Authority",
+ [3]byte{84, 154, 22}: "Uzushio Electric Co.,Ltd.",
+ [3]byte{84, 154, 76}: "GUANGDONG HOMECARE TECHNOLOGY CO.,LTD.",
+ [3]byte{84, 155, 18}: "Samsung Electronics Co.,Ltd",
+ [3]byte{84, 157, 133}: "EnerAccess inc",
+ [3]byte{84, 159, 19}: "Apple, Inc.",
+ [3]byte{84, 159, 53}: "Dell Inc.",
+ [3]byte{84, 160, 79}: "t-mac Technologies Ltd",
+ [3]byte{84, 160, 80}: "ASUSTek COMPUTER INC.",
+ [3]byte{84, 162, 116}: "Cisco Systems, Inc",
+ [3]byte{84, 163, 27}: "Shenzhen Linkworld Technology Co,.LTD",
+ [3]byte{84, 163, 250}: "BQT Solutions (Australia)Pty Ltd",
+ [3]byte{84, 165, 27}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{84, 165, 75}: "NSC Communications Siberia Ltd",
+ [3]byte{84, 166, 25}: "Alcatel-Lucent Shanghai Bell Co., Ltd",
+ [3]byte{84, 169, 212}: "Minibar Systems",
+ [3]byte{84, 171, 58}: "QUANTA COMPUTER INC.",
+ [3]byte{84, 174, 39}: "Apple, Inc.",
+ [3]byte{84, 177, 33}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{84, 181, 108}: "Xi'an NovaStar Tech Co., Ltd",
+ [3]byte{84, 182, 32}: "SUHDOL E&C Co.Ltd.",
+ [3]byte{84, 183, 83}: "Hunan Fenghui Yinjia Science And Technology Co.,Ltd",
+ [3]byte{84, 184, 10}: "D-Link International",
+ [3]byte{84, 189, 121}: "Samsung Electronics Co.,Ltd",
+ [3]byte{84, 190, 83}: "zte corporation",
+ [3]byte{84, 190, 247}: "PEGATRON CORPORATION",
+ [3]byte{84, 196, 21}: "Hangzhou Hikvision Digital Technology Co.,Ltd.",
+ [3]byte{84, 197, 122}: "Sunnovo International Limited",
+ [3]byte{84, 200, 15}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{84, 201, 223}: "FN-LINK TECHNOLOGY LIMITED",
+ [3]byte{84, 205, 16}: "Panasonic Mobile Communications Co.,Ltd.",
+ [3]byte{84, 205, 167}: "Fujian Shenzhou Electronic Co.,Ltd",
+ [3]byte{84, 205, 238}: "ShenZhen Apexis Electronic Co.,Ltd",
+ [3]byte{84, 208, 180}: "Xiamen Four-Faith Communication Technology Co.,Ltd",
+ [3]byte{84, 208, 237}: "AXIM Communications",
+ [3]byte{84, 209, 99}: "MAX-TECH,INC",
+ [3]byte{84, 209, 176}: "Universal Laser Systems, Inc",
+ [3]byte{84, 210, 114}: "Nuki Home Solutions GmbH",
+ [3]byte{84, 212, 111}: "Cisco SPVTG",
+ [3]byte{84, 215, 81}: "Proximus",
+ [3]byte{84, 217, 228}: "BRILLIANTTS CO., LTD",
+ [3]byte{84, 220, 29}: "Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd",
+ [3]byte{84, 223, 0}: "Ulterius Technologies, LLC",
+ [3]byte{84, 223, 36}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{84, 223, 99}: "Intrakey technologies GmbH",
+ [3]byte{84, 224, 50}: "Juniper Networks",
+ [3]byte{84, 224, 97}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+ [3]byte{84, 225, 64}: "INGENICO",
+ [3]byte{84, 225, 173}: "LCFC(HeFei) Electronics Technology co., ltd",
+ [3]byte{84, 226, 200}: "Dongguan Aoyuan Electronics Technology Co., Ltd",
+ [3]byte{84, 226, 224}: "ARRIS Group, Inc.",
+ [3]byte{84, 227, 176}: "JVL Industri Elektronik",
+ [3]byte{84, 227, 246}: "Alcatel-Lucent",
+ [3]byte{84, 228, 58}: "Apple, Inc.",
+ [3]byte{84, 228, 189}: "FN-LINK TECHNOLOGY LIMITED",
+ [3]byte{84, 230, 63}: "ShenZhen LingKeWeiEr Technology Co., Ltd.",
+ [3]byte{84, 230, 252}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{84, 234, 168}: "Apple, Inc.",
+ [3]byte{84, 237, 163}: "Navdy, Inc.",
+ [3]byte{84, 238, 117}: "Wistron InfoComm(Kunshan)Co.,Ltd.",
+ [3]byte{84, 239, 146}: "Shenzhen Elink Technology Co., LTD",
+ [3]byte{84, 239, 254}: "Fullpower Technologies, Inc.",
+ [3]byte{84, 242, 1}: "Samsung Electronics Co.,Ltd",
+ [3]byte{84, 245, 182}: "ORIENTAL PACIFIC INTERNATIONAL LIMITED",
+ [3]byte{84, 246, 102}: "Berthold Technologies GmbH and Co.KG",
+ [3]byte{84, 246, 197}: "FUJIAN STAR-NET COMMUNICATION CO.,LTD",
+ [3]byte{84, 248, 118}: "ABB AG",
+ [3]byte{84, 250, 62}: "Samsung Electronics Co.,Ltd",
+ [3]byte{84, 250, 150}: "Nokia",
+ [3]byte{84, 251, 88}: "WISEWARE, Lda",
+ [3]byte{84, 253, 191}: "Scheidt & Bachmann GmbH",
+ [3]byte{84, 255, 130}: "Davit Solution co.",
+ [3]byte{84, 255, 207}: "Mopria Alliance",
+ [3]byte{88, 0, 187}: "Juniper Networks",
+ [3]byte{88, 0, 227}: "Liteon Technology Corporation",
+ [3]byte{88, 4, 84}: "ICOMM HK LIMITED",
+ [3]byte{88, 4, 203}: "Tianjin Huisun Technology Co.,Ltd.",
+ [3]byte{88, 5, 40}: "LABRIS NETWORKS",
+ [3]byte{88, 5, 86}: "Elettronica GF S.r.L.",
+ [3]byte{88, 8, 250}: "Fiber Optic & telecommunication INC.",
+ [3]byte{88, 9, 67}: "Private",
+ [3]byte{88, 9, 229}: "Kivic Inc.",
+ [3]byte{88, 10, 32}: "Cisco Systems, Inc",
+ [3]byte{88, 16, 140}: "Intelbras",
+ [3]byte{88, 18, 67}: "AcSiP Technology Corp.",
+ [3]byte{88, 22, 38}: "Avaya Inc",
+ [3]byte{88, 23, 12}: "Sony Mobile Communications AB",
+ [3]byte{88, 25, 248}: "ARRIS Group, Inc.",
+ [3]byte{88, 28, 189}: "Affinegy",
+ [3]byte{88, 29, 145}: "Advanced Mobile Telecom co.,ltd.",
+ [3]byte{88, 31, 40}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{88, 31, 103}: "Open-m technology limited",
+ [3]byte{88, 31, 170}: "Apple, Inc.",
+ [3]byte{88, 31, 239}: "Tuttnaer LTD",
+ [3]byte{88, 32, 177}: "Hewlett Packard",
+ [3]byte{88, 33, 54}: "KMB systems, s.r.o.",
+ [3]byte{88, 35, 140}: "Technicolor CH USA Inc.",
+ [3]byte{88, 42, 247}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{88, 43, 219}: "Pax AB",
+ [3]byte{88, 46, 254}: "Lighting Science Group",
+ [3]byte{88, 47, 66}: "Universal Electric Corporation",
+ [3]byte{88, 49, 18}: "DRUST",
+ [3]byte{88, 50, 119}: "Reliance Communications LLC",
+ [3]byte{88, 52, 59}: "Glovast Technology Ltd.",
+ [3]byte{88, 53, 217}: "Cisco Systems, Inc",
+ [3]byte{88, 56, 121}: "RICOH COMPANY, LTD.",
+ [3]byte{88, 60, 198}: "Omneality Ltd.",
+ [3]byte{88, 63, 84}: "LG Electronics (Mobile Communications)",
+ [3]byte{88, 64, 78}: "Apple, Inc.",
+ [3]byte{88, 66, 228}: "Baxter International Inc",
+ [3]byte{88, 68, 152}: "Xiaomi Communications Co Ltd",
+ [3]byte{88, 70, 143}: "Koncar Electronics and Informatics",
+ [3]byte{88, 70, 225}: "Baxter International Inc",
+ [3]byte{88, 71, 4}: "Shenzhen Webridge Technology Co.,Ltd",
+ [3]byte{88, 72, 34}: "Sony Mobile Communications AB",
+ [3]byte{88, 72, 192}: "COFLEC",
+ [3]byte{88, 73, 37}: "E3 Enterprise",
+ [3]byte{88, 73, 59}: "Palo Alto Networks",
+ [3]byte{88, 73, 186}: "Chitai Electronic Corp.",
+ [3]byte{88, 76, 25}: "Chongqing Guohong Technology Development Company Limited",
+ [3]byte{88, 76, 238}: "Digital One Technologies, Limited",
+ [3]byte{88, 80, 118}: "Linear Equipamentos Eletronicos SA",
+ [3]byte{88, 80, 171}: "TLS Corporation",
+ [3]byte{88, 80, 230}: "Best Buy Corporation",
+ [3]byte{88, 82, 138}: "Mitsubishi Electric Corporation",
+ [3]byte{88, 83, 192}: "Beijing Guang Runtong Technology Development Company co.,Ltd",
+ [3]byte{88, 85, 202}: "Apple, Inc.",
+ [3]byte{88, 86, 232}: "ARRIS Group, Inc.",
+ [3]byte{88, 87, 13}: "Danfoss Solar Inverters",
+ [3]byte{88, 96, 95}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{88, 97, 99}: "Quantum Networks (SG) Pte. Ltd.",
+ [3]byte{88, 99, 86}: "FN-LINK TECHNOLOGY LIMITED",
+ [3]byte{88, 99, 154}: "TPL SYSTEMES",
+ [3]byte{88, 101, 230}: "INFOMARK CO., LTD.",
+ [3]byte{88, 102, 186}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{88, 103, 26}: "Barnes&Noble",
+ [3]byte{88, 103, 127}: "Clare Controls Inc.",
+ [3]byte{88, 104, 93}: "Tempo Australia Pty Ltd",
+ [3]byte{88, 105, 108}: "Ruijie Networks Co.,LTD",
+ [3]byte{88, 105, 249}: "Fusion Transactive Ltd.",
+ [3]byte{88, 106, 177}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{88, 109, 143}: "Cisco-Linksys, LLC",
+ [3]byte{88, 110, 214}: "Private",
+ [3]byte{88, 112, 198}: "Shanghai Xiaoyi Technology Co., Ltd.",
+ [3]byte{88, 117, 33}: "CJSC RTSoft",
+ [3]byte{88, 118, 117}: "Beijing ECHO Technologies Co.,Ltd",
+ [3]byte{88, 118, 197}: "DIGI I'S LTD",
+ [3]byte{88, 122, 77}: "Stonesoft Corporation",
+ [3]byte{88, 122, 98}: "Texas Instruments",
+ [3]byte{88, 123, 233}: "AirPro Technology India Pvt. Ltd",
+ [3]byte{88, 126, 97}: "Qingdao Hisense Communications Co.,Ltd.",
+ [3]byte{88, 127, 87}: "Apple, Inc.",
+ [3]byte{88, 127, 102}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{88, 127, 183}: "SONAR INDUSTRIAL CO., LTD.",
+ [3]byte{88, 127, 200}: "S2M",
+ [3]byte{88, 130, 29}: "H. Schomäcker GmbH",
+ [3]byte{88, 130, 168}: "Microsoft",
+ [3]byte{88, 132, 228}: "IP500 Alliance e.V.",
+ [3]byte{88, 133, 110}: "QSC AG",
+ [3]byte{88, 135, 76}: "LITE-ON CLEAN ENERGY TECHNOLOGY CORP.",
+ [3]byte{88, 135, 226}: "Shenzhen Coship Electronics Co., Ltd.",
+ [3]byte{88, 138, 90}: "Dell Inc.",
+ [3]byte{88, 139, 243}: "Zyxel Communications Corporation",
+ [3]byte{88, 141, 9}: "Cisco Systems, Inc",
+ [3]byte{88, 141, 100}: "Xi'an Clevbee Technology Co.,Ltd",
+ [3]byte{88, 144, 67}: "Sagemcom Broadband SAS",
+ [3]byte{88, 145, 207}: "Intel Corporate",
+ [3]byte{88, 146, 13}: "Kinetic Avionics Limited",
+ [3]byte{88, 147, 150}: "Ruckus Wireless",
+ [3]byte{88, 148, 107}: "Intel Corporate",
+ [3]byte{88, 148, 207}: "Vertex Standard LMR, Inc.",
+ [3]byte{88, 151, 30}: "Cisco Systems, Inc",
+ [3]byte{88, 151, 189}: "Cisco Systems, Inc",
+ [3]byte{88, 152, 53}: "Technicolor",
+ [3]byte{88, 152, 111}: "Revolution Display",
+ [3]byte{88, 155, 11}: "Shineway Technologies, Inc.",
+ [3]byte{88, 156, 252}: "FreeBSD Foundation",
+ [3]byte{88, 160, 203}: "TrackNet, Inc",
+ [3]byte{88, 162, 181}: "LG Electronics (Mobile Communications)",
+ [3]byte{88, 167, 111}: "iD corporation",
+ [3]byte{88, 168, 57}: "Intel Corporate",
+ [3]byte{88, 172, 120}: "Cisco Systems, Inc",
+ [3]byte{88, 176, 53}: "Apple, Inc.",
+ [3]byte{88, 176, 212}: "ZuniData Systems Inc.",
+ [3]byte{88, 180, 45}: "YSTen Technology Co.,Ltd",
+ [3]byte{88, 182, 51}: "Ruckus Wireless",
+ [3]byte{88, 185, 97}: "SOLEM Electronique",
+ [3]byte{88, 185, 225}: "Crystalfontz America, Inc.",
+ [3]byte{88, 188, 39}: "Cisco Systems, Inc",
+ [3]byte{88, 188, 143}: "Cognitive Systems Corp.",
+ [3]byte{88, 189, 163}: "Nintendo Co., Ltd.",
+ [3]byte{88, 189, 249}: "Sigrand",
+ [3]byte{88, 191, 234}: "Cisco Systems, Inc",
+ [3]byte{88, 193, 122}: "Cambium Networks Limited",
+ [3]byte{88, 194, 50}: "NEC Corporation",
+ [3]byte{88, 195, 139}: "Samsung Electronics Co.,Ltd",
+ [3]byte{88, 197, 131}: "ITEL MOBILE LIMITED",
+ [3]byte{88, 197, 203}: "Samsung Electronics Co.,Ltd",
+ [3]byte{88, 201, 53}: "Chiun Mai Communication Systems, Inc",
+ [3]byte{88, 207, 75}: "Lufkin Industries",
+ [3]byte{88, 208, 113}: "BW Broadcast",
+ [3]byte{88, 208, 143}: "IEEE 1904.1 Working Group",
+ [3]byte{88, 214, 122}: "TCPlink",
+ [3]byte{88, 214, 211}: "Dairy Cheq Inc",
+ [3]byte{88, 217, 213}: "Tenda Technology Co.,Ltd.Dongguan branch",
+ [3]byte{88, 219, 141}: "Fast Co., Ltd.",
+ [3]byte{88, 220, 109}: "Exceptional Innovation, Inc.",
+ [3]byte{88, 224, 44}: "Micro Technic A/S",
+ [3]byte{88, 225, 108}: "Ying Hua Information Technology (Shanghai)Co., LTD",
+ [3]byte{88, 226, 143}: "Apple, Inc.",
+ [3]byte{88, 227, 38}: "Compass Technologies Inc.",
+ [3]byte{88, 228, 118}: "CENTRON COMMUNICATIONS TECHNOLOGIES FUJIAN CO.,LTD",
+ [3]byte{88, 230, 54}: "EVRsafe Technologies",
+ [3]byte{88, 231, 71}: "Deltanet AG",
+ [3]byte{88, 232, 8}: "AUTONICS CORPORATION",
+ [3]byte{88, 232, 118}: "IEEE Registration Authority",
+ [3]byte{88, 235, 20}: "Proteus Digital Health",
+ [3]byte{88, 236, 225}: "Newport Corporation",
+ [3]byte{88, 238, 206}: "Icon Time Systems",
+ [3]byte{88, 239, 104}: "Belkin International Inc.",
+ [3]byte{88, 241, 2}: "BLU Products Inc.",
+ [3]byte{88, 243, 135}: "HCCP",
+ [3]byte{88, 243, 156}: "Cisco Systems, Inc",
+ [3]byte{88, 244, 150}: "Source Chain",
+ [3]byte{88, 246, 123}: "Xia Men UnionCore Technology LTD.",
+ [3]byte{88, 246, 191}: "Kyoto University",
+ [3]byte{88, 249, 142}: "SECUDOS GmbH",
+ [3]byte{88, 251, 132}: "Intel Corporate",
+ [3]byte{88, 252, 115}: "Arria Live Media, Inc.",
+ [3]byte{88, 252, 219}: "IEEE Registration Authority",
+ [3]byte{88, 253, 32}: "Bravida Sakerhet AB",
+ [3]byte{92, 2, 106}: "Applied Vision Corporation",
+ [3]byte{92, 3, 57}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{92, 7, 111}: "Thought Creator",
+ [3]byte{92, 9, 121}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{92, 10, 91}: "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+ [3]byte{92, 12, 14}: "Guizhou Huaxintong Semiconductor Technology Co Ltd",
+ [3]byte{92, 12, 187}: "CELIZION Inc.",
+ [3]byte{92, 14, 139}: "Extreme Networks, Inc.",
+ [3]byte{92, 17, 147}: "Seal One AG",
+ [3]byte{92, 20, 55}: "Thyssenkrupp Aufzugswerke GmbH",
+ [3]byte{92, 21, 21}: "ADVAN",
+ [3]byte{92, 21, 225}: "AIDC TECHNOLOGY (S) PTE LTD",
+ [3]byte{92, 22, 199}: "Big Switch Networks",
+ [3]byte{92, 23, 55}: "I-View Now, LLC.",
+ [3]byte{92, 23, 211}: "LGE",
+ [3]byte{92, 24, 181}: "Talon Communications",
+ [3]byte{92, 26, 111}: "Cambridge Industries(Group) Co.,Ltd.",
+ [3]byte{92, 32, 208}: "Asoni Communication Co., Ltd.",
+ [3]byte{92, 34, 196}: "DAE EUN ELETRONICS CO., LTD",
+ [3]byte{92, 36, 67}: "O-Sung Telecom Co., Ltd.",
+ [3]byte{92, 36, 121}: "Baltech AG",
+ [3]byte{92, 37, 76}: "Avire Global Pte Ltd",
+ [3]byte{92, 38, 10}: "Dell Inc.",
+ [3]byte{92, 42, 239}: "Open Access Pty Ltd",
+ [3]byte{92, 43, 245}: "Vivint Wireless Inc.",
+ [3]byte{92, 46, 89}: "Samsung Electronics Co.,Ltd",
+ [3]byte{92, 46, 210}: "ABC(XiSheng) Electronics Co.,Ltd",
+ [3]byte{92, 49, 62}: "Texas Instruments",
+ [3]byte{92, 51, 39}: "Spazio Italia srl",
+ [3]byte{92, 51, 92}: "Swissphone Telecom AG",
+ [3]byte{92, 51, 142}: "Alpha Networks Inc.",
+ [3]byte{92, 53, 59}: "Compal Broadband Networks, Inc.",
+ [3]byte{92, 53, 218}: "There Corporation Oy",
+ [3]byte{92, 54, 184}: "TCL King Electrical Appliances (Huizhou) Co., Ltd",
+ [3]byte{92, 56, 224}: "Shanghai Super Electronics Technology Co.,LTD",
+ [3]byte{92, 59, 53}: "Gehirn Inc.",
+ [3]byte{92, 60, 39}: "Samsung Electronics Co.,Ltd",
+ [3]byte{92, 64, 88}: "Jefferson Audio Video Systems, Inc.",
+ [3]byte{92, 65, 231}: "Wiatec International Ltd.",
+ [3]byte{92, 67, 210}: "HAZEMEYER",
+ [3]byte{92, 69, 39}: "Juniper Networks",
+ [3]byte{92, 73, 121}: "AVM Audiovisuelles Marketing und Computersysteme GmbH",
+ [3]byte{92, 73, 125}: "Samsung Electronics Co.,Ltd",
+ [3]byte{92, 74, 31}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+ [3]byte{92, 74, 38}: "Enguity Technology Corp",
+ [3]byte{92, 76, 169}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{92, 80, 21}: "Cisco Systems, Inc",
+ [3]byte{92, 81, 79}: "Intel Corporate",
+ [3]byte{92, 81, 129}: "Samsung Electronics Co.,Ltd",
+ [3]byte{92, 81, 136}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{92, 82, 30}: "Nintendo Co.,Ltd",
+ [3]byte{92, 84, 109}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{92, 86, 237}: "3pleplay Electronics Private Limited",
+ [3]byte{92, 87, 26}: "ARRIS Group, Inc.",
+ [3]byte{92, 87, 200}: "Nokia Corporation",
+ [3]byte{92, 88, 25}: "Jingsheng Technology Co., Ltd.",
+ [3]byte{92, 89, 72}: "Apple, Inc.",
+ [3]byte{92, 91, 53}: "Mist Systems, Inc.",
+ [3]byte{92, 91, 194}: "YIK Corporation",
+ [3]byte{92, 94, 171}: "Juniper Networks",
+ [3]byte{92, 95, 103}: "Intel Corporate",
+ [3]byte{92, 99, 191}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{92, 103, 118}: "IDS Imaging Development Systems GmbH",
+ [3]byte{92, 105, 132}: "NUVICO",
+ [3]byte{92, 106, 125}: "KENTKART EGE ELEKTRONIK SAN. VE TIC. LTD. STI.",
+ [3]byte{92, 106, 128}: "Zyxel Communications Corporation",
+ [3]byte{92, 107, 50}: "Texas Instruments",
+ [3]byte{92, 107, 79}: "Hello Inc.",
+ [3]byte{92, 109, 32}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{92, 111, 79}: "S.A. SISTEL",
+ [3]byte{92, 112, 163}: "LG Electronics (Mobile Communications)",
+ [3]byte{92, 119, 87}: "Haivision Network Video",
+ [3]byte{92, 119, 118}: "TCT mobile ltd",
+ [3]byte{92, 125, 94}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{92, 129, 167}: "Network Devices Pty Ltd",
+ [3]byte{92, 131, 143}: "Cisco Systems, Inc",
+ [3]byte{92, 132, 134}: "Brightsource Industries Israel LTD",
+ [3]byte{92, 134, 19}: "Beijing Zhoenet Technology Co., Ltd",
+ [3]byte{92, 134, 74}: "Secret Labs LLC",
+ [3]byte{92, 134, 92}: "Samsung Electronics Co.,Ltd",
+ [3]byte{92, 134, 193}: "DONGGUAN SOLUM ELECTRONICS CO.,LTD",
+ [3]byte{92, 135, 120}: "Cybertelbridge co.,ltd",
+ [3]byte{92, 137, 154}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{92, 137, 212}: "Beijing Banner Electric Co.,Ltd",
+ [3]byte{92, 138, 56}: "Hewlett Packard",
+ [3]byte{92, 141, 45}: "Shanghai Wellpay Information Technology Co., Ltd",
+ [3]byte{92, 141, 78}: "Apple, Inc.",
+ [3]byte{92, 143, 224}: "ARRIS Group, Inc.",
+ [3]byte{92, 147, 162}: "Liteon Technology Corporation",
+ [3]byte{92, 149, 174}: "Apple, Inc.",
+ [3]byte{92, 150, 86}: "AzureWave Technology Inc.",
+ [3]byte{92, 150, 106}: "RTNET",
+ [3]byte{92, 150, 157}: "Apple, Inc.",
+ [3]byte{92, 151, 243}: "Apple, Inc.",
+ [3]byte{92, 153, 96}: "Samsung Electronics Co.,Ltd",
+ [3]byte{92, 154, 216}: "FUJITSU LIMITED",
+ [3]byte{92, 161, 118}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+ [3]byte{92, 161, 120}: "TableTop Media (dba Ziosk)",
+ [3]byte{92, 163, 157}: "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+ [3]byte{92, 163, 235}: "Lokel s.r.o.",
+ [3]byte{92, 164, 138}: "Cisco Systems, Inc",
+ [3]byte{92, 168, 106}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{92, 169, 51}: "Luma Home",
+ [3]byte{92, 170, 253}: "Sonos, Inc.",
+ [3]byte{92, 172, 76}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{92, 173, 118}: "Shenzhen TCL New Technology Co., Ltd",
+ [3]byte{92, 173, 207}: "Apple, Inc.",
+ [3]byte{92, 175, 6}: "LG Electronics (Mobile Communications)",
+ [3]byte{92, 176, 102}: "ARRIS Group, Inc.",
+ [3]byte{92, 179, 149}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{92, 180, 62}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{92, 181, 36}: "Sony Mobile Communications AB",
+ [3]byte{92, 181, 89}: "CNEX Labs",
+ [3]byte{92, 182, 204}: "NovaComm Technologies Inc.",
+ [3]byte{92, 184, 203}: "Allis Communications",
+ [3]byte{92, 185, 1}: "Hewlett Packard",
+ [3]byte{92, 186, 55}: "Microsoft Corporation",
+ [3]byte{92, 189, 158}: "HONGKONG MIRACLE EAGLE TECHNOLOGY(GROUP) LIMITED",
+ [3]byte{92, 194, 19}: "Fr. Sauter AG",
+ [3]byte{92, 195, 7}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{92, 197, 212}: "Intel Corporate",
+ [3]byte{92, 198, 208}: "Skyworth Digital Technology(Shenzhen) Co.,Ltd",
+ [3]byte{92, 198, 233}: "Edifier International",
+ [3]byte{92, 199, 215}: "AZROAD TECHNOLOGY COMPANY LIMITED",
+ [3]byte{92, 201, 211}: "PALLADIUM ENERGY ELETRONICA DA AMAZONIA LTDA",
+ [3]byte{92, 202, 26}: "Microsoft Mobile Oy",
+ [3]byte{92, 202, 50}: "Theben AG",
+ [3]byte{92, 204, 160}: "Gridwiz Inc.",
+ [3]byte{92, 204, 255}: "Techroutes Network Pvt Ltd",
+ [3]byte{92, 206, 173}: "CDYNE Corporation",
+ [3]byte{92, 207, 127}: "Espressif Inc.",
+ [3]byte{92, 209, 53}: "Xtreme Power Systems",
+ [3]byte{92, 210, 228}: "Intel Corporate",
+ [3]byte{92, 212, 27}: "UCZOON Technology Co., LTD",
+ [3]byte{92, 212, 171}: "Zektor",
+ [3]byte{92, 214, 31}: "Qardio, Inc",
+ [3]byte{92, 217, 152}: "D-Link Corporation",
+ [3]byte{92, 218, 212}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{92, 220, 150}: "Arcadyan Technology Corporation",
+ [3]byte{92, 221, 112}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{92, 224, 197}: "Intel Corporate",
+ [3]byte{92, 224, 202}: "FeiTian United (Beijing) System Technology Co., Ltd.",
+ [3]byte{92, 224, 246}: "NIC.br- Nucleo de Informacao e Coordenacao do Ponto BR",
+ [3]byte{92, 226, 35}: "Delphin Technology AG",
+ [3]byte{92, 226, 134}: "Nortel Networks",
+ [3]byte{92, 226, 140}: "Zyxel Communications Corporation",
+ [3]byte{92, 226, 244}: "AcSiP Technology Corp.",
+ [3]byte{92, 227, 14}: "ARRIS Group, Inc.",
+ [3]byte{92, 227, 182}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{92, 231, 191}: "New Singularity International Technical Development Co.,Ltd",
+ [3]byte{92, 232, 183}: "Oraimo Technology Limited",
+ [3]byte{92, 232, 235}: "Samsung Electronics Co.,Ltd",
+ [3]byte{92, 234, 29}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{92, 235, 78}: "R. STAHL HMI Systems GmbH",
+ [3]byte{92, 235, 104}: "Cheerstar Technology Co., Ltd",
+ [3]byte{92, 238, 121}: "Global Digitech Co LTD",
+ [3]byte{92, 242, 7}: "Speco Technologies",
+ [3]byte{92, 242, 134}: "IEEE Registration Authority",
+ [3]byte{92, 243, 112}: "CC&C Technologies, Inc",
+ [3]byte{92, 243, 252}: "IBM Corp",
+ [3]byte{92, 244, 171}: "Zyxel Communications Corporation",
+ [3]byte{92, 245, 13}: "Institute of microelectronic applications",
+ [3]byte{92, 245, 218}: "Apple, Inc.",
+ [3]byte{92, 246, 220}: "Samsung Electronics Co.,Ltd",
+ [3]byte{92, 247, 195}: "SYNTECH (HK) TECHNOLOGY LIMITED",
+ [3]byte{92, 247, 230}: "Apple, Inc.",
+ [3]byte{92, 248, 33}: "Texas Instruments",
+ [3]byte{92, 248, 161}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{92, 249, 56}: "Apple, Inc.",
+ [3]byte{92, 249, 106}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{92, 249, 221}: "Dell Inc.",
+ [3]byte{92, 249, 240}: "Atomos Engineering P/L",
+ [3]byte{92, 252, 102}: "Cisco Systems, Inc",
+ [3]byte{92, 255, 53}: "Wistron Corporation",
+ [3]byte{92, 255, 255}: "Shenzhen Kezhonglong Optoelectronic Technology Co., Ltd",
+ [3]byte{96, 1, 148}: "Espressif Inc.",
+ [3]byte{96, 2, 146}: "PEGATRON CORPORATION",
+ [3]byte{96, 2, 180}: "Wistron Neweb Corporation",
+ [3]byte{96, 3, 8}: "Apple, Inc.",
+ [3]byte{96, 3, 71}: "Billion Electric Co. Ltd.",
+ [3]byte{96, 4, 23}: "POSBANK CO.,LTD",
+ [3]byte{96, 8, 16}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{96, 8, 55}: "ivvi Scientific(Nanchang)Co.Ltd",
+ [3]byte{96, 11, 3}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{96, 15, 119}: "SilverPlus, Inc",
+ [3]byte{96, 17, 153}: "Siama Systems Inc",
+ [3]byte{96, 18, 131}: "TSB REAL TIME LOCATION SYSTEMS S.L.",
+ [3]byte{96, 18, 139}: "CANON INC.",
+ [3]byte{96, 20, 102}: "zte corporation",
+ [3]byte{96, 20, 179}: "CyberTAN Technology Inc.",
+ [3]byte{96, 21, 199}: "IdaTech",
+ [3]byte{96, 24, 3}: "Daikin Air-conditioning (Shanghai) Co., Ltd.",
+ [3]byte{96, 24, 46}: "ShenZhen Protruly Electronic Ltd co.",
+ [3]byte{96, 24, 136}: "zte corporation",
+ [3]byte{96, 25, 12}: "RRAMAC",
+ [3]byte{96, 25, 41}: "VOLTRONIC POWER TECHNOLOGY(SHENZHEN) CORP.",
+ [3]byte{96, 25, 112}: "HUIZHOU QIAOXING ELECTRONICS TECHNOLOGY CO., LTD.",
+ [3]byte{96, 25, 113}: "ARRIS Group, Inc.",
+ [3]byte{96, 29, 15}: "Midnite Solar",
+ [3]byte{96, 30, 2}: "EltexAlatau",
+ [3]byte{96, 33, 1}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{96, 33, 3}: "I4VINE, INC",
+ [3]byte{96, 33, 192}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{96, 36, 193}: "Jiangsu Zhongxun Electronic Technology Co., Ltd",
+ [3]byte{96, 39, 28}: "VIDEOR E. Hartig GmbH",
+ [3]byte{96, 42, 84}: "CardioTek B.V.",
+ [3]byte{96, 42, 208}: "Cisco SPVTG",
+ [3]byte{96, 46, 32}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{96, 49, 59}: "Sunnovo International Limited",
+ [3]byte{96, 49, 151}: "Zyxel Communications Corporation",
+ [3]byte{96, 50, 240}: "Mplus technology",
+ [3]byte{96, 51, 75}: "Apple, Inc.",
+ [3]byte{96, 53, 83}: "Buwon Technology",
+ [3]byte{96, 54, 150}: "The Sapling Company",
+ [3]byte{96, 54, 221}: "Intel Corporate",
+ [3]byte{96, 56, 14}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{96, 56, 224}: "Belkin International Inc.",
+ [3]byte{96, 57, 31}: "ABB Ltd",
+ [3]byte{96, 61, 38}: "Technicolor CH USA Inc.",
+ [3]byte{96, 62, 123}: "Gafachi, Inc.",
+ [3]byte{96, 62, 202}: "Cambridge Medical Robotics Ltd",
+ [3]byte{96, 63, 197}: "COX CO., LTD",
+ [3]byte{96, 66, 127}: "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD",
+ [3]byte{96, 68, 245}: "Easy Digital Ltd.",
+ [3]byte{96, 69, 94}: "Liptel s.r.o.",
+ [3]byte{96, 69, 189}: "Microsoft",
+ [3]byte{96, 69, 203}: "ASUSTek COMPUTER INC.",
+ [3]byte{96, 70, 22}: "XIAMEN VANN INTELLIGENT CO., LTD",
+ [3]byte{96, 71, 98}: "Beijing Sensoro Technology Co.,Ltd.",
+ [3]byte{96, 71, 212}: "FORICS Electronic Technology Co., Ltd.",
+ [3]byte{96, 72, 38}: "Newbridge Technologies Int. Ltd.",
+ [3]byte{96, 73, 193}: "Avaya Inc",
+ [3]byte{96, 74, 28}: "SUYIN Corporation",
+ [3]byte{96, 75, 170}: "Private",
+ [3]byte{96, 80, 193}: "Kinetek Sports",
+ [3]byte{96, 81, 44}: "TCT mobile ltd",
+ [3]byte{96, 82, 208}: "FACTS Engineering",
+ [3]byte{96, 83, 23}: "Sandstone Technologies",
+ [3]byte{96, 84, 100}: "Eyedro Green Solutions Inc.",
+ [3]byte{96, 87, 24}: "Intel Corporate",
+ [3]byte{96, 91, 180}: "AzureWave Technology Inc.",
+ [3]byte{96, 96, 31}: "SZ DJI TECHNOLOGY CO.,LTD",
+ [3]byte{96, 99, 249}: "Ciholas, Inc.",
+ [3]byte{96, 99, 253}: "Transcend Communication Beijing Co.,Ltd.",
+ [3]byte{96, 100, 5}: "Texas Instruments",
+ [3]byte{96, 100, 83}: "AOD Co.,Ltd.",
+ [3]byte{96, 100, 161}: "RADiflow Ltd.",
+ [3]byte{96, 103, 32}: "Intel Corporate",
+ [3]byte{96, 105, 68}: "Apple, Inc.",
+ [3]byte{96, 105, 155}: "isepos GmbH",
+ [3]byte{96, 107, 189}: "Samsung Electronics Co.,Ltd",
+ [3]byte{96, 108, 102}: "Intel Corporate",
+ [3]byte{96, 109, 60}: "Luxshare Precision Industry Company Limited",
+ [3]byte{96, 109, 199}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{96, 114, 11}: "BLU Products Inc",
+ [3]byte{96, 115, 92}: "Cisco Systems, Inc",
+ [3]byte{96, 115, 188}: "zte corporation",
+ [3]byte{96, 116, 141}: "Atmaca Elektronik",
+ [3]byte{96, 118, 136}: "Velodyne",
+ [3]byte{96, 119, 226}: "Samsung Electronics Co.,Ltd",
+ [3]byte{96, 126, 221}: "Microsoft Mobile Oy",
+ [3]byte{96, 129, 43}: "Custom Control Concepts",
+ [3]byte{96, 129, 249}: "Helium Systems, Inc",
+ [3]byte{96, 131, 52}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{96, 131, 178}: "GkWare e.K.",
+ [3]byte{96, 132, 59}: "Soladigm, Inc.",
+ [3]byte{96, 134, 69}: "Avery Weigh-Tronix, LLC",
+ [3]byte{96, 137, 60}: "Thermo Fisher Scientific P.O.A.",
+ [3]byte{96, 137, 177}: "Key Digital Systems",
+ [3]byte{96, 137, 183}: "KAEL MÜHENDİSLİK ELEKTRONİK TİCARET SANAYİ LİMİTED ŞİRKETİ",
+ [3]byte{96, 140, 43}: "Hanson Technology",
+ [3]byte{96, 140, 230}: "ARRIS Group, Inc.",
+ [3]byte{96, 141, 23}: "Sentrus Government Systems Division, Inc",
+ [3]byte{96, 142, 8}: "Samsung Electronics Co.,Ltd",
+ [3]byte{96, 143, 92}: "Samsung Electronics Co.,Ltd",
+ [3]byte{96, 144, 132}: "DSSD Inc",
+ [3]byte{96, 145, 243}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{96, 146, 23}: "Apple, Inc.",
+ [3]byte{96, 150, 32}: "Private",
+ [3]byte{96, 153, 209}: "Vuzix / Lenovo",
+ [3]byte{96, 154, 164}: "GVI SECURITY INC.",
+ [3]byte{96, 154, 193}: "Apple, Inc.",
+ [3]byte{96, 155, 200}: "Hipad Intelligent Technology Co., Ltd.",
+ [3]byte{96, 156, 159}: "Brocade Communications Systems, Inc.",
+ [3]byte{96, 158, 100}: "Vivonic GmbH",
+ [3]byte{96, 159, 157}: "CloudSwitch",
+ [3]byte{96, 161, 10}: "Samsung Electronics Co.,Ltd",
+ [3]byte{96, 163, 125}: "Apple, Inc.",
+ [3]byte{96, 164, 76}: "ASUSTek COMPUTER INC.",
+ [3]byte{96, 164, 208}: "Samsung Electronics Co.,Ltd",
+ [3]byte{96, 168, 254}: "Nokia",
+ [3]byte{96, 169, 176}: "Merchandising Technologies, Inc",
+ [3]byte{96, 172, 200}: "KunTeng Inc.",
+ [3]byte{96, 175, 109}: "Samsung Electronics Co.,Ltd",
+ [3]byte{96, 177, 133}: "ATH system",
+ [3]byte{96, 179, 135}: "Synergics Technologies GmbH",
+ [3]byte{96, 179, 196}: "Elber Srl",
+ [3]byte{96, 180, 247}: "Plume Design Inc",
+ [3]byte{96, 182, 6}: "Phorus",
+ [3]byte{96, 182, 23}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{96, 185, 51}: "Deutron Electronics Corp.",
+ [3]byte{96, 185, 130}: "RO.VE.R. Laboratories S.p.A.",
+ [3]byte{96, 186, 24}: "nextLAP GmbH",
+ [3]byte{96, 187, 12}: "Beijing HuaqinWorld Technology Co,Ltd",
+ [3]byte{96, 188, 76}: "EWM Hightec Welding GmbH",
+ [3]byte{96, 189, 145}: "Move Innovation",
+ [3]byte{96, 190, 181}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{96, 192, 191}: "ON Semiconductor",
+ [3]byte{96, 193, 203}: "Fujian Great Power PLC Equipment Co.,Ltd",
+ [3]byte{96, 195, 151}: "2Wire Inc",
+ [3]byte{96, 197, 71}: "Apple, Inc.",
+ [3]byte{96, 197, 168}: "Beijing LT Honway Technology Co.,Ltd",
+ [3]byte{96, 197, 173}: "Samsung Electronics Co.,Ltd",
+ [3]byte{96, 198, 88}: "PHYTRONIX Co.,Ltd.",
+ [3]byte{96, 199, 152}: "Verifone",
+ [3]byte{96, 201, 128}: "Trymus",
+ [3]byte{96, 203, 251}: "AirScape Inc.",
+ [3]byte{96, 205, 169}: "Abloomy",
+ [3]byte{96, 205, 197}: "Taiwan Carol Electronics., Ltd",
+ [3]byte{96, 208, 169}: "Samsung Electronics Co.,Ltd",
+ [3]byte{96, 209, 170}: "Vishal Telecommunications Pvt Ltd",
+ [3]byte{96, 210, 98}: "Tzukuri Pty Ltd",
+ [3]byte{96, 210, 185}: "REALAND BIO CO., LTD.",
+ [3]byte{96, 211, 10}: "Quatius Limited",
+ [3]byte{96, 215, 227}: "IEEE Registration Authority",
+ [3]byte{96, 216, 25}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{96, 217, 160}: "Lenovo Mobile Communication Technology Ltd.",
+ [3]byte{96, 217, 199}: "Apple, Inc.",
+ [3]byte{96, 218, 35}: "Estech Co.,Ltd",
+ [3]byte{96, 218, 131}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{96, 219, 42}: "HNS",
+ [3]byte{96, 222, 68}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{96, 224, 14}: "SHINSEI ELECTRONICS CO LTD",
+ [3]byte{96, 227, 39}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{96, 227, 172}: "LG Electronics (Mobile Communications)",
+ [3]byte{96, 230, 188}: "Sino-Telecom Technology Co.,Ltd.",
+ [3]byte{96, 231, 1}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{96, 231, 138}: "UNISEM",
+ [3]byte{96, 233, 86}: "Ayla Networks, Inc",
+ [3]byte{96, 235, 105}: "QUANTA COMPUTER INC.",
+ [3]byte{96, 238, 92}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+ [3]byte{96, 239, 198}: "Shenzhen Chima Technologies Co Limited",
+ [3]byte{96, 241, 61}: "JABLOCOM s.r.o.",
+ [3]byte{96, 241, 137}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{96, 242, 129}: "TRANWO TECHNOLOGY CO., LTD.",
+ [3]byte{96, 242, 239}: "VisionVera International Co., Ltd.",
+ [3]byte{96, 243, 218}: "Logic Way GmbH",
+ [3]byte{96, 244, 69}: "Apple, Inc.",
+ [3]byte{96, 244, 148}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{96, 245, 156}: "CRU-Dataport",
+ [3]byte{96, 246, 115}: "TERUMO CORPORATION",
+ [3]byte{96, 246, 119}: "Intel Corporate",
+ [3]byte{96, 248, 29}: "Apple, Inc.",
+ [3]byte{96, 250, 205}: "Apple, Inc.",
+ [3]byte{96, 251, 66}: "Apple, Inc.",
+ [3]byte{96, 253, 86}: "WOORISYSTEMS CO., Ltd",
+ [3]byte{96, 254, 30}: "China Palms Telecom.Ltd",
+ [3]byte{96, 254, 32}: "2Wire Inc",
+ [3]byte{96, 254, 197}: "Apple, Inc.",
+ [3]byte{96, 254, 249}: "Thomas & Betts",
+ [3]byte{96, 255, 221}: "C.E. ELECTRONICS, INC",
+ [3]byte{100, 0, 45}: "Powerlinq Co., LTD",
+ [3]byte{100, 0, 106}: "Dell Inc.",
+ [3]byte{100, 0, 241}: "Cisco Systems, Inc",
+ [3]byte{100, 5, 190}: "NEW LIGHT LED",
+ [3]byte{100, 5, 233}: "Shenzhen WayOS Technology Crop., Ltd.",
+ [3]byte{100, 9, 76}: "Beijing Superbee Wireless Technology Co.,Ltd",
+ [3]byte{100, 9, 128}: "Xiaomi Communications Co Ltd",
+ [3]byte{100, 11, 74}: "Digital Telecom Technology Limited",
+ [3]byte{100, 13, 206}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+ [3]byte{100, 13, 230}: "Petra Systems",
+ [3]byte{100, 14, 54}: "TAZTAG",
+ [3]byte{100, 14, 148}: "Pluribus Networks, Inc.",
+ [3]byte{100, 15, 40}: "2Wire Inc",
+ [3]byte{100, 16, 132}: "HEXIUM Technical Development Co., Ltd.",
+ [3]byte{100, 18, 37}: "Cisco Systems, Inc",
+ [3]byte{100, 18, 105}: "ARRIS Group, Inc.",
+ [3]byte{100, 19, 108}: "zte corporation",
+ [3]byte{100, 22, 102}: "Nest Labs Inc.",
+ [3]byte{100, 22, 127}: "Polycom",
+ [3]byte{100, 22, 141}: "Cisco Systems, Inc",
+ [3]byte{100, 22, 240}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{100, 26, 34}: "Heliospectra AB",
+ [3]byte{100, 28, 103}: "DIGIBRAS INDUSTRIA DO BRASILS/A",
+ [3]byte{100, 30, 129}: "Dowslake Microsystems",
+ [3]byte{100, 32, 12}: "Apple, Inc.",
+ [3]byte{100, 32, 159}: "Tilgin AB",
+ [3]byte{100, 33, 132}: "Nippon Denki Kagaku Co.,LTD",
+ [3]byte{100, 34, 22}: "Shandong Taixin Electronic co.,Ltd",
+ [3]byte{100, 36, 0}: "Xorcom Ltd.",
+ [3]byte{100, 39, 55}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{100, 43, 138}: "ALL BEST Industrial Co., Ltd.",
+ [3]byte{100, 45, 183}: "SEUNGIL ELECTRONICS",
+ [3]byte{100, 49, 80}: "Hewlett Packard",
+ [3]byte{100, 49, 126}: "Dexin Corporation",
+ [3]byte{100, 50, 168}: "Intel Corporate",
+ [3]byte{100, 52, 9}: "BITwave Pte Ltd",
+ [3]byte{100, 53, 28}: "e-CON SYSTEMS INDIA PVT LTD",
+ [3]byte{100, 58, 177}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+ [3]byte{100, 62, 140}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{100, 63, 95}: "Exablaze",
+ [3]byte{100, 66, 20}: "Swisscom Energy Solutions AG",
+ [3]byte{100, 67, 70}: "GuangDong Quick Network Computer CO.,LTD",
+ [3]byte{100, 71, 224}: "Feitian Technologies Co., Ltd",
+ [3]byte{100, 75, 195}: "Shanghai WOASiS Telecommunications Ltd., Co.",
+ [3]byte{100, 75, 240}: "CalDigit, Inc",
+ [3]byte{100, 77, 112}: "dSPACE GmbH",
+ [3]byte{100, 79, 116}: "LENUS Co., Ltd.",
+ [3]byte{100, 79, 176}: "Hyunjin.com",
+ [3]byte{100, 81, 6}: "Hewlett Packard",
+ [3]byte{100, 81, 126}: "LONG BEN (DONGGUAN) ELECTRONIC TECHNOLOGY CO.,LTD.",
+ [3]byte{100, 82, 153}: "The Chamberlain Group, Inc",
+ [3]byte{100, 83, 93}: "Frauscher Sensortechnik",
+ [3]byte{100, 84, 34}: "Equinox Payments",
+ [3]byte{100, 85, 99}: "Intelight Inc.",
+ [3]byte{100, 85, 127}: "NSFOCUS Information Technology Co., Ltd.",
+ [3]byte{100, 85, 177}: "ARRIS Group, Inc.",
+ [3]byte{100, 86, 1}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{100, 89, 248}: "Vodafone Omnitel B.V.",
+ [3]byte{100, 90, 4}: "Chicony Electronics Co., Ltd.",
+ [3]byte{100, 93, 146}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+ [3]byte{100, 93, 215}: "Shenzhen Lifesense Medical Electronics Co., Ltd.",
+ [3]byte{100, 94, 190}: "Yahoo! JAPAN",
+ [3]byte{100, 95, 255}: "Nicolet Neuro",
+ [3]byte{100, 97, 132}: "VELUX",
+ [3]byte{100, 98, 35}: "Cellient Co., Ltd.",
+ [3]byte{100, 100, 155}: "Juniper Networks",
+ [3]byte{100, 101, 192}: "Nuvon, Inc",
+ [3]byte{100, 102, 179}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{100, 103, 7}: "Beijing Omnific Technology, Ltd.",
+ [3]byte{100, 104, 12}: "Comtrend Corporation",
+ [3]byte{100, 105, 188}: "Hytera Communications Co .,ltd",
+ [3]byte{100, 106, 82}: "Avaya Inc",
+ [3]byte{100, 106, 116}: "AUTH-SERVERS, LLC",
+ [3]byte{100, 108, 178}: "Samsung Electronics Co.,Ltd",
+ [3]byte{100, 110, 105}: "Liteon Technology Corporation",
+ [3]byte{100, 110, 108}: "Radio Datacom LLC",
+ [3]byte{100, 110, 234}: "Iskratel d.o.o.",
+ [3]byte{100, 112, 2}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{100, 114, 216}: "GooWi Technology Co.,Limited",
+ [3]byte{100, 115, 226}: "Arbiter Systems, Inc.",
+ [3]byte{100, 116, 246}: "Shooter Detection Systems",
+ [3]byte{100, 118, 87}: "Innovative Security Designs",
+ [3]byte{100, 118, 186}: "Apple, Inc.",
+ [3]byte{100, 119, 125}: "Hitron Technologies. Inc",
+ [3]byte{100, 119, 145}: "Samsung Electronics Co.,Ltd",
+ [3]byte{100, 121, 167}: "Phison Electronics Corp.",
+ [3]byte{100, 123, 212}: "Texas Instruments",
+ [3]byte{100, 124, 52}: "Ubee Interactive Co., Limited",
+ [3]byte{100, 125, 129}: "YOKOTA INDUSTRIAL CO,.LTD",
+ [3]byte{100, 127, 218}: "TEKTELIC Communications Inc.",
+ [3]byte{100, 128, 139}: "VG Controls, Inc.",
+ [3]byte{100, 128, 153}: "Intel Corporate",
+ [3]byte{100, 129, 37}: "Alphatron Marine BV",
+ [3]byte{100, 135, 136}: "Juniper Networks",
+ [3]byte{100, 135, 215}: "ADB Broadband Italia",
+ [3]byte{100, 136, 255}: "Sichuan Changhong Electric Ltd.",
+ [3]byte{100, 137, 154}: "LG Electronics (Mobile Communications)",
+ [3]byte{100, 141, 158}: "IVT Electronic Co.,Ltd",
+ [3]byte{100, 153, 93}: "LGE",
+ [3]byte{100, 153, 104}: "Elentec",
+ [3]byte{100, 153, 160}: "AG Elektronik AB",
+ [3]byte{100, 154, 8}: "Shenzhen SuperElectron Technology Co.,LTD",
+ [3]byte{100, 154, 18}: "P2 Mobile Technologies Limited",
+ [3]byte{100, 154, 190}: "Apple, Inc.",
+ [3]byte{100, 155, 36}: "V Technology Co., Ltd.",
+ [3]byte{100, 156, 129}: "Qualcomm Inc.",
+ [3]byte{100, 156, 142}: "Texas Instruments",
+ [3]byte{100, 158, 243}: "Cisco Systems, Inc",
+ [3]byte{100, 159, 247}: "Kone OYj",
+ [3]byte{100, 160, 231}: "Cisco Systems, Inc",
+ [3]byte{100, 162, 50}: "OOO Samlight",
+ [3]byte{100, 163, 65}: "Wonderlan (Beijing) Technology Co., Ltd.",
+ [3]byte{100, 163, 203}: "Apple, Inc.",
+ [3]byte{100, 165, 195}: "Apple, Inc.",
+ [3]byte{100, 166, 81}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{100, 166, 143}: "Zhongshan Readboy Electronics Co.,Ltd",
+ [3]byte{100, 167, 105}: "HTC Corporation",
+ [3]byte{100, 167, 221}: "Avaya Inc",
+ [3]byte{100, 168, 55}: "Juni Korea Co., Ltd",
+ [3]byte{100, 174, 12}: "Cisco Systems, Inc",
+ [3]byte{100, 174, 136}: "Polytec GmbH",
+ [3]byte{100, 176, 166}: "Apple, Inc.",
+ [3]byte{100, 178, 29}: "Chengdu Phycom Tech Co., Ltd.",
+ [3]byte{100, 179, 16}: "Samsung Electronics Co.,Ltd",
+ [3]byte{100, 179, 112}: "PowerComm Solutions LLC",
+ [3]byte{100, 180, 115}: "Xiaomi Communications Co Ltd",
+ [3]byte{100, 181, 198}: "Nintendo Co.,Ltd",
+ [3]byte{100, 182, 74}: "ViVOtech, Inc.",
+ [3]byte{100, 184, 83}: "Samsung Electronics Co.,Ltd",
+ [3]byte{100, 185, 232}: "Apple, Inc.",
+ [3]byte{100, 186, 189}: "SDJ Technologies, Inc.",
+ [3]byte{100, 188, 12}: "LG Electronics (Mobile Communications)",
+ [3]byte{100, 188, 17}: "CombiQ AB",
+ [3]byte{100, 195, 84}: "Avaya Inc",
+ [3]byte{100, 197, 170}: "South African Broadcasting Corporation",
+ [3]byte{100, 198, 103}: "Barnes&Noble",
+ [3]byte{100, 198, 175}: "AXERRA Networks Ltd",
+ [3]byte{100, 201, 68}: "LARK Technologies, Inc",
+ [3]byte{100, 203, 163}: "Pointmobile",
+ [3]byte{100, 204, 46}: "Xiaomi Communications Co Ltd",
+ [3]byte{100, 207, 217}: "Texas Instruments",
+ [3]byte{100, 208, 45}: "Next Generation Integration (NGI)",
+ [3]byte{100, 209, 84}: "Routerboard.com",
+ [3]byte{100, 209, 163}: "Sitecom Europe BV",
+ [3]byte{100, 210, 65}: "Keith & Koep GmbH",
+ [3]byte{100, 212, 189}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{100, 212, 218}: "Intel Corporate",
+ [3]byte{100, 216, 20}: "Cisco Systems, Inc",
+ [3]byte{100, 217, 18}: "Solidica, Inc.",
+ [3]byte{100, 217, 84}: "Taicang T&W Electronics",
+ [3]byte{100, 217, 137}: "Cisco Systems, Inc",
+ [3]byte{100, 218, 160}: "Robert Bosch Smart Home GmbH",
+ [3]byte{100, 219, 24}: "OpenPattern",
+ [3]byte{100, 219, 67}: "Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.",
+ [3]byte{100, 219, 129}: "Syszone Co., Ltd.",
+ [3]byte{100, 219, 160}: "Select Comfort",
+ [3]byte{100, 220, 1}: "Static Systems Group PLC",
+ [3]byte{100, 222, 28}: "Kingnetic Pte Ltd",
+ [3]byte{100, 223, 233}: "ATEME",
+ [3]byte{100, 225, 97}: "DEP Corp.",
+ [3]byte{100, 229, 153}: "EFM Networks",
+ [3]byte{100, 230, 37}: "Woxu Wireless Co., Ltd",
+ [3]byte{100, 230, 130}: "Apple, Inc.",
+ [3]byte{100, 232, 79}: "Serialway Communication Technology Co. Ltd",
+ [3]byte{100, 232, 146}: "Morio Denki Co., Ltd.",
+ [3]byte{100, 232, 230}: "global moisture management system",
+ [3]byte{100, 233, 80}: "Cisco Systems, Inc",
+ [3]byte{100, 234, 197}: "SiboTech Automation Co., Ltd.",
+ [3]byte{100, 235, 140}: "Seiko Epson Corporation",
+ [3]byte{100, 237, 87}: "ARRIS Group, Inc.",
+ [3]byte{100, 237, 98}: "WOORI SYSTEMS Co., Ltd",
+ [3]byte{100, 242, 66}: "Gerdes Aktiengesellschaft",
+ [3]byte{100, 245, 14}: "Kinion Technology Company Limited",
+ [3]byte{100, 246, 157}: "Cisco Systems, Inc",
+ [3]byte{100, 248, 138}: "China Mobile IOT Company Limited",
+ [3]byte{100, 249, 112}: "Kenade Electronics Technology Co.,LTD.",
+ [3]byte{100, 249, 135}: "Avvasi Inc.",
+ [3]byte{100, 251, 80}: "RoomReady/Zdi, Inc.",
+ [3]byte{100, 251, 129}: "IEEE Registration Authority",
+ [3]byte{100, 252, 140}: "Zonar Systems",
+ [3]byte{104, 2, 53}: "Konten Networks Inc.",
+ [3]byte{104, 5, 113}: "Samsung Electronics Co.,Ltd",
+ [3]byte{104, 5, 202}: "Intel Corporate",
+ [3]byte{104, 7, 21}: "Intel Corporate",
+ [3]byte{104, 9, 39}: "Apple, Inc.",
+ [3]byte{104, 10, 215}: "Yancheng Kecheng Optoelectronic Technology Co., Ltd",
+ [3]byte{104, 18, 45}: "Special Instrument Development Co., Ltd.",
+ [3]byte{104, 18, 149}: "Lupine Lighting Systems GmbH",
+ [3]byte{104, 20, 1}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{104, 21, 144}: "Sagemcom Broadband SAS",
+ [3]byte{104, 21, 211}: "Zaklady Elektroniki i Mechaniki Precyzyjnej R&G S.A.",
+ [3]byte{104, 22, 5}: "Systems And Electronic Development FZCO",
+ [3]byte{104, 23, 41}: "Intel Corporate",
+ [3]byte{104, 25, 63}: "Digital Airways",
+ [3]byte{104, 26, 178}: "zte corporation",
+ [3]byte{104, 28, 162}: "Rosewill Inc.",
+ [3]byte{104, 29, 100}: "Sunwave Communications Co., Ltd",
+ [3]byte{104, 29, 239}: "Shenzhen CYX Technology Co., Ltd.",
+ [3]byte{104, 30, 139}: "InfoSight Corporation",
+ [3]byte{104, 31, 64}: "Blu Wireless Technology Ltd",
+ [3]byte{104, 31, 216}: "Siemens Industry, Inc.",
+ [3]byte{104, 35, 75}: "Nihon Dengyo Kousaku",
+ [3]byte{104, 38, 42}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+ [3]byte{104, 39, 55}: "Samsung Electronics Co.,Ltd",
+ [3]byte{104, 40, 186}: "Dejai",
+ [3]byte{104, 40, 246}: "Vubiq Networks, Inc.",
+ [3]byte{104, 45, 220}: "Wuhan Changjiang Electro-Communication Equipment CO.,LTD",
+ [3]byte{104, 49, 254}: "Teladin Co.,Ltd.",
+ [3]byte{104, 53, 99}: "SHENZHEN LIOWN ELECTRONICS CO.,LTD.",
+ [3]byte{104, 54, 181}: "DriveScale, Inc.",
+ [3]byte{104, 55, 233}: "Amazon Technologies Inc.",
+ [3]byte{104, 59, 30}: "Countwise LTD",
+ [3]byte{104, 60, 125}: "Magic Intelligence Technology Limited",
+ [3]byte{104, 62, 2}: "SIEMENS AG, Digital Factory, Motion Control System",
+ [3]byte{104, 62, 52}: "MEIZU Technology Co., Ltd.",
+ [3]byte{104, 62, 236}: "ERECA",
+ [3]byte{104, 67, 82}: "Bhuu Limited",
+ [3]byte{104, 72, 152}: "Samsung Electronics Co.,Ltd",
+ [3]byte{104, 75, 136}: "Galtronics Telemetry Inc.",
+ [3]byte{104, 76, 168}: "Shenzhen Herotel Tech. Co., Ltd.",
+ [3]byte{104, 81, 183}: "PowerCloud Systems, Inc.",
+ [3]byte{104, 83, 108}: "SPnS Co.,Ltd",
+ [3]byte{104, 83, 136}: "P&S Technology",
+ [3]byte{104, 84, 193}: "ColorTokens, Inc.",
+ [3]byte{104, 84, 237}: "Alcatel-Lucent",
+ [3]byte{104, 84, 245}: "enLighted Inc",
+ [3]byte{104, 84, 253}: "Amazon Technologies Inc.",
+ [3]byte{104, 88, 197}: "ZF TRW Automotive",
+ [3]byte{104, 89, 127}: "Alcatel Lucent",
+ [3]byte{104, 91, 53}: "Apple, Inc.",
+ [3]byte{104, 91, 54}: "POWERTECH INDUSTRIAL CO., LTD.",
+ [3]byte{104, 93, 67}: "Intel Corporate",
+ [3]byte{104, 94, 107}: "PowerRay Co., Ltd.",
+ [3]byte{104, 99, 89}: "Advanced Digital Broadcast SA",
+ [3]byte{104, 100, 75}: "Apple, Inc.",
+ [3]byte{104, 105, 46}: "Zycoo Co.,Ltd",
+ [3]byte{104, 105, 117}: "Angler Labs Inc",
+ [3]byte{104, 105, 242}: "ComAp s.r.o.",
+ [3]byte{104, 110, 35}: "Wi3 Inc.",
+ [3]byte{104, 110, 72}: "Prophet Electronic Technology Corp.,Ltd",
+ [3]byte{104, 114, 81}: "Ubiquiti Networks Inc.",
+ [3]byte{104, 114, 220}: "CETORY.TV Company Limited",
+ [3]byte{104, 118, 79}: "Sony Mobile Communications AB",
+ [3]byte{104, 120, 72}: "Westunitis Co., Ltd.",
+ [3]byte{104, 120, 76}: "Nortel Networks",
+ [3]byte{104, 121, 36}: "ELS-GmbH & Co. KG",
+ [3]byte{104, 121, 237}: "SHARP Corporation",
+ [3]byte{104, 124, 200}: "Measurement Systems S. de R.L.",
+ [3]byte{104, 124, 213}: "Y Soft Corporation, a.s.",
+ [3]byte{104, 127, 116}: "Cisco-Linksys, LLC",
+ [3]byte{104, 131, 26}: "Pandora Mobility Corporation",
+ [3]byte{104, 132, 112}: "eSSys Co.,Ltd",
+ [3]byte{104, 133, 64}: "IGI Mobile, Inc.",
+ [3]byte{104, 133, 106}: "OuterLink Corporation",
+ [3]byte{104, 134, 167}: "Cisco Systems, Inc",
+ [3]byte{104, 134, 231}: "Orbotix, Inc.",
+ [3]byte{104, 135, 107}: "INQ Mobile Limited",
+ [3]byte{104, 137, 193}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{104, 138, 181}: "EDP Servicos",
+ [3]byte{104, 138, 240}: "zte corporation",
+ [3]byte{104, 141, 182}: "AETEK INC.",
+ [3]byte{104, 143, 132}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{104, 145, 208}: "IEEE Registration Authority",
+ [3]byte{104, 146, 52}: "Ruckus Wireless",
+ [3]byte{104, 147, 97}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+ [3]byte{104, 148, 35}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{104, 150, 123}: "Apple, Inc.",
+ [3]byte{104, 151, 75}: "Shenzhen Costar Electronics Co. Ltd.",
+ [3]byte{104, 151, 232}: "Society of Motion Picture &amp; Television Engineers",
+ [3]byte{104, 153, 205}: "Cisco Systems, Inc",
+ [3]byte{104, 154, 183}: "Atelier Vision Corporation",
+ [3]byte{104, 156, 94}: "AcSiP Technology Corp.",
+ [3]byte{104, 156, 112}: "Apple, Inc.",
+ [3]byte{104, 156, 226}: "Cisco Systems, Inc",
+ [3]byte{104, 158, 25}: "Texas Instruments",
+ [3]byte{104, 159, 240}: "zte corporation",
+ [3]byte{104, 160, 246}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{104, 161, 183}: "Honghao Mingchuan Technology (Beijing) CO.,Ltd.",
+ [3]byte{104, 163, 120}: "FREEBOX SAS",
+ [3]byte{104, 163, 196}: "Liteon Technology Corporation",
+ [3]byte{104, 164, 14}: "BSH Hausgeräte GmbH",
+ [3]byte{104, 166, 130}: "Shenzhen YOUHUA Technology Co., Ltd",
+ [3]byte{104, 168, 40}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{104, 168, 109}: "Apple, Inc.",
+ [3]byte{104, 170, 210}: "DATECS LTD.,",
+ [3]byte{104, 171, 138}: "RF IDeas",
+ [3]byte{104, 174, 32}: "Apple, Inc.",
+ [3]byte{104, 175, 19}: "Futura Mobility",
+ [3]byte{104, 176, 148}: "INESA ELECTRON CO.,LTD",
+ [3]byte{104, 179, 94}: "Shenzhen Neostra Technology Co.Ltd",
+ [3]byte{104, 180, 58}: "WaterFurnace International, Inc.",
+ [3]byte{104, 181, 153}: "Hewlett Packard",
+ [3]byte{104, 182, 252}: "Hitron Technologies. Inc",
+ [3]byte{104, 184, 217}: "Act KDE, Inc.",
+ [3]byte{104, 185, 131}: "b-plus GmbH",
+ [3]byte{104, 188, 12}: "Cisco Systems, Inc",
+ [3]byte{104, 189, 171}: "Cisco Systems, Inc",
+ [3]byte{104, 196, 77}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{104, 198, 58}: "Espressif Inc.",
+ [3]byte{104, 201, 11}: "Texas Instruments",
+ [3]byte{104, 202, 0}: "Octopus Systems Limited",
+ [3]byte{104, 204, 110}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{104, 204, 156}: "Mine Site Technologies",
+ [3]byte{104, 205, 15}: "U Tek Company Limited",
+ [3]byte{104, 206, 78}: "L-3 Communications Infrared Products",
+ [3]byte{104, 209, 253}: "Shenzhen Trimax Technology Co.,Ltd",
+ [3]byte{104, 210, 71}: "Portalis LC",
+ [3]byte{104, 217, 37}: "ProSys Development Services",
+ [3]byte{104, 217, 60}: "Apple, Inc.",
+ [3]byte{104, 219, 84}: "Phicomm (Shanghai) Co., Ltd.",
+ [3]byte{104, 219, 103}: "Nantong Coship Electronics Co., Ltd",
+ [3]byte{104, 219, 150}: "OPWILL Technologies CO .,LTD",
+ [3]byte{104, 219, 202}: "Apple, Inc.",
+ [3]byte{104, 220, 232}: "PacketStorm Communications",
+ [3]byte{104, 223, 221}: "Xiaomi Communications Co Ltd",
+ [3]byte{104, 225, 102}: "Private",
+ [3]byte{104, 228, 31}: "Unglaube Identech GmbH",
+ [3]byte{104, 232, 235}: "Linktel Technologies Co.,Ltd",
+ [3]byte{104, 235, 174}: "Samsung Electronics Co.,Ltd",
+ [3]byte{104, 235, 197}: "Angstrem Telecom",
+ [3]byte{104, 236, 98}: "YODO Technology Corp. Ltd.",
+ [3]byte{104, 236, 197}: "Intel Corporate",
+ [3]byte{104, 237, 67}: "BlackBerry RTS",
+ [3]byte{104, 237, 164}: "Shenzhen Seavo Technology Co.,Ltd",
+ [3]byte{104, 238, 150}: "Cisco SPVTG",
+ [3]byte{104, 239, 189}: "Cisco Systems, Inc",
+ [3]byte{104, 240, 109}: "ALONG INDUSTRIAL CO., LIMITED",
+ [3]byte{104, 240, 188}: "Shenzhen LiWiFi Technology Co., Ltd",
+ [3]byte{104, 241, 37}: "Data Controls Inc.",
+ [3]byte{104, 247, 40}: "LCFC(HeFei) Electronics Technology co., ltd",
+ [3]byte{104, 248, 149}: "Redflow Limited",
+ [3]byte{104, 249, 86}: "Objetivos y Servicio de Valor Añadido",
+ [3]byte{104, 251, 126}: "Apple, Inc.",
+ [3]byte{104, 251, 149}: "Generalplus Technology Inc.",
+ [3]byte{104, 252, 179}: "Next Level Security Systems, Inc.",
+ [3]byte{108, 2, 115}: "Shenzhen Jin Yun Video Equipment Co., Ltd.",
+ [3]byte{108, 4, 96}: "RBH Access Technologies Inc.",
+ [3]byte{108, 5, 213}: "Ethertronics Inc",
+ [3]byte{108, 9, 10}: "GEMATICA SRL",
+ [3]byte{108, 9, 214}: "Digiquest Electronics LTD",
+ [3]byte{108, 11, 132}: "Universal Global Scientific Industrial Co., Ltd.",
+ [3]byte{108, 14, 13}: "Sony Mobile Communications AB",
+ [3]byte{108, 14, 230}: "Chengdu Xiyida Electronic Technology Co,.Ltd",
+ [3]byte{108, 15, 106}: "JDC Tech Co., Ltd.",
+ [3]byte{108, 20, 247}: "Erhardt+Leimer GmbH",
+ [3]byte{108, 21, 249}: "Nautronix Limited",
+ [3]byte{108, 22, 14}: "ShotTracker",
+ [3]byte{108, 24, 17}: "Decatur Electronics",
+ [3]byte{108, 25, 143}: "D-Link International",
+ [3]byte{108, 25, 192}: "Apple, Inc.",
+ [3]byte{108, 30, 112}: "Guangzhou YBDS IT Co.,Ltd",
+ [3]byte{108, 30, 144}: "Hansol Technics Co., Ltd.",
+ [3]byte{108, 32, 86}: "Cisco Systems, Inc",
+ [3]byte{108, 34, 171}: "Ainsworth Game Technology",
+ [3]byte{108, 35, 185}: "Sony Mobile Communications AB",
+ [3]byte{108, 36, 131}: "Microsoft Mobile Oy",
+ [3]byte{108, 37, 185}: "BBK EDUCATIONAL ELECTRONICS CORP.,LTD.",
+ [3]byte{108, 39, 121}: "Microsoft Mobile Oy",
+ [3]byte{108, 41, 149}: "Intel Corporate",
+ [3]byte{108, 42, 203}: "Paxton Access Ltd",
+ [3]byte{108, 44, 6}: "OOO NPP Systemotechnika-NN",
+ [3]byte{108, 46, 51}: "Accelink Technologies Co.,Ltd.",
+ [3]byte{108, 46, 114}: "B&B EXPORTING LIMITED",
+ [3]byte{108, 46, 133}: "Sagemcom Broadband SAS",
+ [3]byte{108, 47, 44}: "Samsung Electronics Co.,Ltd",
+ [3]byte{108, 50, 222}: "Indieon Technologies Pvt. Ltd.",
+ [3]byte{108, 51, 169}: "Magicjack LP",
+ [3]byte{108, 56, 161}: "Ubee Interactive Co., Limited",
+ [3]byte{108, 57, 29}: "Beijing ZhongHuaHun Network Information center",
+ [3]byte{108, 58, 132}: "Shenzhen Aero-Startech. Co.Ltd",
+ [3]byte{108, 59, 107}: "Routerboard.com",
+ [3]byte{108, 59, 229}: "Hewlett Packard",
+ [3]byte{108, 60, 83}: "SoundHawk Corp",
+ [3]byte{108, 62, 109}: "Apple, Inc.",
+ [3]byte{108, 62, 156}: "KE Knestel Elektronik GmbH",
+ [3]byte{108, 64, 8}: "Apple, Inc.",
+ [3]byte{108, 64, 198}: "Nimbus Data Systems, Inc.",
+ [3]byte{108, 65, 106}: "Cisco Systems, Inc",
+ [3]byte{108, 68, 24}: "Zappware",
+ [3]byte{108, 69, 152}: "Antex Electronic Corp.",
+ [3]byte{108, 73, 193}: "o2ones Co., Ltd.",
+ [3]byte{108, 74, 57}: "BITA",
+ [3]byte{108, 75, 127}: "Vossloh-Schwabe Deutschland GmbH",
+ [3]byte{108, 75, 144}: "LiteON",
+ [3]byte{108, 78, 134}: "Third Millennium Systems Ltd.",
+ [3]byte{108, 80, 77}: "Cisco Systems, Inc",
+ [3]byte{108, 86, 151}: "Amazon Technologies Inc.",
+ [3]byte{108, 87, 121}: "Aclima, Inc.",
+ [3]byte{108, 89, 64}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+ [3]byte{108, 89, 118}: "Shanghai Tricheer Technology Co.,Ltd.",
+ [3]byte{108, 90, 52}: "Shenzhen Haitianxiong Electronic Co., Ltd.",
+ [3]byte{108, 90, 181}: "TCL Technoly Electronics (Huizhou) Co., Ltd.",
+ [3]byte{108, 92, 20}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{108, 92, 222}: "SunReports, Inc.",
+ [3]byte{108, 93, 99}: "ShenZhen Rapoo Technology Co., Ltd.",
+ [3]byte{108, 94, 122}: "Ubiquitous Internet Telecom Co., Ltd",
+ [3]byte{108, 95, 28}: "Lenovo Mobile Communication Technology Ltd.",
+ [3]byte{108, 96, 235}: "ZHI YUAN ELECTRONICS CO., LIMITED",
+ [3]byte{108, 97, 38}: "Rinicom Holdings",
+ [3]byte{108, 98, 109}: "Micro-Star INT'L CO., LTD",
+ [3]byte{108, 100, 26}: "Penguin Computing",
+ [3]byte{108, 110, 254}: "Core Logic Inc.",
+ [3]byte{108, 111, 24}: "Stereotaxis, Inc.",
+ [3]byte{108, 112, 57}: "Novar GmbH",
+ [3]byte{108, 112, 159}: "Apple, Inc.",
+ [3]byte{108, 113, 189}: "EZELINK TELECOM",
+ [3]byte{108, 113, 217}: "AzureWave Technology Inc.",
+ [3]byte{108, 114, 32}: "D-Link International",
+ [3]byte{108, 114, 231}: "Apple, Inc.",
+ [3]byte{108, 117, 13}: "WiFiSONG",
+ [3]byte{108, 118, 96}: "KYOCERA CORPORATION",
+ [3]byte{108, 129, 254}: "Mitsuba Corporation",
+ [3]byte{108, 131, 54}: "Samsung Electronics Co.,Ltd",
+ [3]byte{108, 131, 102}: "Nanjing SAC Power Grid Automation Co., Ltd.",
+ [3]byte{108, 134, 134}: "Technonia",
+ [3]byte{108, 136, 20}: "Intel Corporate",
+ [3]byte{108, 139, 47}: "zte corporation",
+ [3]byte{108, 140, 219}: "Otus Technologies Ltd",
+ [3]byte{108, 141, 101}: "Wireless Glue Networks, Inc.",
+ [3]byte{108, 141, 193}: "Apple, Inc.",
+ [3]byte{108, 143, 181}: "Microsoft Mobile Oy",
+ [3]byte{108, 144, 177}: "SanLogic Inc",
+ [3]byte{108, 146, 191}: "Inspur Electronic Information Industry Co.,Ltd.",
+ [3]byte{108, 147, 84}: "Yaojin Technology (Shenzhen) Co., LTD.",
+ [3]byte{108, 148, 248}: "Apple, Inc.",
+ [3]byte{108, 149, 34}: "Scalys",
+ [3]byte{108, 150, 207}: "Apple, Inc.",
+ [3]byte{108, 152, 235}: "Riverbed Technology, Inc.",
+ [3]byte{108, 153, 137}: "Cisco Systems, Inc",
+ [3]byte{108, 154, 201}: "Valentine Research, Inc.",
+ [3]byte{108, 155, 2}: "Nokia Corporation",
+ [3]byte{108, 156, 233}: "Nimble Storage",
+ [3]byte{108, 156, 237}: "Cisco Systems, Inc",
+ [3]byte{108, 161, 0}: "Intel Corporate",
+ [3]byte{108, 166, 130}: "EDAM information & communications",
+ [3]byte{108, 167, 95}: "zte corporation",
+ [3]byte{108, 167, 128}: "Nokia Corporation",
+ [3]byte{108, 167, 250}: "YOUNGBO ENGINEERING INC.",
+ [3]byte{108, 168, 73}: "Avaya Inc",
+ [3]byte{108, 168, 88}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{108, 169, 6}: "Telefield Ltd",
+ [3]byte{108, 169, 111}: "TransPacket AS",
+ [3]byte{108, 170, 179}: "Ruckus Wireless",
+ [3]byte{108, 171, 49}: "Apple, Inc.",
+ [3]byte{108, 171, 77}: "Digital Payment Technologies",
+ [3]byte{108, 172, 96}: "Venetex Corp",
+ [3]byte{108, 173, 63}: "Hubbell Building Automation, Inc.",
+ [3]byte{108, 173, 239}: "KZ Broadband Technologies, Ltd.",
+ [3]byte{108, 173, 248}: "AzureWave Technology Inc.",
+ [3]byte{108, 174, 139}: "IBM Corporation",
+ [3]byte{108, 176, 206}: "NETGEAR",
+ [3]byte{108, 178, 39}: "Sony Video & Sound Products Inc.",
+ [3]byte{108, 178, 174}: "Cisco Systems, Inc",
+ [3]byte{108, 179, 17}: "Shenzhen Lianrui Electronics Co.,Ltd",
+ [3]byte{108, 179, 80}: "Anhui comhigher tech co.,ltd",
+ [3]byte{108, 180, 167}: "Landauer, Inc.",
+ [3]byte{108, 181, 107}: "HUMAX Co., Ltd.",
+ [3]byte{108, 183, 73}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{108, 183, 244}: "Samsung Electronics Co.,Ltd",
+ [3]byte{108, 185, 197}: "Delta Networks, Inc.",
+ [3]byte{108, 190, 233}: "Alcatel-Lucent IPD",
+ [3]byte{108, 191, 181}: "Noon Technology Co., Ltd",
+ [3]byte{108, 193, 71}: "Xiamen Hanin Electronic Technology Co., Ltd",
+ [3]byte{108, 193, 210}: "ARRIS Group, Inc.",
+ [3]byte{108, 194, 23}: "Hewlett Packard",
+ [3]byte{108, 194, 107}: "Apple, Inc.",
+ [3]byte{108, 202, 8}: "ARRIS Group, Inc.",
+ [3]byte{108, 208, 50}: "LG Electronics",
+ [3]byte{108, 209, 70}: "Smartek d.o.o.",
+ [3]byte{108, 209, 176}: "WING SING ELECTRONICS HONG KONG LIMITED",
+ [3]byte{108, 214, 138}: "LG Electronics (Mobile Communications)",
+ [3]byte{108, 220, 106}: "Promethean Limited",
+ [3]byte{108, 221, 48}: "Cisco Systems, Inc",
+ [3]byte{108, 224, 30}: "Modcam AB",
+ [3]byte{108, 224, 176}: "SOUND4",
+ [3]byte{108, 227, 182}: "Nera Telecommunications Ltd.",
+ [3]byte{108, 228, 206}: "Villiger Security Solutions AG",
+ [3]byte{108, 232, 115}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{108, 233, 7}: "Nokia Corporation",
+ [3]byte{108, 233, 131}: "Gastron Co., LTD.",
+ [3]byte{108, 235, 178}: "Dongguan Sen DongLv Electronics Co.,Ltd",
+ [3]byte{108, 236, 90}: "Hon Hai Precision Ind. CO.,Ltd.",
+ [3]byte{108, 236, 161}: "SHENZHEN CLOU ELECTRONICS CO. LTD.",
+ [3]byte{108, 236, 235}: "Texas Instruments",
+ [3]byte{108, 239, 198}: "SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.",
+ [3]byte{108, 240, 73}: "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+ [3]byte{108, 243, 115}: "Samsung Electronics Co.,Ltd",
+ [3]byte{108, 243, 127}: "Aruba Networks",
+ [3]byte{108, 245, 232}: "Mooredoll Inc.",
+ [3]byte{108, 249, 124}: "Nanoptix Inc.",
+ [3]byte{108, 249, 210}: "Chengdu Goods for the Road Electronic Technology C",
+ [3]byte{108, 250, 88}: "Avaya Inc",
+ [3]byte{108, 250, 137}: "Cisco Systems, Inc",
+ [3]byte{108, 250, 167}: "AMPAK Technology, Inc.",
+ [3]byte{108, 253, 185}: "Proware Technologies Co Ltd.",
+ [3]byte{108, 255, 190}: "MPB Communications Inc.",
+ [3]byte{112, 1, 54}: "FATEK Automation Corporation",
+ [3]byte{112, 2, 88}: "01DB-METRAVIB",
+ [3]byte{112, 5, 20}: "LG Electronics (Mobile Communications)",
+ [3]byte{112, 11, 192}: "Dewav Technology Company",
+ [3]byte{112, 15, 199}: "SHENZHEN IKINLOOP TECHNOLOGY CO.,LTD.",
+ [3]byte{112, 15, 236}: "Poindus Systems Corp.",
+ [3]byte{112, 16, 92}: "Cisco Systems, Inc",
+ [3]byte{112, 16, 111}: "Hewlett Packard Enterprise",
+ [3]byte{112, 17, 36}: "Apple, Inc.",
+ [3]byte{112, 17, 174}: "Music Life LTD",
+ [3]byte{112, 20, 4}: "Limited Liability Company",
+ [3]byte{112, 20, 166}: "Apple, Inc.",
+ [3]byte{112, 24, 139}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{112, 26, 4}: "Liteon Technology Corporation",
+ [3]byte{112, 26, 237}: "ADVAS CO., LTD.",
+ [3]byte{112, 28, 231}: "Intel Corporate",
+ [3]byte{112, 29, 127}: "Comtech Technology Co., Ltd.",
+ [3]byte{112, 29, 196}: "NorthStar Battery Company, LLC",
+ [3]byte{112, 31, 83}: "Cisco Systems, Inc",
+ [3]byte{112, 32, 132}: "Hon Hai Precision Ind. Co., Ltd.",
+ [3]byte{112, 35, 147}: "fos4X GmbH",
+ [3]byte{112, 37, 38}: "Nokia",
+ [3]byte{112, 37, 89}: "CyberTAN Technology Inc.",
+ [3]byte{112, 38, 5}: "SONY Visual Products Inc.",
+ [3]byte{112, 40, 139}: "Samsung Electronics Co.,Ltd",
+ [3]byte{112, 41, 0}: "Shenzhen ChipTrip Technology Co,Ltd",
+ [3]byte{112, 42, 125}: "EpSpot AB",
+ [3]byte{112, 43, 29}: "E-Domus International Limited",
+ [3]byte{112, 44, 31}: "Wisol",
+ [3]byte{112, 45, 132}: "i4C Innovations",
+ [3]byte{112, 45, 209}: "Newings Communication CO., LTD.",
+ [3]byte{112, 46, 34}: "zte corporation",
+ [3]byte{112, 47, 75}: "PolyVision Inc.",
+ [3]byte{112, 47, 151}: "Aava Mobile Oy",
+ [3]byte{112, 48, 24}: "Avaya Inc",
+ [3]byte{112, 48, 93}: "Ubiquoss Inc",
+ [3]byte{112, 48, 94}: "Nanjing Zhongke Menglian Information Technology Co.,LTD",
+ [3]byte{112, 49, 135}: "ACX GmbH",
+ [3]byte{112, 50, 213}: "Athena Wireless Communications Inc",
+ [3]byte{112, 56, 17}: "Invensys Rail",
+ [3]byte{112, 56, 180}: "Low Tech Solutions",
+ [3]byte{112, 56, 238}: "Avaya Inc",
+ [3]byte{112, 58, 14}: "Aruba Networks",
+ [3]byte{112, 58, 203}: "Google, Inc.",
+ [3]byte{112, 58, 216}: "Shenzhen Afoundry Electronic Co., Ltd",
+ [3]byte{112, 60, 3}: "RadiAnt Co.,Ltd",
+ [3]byte{112, 60, 57}: "SEAWING Kft",
+ [3]byte{112, 61, 21}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{112, 62, 172}: "Apple, Inc.",
+ [3]byte{112, 65, 183}: "Edwards Lifesciences LLC",
+ [3]byte{112, 70, 66}: "CHYNG HONG ELECTRONIC CO., LTD.",
+ [3]byte{112, 71, 233}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{112, 72, 15}: "Apple, Inc.",
+ [3]byte{112, 74, 174}: "Xstream Flow (Pty) Ltd",
+ [3]byte{112, 74, 228}: "Rinstrum Pty Ltd",
+ [3]byte{112, 76, 165}: "Fortinet, Inc.",
+ [3]byte{112, 76, 237}: "TMRG, Inc.",
+ [3]byte{112, 77, 123}: "ASUSTek COMPUTER INC.",
+ [3]byte{112, 78, 1}: "KWANGWON TECH CO., LTD.",
+ [3]byte{112, 78, 102}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+ [3]byte{112, 79, 87}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{112, 80, 175}: "BSkyB Ltd",
+ [3]byte{112, 82, 197}: "Avaya Inc",
+ [3]byte{112, 83, 63}: "Alfa Instrumentos Eletronicos Ltda.",
+ [3]byte{112, 84, 210}: "PEGATRON CORPORATION",
+ [3]byte{112, 84, 245}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{112, 86, 129}: "Apple, Inc.",
+ [3]byte{112, 88, 18}: "Panasonic Corporation AVC Networks Company",
+ [3]byte{112, 88, 150}: "InShow Technology",
+ [3]byte{112, 89, 87}: "Medallion Instrumentation Systems",
+ [3]byte{112, 89, 134}: "OOO TTV",
+ [3]byte{112, 90, 15}: "Hewlett Packard",
+ [3]byte{112, 90, 158}: "Technicolor CH USA Inc.",
+ [3]byte{112, 90, 182}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+ [3]byte{112, 91, 46}: "M2Communication Inc.",
+ [3]byte{112, 92, 173}: "Konami Gaming Inc",
+ [3]byte{112, 94, 170}: "Action Target, Inc.",
+ [3]byte{112, 96, 222}: "LaVision GmbH",
+ [3]byte{112, 97, 115}: "Calantec GmbH",
+ [3]byte{112, 98, 184}: "D-Link International",
+ [3]byte{112, 100, 23}: "ORBIS TECNOLOGIA ELECTRICA S.A.",
+ [3]byte{112, 101, 130}: "Suzhou Hanming Technologies Co., Ltd.",
+ [3]byte{112, 101, 163}: "Kandao lightforge Co., Ltd.",
+ [3]byte{112, 102, 27}: "Sonova AG",
+ [3]byte{112, 104, 121}: "Saijo Denki International Co., Ltd.",
+ [3]byte{112, 107, 185}: "Cisco Systems, Inc",
+ [3]byte{112, 109, 236}: "Wifi-soft LLC",
+ [3]byte{112, 110, 109}: "Cisco Systems, Inc",
+ [3]byte{112, 111, 129}: "Private",
+ [3]byte{112, 112, 13}: "Apple, Inc.",
+ [3]byte{112, 112, 76}: "Purple Communications, Inc",
+ [3]byte{112, 112, 139}: "Cisco Systems, Inc",
+ [3]byte{112, 113, 179}: "Brain Corporation",
+ [3]byte{112, 113, 188}: "PEGATRON CORPORATION",
+ [3]byte{112, 114, 13}: "Lenovo Mobile Communication Technology Ltd.",
+ [3]byte{112, 114, 60}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{112, 114, 207}: "EdgeCore Networks",
+ [3]byte{112, 115, 203}: "Apple, Inc.",
+ [3]byte{112, 118, 48}: "ARRIS Group, Inc.",
+ [3]byte{112, 118, 221}: "Oxyguard International A/S",
+ [3]byte{112, 118, 240}: "LevelOne Communications (India) Private Limited",
+ [3]byte{112, 118, 255}: "KERLINK",
+ [3]byte{112, 119, 129}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{112, 120, 139}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{112, 121, 56}: "Wuxi Zhanrui Electronic Technology Co.,LTD",
+ [3]byte{112, 121, 144}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{112, 123, 232}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{112, 124, 24}: "ADATA Technology Co., Ltd",
+ [3]byte{112, 124, 105}: "Avaya Inc",
+ [3]byte{112, 125, 149}: "Shenzhen City LinwlanTechnology Co. Ltd.",
+ [3]byte{112, 125, 185}: "Cisco Systems, Inc",
+ [3]byte{112, 126, 67}: "ARRIS Group, Inc.",
+ [3]byte{112, 126, 222}: "NASTEC LTD.",
+ [3]byte{112, 129, 5}: "Cisco Systems, Inc",
+ [3]byte{112, 129, 235}: "Apple, Inc.",
+ [3]byte{112, 130, 14}: "as electronics GmbH",
+ [3]byte{112, 130, 142}: "OleumTech Corporation",
+ [3]byte{112, 133, 194}: "ASRock Incorporation",
+ [3]byte{112, 133, 198}: "ARRIS Group, Inc.",
+ [3]byte{112, 134, 193}: "Texas Instruments",
+ [3]byte{112, 136, 77}: "JAPAN RADIO CO., LTD.",
+ [3]byte{112, 138, 9}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{112, 139, 120}: "citygrow technology co., ltd",
+ [3]byte{112, 139, 205}: "ASUSTek COMPUTER INC.",
+ [3]byte{112, 141, 9}: "Nokia Corporation",
+ [3]byte{112, 145, 143}: "Weber-Stephen Products LLC",
+ [3]byte{112, 145, 243}: "Universal Electronics, Inc.",
+ [3]byte{112, 147, 131}: "Intelligent Optical Network High Tech CO.,LTD.",
+ [3]byte{112, 147, 248}: "Space Monkey, Inc.",
+ [3]byte{112, 151, 86}: "Happyelectronics Co.,Ltd",
+ [3]byte{112, 153, 28}: "Shenzhen Honesty Electronics Co.,Ltd",
+ [3]byte{112, 154, 11}: "Italian Institute of Technology",
+ [3]byte{112, 155, 165}: "Shenzhen Y&D Electronics Co.,LTD.",
+ [3]byte{112, 155, 252}: "Bryton Inc.",
+ [3]byte{112, 156, 143}: "Nero AG",
+ [3]byte{112, 158, 41}: "Sony Interactive Entertainment Inc.",
+ [3]byte{112, 158, 134}: "X6D Limited",
+ [3]byte{112, 159, 45}: "zte corporation",
+ [3]byte{112, 161, 145}: "Trendsetter Medical, LLC",
+ [3]byte{112, 162, 179}: "Apple, Inc.",
+ [3]byte{112, 164, 28}: "Advanced Wireless Dynamics S.L.",
+ [3]byte{112, 166, 106}: "Prox Dynamics AS",
+ [3]byte{112, 168, 76}: "MONAD., Inc.",
+ [3]byte{112, 168, 227}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{112, 170, 178}: "BlackBerry RTS",
+ [3]byte{112, 173, 84}: "Malvern Instruments Ltd",
+ [3]byte{112, 175, 36}: "TP Vision Belgium NV",
+ [3]byte{112, 175, 37}: "Nishiyama Industry Co.,LTD.",
+ [3]byte{112, 175, 106}: "SHENZHEN FENGLIAN TECHNOLOGY CO., LTD.",
+ [3]byte{112, 176, 53}: "Shenzhen Zowee Technology Co., Ltd",
+ [3]byte{112, 176, 140}: "Shenou Communication Equipment Co.,Ltd",
+ [3]byte{112, 177, 78}: "ARRIS Group, Inc.",
+ [3]byte{112, 178, 101}: "Hiltron s.r.l.",
+ [3]byte{112, 179, 213}: "IEEE Registration Authority",
+ [3]byte{112, 181, 153}: "Embedded Technologies s.r.o.",
+ [3]byte{112, 183, 226}: "Jiangsu Miter Technology Co.,Ltd.",
+ [3]byte{112, 185, 33}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{112, 186, 239}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{112, 191, 62}: "Charles River Laboratories",
+ [3]byte{112, 198, 172}: "Bosch Automotive Aftermarket",
+ [3]byte{112, 199, 111}: "INNO S",
+ [3]byte{112, 202, 77}: "Shenzhen lnovance Technology Co.,Ltd.",
+ [3]byte{112, 202, 155}: "Cisco Systems, Inc",
+ [3]byte{112, 205, 96}: "Apple, Inc.",
+ [3]byte{112, 211, 121}: "Cisco Systems, Inc",
+ [3]byte{112, 212, 242}: "RIM",
+ [3]byte{112, 213, 126}: "Scalar Corporation",
+ [3]byte{112, 213, 231}: "Wellcore Corporation",
+ [3]byte{112, 214, 182}: "Metrum Technologies",
+ [3]byte{112, 216, 128}: "Upos System sp. z o.o.",
+ [3]byte{112, 217, 35}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{112, 217, 49}: "Cambridge Industries(Group) Co.,Ltd.",
+ [3]byte{112, 218, 156}: "TECSEN",
+ [3]byte{112, 219, 152}: "Cisco Systems, Inc",
+ [3]byte{112, 221, 161}: "Tellabs",
+ [3]byte{112, 222, 226}: "Apple, Inc.",
+ [3]byte{112, 222, 249}: "FAI WAH INTERNATIONAL (HONG KONG) LIMITED",
+ [3]byte{112, 223, 47}: "Cisco Systems, Inc",
+ [3]byte{112, 224, 39}: "HONGYU COMMUNICATION TECHNOLOGY LIMITED",
+ [3]byte{112, 225, 57}: "3view Ltd",
+ [3]byte{112, 225, 253}: "FLEXTRONICS",
+ [3]byte{112, 226, 76}: "SAE IT-systems GmbH & Co. KG",
+ [3]byte{112, 226, 132}: "Wistron Infocomm (Zhongshan) Corporation",
+ [3]byte{112, 228, 34}: "Cisco Systems, Inc",
+ [3]byte{112, 229, 110}: "Texas Instruments",
+ [3]byte{112, 231, 44}: "Apple, Inc.",
+ [3]byte{112, 232, 67}: "Beijing C&W Optical Communication Technology Co.,Ltd.",
+ [3]byte{112, 236, 228}: "Apple, Inc.",
+ [3]byte{112, 238, 80}: "Netatmo",
+ [3]byte{112, 238, 163}: "Eoptolink Technology Inc. Ltd,",
+ [3]byte{112, 240, 135}: "Apple, Inc.",
+ [3]byte{112, 241, 28}: "Shenzhen Ogemray Technology Co.,Ltd",
+ [3]byte{112, 241, 118}: "Data Modul AG",
+ [3]byte{112, 241, 150}: "Actiontec Electronics, Inc",
+ [3]byte{112, 241, 161}: "Liteon Technology Corporation",
+ [3]byte{112, 241, 229}: "Xetawave LLC",
+ [3]byte{112, 243, 90}: "Cisco Systems, Inc",
+ [3]byte{112, 243, 149}: "Universal Global Scientific Industrial Co., Ltd.",
+ [3]byte{112, 248, 231}: "IEEE Registration Authority",
+ [3]byte{112, 249, 39}: "Samsung Electronics Co.,Ltd",
+ [3]byte{112, 249, 109}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{112, 252, 140}: "OneAccess SA",
+ [3]byte{112, 255, 92}: "Cheerzing Communication(Xiamen)Technology Co.,Ltd",
+ [3]byte{112, 255, 118}: "Texas Instruments",
+ [3]byte{116, 3, 189}: "BUFFALO.INC",
+ [3]byte{116, 4, 43}: "Lenovo Mobile Communication (Wuhan) Company Limited",
+ [3]byte{116, 10, 188}: "LightwaveRF Technology Ltd",
+ [3]byte{116, 14, 219}: "Optowiz Co., Ltd",
+ [3]byte{116, 20, 137}: "SRT Wireless",
+ [3]byte{116, 21, 226}: "Tri-Sen Systems Corporation",
+ [3]byte{116, 24, 101}: "Shanghai DareGlobal Technologies Co.,Ltd",
+ [3]byte{116, 25, 248}: "IEEE Registration Authority",
+ [3]byte{116, 26, 224}: "IEEE Registration Authority",
+ [3]byte{116, 27, 178}: "Apple, Inc.",
+ [3]byte{116, 28, 39}: "ITEL MOBILE LIMITED",
+ [3]byte{116, 30, 147}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{116, 31, 74}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{116, 35, 68}: "Xiaomi Communications Co Ltd",
+ [3]byte{116, 37, 138}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{116, 38, 172}: "Cisco Systems, Inc",
+ [3]byte{116, 39, 60}: "ChangYang Technology (Nanjing) Co., LTD",
+ [3]byte{116, 39, 234}: "Elitegroup Computer Systems Co.,Ltd.",
+ [3]byte{116, 40, 87}: "Mayfield Robotics",
+ [3]byte{116, 41, 175}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{116, 43, 15}: "Infinidat Ltd.",
+ [3]byte{116, 43, 98}: "FUJITSU LIMITED",
+ [3]byte{116, 45, 10}: "Norfolk Elektronik AG",
+ [3]byte{116, 46, 252}: "DirectPacket Research, Inc,",
+ [3]byte{116, 47, 104}: "AzureWave Technology Inc.",
+ [3]byte{116, 49, 112}: "Arcadyan Technology Corporation",
+ [3]byte{116, 50, 86}: "NT-ware Systemprg GmbH",
+ [3]byte{116, 55, 47}: "Tongfang Shenzhen Cloudcomputing Technology Co.,Ltd",
+ [3]byte{116, 55, 59}: "UNINET Co.,Ltd.",
+ [3]byte{116, 56, 137}: "ANNAX Anzeigesysteme GmbH",
+ [3]byte{116, 58, 101}: "NEC Corporation",
+ [3]byte{116, 62, 43}: "Ruckus Wireless",
+ [3]byte{116, 62, 203}: "Gentrice tech",
+ [3]byte{116, 68, 1}: "NETGEAR",
+ [3]byte{116, 69, 138}: "Samsung Electronics Co.,Ltd",
+ [3]byte{116, 70, 160}: "Hewlett Packard",
+ [3]byte{116, 74, 164}: "zte corporation",
+ [3]byte{116, 75, 233}: "EXPLORER HYPERTECH CO.,LTD",
+ [3]byte{116, 77, 121}: "Arrive Systems Inc.",
+ [3]byte{116, 81, 186}: "Xiaomi Communications Co Ltd",
+ [3]byte{116, 83, 39}: "COMMSEN CO., LIMITED",
+ [3]byte{116, 84, 39}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+ [3]byte{116, 84, 125}: "Cisco SPVTG",
+ [3]byte{116, 86, 18}: "ARRIS Group, Inc.",
+ [3]byte{116, 87, 152}: "TRUMPF Laser GmbH + Co. KG",
+ [3]byte{116, 90, 170}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{116, 92, 75}: "GN Audio A/S",
+ [3]byte{116, 92, 159}: "TCT mobile ltd",
+ [3]byte{116, 94, 28}: "PIONEER CORPORATION",
+ [3]byte{116, 95, 0}: "Samsung Semiconductor Inc.",
+ [3]byte{116, 95, 174}: "TSL PPL",
+ [3]byte{116, 97, 75}: "Chongqing Huijiatong Information Technology Co., Ltd.",
+ [3]byte{116, 99, 223}: "VTS GmbH",
+ [3]byte{116, 101, 209}: "Atlinks",
+ [3]byte{116, 102, 48}: "T:mi Ytti",
+ [3]byte{116, 103, 247}: "Extreme Networks, Inc.",
+ [3]byte{116, 106, 58}: "Aperi Corporation",
+ [3]byte{116, 106, 137}: "Rezolt Corporation",
+ [3]byte{116, 106, 143}: "VS Vision Systems GmbH",
+ [3]byte{116, 107, 130}: "MOVEK",
+ [3]byte{116, 110, 228}: "Asia Vital Components Co.,Ltd.",
+ [3]byte{116, 111, 25}: "ICARVISIONS (SHENZHEN) TECHNOLOGY CO., LTD.",
+ [3]byte{116, 111, 61}: "Contec GmbH",
+ [3]byte{116, 111, 247}: "Wistron Neweb Corporation",
+ [3]byte{116, 114, 176}: "Guangzhou Shiyuan Electronics Co., Ltd.",
+ [3]byte{116, 114, 242}: "Chipsip Technology Co., Ltd.",
+ [3]byte{116, 115, 54}: "MICRODIGTAL Inc",
+ [3]byte{116, 117, 72}: "Amazon Technologies Inc.",
+ [3]byte{116, 120, 24}: "Jurumani Solutions",
+ [3]byte{116, 123, 122}: "ETH Inc.",
+ [3]byte{116, 125, 36}: "Phicomm (Shanghai) Co., Ltd.",
+ [3]byte{116, 125, 182}: "Aliwei Communications, Inc",
+ [3]byte{116, 126, 26}: "Red Embedded Design Limited",
+ [3]byte{116, 126, 45}: "Beijing Thomson CITIC Digital Technology Co. LTD.",
+ [3]byte{116, 129, 20}: "Apple, Inc.",
+ [3]byte{116, 129, 154}: "PT. Hartono Istana Teknologi",
+ [3]byte{116, 131, 239}: "Arista Networks",
+ [3]byte{116, 133, 42}: "PEGATRON CORPORATION",
+ [3]byte{116, 134, 11}: "Cisco Systems, Inc",
+ [3]byte{116, 134, 122}: "Dell Inc.",
+ [3]byte{116, 135, 169}: "OCT Technology Co., Ltd.",
+ [3]byte{116, 136, 42}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{116, 136, 139}: "ADB Broadband Italia",
+ [3]byte{116, 138, 105}: "Korea Image Technology Co., Ltd",
+ [3]byte{116, 141, 8}: "Apple, Inc.",
+ [3]byte{116, 142, 8}: "Bestek Corp.",
+ [3]byte{116, 142, 248}: "Brocade Communications Systems, Inc.",
+ [3]byte{116, 143, 27}: "MasterImage 3D",
+ [3]byte{116, 143, 77}: "MEN Mikro Elektronik GmbH",
+ [3]byte{116, 144, 80}: "Renesas Electronics Corporation",
+ [3]byte{116, 145, 26}: "Ruckus Wireless",
+ [3]byte{116, 145, 189}: "Four systems Co.,Ltd.",
+ [3]byte{116, 147, 164}: "Zebra Technologies Corp.",
+ [3]byte{116, 148, 61}: "AgJunction",
+ [3]byte{116, 149, 236}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{116, 150, 55}: "Todaair Electronic Co., Ltd",
+ [3]byte{116, 151, 129}: "zte corporation",
+ [3]byte{116, 153, 117}: "IBM Corporation",
+ [3]byte{116, 156, 82}: "Huizhou Desay SV Automotive Co., Ltd.",
+ [3]byte{116, 156, 227}: "KodaCloud Canada, Inc",
+ [3]byte{116, 157, 143}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{116, 157, 220}: "2Wire Inc",
+ [3]byte{116, 160, 47}: "Cisco Systems, Inc",
+ [3]byte{116, 160, 99}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{116, 162, 230}: "Cisco Systems, Inc",
+ [3]byte{116, 163, 74}: "ZIMI CORPORATION",
+ [3]byte{116, 164, 167}: "QRS Music Technologies, Inc.",
+ [3]byte{116, 164, 181}: "Powerleader Science and Technology Co. Ltd.",
+ [3]byte{116, 165, 40}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{116, 167, 34}: "LG Electronics (Mobile Communications)",
+ [3]byte{116, 167, 142}: "zte corporation",
+ [3]byte{116, 172, 95}: "Qiku Internet Network Scientific (Shenzhen) Co., Ltd.",
+ [3]byte{116, 173, 183}: "China Mobile Group Device Co.,Ltd.",
+ [3]byte{116, 174, 118}: "iNovo Broadband, Inc.",
+ [3]byte{116, 176, 12}: "Network Video Technologies, Inc",
+ [3]byte{116, 180, 114}: "CIESSE",
+ [3]byte{116, 181, 126}: "zte corporation",
+ [3]byte{116, 185, 235}: "JinQianMao Technology Co.,Ltd.",
+ [3]byte{116, 186, 219}: "Longconn Electornics(shenzhen)Co.,Ltd",
+ [3]byte{116, 187, 211}: "Shenzhen xeme Communication Co., Ltd.",
+ [3]byte{116, 190, 8}: "ATEK Products, LLC",
+ [3]byte{116, 191, 161}: "HYUNTECK",
+ [3]byte{116, 191, 183}: "Nusoft Corporation",
+ [3]byte{116, 194, 70}: "Amazon Technologies Inc.",
+ [3]byte{116, 195, 48}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+ [3]byte{116, 198, 33}: "Zhejiang Hite Renewable Energy Co.,LTD",
+ [3]byte{116, 198, 59}: "AzureWave Technology Inc.",
+ [3]byte{116, 201, 154}: "Ericsson AB",
+ [3]byte{116, 201, 163}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{116, 202, 37}: "Calxeda, Inc.",
+ [3]byte{116, 204, 57}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{116, 205, 12}: "Smith Myers Communications Ltd.",
+ [3]byte{116, 206, 86}: "Packet Force Technology Limited Company",
+ [3]byte{116, 208, 43}: "ASUSTek COMPUTER INC.",
+ [3]byte{116, 208, 220}: "Ericsson AB",
+ [3]byte{116, 210, 29}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{116, 212, 53}: "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+ [3]byte{116, 214, 117}: "WYMA Tecnologia",
+ [3]byte{116, 214, 234}: "Texas Instruments",
+ [3]byte{116, 215, 202}: "Panasonic Corporation Automotive",
+ [3]byte{116, 216, 80}: "Evrisko Systems",
+ [3]byte{116, 218, 56}: "Edimax Technology Co. Ltd.",
+ [3]byte{116, 218, 218}: "D-Link International",
+ [3]byte{116, 218, 234}: "Texas Instruments",
+ [3]byte{116, 219, 209}: "Ebay Inc",
+ [3]byte{116, 222, 43}: "Liteon Technology Corporation",
+ [3]byte{116, 223, 191}: "Liteon Technology Corporation",
+ [3]byte{116, 224, 110}: "Ergophone GmbH",
+ [3]byte{116, 225, 74}: "IEEE Registration Authority",
+ [3]byte{116, 225, 154}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{116, 225, 182}: "Apple, Inc.",
+ [3]byte{116, 226, 119}: "Vizmonet Pte Ltd",
+ [3]byte{116, 226, 140}: "Microsoft Corporation",
+ [3]byte{116, 226, 245}: "Apple, Inc.",
+ [3]byte{116, 228, 36}: "APISTE CORPORATION",
+ [3]byte{116, 229, 11}: "Intel Corporate",
+ [3]byte{116, 229, 55}: "RADSPIN",
+ [3]byte{116, 229, 67}: "Liteon Technology Corporation",
+ [3]byte{116, 229, 249}: "Intel Corporate",
+ [3]byte{116, 230, 15}: "TECNO MOBILE LIMITED",
+ [3]byte{116, 230, 226}: "Dell Inc.",
+ [3]byte{116, 231, 198}: "ARRIS Group, Inc.",
+ [3]byte{116, 234, 58}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{116, 234, 200}: "New H3C Technologies Co., Ltd",
+ [3]byte{116, 234, 203}: "New H3C Technologies Co., Ltd",
+ [3]byte{116, 234, 232}: "ARRIS Group, Inc.",
+ [3]byte{116, 236, 241}: "Acumen",
+ [3]byte{116, 240, 109}: "AzureWave Technology Inc.",
+ [3]byte{116, 240, 125}: "BnCOM Co.,Ltd",
+ [3]byte{116, 241, 2}: "Beijing HCHCOM Technology Co., Ltd",
+ [3]byte{116, 244, 19}: "Maxwell Forest",
+ [3]byte{116, 246, 18}: "ARRIS Group, Inc.",
+ [3]byte{116, 246, 28}: "HTC Corporation",
+ [3]byte{116, 246, 97}: "Schneider Electric Fire & Security Oy",
+ [3]byte{116, 247, 38}: "Neuron Robotics",
+ [3]byte{116, 248, 93}: "Berkeley Nucleonics Corp",
+ [3]byte{116, 248, 219}: "IEEE Registration Authority",
+ [3]byte{116, 249, 26}: "Onface",
+ [3]byte{116, 253, 160}: "Compupal (Group) Corporation",
+ [3]byte{116, 254, 72}: "ADVANTECH CO., LTD.",
+ [3]byte{116, 255, 76}: "Skyworth Digital Technology(Shenzhen) Co.,Ltd",
+ [3]byte{116, 255, 125}: "Wren Sound Systems, LLC",
+ [3]byte{120, 0, 158}: "Samsung Electronics Co.,Ltd",
+ [3]byte{120, 2, 143}: "Adaptive Spectrum and Signal Alignment (ASSIA), Inc.",
+ [3]byte{120, 2, 177}: "Cisco Systems, Inc",
+ [3]byte{120, 2, 183}: "ShenZhen Ultra Easy Technology CO.,LTD",
+ [3]byte{120, 2, 248}: "Xiaomi Communications Co Ltd",
+ [3]byte{120, 5, 65}: "Queclink Wireless Solutions Co., Ltd",
+ [3]byte{120, 7, 56}: "Z.U.K. Elzab S.A.",
+ [3]byte{120, 10, 199}: "Baofeng TV Co., Ltd.",
+ [3]byte{120, 12, 184}: "Intel Corporate",
+ [3]byte{120, 17, 133}: "NBS Payment Solutions Inc.",
+ [3]byte{120, 17, 220}: "XIAOMI Electronics,CO.,LTD",
+ [3]byte{120, 18, 184}: "ORANTEK LIMITED",
+ [3]byte{120, 24, 129}: "AzureWave Technology Inc.",
+ [3]byte{120, 25, 46}: "NASCENT Technology",
+ [3]byte{120, 25, 247}: "Juniper Networks",
+ [3]byte{120, 28, 90}: "SHARP Corporation",
+ [3]byte{120, 29, 186}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{120, 29, 253}: "Jabil Inc",
+ [3]byte{120, 31, 219}: "Samsung Electronics Co.,Ltd",
+ [3]byte{120, 32, 121}: "ID Tech",
+ [3]byte{120, 34, 61}: "Affirmed Networks",
+ [3]byte{120, 35, 174}: "ARRIS Group, Inc.",
+ [3]byte{120, 36, 175}: "ASUSTek COMPUTER INC.",
+ [3]byte{120, 37, 68}: "Omnima Limited",
+ [3]byte{120, 37, 173}: "Samsung Electronics Co.,Ltd",
+ [3]byte{120, 40, 202}: "Sonos, Inc.",
+ [3]byte{120, 43, 203}: "Dell Inc.",
+ [3]byte{120, 45, 126}: "TRENDnet, Inc.",
+ [3]byte{120, 46, 239}: "Nokia Corporation",
+ [3]byte{120, 48, 59}: "Stephen Technologies Co.,Limited",
+ [3]byte{120, 48, 225}: "UltraClenz, LLC",
+ [3]byte{120, 49, 43}: "zte corporation",
+ [3]byte{120, 49, 193}: "Apple, Inc.",
+ [3]byte{120, 50, 27}: "D-Link International",
+ [3]byte{120, 50, 79}: "Millennium Group, Inc.",
+ [3]byte{120, 54, 144}: "Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd",
+ [3]byte{120, 58, 132}: "Apple, Inc.",
+ [3]byte{120, 60, 227}: "Kai-EE",
+ [3]byte{120, 61, 91}: "TELNET Redes Inteligentes S.A.",
+ [3]byte{120, 62, 83}: "BSkyB Ltd",
+ [3]byte{120, 63, 21}: "EasySYNC Ltd.",
+ [3]byte{120, 64, 228}: "Samsung Electronics Co.,Ltd",
+ [3]byte{120, 68, 5}: "FUJITU(HONG KONG) ELECTRONIC Co.,LTD.",
+ [3]byte{120, 68, 118}: "Zioncom Electronics (Shenzhen) Ltd.",
+ [3]byte{120, 68, 253}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{120, 69, 1}: "Biamp Systems",
+ [3]byte{120, 69, 97}: "CyberTAN Technology Inc.",
+ [3]byte{120, 69, 196}: "Dell Inc.",
+ [3]byte{120, 70, 196}: "DAEHAP HYPER-TECH",
+ [3]byte{120, 71, 29}: "Samsung Electronics Co.,Ltd",
+ [3]byte{120, 72, 89}: "Hewlett Packard",
+ [3]byte{120, 73, 29}: "The Will-Burt Company",
+ [3]byte{120, 75, 8}: "f.robotics acquisitions ltd",
+ [3]byte{120, 75, 135}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{120, 79, 67}: "Apple, Inc.",
+ [3]byte{120, 81, 12}: "LiveU Ltd.",
+ [3]byte{120, 82, 26}: "Samsung Electronics Co.,Ltd",
+ [3]byte{120, 82, 98}: "Shenzhen Hojy Software Co., Ltd.",
+ [3]byte{120, 83, 242}: "ROXTON Ltd.",
+ [3]byte{120, 84, 46}: "D-Link International",
+ [3]byte{120, 85, 23}: "SankyuElectronics",
+ [3]byte{120, 87, 18}: "Mobile Integration Workgroup",
+ [3]byte{120, 88, 243}: "Vachen Co.,Ltd",
+ [3]byte{120, 89, 62}: "RAFI GmbH & Co.KG",
+ [3]byte{120, 89, 94}: "Samsung Electronics Co.,Ltd",
+ [3]byte{120, 89, 104}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{120, 92, 40}: "Prime Motion Inc.",
+ [3]byte{120, 92, 114}: "Hioso Technology Co., Ltd.",
+ [3]byte{120, 95, 76}: "Argox Information Co., Ltd.",
+ [3]byte{120, 97, 124}: "MITSUMI ELECTRIC CO.,LTD.",
+ [3]byte{120, 98, 86}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{120, 100, 230}: "Green Motive Technology Limited",
+ [3]byte{120, 102, 174}: "ZTEC Instruments, Inc.",
+ [3]byte{120, 103, 215}: "Apple, Inc.",
+ [3]byte{120, 104, 247}: "YSTen Technology Co.,Ltd",
+ [3]byte{120, 106, 137}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{120, 108, 28}: "Apple, Inc.",
+ [3]byte{120, 109, 148}: "Palo Alto Networks",
+ [3]byte{120, 113, 156}: "ARRIS Group, Inc.",
+ [3]byte{120, 123, 138}: "Apple, Inc.",
+ [3]byte{120, 125, 72}: "ITEL MOBILE LIMITED",
+ [3]byte{120, 126, 97}: "Apple, Inc.",
+ [3]byte{120, 127, 98}: "GiK mbH",
+ [3]byte{120, 128, 56}: "FUNAI ELECTRIC CO., LTD.",
+ [3]byte{120, 129, 2}: "Sercomm Corporation.",
+ [3]byte{120, 129, 143}: "Server Racks Australia Pty Ltd",
+ [3]byte{120, 132, 60}: "Sony Corporation",
+ [3]byte{120, 132, 238}: "INDRA ESPACIO S.A.",
+ [3]byte{120, 135, 13}: "Unifiedgateways India Private Limited",
+ [3]byte{120, 136, 109}: "Apple, Inc.",
+ [3]byte{120, 136, 138}: "CDR Sp. z o.o. Sp. k.",
+ [3]byte{120, 137, 115}: "CMC",
+ [3]byte{120, 138, 32}: "Ubiquiti Networks Inc.",
+ [3]byte{120, 139, 119}: "Standar Telecom",
+ [3]byte{120, 140, 77}: "Indyme Solutions, LLC",
+ [3]byte{120, 140, 84}: "Eltek Technologies LTD",
+ [3]byte{120, 141, 247}: "Hitron Technologies. Inc",
+ [3]byte{120, 142, 51}: "Jiangsu SEUIC Technology Co.,Ltd",
+ [3]byte{120, 146, 62}: "Nokia Corporation",
+ [3]byte{120, 146, 156}: "Intel Corporate",
+ [3]byte{120, 148, 180}: "Sercomm Corporation.",
+ [3]byte{120, 150, 130}: "zte corporation",
+ [3]byte{120, 150, 132}: "ARRIS Group, Inc.",
+ [3]byte{120, 152, 253}: "Q9 Networks Inc.",
+ [3]byte{120, 153, 92}: "Nationz Technologies Inc",
+ [3]byte{120, 153, 102}: "Musilab Electronics (DongGuan)Co.,Ltd.",
+ [3]byte{120, 153, 143}: "MEDILINE ITALIA SRL",
+ [3]byte{120, 156, 133}: "August Home, Inc.",
+ [3]byte{120, 156, 231}: "Shenzhen Aikede Technology Co., Ltd",
+ [3]byte{120, 158, 208}: "Samsung Electronics Co.,Ltd",
+ [3]byte{120, 159, 76}: "HOERBIGER Elektronik GmbH",
+ [3]byte{120, 159, 112}: "Apple, Inc.",
+ [3]byte{120, 159, 135}: "Siemens AG I IA PP PRM",
+ [3]byte{120, 160, 81}: "iiNet Labs Pty Ltd",
+ [3]byte{120, 161, 6}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{120, 161, 131}: "Advidia",
+ [3]byte{120, 162, 160}: "Nintendo Co., Ltd.",
+ [3]byte{120, 163, 81}: "SHENZHEN ZHIBOTONG ELECTRONICS CO.,LTD",
+ [3]byte{120, 163, 228}: "Apple, Inc.",
+ [3]byte{120, 165, 4}: "Texas Instruments",
+ [3]byte{120, 165, 221}: "Shenzhen Smarteye Digital Electronics Co., Ltd",
+ [3]byte{120, 166, 131}: "Precidata",
+ [3]byte{120, 166, 189}: "DAEYEON Control&Instrument Co,.Ltd",
+ [3]byte{120, 166, 225}: "Brocade Communications Systems, Inc.",
+ [3]byte{120, 167, 20}: "Amphenol",
+ [3]byte{120, 168, 115}: "Samsung Electronics Co.,Ltd",
+ [3]byte{120, 171, 96}: "ABB Australia",
+ [3]byte{120, 171, 187}: "Samsung Electronics Co.,Ltd",
+ [3]byte{120, 172, 191}: "Igneous Systems",
+ [3]byte{120, 172, 192}: "Hewlett Packard",
+ [3]byte{120, 174, 12}: "Far South Networks",
+ [3]byte{120, 175, 88}: "GIMASI SA",
+ [3]byte{120, 178, 141}: "Beijing Tengling Technology CO.Ltd",
+ [3]byte{120, 179, 185}: "ShangHai sunup lighting CO.,LTD",
+ [3]byte{120, 179, 206}: "Elo touch solutions",
+ [3]byte{120, 181, 210}: "Ever Treasure Industrial Limited",
+ [3]byte{120, 182, 193}: "AOBO Telecom Co.,Ltd",
+ [3]byte{120, 184, 26}: "INTER SALES A/S",
+ [3]byte{120, 184, 75}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+ [3]byte{120, 186, 208}: "Shinybow Technology Co. Ltd.",
+ [3]byte{120, 186, 249}: "Cisco Systems, Inc",
+ [3]byte{120, 188, 26}: "Cisco Systems, Inc",
+ [3]byte{120, 189, 188}: "Samsung Electronics Co.,Ltd",
+ [3]byte{120, 190, 182}: "Enhanced Vision",
+ [3]byte{120, 190, 189}: "STULZ GmbH",
+ [3]byte{120, 193, 167}: "zte corporation",
+ [3]byte{120, 194, 192}: "IEEE Registration Authority",
+ [3]byte{120, 195, 233}: "Samsung Electronics Co.,Ltd",
+ [3]byte{120, 196, 14}: "H&D Wireless",
+ [3]byte{120, 196, 171}: "Shenzhen Runsil Technology Co.,Ltd",
+ [3]byte{120, 197, 229}: "Texas Instruments",
+ [3]byte{120, 198, 187}: "Innovasic, Inc.",
+ [3]byte{120, 202, 4}: "Nokia Corporation",
+ [3]byte{120, 202, 57}: "Apple, Inc.",
+ [3]byte{120, 202, 94}: "ELNO",
+ [3]byte{120, 202, 131}: "IEEE Registration Authority",
+ [3]byte{120, 203, 51}: "DHC Software Co.,Ltd",
+ [3]byte{120, 203, 104}: "DAEHAP HYPER-TECH",
+ [3]byte{120, 205, 142}: "SMC Networks Inc",
+ [3]byte{120, 208, 4}: "Neousys Technology Inc.",
+ [3]byte{120, 209, 41}: "Vicos",
+ [3]byte{120, 211, 79}: "Pace-O-Matic, Inc.",
+ [3]byte{120, 211, 141}: "HONGKONG YUNLINK TECHNOLOGY LIMITED",
+ [3]byte{120, 213, 181}: "NAVIELEKTRO KY",
+ [3]byte{120, 214, 111}: "Aristocrat Technologies Australia Pty. Ltd.",
+ [3]byte{120, 214, 178}: "Toshiba",
+ [3]byte{120, 214, 240}: "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+ [3]byte{120, 215, 82}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{120, 215, 95}: "Apple, Inc.",
+ [3]byte{120, 216, 0}: "IEEE Registration Authority",
+ [3]byte{120, 217, 159}: "NuCom HK Ltd.",
+ [3]byte{120, 218, 110}: "Cisco Systems, Inc",
+ [3]byte{120, 218, 179}: "GBO Technology",
+ [3]byte{120, 221, 8}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{120, 221, 214}: "c-scape",
+ [3]byte{120, 221, 217}: "Guangzhou Shiyuan Electronics Co., Ltd.",
+ [3]byte{120, 222, 228}: "Texas Instruments",
+ [3]byte{120, 225, 3}: "Amazon Technologies Inc.",
+ [3]byte{120, 227, 181}: "Hewlett Packard",
+ [3]byte{120, 228, 0}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{120, 231, 209}: "Hewlett Packard",
+ [3]byte{120, 232, 182}: "zte corporation",
+ [3]byte{120, 233, 128}: "RainUs Co.,Ltd",
+ [3]byte{120, 235, 20}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+ [3]byte{120, 235, 57}: "Instituto Nacional de Tecnología Industrial",
+ [3]byte{120, 236, 34}: "Shanghai Qihui Telecom Technology Co., LTD",
+ [3]byte{120, 236, 116}: "Kyland-USA",
+ [3]byte{120, 239, 76}: "Unetconvergence Co., Ltd.",
+ [3]byte{120, 242, 158}: "PEGATRON CORPORATION",
+ [3]byte{120, 245, 87}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{120, 245, 229}: "BEGA Gantenbrink-Leuchten KG",
+ [3]byte{120, 245, 253}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{120, 247, 190}: "Samsung Electronics Co.,Ltd",
+ [3]byte{120, 247, 208}: "Silverbrook Research",
+ [3]byte{120, 248, 130}: "LG Electronics (Mobile Communications)",
+ [3]byte{120, 249, 68}: "Private",
+ [3]byte{120, 252, 20}: "Family Zone Cyber Safety Ltd",
+ [3]byte{120, 253, 148}: "Apple, Inc.",
+ [3]byte{120, 254, 61}: "Juniper Networks",
+ [3]byte{120, 254, 65}: "Socus networks",
+ [3]byte{120, 254, 226}: "Shanghai Diveo Technology Co., Ltd",
+ [3]byte{120, 255, 87}: "Intel Corporate",
+ [3]byte{120, 255, 202}: "TECNO MOBILE LIMITED",
+ [3]byte{124, 1, 10}: "Texas Instruments",
+ [3]byte{124, 1, 135}: "Curtis Instruments, Inc.",
+ [3]byte{124, 1, 145}: "Apple, Inc.",
+ [3]byte{124, 2, 188}: "Hansung Electronics Co. LTD",
+ [3]byte{124, 3, 76}: "Sagemcom Broadband SAS",
+ [3]byte{124, 3, 201}: "Shenzhen YOUHUA Technology Co., Ltd",
+ [3]byte{124, 3, 216}: "Sagemcom Broadband SAS",
+ [3]byte{124, 4, 208}: "Apple, Inc.",
+ [3]byte{124, 5, 7}: "PEGATRON CORPORATION",
+ [3]byte{124, 5, 30}: "RAFAEL LTD.",
+ [3]byte{124, 6, 35}: "Ultra Electronics Sonar System Division",
+ [3]byte{124, 8, 217}: "Shanghai B-Star Technology Co",
+ [3]byte{124, 9, 43}: "Bekey A/S",
+ [3]byte{124, 10, 80}: "J-MEX Inc.",
+ [3]byte{124, 11, 198}: "Samsung Electronics Co.,Ltd",
+ [3]byte{124, 14, 206}: "Cisco Systems, Inc",
+ [3]byte{124, 16, 21}: "Brilliant Home Technology, Inc.",
+ [3]byte{124, 17, 190}: "Apple, Inc.",
+ [3]byte{124, 17, 203}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{124, 17, 205}: "QianTang Technology",
+ [3]byte{124, 20, 118}: "Damall Technologies SAS",
+ [3]byte{124, 22, 13}: "Saia-Burgess Controls AG",
+ [3]byte{124, 24, 205}: "E-TRON Co.,Ltd.",
+ [3]byte{124, 26, 3}: "8Locations Co., Ltd.",
+ [3]byte{124, 26, 252}: "Dalian Co-Edifice Video Technology Co., Ltd",
+ [3]byte{124, 28, 78}: "LG Innotek",
+ [3]byte{124, 28, 104}: "Samsung Electronics Co.,Ltd",
+ [3]byte{124, 28, 241}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{124, 29, 217}: "Xiaomi Communications Co Ltd",
+ [3]byte{124, 30, 82}: "Microsoft",
+ [3]byte{124, 30, 179}: "2N TELEKOMUNIKACE a.s.",
+ [3]byte{124, 32, 72}: "KoamTac",
+ [3]byte{124, 32, 100}: "Alcatel-Lucent IPD",
+ [3]byte{124, 37, 135}: "chaowifi.com",
+ [3]byte{124, 38, 52}: "ARRIS Group, Inc.",
+ [3]byte{124, 38, 100}: "Sagemcom Broadband SAS",
+ [3]byte{124, 43, 225}: "Shenzhen Ferex Electrical Co.,Ltd",
+ [3]byte{124, 44, 243}: "Secure Electrans Ltd",
+ [3]byte{124, 46, 13}: "Blackmagic Design",
+ [3]byte{124, 46, 221}: "Samsung Electronics Co.,Ltd",
+ [3]byte{124, 47, 128}: "Gigaset Communications GmbH",
+ [3]byte{124, 51, 110}: "MEG Electronics Inc.",
+ [3]byte{124, 53, 72}: "Transcend Information",
+ [3]byte{124, 56, 102}: "Texas Instruments",
+ [3]byte{124, 56, 108}: "Real Time Logic",
+ [3]byte{124, 57, 32}: "SSOMA SECURITY",
+ [3]byte{124, 59, 213}: "Imago Group",
+ [3]byte{124, 60, 182}: "Shenzhen Homecare Technology Co.,Ltd.",
+ [3]byte{124, 62, 157}: "PATECH",
+ [3]byte{124, 67, 143}: "E-Band Communications Corp.",
+ [3]byte{124, 68, 76}: "Entertainment Solutions, S.L.",
+ [3]byte{124, 70, 133}: "Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.",
+ [3]byte{124, 71, 124}: "IEEE Registration Authority",
+ [3]byte{124, 73, 185}: "Plexus Manufacturing Sdn Bhd",
+ [3]byte{124, 74, 130}: "Portsmith LLC",
+ [3]byte{124, 74, 168}: "MindTree Wireless PVT Ltd",
+ [3]byte{124, 75, 120}: "Red Sun Synthesis Pte Ltd",
+ [3]byte{124, 76, 88}: "Scale Computing, Inc.",
+ [3]byte{124, 76, 165}: "BSkyB Ltd",
+ [3]byte{124, 79, 125}: "Sawwave",
+ [3]byte{124, 79, 181}: "Arcadyan Technology Corporation",
+ [3]byte{124, 80, 73}: "Apple, Inc.",
+ [3]byte{124, 83, 74}: "Metamako",
+ [3]byte{124, 85, 231}: "YSI, Inc.",
+ [3]byte{124, 87, 78}: "COBI GmbH",
+ [3]byte{124, 90, 28}: "Sophos Ltd",
+ [3]byte{124, 90, 103}: "JNC Systems, Inc.",
+ [3]byte{124, 92, 248}: "Intel Corporate",
+ [3]byte{124, 96, 151}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{124, 97, 147}: "HTC Corporation",
+ [3]byte{124, 100, 86}: "Samsung Electronics Co.,Ltd",
+ [3]byte{124, 102, 157}: "Texas Instruments",
+ [3]byte{124, 103, 162}: "Intel Corporate",
+ [3]byte{124, 105, 246}: "Cisco Systems, Inc",
+ [3]byte{124, 106, 179}: "IBC TECHNOLOGIES INC.",
+ [3]byte{124, 106, 195}: "GatesAir, Inc",
+ [3]byte{124, 106, 219}: "SafeTone Technology Co.,Ltd",
+ [3]byte{124, 106, 243}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+ [3]byte{124, 107, 51}: "Tenyu Tech Co. Ltd.",
+ [3]byte{124, 107, 82}: "Tigaro Wireless",
+ [3]byte{124, 107, 247}: "NTI co., ltd.",
+ [3]byte{124, 108, 57}: "PIXSYS SRL",
+ [3]byte{124, 108, 143}: "AMS NEVE LTD",
+ [3]byte{124, 109, 98}: "Apple, Inc.",
+ [3]byte{124, 109, 248}: "Apple, Inc.",
+ [3]byte{124, 111, 6}: "Caterpillar Trimble Control Technologies",
+ [3]byte{124, 111, 248}: "ShenZhen ACTO Digital Video Technology Co.,Ltd.",
+ [3]byte{124, 112, 188}: "IEEE Registration Authority",
+ [3]byte{124, 113, 118}: "Wuxi iData Technology Company Ltd.",
+ [3]byte{124, 114, 228}: "Unikey Technologies",
+ [3]byte{124, 115, 139}: "Cocoon Alarm Ltd",
+ [3]byte{124, 118, 48}: "Shenzhen YOUHUA Technology Co., Ltd",
+ [3]byte{124, 118, 53}: "Intel Corporate",
+ [3]byte{124, 118, 115}: "ENMAS GmbH",
+ [3]byte{124, 120, 126}: "Samsung Electronics Co.,Ltd",
+ [3]byte{124, 121, 232}: "PayRange Inc.",
+ [3]byte{124, 122, 83}: "Phytrex Technology Corp.",
+ [3]byte{124, 122, 145}: "Intel Corporate",
+ [3]byte{124, 123, 139}: "Control Concepts, Inc.",
+ [3]byte{124, 123, 228}: "Z'SEDAI KENKYUSHO CORPORATION",
+ [3]byte{124, 125, 61}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{124, 125, 65}: "Jinmuyu Electronics Co., Ltd.",
+ [3]byte{124, 130, 45}: "Nortec",
+ [3]byte{124, 130, 116}: "Shenzhen Hikeen Technology CO.,LTD",
+ [3]byte{124, 131, 6}: "Glen Dimplex Nordic as",
+ [3]byte{124, 139, 202}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{124, 141, 145}: "Shanghai Hongzhuo Information Technology co.,LTD",
+ [3]byte{124, 142, 228}: "Texas Instruments",
+ [3]byte{124, 145, 34}: "Samsung Electronics Co.,Ltd",
+ [3]byte{124, 148, 178}: "Philips Healthcare PCCI",
+ [3]byte{124, 149, 177}: "Aerohive Networks Inc.",
+ [3]byte{124, 149, 243}: "Cisco Systems, Inc",
+ [3]byte{124, 151, 99}: "Openmatics s.r.o.",
+ [3]byte{124, 154, 155}: "VSE valencia smart energy",
+ [3]byte{124, 161, 93}: "GN ReSound A/S",
+ [3]byte{124, 162, 55}: "King Slide Technology CO., LTD.",
+ [3]byte{124, 162, 62}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{124, 162, 155}: "D.SignT GmbH & Co. KG",
+ [3]byte{124, 166, 29}: "MHL, LLC",
+ [3]byte{124, 169, 125}: "Objenious",
+ [3]byte{124, 171, 37}: "MESMO TECHNOLOGY INC.",
+ [3]byte{124, 172, 178}: "Bosch Software Innovations GmbH",
+ [3]byte{124, 173, 116}: "Cisco Systems, Inc",
+ [3]byte{124, 176, 62}: "OSRAM GmbH",
+ [3]byte{124, 176, 194}: "Intel Corporate",
+ [3]byte{124, 177, 93}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{124, 177, 119}: "Satelco AG",
+ [3]byte{124, 178, 27}: "Cisco SPVTG",
+ [3]byte{124, 178, 50}: "Hui Zhou Gaoshengda Technology Co.,LTD",
+ [3]byte{124, 178, 92}: "Acacia Communications",
+ [3]byte{124, 181, 66}: "ACES Technology",
+ [3]byte{124, 183, 51}: "ASKEY COMPUTER CORP",
+ [3]byte{124, 183, 123}: "Paradigm Electronics Inc",
+ [3]byte{124, 185, 96}: "Shanghai X-Cheng telecom LTD",
+ [3]byte{124, 186, 204}: "IEEE Registration Authority",
+ [3]byte{124, 187, 111}: "Cosco Electronics Co., Ltd.",
+ [3]byte{124, 187, 138}: "Nintendo Co., Ltd.",
+ [3]byte{124, 189, 6}: "AE REFUsol",
+ [3]byte{124, 191, 136}: "Mobilicom LTD",
+ [3]byte{124, 191, 177}: "ARRIS Group, Inc.",
+ [3]byte{124, 195, 161}: "Apple, Inc.",
+ [3]byte{124, 196, 239}: "Devialet",
+ [3]byte{124, 197, 55}: "Apple, Inc.",
+ [3]byte{124, 198, 196}: "Kolff Computer Supplies b.v.",
+ [3]byte{124, 199, 9}: "SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.",
+ [3]byte{124, 200, 171}: "Acro Associates, Inc.",
+ [3]byte{124, 200, 208}: "TIANJIN YAAN TECHNOLOGY CO., LTD.",
+ [3]byte{124, 200, 215}: "Damalisk",
+ [3]byte{124, 201, 90}: "Dell EMC",
+ [3]byte{124, 203, 13}: "Antaira Technologies, LLC",
+ [3]byte{124, 203, 226}: "IEEE Registration Authority",
+ [3]byte{124, 204, 31}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+ [3]byte{124, 204, 184}: "Intel Corporate",
+ [3]byte{124, 205, 17}: "MS-Magnet",
+ [3]byte{124, 205, 60}: "Guangzhou Juzing Technology Co., Ltd",
+ [3]byte{124, 207, 207}: "Shanghai SEARI Intelligent System Co., Ltd",
+ [3]byte{124, 209, 195}: "Apple, Inc.",
+ [3]byte{124, 211, 10}: "INVENTEC Corporation",
+ [3]byte{124, 215, 98}: "Freestyle Technology Pty Ltd",
+ [3]byte{124, 216, 68}: "Enmotus Inc",
+ [3]byte{124, 217, 254}: "New Cosmos Electric Co., Ltd.",
+ [3]byte{124, 218, 132}: "Dongnian Networks Inc.",
+ [3]byte{124, 221, 17}: "Chongqing MAS SCI&TECH.Co.,Ltd",
+ [3]byte{124, 221, 32}: "IOXOS Technologies S.A.",
+ [3]byte{124, 221, 118}: "Suzhou Hanming Technologies Co., Ltd.",
+ [3]byte{124, 221, 144}: "Shenzhen Ogemray Technology Co., Ltd.",
+ [3]byte{124, 224, 68}: "NEON Inc",
+ [3]byte{124, 225, 255}: "Computer Performance, Inc. DBA Digital Loggers, Inc.",
+ [3]byte{124, 226, 202}: "Juniper Networks",
+ [3]byte{124, 228, 170}: "Private",
+ [3]byte{124, 229, 36}: "Quirky, Inc.",
+ [3]byte{124, 229, 107}: "ESEN Optoelectronics Technology Co.,Ltd.",
+ [3]byte{124, 233, 124}: "ITEL MOBILE LIMITED",
+ [3]byte{124, 233, 211}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{124, 235, 127}: "Dmet Products Corp.",
+ [3]byte{124, 235, 174}: "Ridgeline Instruments",
+ [3]byte{124, 235, 234}: "ASCT",
+ [3]byte{124, 236, 121}: "Texas Instruments",
+ [3]byte{124, 237, 141}: "Microsoft",
+ [3]byte{124, 239, 24}: "Creative Product Design Pty. Ltd.",
+ [3]byte{124, 239, 138}: "Inhon International Ltd.",
+ [3]byte{124, 240, 95}: "Apple, Inc.",
+ [3]byte{124, 240, 152}: "Bee Beans Technologies, Inc.",
+ [3]byte{124, 240, 186}: "Linkwell Telesystems Pvt Ltd",
+ [3]byte{124, 244, 41}: "NUUO Inc.",
+ [3]byte{124, 248, 84}: "Samsung Electronics Co.,Ltd",
+ [3]byte{124, 249, 14}: "Samsung Electronics Co.,Ltd",
+ [3]byte{124, 249, 92}: "U.I. Lapp GmbH",
+ [3]byte{124, 250, 223}: "Apple, Inc.",
+ [3]byte{124, 252, 60}: "Visteon Corporation",
+ [3]byte{124, 254, 40}: "Salutron Inc.",
+ [3]byte{124, 254, 78}: "Shenzhen Safe vision Technology Co.,LTD",
+ [3]byte{124, 254, 144}: "Mellanox Technologies, Inc.",
+ [3]byte{124, 255, 98}: "Huizhou Super Electron Technology Co.,Ltd.",
+ [3]byte{128, 0, 11}: "Intel Corporate",
+ [3]byte{128, 0, 16}: "AT&T",
+ [3]byte{128, 0, 110}: "Apple, Inc.",
+ [3]byte{128, 1, 132}: "HTC Corporation",
+ [3]byte{128, 2, 223}: "ORA Inc.",
+ [3]byte{128, 5, 223}: "Montage Technology Group Limited",
+ [3]byte{128, 7, 162}: "Esson Technology Inc.",
+ [3]byte{128, 9, 2}: "Keysight Technologies, Inc.",
+ [3]byte{128, 10, 6}: "COMTEC co.,ltd",
+ [3]byte{128, 10, 128}: "IEEE Registration Authority",
+ [3]byte{128, 11, 81}: "Chengdu XGimi Technology Co.,Ltd",
+ [3]byte{128, 13, 215}: "Latticework, Inc",
+ [3]byte{128, 14, 36}: "ForgetBox",
+ [3]byte{128, 19, 130}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{128, 20, 64}: "Sunlit System Technology Corp",
+ [3]byte{128, 20, 168}: "Guangzhou V-SOLUTION Electronic Technology Co., Ltd.",
+ [3]byte{128, 22, 183}: "Brunel University",
+ [3]byte{128, 23, 125}: "Nortel Networks",
+ [3]byte{128, 24, 68}: "Dell Inc.",
+ [3]byte{128, 24, 167}: "Samsung Electronics Co.,Ltd",
+ [3]byte{128, 25, 52}: "Intel Corporate",
+ [3]byte{128, 25, 103}: "Shanghai Reallytek Information Technology Co.,Ltd",
+ [3]byte{128, 25, 254}: "JianLing Technology CO., LTD",
+ [3]byte{128, 29, 170}: "Avaya Inc",
+ [3]byte{128, 31, 2}: "Edimax Technology Co. Ltd.",
+ [3]byte{128, 32, 175}: "Trade FIDES, a.s.",
+ [3]byte{128, 34, 117}: "Beijing Beny Wave Technology Co Ltd",
+ [3]byte{128, 38, 137}: "D-Link International",
+ [3]byte{128, 41, 148}: "Technicolor CH USA Inc.",
+ [3]byte{128, 42, 168}: "Ubiquiti Networks Inc.",
+ [3]byte{128, 42, 250}: "Germaneers GmbH",
+ [3]byte{128, 45, 225}: "Solarbridge Technologies",
+ [3]byte{128, 46, 20}: "azeti Networks AG",
+ [3]byte{128, 47, 222}: "Zurich Instruments AG",
+ [3]byte{128, 48, 220}: "Texas Instruments",
+ [3]byte{128, 52, 87}: "OT Systems Limited",
+ [3]byte{128, 55, 115}: "NETGEAR",
+ [3]byte{128, 56, 150}: "SHARP Corporation",
+ [3]byte{128, 56, 188}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{128, 56, 253}: "LeapFrog Enterprises, Inc.",
+ [3]byte{128, 57, 229}: "PATLITE CORPORATION",
+ [3]byte{128, 58, 10}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+ [3]byte{128, 58, 89}: "AT&T",
+ [3]byte{128, 59, 42}: "ABB Xiamen Low Voltage Equipment Co.,Ltd.",
+ [3]byte{128, 59, 154}: "ghe-ces electronic ag",
+ [3]byte{128, 59, 246}: "LOOK EASY INTERNATIONAL LIMITED",
+ [3]byte{128, 63, 93}: "Winstars Technology Ltd",
+ [3]byte{128, 63, 214}: "bytes at work AG",
+ [3]byte{128, 65, 78}: "BBK EDUCATIONAL ELECTRONICS CORP.,LTD.",
+ [3]byte{128, 66, 124}: "Adolf Tedsen GmbH & Co. KG",
+ [3]byte{128, 71, 49}: "Packet Design, Inc.",
+ [3]byte{128, 72, 165}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+ [3]byte{128, 73, 113}: "Apple, Inc.",
+ [3]byte{128, 75, 32}: "Ventilation Control",
+ [3]byte{128, 78, 129}: "Samsung Electronics Co.,Ltd",
+ [3]byte{128, 79, 88}: "ThinkEco, Inc.",
+ [3]byte{128, 80, 27}: "Nokia Corporation",
+ [3]byte{128, 80, 103}: "W & D TECHNOLOGY CORPORATION",
+ [3]byte{128, 86, 242}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{128, 87, 25}: "Samsung Electronics Co.,Ltd",
+ [3]byte{128, 88, 197}: "NovaTec Kommunikationstechnik GmbH",
+ [3]byte{128, 88, 248}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{128, 89, 253}: "Noviga",
+ [3]byte{128, 90, 4}: "LG Electronics (Mobile Communications)",
+ [3]byte{128, 94, 12}: "YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.",
+ [3]byte{128, 94, 192}: "YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.",
+ [3]byte{128, 96, 7}: "RIM",
+ [3]byte{128, 97, 95}: "Beijing Sinead Technology Co., Ltd.",
+ [3]byte{128, 97, 143}: "Shenzhen sangfei consumer communications co.,ltd",
+ [3]byte{128, 100, 89}: "Nimbus Inc.",
+ [3]byte{128, 101, 109}: "Samsung Electronics Co.,Ltd",
+ [3]byte{128, 101, 233}: "BenQ Corporation",
+ [3]byte{128, 102, 41}: "Prescope Technologies CO.,LTD.",
+ [3]byte{128, 106, 176}: "Shenzhen TINNO Mobile Technology Corp.",
+ [3]byte{128, 108, 27}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{128, 108, 139}: "KAESER KOMPRESSOREN AG",
+ [3]byte{128, 108, 188}: "NET New Electronic Technology GmbH",
+ [3]byte{128, 113, 31}: "Juniper Networks",
+ [3]byte{128, 113, 122}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{128, 115, 159}: "KYOCERA CORPORATION",
+ [3]byte{128, 116, 89}: "K's Co.,Ltd.",
+ [3]byte{128, 118, 147}: "Newag SA",
+ [3]byte{128, 121, 174}: "ShanDong Tecsunrise Co.,Ltd",
+ [3]byte{128, 122, 127}: "ABB Genway Xiamen Electrical Equipment CO., LTD",
+ [3]byte{128, 122, 191}: "HTC Corporation",
+ [3]byte{128, 123, 30}: "Corsair Components",
+ [3]byte{128, 123, 133}: "IEEE Registration Authority",
+ [3]byte{128, 125, 27}: "Neosystem Co. Ltd.",
+ [3]byte{128, 125, 227}: "Chongqing Sichuan Instrument Microcircuit Co.LTD.",
+ [3]byte{128, 129, 165}: "TONGQING COMMUNICATION EQUIPMENT (SHENZHEN) Co.,Ltd",
+ [3]byte{128, 130, 135}: "ATCOM Technology Co.Ltd.",
+ [3]byte{128, 134, 152}: "Netronics Technologies Inc.",
+ [3]byte{128, 134, 242}: "Intel Corporate",
+ [3]byte{128, 137, 23}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{128, 139, 92}: "Shenzhen Runhuicheng Technology Co., Ltd",
+ [3]byte{128, 140, 151}: "Kaonmedia CO., LTD.",
+ [3]byte{128, 141, 183}: "Hewlett Packard Enterprise",
+ [3]byte{128, 145, 42}: "Lih Rong electronic Enterprise Co., Ltd.",
+ [3]byte{128, 145, 192}: "AgileMesh, Inc.",
+ [3]byte{128, 146, 159}: "Apple, Inc.",
+ [3]byte{128, 147, 147}: "Xapt GmbH",
+ [3]byte{128, 148, 108}: "TOKYO RADAR CORPORATION",
+ [3]byte{128, 150, 177}: "ARRIS Group, Inc.",
+ [3]byte{128, 150, 202}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{128, 151, 27}: "Altenergy Power System,Inc.",
+ [3]byte{128, 155, 32}: "Intel Corporate",
+ [3]byte{128, 159, 171}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{128, 160, 54}: "Shanghai MXCHIP Information Technology Co., Ltd.",
+ [3]byte{128, 161, 171}: "Intellisis",
+ [3]byte{128, 161, 215}: "Shanghai DareGlobal Technologies Co.,Ltd",
+ [3]byte{128, 165, 137}: "AzureWave Technology Inc.",
+ [3]byte{128, 168, 93}: "Osterhout Design Group",
+ [3]byte{128, 170, 164}: "USAG",
+ [3]byte{128, 172, 172}: "Juniper Networks",
+ [3]byte{128, 173, 103}: "Kasda Networks Inc",
+ [3]byte{128, 176, 61}: "Apple, Inc.",
+ [3]byte{128, 178, 25}: "ELEKTRON TECHNOLOGY UK LIMITED",
+ [3]byte{128, 178, 52}: "Technicolor CH USA Inc.",
+ [3]byte{128, 178, 137}: "Forworld Electronics Ltd.",
+ [3]byte{128, 179, 42}: "Alstom Grid",
+ [3]byte{128, 182, 134}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{128, 183, 8}: "Blue Danube Systems, Inc",
+ [3]byte{128, 183, 9}: "Viptela, Inc",
+ [3]byte{128, 185, 92}: "ELFTECH Co., Ltd.",
+ [3]byte{128, 186, 172}: "TeleAdapt Ltd",
+ [3]byte{128, 186, 230}: "Neets",
+ [3]byte{128, 187, 235}: "Satmap Systems Ltd",
+ [3]byte{128, 190, 5}: "Apple, Inc.",
+ [3]byte{128, 193, 110}: "Hewlett Packard",
+ [3]byte{128, 197, 230}: "Microsoft Corporation",
+ [3]byte{128, 197, 242}: "AzureWave Technology Inc.",
+ [3]byte{128, 198, 63}: "Remec Broadband Wireless , LLC",
+ [3]byte{128, 198, 171}: "Technicolor CH USA Inc.",
+ [3]byte{128, 198, 202}: "Endian s.r.l.",
+ [3]byte{128, 199, 85}: "Panasonic Appliances Company",
+ [3]byte{128, 200, 98}: "Openpeak, Inc",
+ [3]byte{128, 206, 177}: "Theissen Training Systems GmbH",
+ [3]byte{128, 207, 65}: "Lenovo Mobile Communication Technology Ltd.",
+ [3]byte{128, 208, 25}: "Embed, Inc",
+ [3]byte{128, 208, 155}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{128, 209, 96}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+ [3]byte{128, 209, 139}: "Hangzhou I'converge Technology Co.,Ltd",
+ [3]byte{128, 210, 29}: "AzureWave Technology Inc.",
+ [3]byte{128, 212, 51}: "LzLabs GmbH",
+ [3]byte{128, 212, 165}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{128, 214, 5}: "Apple, Inc.",
+ [3]byte{128, 215, 51}: "QSR Automations, Inc.",
+ [3]byte{128, 219, 49}: "Power Quotient International Co., Ltd.",
+ [3]byte{128, 224, 29}: "Cisco Systems, Inc",
+ [3]byte{128, 228, 218}: "IEEE Registration Authority",
+ [3]byte{128, 230, 80}: "Apple, Inc.",
+ [3]byte{128, 232, 111}: "Cisco Systems, Inc",
+ [3]byte{128, 234, 35}: "Wistron Neweb Corporation",
+ [3]byte{128, 234, 150}: "Apple, Inc.",
+ [3]byte{128, 234, 202}: "Dialog Semiconductor Hellas SA",
+ [3]byte{128, 235, 119}: "Wistron Corporation",
+ [3]byte{128, 237, 44}: "Apple, Inc.",
+ [3]byte{128, 238, 115}: "Shuttle Inc.",
+ [3]byte{128, 242, 94}: "Kyynel",
+ [3]byte{128, 245, 3}: "ARRIS Group, Inc.",
+ [3]byte{128, 245, 147}: "IRCO Sistemas de Telecomunicación S.A.",
+ [3]byte{128, 246, 46}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{128, 248, 235}: "RayTight",
+ [3]byte{128, 250, 91}: "CLEVO CO.",
+ [3]byte{128, 251, 6}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{128, 255, 168}: "UNIDIS",
+ [3]byte{132, 0, 45}: "PEGATRON CORPORATION",
+ [3]byte{132, 0, 210}: "Sony Mobile Communications AB",
+ [3]byte{132, 1, 167}: "Greyware Automation Products, Inc",
+ [3]byte{132, 4, 210}: "Kirale Technologies SL",
+ [3]byte{132, 11, 45}: "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+ [3]byte{132, 15, 69}: "Shanghai GMT Digital Technologies Co., Ltd",
+ [3]byte{132, 16, 13}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{132, 17, 158}: "Samsung Electronics Co.,Ltd",
+ [3]byte{132, 22, 249}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{132, 23, 21}: "GP Electronics (HK) Ltd.",
+ [3]byte{132, 23, 102}: "Weifang GoerTek Technology Co.,Ltd.",
+ [3]byte{132, 24, 38}: "Osram GmbH",
+ [3]byte{132, 24, 58}: "Ruckus Wireless",
+ [3]byte{132, 24, 136}: "Juniper Networks",
+ [3]byte{132, 27, 56}: "Shenzhen Excelsecu Data Technology Co.,Ltd",
+ [3]byte{132, 27, 94}: "NETGEAR",
+ [3]byte{132, 30, 38}: "KERNEL-I Co.,LTD",
+ [3]byte{132, 32, 150}: "SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.",
+ [3]byte{132, 33, 65}: "Shenzhen Ginwave Technologies Ltd.",
+ [3]byte{132, 33, 241}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{132, 36, 141}: "Zebra Technologies Inc",
+ [3]byte{132, 37, 25}: "Samsung Electronics",
+ [3]byte{132, 37, 63}: "silex technology, Inc.",
+ [3]byte{132, 37, 164}: "Tariox Limited",
+ [3]byte{132, 37, 219}: "Samsung Electronics Co.,Ltd",
+ [3]byte{132, 38, 21}: "ADB Broadband Italia",
+ [3]byte{132, 38, 43}: "Nokia",
+ [3]byte{132, 38, 144}: "BEIJING THOUGHT SCIENCE CO.,LTD.",
+ [3]byte{132, 39, 206}: "Corporation of the Presiding Bishop of The Church of Jesus Christ of Latter-day Saints",
+ [3]byte{132, 40, 90}: "Saffron Solutions Inc",
+ [3]byte{132, 41, 20}: "EMPORIA TELECOM Produktions- und VertriebsgesmbH & Co KG",
+ [3]byte{132, 41, 153}: "Apple, Inc.",
+ [3]byte{132, 43, 43}: "Dell Inc.",
+ [3]byte{132, 43, 80}: "Huria Co.,Ltd.",
+ [3]byte{132, 43, 188}: "Modelleisenbahn GmbH",
+ [3]byte{132, 44, 128}: "Sichuan Changhong Electric Ltd.",
+ [3]byte{132, 46, 39}: "Samsung Electronics Co.,Ltd",
+ [3]byte{132, 47, 117}: "Innokas Group",
+ [3]byte{132, 48, 229}: "SkyHawke Technologies, LLC",
+ [3]byte{132, 50, 234}: "ANHUI WANZTEN P&T CO., LTD",
+ [3]byte{132, 52, 151}: "Hewlett Packard",
+ [3]byte{132, 54, 17}: "hyungseul publishing networks",
+ [3]byte{132, 56, 53}: "Apple, Inc.",
+ [3]byte{132, 56, 56}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{132, 58, 75}: "Intel Corporate",
+ [3]byte{132, 61, 198}: "Cisco Systems, Inc",
+ [3]byte{132, 63, 78}: "Tri-Tech Manufacturing, Inc.",
+ [3]byte{132, 64, 118}: "Drivenets",
+ [3]byte{132, 65, 103}: "Apple, Inc.",
+ [3]byte{132, 68, 100}: "ServerU Inc",
+ [3]byte{132, 71, 101}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{132, 72, 35}: "WOXTER TECHNOLOGY Co. Ltd",
+ [3]byte{132, 73, 21}: "vArmour Networks, Inc.",
+ [3]byte{132, 75, 183}: "Beijing Sankuai Online Technology Co.,Ltd",
+ [3]byte{132, 75, 245}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{132, 79, 3}: "Ablelink Electronics Ltd",
+ [3]byte{132, 80, 154}: "Easy Soft TV Co., Ltd",
+ [3]byte{132, 81, 129}: "Samsung Electronics Co.,Ltd",
+ [3]byte{132, 85, 165}: "Samsung Electronics Co.,Ltd",
+ [3]byte{132, 86, 156}: "Coho Data, Inc.,",
+ [3]byte{132, 87, 135}: "DVR C&C Co., Ltd.",
+ [3]byte{132, 90, 129}: "ffly4u",
+ [3]byte{132, 91, 18}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{132, 92, 147}: "Chabrier Services",
+ [3]byte{132, 93, 215}: "Shenzhen Netcom Electronics Co.,Ltd",
+ [3]byte{132, 97, 160}: "ARRIS Group, Inc.",
+ [3]byte{132, 98, 35}: "Shenzhen Coship Electronics Co., Ltd.",
+ [3]byte{132, 98, 166}: "EuroCB (Phils), Inc.",
+ [3]byte{132, 99, 214}: "Microsoft Corporation",
+ [3]byte{132, 104, 62}: "Intel Corporate",
+ [3]byte{132, 106, 237}: "Wireless Tsukamoto.,co.LTD",
+ [3]byte{132, 110, 177}: "Park Assist LLC",
+ [3]byte{132, 114, 7}: "I&C Technology",
+ [3]byte{132, 115, 3}: "Letv Mobile and Intelligent Information Technology (Beijing) Corporation Ltd.",
+ [3]byte{132, 116, 42}: "zte corporation",
+ [3]byte{132, 118, 22}: "Addat s.r.o.",
+ [3]byte{132, 119, 120}: "Cochlear Limited",
+ [3]byte{132, 120, 139}: "Apple, Inc.",
+ [3]byte{132, 120, 172}: "Cisco Systems, Inc",
+ [3]byte{132, 121, 51}: "profichip GmbH",
+ [3]byte{132, 121, 115}: "Shanghai Baud Data Communication Co.,Ltd.",
+ [3]byte{132, 122, 136}: "HTC Corporation",
+ [3]byte{132, 123, 235}: "Dell Inc.",
+ [3]byte{132, 125, 80}: "Holley Metering Limited",
+ [3]byte{132, 126, 64}: "Texas Instruments",
+ [3]byte{132, 128, 45}: "Cisco Systems, Inc",
+ [3]byte{132, 130, 244}: "Beijing Huasun Unicreate Technology Co., Ltd",
+ [3]byte{132, 131, 25}: "Hangzhou Zero Zero Technology Co., Ltd.",
+ [3]byte{132, 131, 54}: "Newrun",
+ [3]byte{132, 131, 113}: "Avaya Inc",
+ [3]byte{132, 132, 51}: "Paradox Engineering SA",
+ [3]byte{132, 133, 6}: "Apple, Inc.",
+ [3]byte{132, 133, 10}: "Hella Sonnen- und Wetterschutztechnik GmbH",
+ [3]byte{132, 134, 243}: "Greenvity Communications",
+ [3]byte{132, 137, 173}: "Apple, Inc.",
+ [3]byte{132, 141, 132}: "Rajant Corporation",
+ [3]byte{132, 141, 199}: "Cisco SPVTG",
+ [3]byte{132, 142, 12}: "Apple, Inc.",
+ [3]byte{132, 142, 150}: "Embertec Pty Ltd",
+ [3]byte{132, 142, 223}: "Sony Mobile Communications AB",
+ [3]byte{132, 143, 105}: "Dell Inc.",
+ [3]byte{132, 144, 0}: "Arnold & Richter Cine Technik",
+ [3]byte{132, 147, 12}: "InCoax Networks Europe AB",
+ [3]byte{132, 148, 140}: "Hitron Technologies. Inc",
+ [3]byte{132, 150, 129}: "Cathay Communication Co.,Ltd",
+ [3]byte{132, 150, 216}: "ARRIS Group, Inc.",
+ [3]byte{132, 151, 184}: "Memjet Inc.",
+ [3]byte{132, 152, 102}: "Samsung Electronics Co.,Ltd",
+ [3]byte{132, 156, 166}: "Arcadyan Technology Corporation",
+ [3]byte{132, 157, 100}: "SMC Corporation",
+ [3]byte{132, 157, 197}: "Centera Photonics Inc.",
+ [3]byte{132, 159, 181}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{132, 161, 52}: "Apple, Inc.",
+ [3]byte{132, 161, 209}: "Sagemcom Broadband SAS",
+ [3]byte{132, 164, 35}: "Sagemcom Broadband SAS",
+ [3]byte{132, 164, 102}: "Samsung Electronics Co.,Ltd",
+ [3]byte{132, 166, 200}: "Intel Corporate",
+ [3]byte{132, 167, 131}: "Alcatel Lucent",
+ [3]byte{132, 167, 136}: "Perples",
+ [3]byte{132, 168, 228}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{132, 169, 145}: "Cyber Trans Japan Co.,Ltd.",
+ [3]byte{132, 169, 196}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{132, 170, 156}: "MitraStar Technology Corp.",
+ [3]byte{132, 172, 164}: "Beijing Novel Super Digital TV Technology Co., Ltd",
+ [3]byte{132, 172, 251}: "Crouzet Automatismes",
+ [3]byte{132, 173, 88}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{132, 175, 31}: "Beat System Service Co,. Ltd.",
+ [3]byte{132, 175, 236}: "BUFFALO.INC",
+ [3]byte{132, 177, 83}: "Apple, Inc.",
+ [3]byte{132, 178, 97}: "Cisco Systems, Inc",
+ [3]byte{132, 181, 23}: "Cisco Systems, Inc",
+ [3]byte{132, 181, 65}: "Samsung Electronics Co.,Ltd",
+ [3]byte{132, 181, 156}: "Juniper Networks",
+ [3]byte{132, 184, 2}: "Cisco Systems, Inc",
+ [3]byte{132, 186, 59}: "CANON INC.",
+ [3]byte{132, 190, 82}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{132, 192, 239}: "Samsung Electronics Co.,Ltd",
+ [3]byte{132, 193, 193}: "Juniper Networks",
+ [3]byte{132, 194, 228}: "Jiangsu Qinheng Co., Ltd.",
+ [3]byte{132, 195, 232}: "Vaillant GmbH",
+ [3]byte{132, 199, 39}: "Gnodal Ltd",
+ [3]byte{132, 199, 169}: "C3PO S.A.",
+ [3]byte{132, 199, 234}: "Sony Mobile Communications AB",
+ [3]byte{132, 200, 177}: "Incognito Software Systems Inc.",
+ [3]byte{132, 201, 178}: "D-Link International",
+ [3]byte{132, 205, 98}: "ShenZhen IDWELL Technology CO.,Ltd",
+ [3]byte{132, 207, 191}: "Fairphone",
+ [3]byte{132, 211, 42}: "IEEE 1905.1",
+ [3]byte{132, 212, 126}: "Aruba Networks",
+ [3]byte{132, 212, 200}: "Widex A/S",
+ [3]byte{132, 214, 208}: "Amazon Technologies Inc.",
+ [3]byte{132, 217, 49}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{132, 217, 200}: "Unipattern Co.,",
+ [3]byte{132, 219, 47}: "Sierra Wireless Inc",
+ [3]byte{132, 219, 172}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{132, 219, 252}: "Nokia",
+ [3]byte{132, 221, 32}: "Texas Instruments",
+ [3]byte{132, 221, 183}: "Cilag GmbH International",
+ [3]byte{132, 222, 61}: "Crystal Vision Ltd",
+ [3]byte{132, 223, 12}: "NET2GRID BV",
+ [3]byte{132, 223, 25}: "Chuango Security Technology Corporation",
+ [3]byte{132, 224, 88}: "ARRIS Group, Inc.",
+ [3]byte{132, 224, 244}: "IEEE Registration Authority",
+ [3]byte{132, 227, 35}: "Green Wave Telecommunication SDN BHD",
+ [3]byte{132, 227, 39}: "TAILYN TECHNOLOGIES INC",
+ [3]byte{132, 228, 217}: "Shenzhen NEED technology Ltd.",
+ [3]byte{132, 230, 41}: "Bluwan SA",
+ [3]byte{132, 231, 20}: "Liang Herng Enterprise,Co.Ltd.",
+ [3]byte{132, 234, 153}: "Vieworks",
+ [3]byte{132, 235, 24}: "Texas Instruments",
+ [3]byte{132, 237, 51}: "BBMC Co.,Ltd",
+ [3]byte{132, 239, 24}: "Intel Corporate",
+ [3]byte{132, 241, 41}: "Metrascale Inc.",
+ [3]byte{132, 244, 147}: "OMS spol. s.r.o.",
+ [3]byte{132, 246, 76}: "Cross Point BV",
+ [3]byte{132, 246, 250}: "Miovision Technologies Incorporated",
+ [3]byte{132, 252, 172}: "Apple, Inc.",
+ [3]byte{132, 252, 254}: "Apple, Inc.",
+ [3]byte{132, 254, 158}: "RTC Industries, Inc.",
+ [3]byte{132, 254, 220}: "Borqs Beijing Ltd.",
+ [3]byte{136, 1, 242}: "Vitec System Engineering Inc.",
+ [3]byte{136, 3, 85}: "Arcadyan Technology Corporation",
+ [3]byte{136, 7, 75}: "LG Electronics (Mobile Communications)",
+ [3]byte{136, 9, 5}: "MTMCommunications",
+ [3]byte{136, 9, 175}: "Masimo Corporation",
+ [3]byte{136, 15, 16}: "Huami Information Technology Co.,Ltd.",
+ [3]byte{136, 15, 182}: "Jabil Circuits India Pvt Ltd,-EHTP unit",
+ [3]byte{136, 16, 54}: "Panodic(ShenZhen) Electronics Limted",
+ [3]byte{136, 18, 78}: "Qualcomm Inc.",
+ [3]byte{136, 20, 43}: "Protonic Holland",
+ [3]byte{136, 21, 68}: "Cisco Meraki",
+ [3]byte{136, 24, 174}: "Tamron Co., Ltd",
+ [3]byte{136, 27, 153}: "SHENZHEN XIN FEI JIA ELECTRONIC CO. LTD.",
+ [3]byte{136, 29, 252}: "Cisco Systems, Inc",
+ [3]byte{136, 31, 161}: "Apple, Inc.",
+ [3]byte{136, 32, 18}: "LMI Technologies",
+ [3]byte{136, 33, 227}: "Nebusens, S.L.",
+ [3]byte{136, 35, 100}: "Watchnet DVR Inc",
+ [3]byte{136, 35, 254}: "TTTech Computertechnik AG",
+ [3]byte{136, 37, 44}: "Arcadyan Technology Corporation",
+ [3]byte{136, 37, 147}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{136, 40, 179}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{136, 41, 80}: "Dalian Netmoon Tech Develop Co.,Ltd",
+ [3]byte{136, 43, 215}: "ADDÉNERGIE TECHNOLOGIES",
+ [3]byte{136, 46, 90}: "storONE",
+ [3]byte{136, 48, 138}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{136, 50, 155}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{136, 51, 20}: "Texas Instruments",
+ [3]byte{136, 51, 190}: "Ivenix, Inc.",
+ [3]byte{136, 53, 76}: "Transics",
+ [3]byte{136, 54, 18}: "SRC Computers, LLC",
+ [3]byte{136, 54, 95}: "LG Electronics (Mobile Communications)",
+ [3]byte{136, 54, 108}: "EFM Networks",
+ [3]byte{136, 59, 139}: "Cheering Connection Co. Ltd.",
+ [3]byte{136, 60, 28}: "MERCURY CORPORATION",
+ [3]byte{136, 63, 211}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{136, 65, 87}: "Shenzhen Atsmart Technology Co.,Ltd.",
+ [3]byte{136, 65, 193}: "ORBISAT DA AMAZONIA IND E AEROL SA",
+ [3]byte{136, 65, 252}: "AirTies Wireless Networks",
+ [3]byte{136, 67, 225}: "Cisco Systems, Inc",
+ [3]byte{136, 68, 119}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{136, 68, 246}: "Nokia Corporation",
+ [3]byte{136, 70, 42}: "Telechips Inc.",
+ [3]byte{136, 74, 234}: "Texas Instruments",
+ [3]byte{136, 75, 57}: "Siemens AG, Healthcare Sector",
+ [3]byte{136, 76, 207}: "Pulzze Systems, Inc",
+ [3]byte{136, 80, 221}: "Infiniband Trade Association",
+ [3]byte{136, 81, 251}: "Hewlett Packard",
+ [3]byte{136, 83, 46}: "Intel Corporate",
+ [3]byte{136, 83, 149}: "Apple, Inc.",
+ [3]byte{136, 83, 212}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{136, 87, 109}: "XTA Electronics Ltd",
+ [3]byte{136, 87, 238}: "BUFFALO.INC",
+ [3]byte{136, 90, 146}: "Cisco Systems, Inc",
+ [3]byte{136, 91, 221}: "Aerohive Networks Inc.",
+ [3]byte{136, 92, 71}: "Alcatel Lucent",
+ [3]byte{136, 93, 144}: "IEEE Registration Authority",
+ [3]byte{136, 93, 251}: "zte corporation",
+ [3]byte{136, 97, 90}: "Siano Mobile Silicon Ltd.",
+ [3]byte{136, 99, 223}: "Apple, Inc.",
+ [3]byte{136, 102, 57}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{136, 102, 165}: "Apple, Inc.",
+ [3]byte{136, 104, 92}: "Shenzhen ChuangDao & Perpetual Eternal Technology Co.,Ltd",
+ [3]byte{136, 106, 177}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{136, 106, 227}: "Alpha Networks Inc.",
+ [3]byte{136, 107, 15}: "Bluegiga Technologies OY",
+ [3]byte{136, 107, 68}: "Sunnovo International Limited",
+ [3]byte{136, 107, 110}: "Apple, Inc.",
+ [3]byte{136, 107, 118}: "CHINA HOPEFUL GROUP HOPEFUL ELECTRIC CO.,LTD",
+ [3]byte{136, 112, 51}: "Hangzhou Silan Microelectronic Inc",
+ [3]byte{136, 112, 140}: "Lenovo Mobile Communication Technology Ltd.",
+ [3]byte{136, 112, 239}: "SC Professional Trading Co., Ltd.",
+ [3]byte{136, 113, 229}: "Amazon Technologies Inc.",
+ [3]byte{136, 115, 132}: "Toshiba",
+ [3]byte{136, 115, 152}: "K2E Tekpoint",
+ [3]byte{136, 117, 86}: "Cisco Systems, Inc",
+ [3]byte{136, 117, 152}: "Samsung Electronics Co.,Ltd",
+ [3]byte{136, 120, 115}: "Intel Corporate",
+ [3]byte{136, 120, 156}: "Game Technologies SA",
+ [3]byte{136, 121, 91}: "Konka Group Co., Ltd.",
+ [3]byte{136, 121, 126}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{136, 122, 49}: "Velankani Electronics Pvt. Ltd.",
+ [3]byte{136, 127, 3}: "Comper Technology Investment Limited",
+ [3]byte{136, 130, 121}: "Shenzhen RB-LINK Intelligent Technology Co.Ltd",
+ [3]byte{136, 131, 34}: "Samsung Electronics Co.,Ltd",
+ [3]byte{136, 131, 93}: "FN-LINK TECHNOLOGY LIMITED",
+ [3]byte{136, 134, 3}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{136, 134, 160}: "Simton Technologies, Ltd.",
+ [3]byte{136, 134, 194}: "STABILO International GmbH",
+ [3]byte{136, 135, 23}: "CANON INC.",
+ [3]byte{136, 135, 221}: "DarbeeVision Inc.",
+ [3]byte{136, 137, 20}: "All Components Incorporated",
+ [3]byte{136, 137, 100}: "GSI Electronics Inc.",
+ [3]byte{136, 139, 93}: "Storage Appliance Corporation",
+ [3]byte{136, 140, 25}: "Brady Corp Asia Pacific Ltd",
+ [3]byte{136, 144, 141}: "Cisco Systems, Inc",
+ [3]byte{136, 145, 102}: "Viewcooper Corp.",
+ [3]byte{136, 145, 221}: "Racktivity",
+ [3]byte{136, 148, 113}: "Brocade Communications Systems, Inc.",
+ [3]byte{136, 148, 126}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{136, 148, 249}: "Gemicom Technology, Inc.",
+ [3]byte{136, 149, 185}: "Unified Packet Systems Crop",
+ [3]byte{136, 150, 118}: "TTC MARCONI s.r.o.",
+ [3]byte{136, 150, 182}: "Global Fire Equipment S.A.",
+ [3]byte{136, 150, 242}: "Valeo Schalter und Sensoren GmbH",
+ [3]byte{136, 151, 223}: "Entrypass Corporation Sdn. Bhd.",
+ [3]byte{136, 152, 33}: "TERAON",
+ [3]byte{136, 155, 57}: "Samsung Electronics Co.,Ltd",
+ [3]byte{136, 156, 166}: "BTB Korea INC",
+ [3]byte{136, 159, 250}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{136, 160, 132}: "Formation Data Systems",
+ [3]byte{136, 162, 94}: "Juniper Networks",
+ [3]byte{136, 162, 215}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{136, 163, 204}: "Amatis Controls",
+ [3]byte{136, 165, 189}: "QPCOM INC.",
+ [3]byte{136, 166, 198}: "Sagemcom Broadband SAS",
+ [3]byte{136, 167, 60}: "Ragentek Technology Group",
+ [3]byte{136, 172, 193}: "Generiton Co., Ltd.",
+ [3]byte{136, 173, 67}: "PEGATRON CORPORATION",
+ [3]byte{136, 173, 210}: "Samsung Electronics Co.,Ltd",
+ [3]byte{136, 174, 29}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+ [3]byte{136, 177, 17}: "Intel Corporate",
+ [3]byte{136, 177, 104}: "Delta Control GmbH",
+ [3]byte{136, 177, 225}: "Mojo Networks, Inc.",
+ [3]byte{136, 180, 166}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{136, 182, 39}: "Gembird Europe BV",
+ [3]byte{136, 184, 208}: "Dongguan Koppo Electronic Co.,Ltd",
+ [3]byte{136, 186, 127}: "Qfiednet Co., Ltd.",
+ [3]byte{136, 189, 120}: "Flaircomm Microelectronics,Inc.",
+ [3]byte{136, 191, 213}: "Simple Audio Ltd",
+ [3]byte{136, 194, 66}: "Poynt Co.",
+ [3]byte{136, 194, 85}: "Texas Instruments",
+ [3]byte{136, 195, 110}: "Beijing Ereneben lnformation Technology Limited",
+ [3]byte{136, 195, 179}: "SOVICO",
+ [3]byte{136, 198, 38}: "Logitech, Inc",
+ [3]byte{136, 198, 99}: "Apple, Inc.",
+ [3]byte{136, 201, 208}: "LG Electronics (Mobile Communications)",
+ [3]byte{136, 203, 135}: "Apple, Inc.",
+ [3]byte{136, 203, 165}: "Suzhou Torchstar Intelligent Technology Co.,Ltd",
+ [3]byte{136, 204, 69}: "Skyworth Digital Technology(Shenzhen) Co.,Ltd",
+ [3]byte{136, 206, 250}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{136, 207, 152}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{136, 208, 57}: "TCL Technoly Electronics(Huizhou).,Ltd",
+ [3]byte{136, 209, 113}: "BEGHELLI S.P.A",
+ [3]byte{136, 210, 116}: "zte corporation",
+ [3]byte{136, 211, 123}: "FirmTek, LLC",
+ [3]byte{136, 213, 12}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{136, 215, 188}: "DEP Company",
+ [3]byte{136, 215, 246}: "ASUSTek COMPUTER INC.",
+ [3]byte{136, 217, 98}: "Canopus Systems US LLC",
+ [3]byte{136, 218, 26}: "Redpine Signals, Inc.",
+ [3]byte{136, 220, 150}: "SENAO Networks, Inc.",
+ [3]byte{136, 221, 121}: "Voltaire",
+ [3]byte{136, 222, 169}: "Roku, Inc.",
+ [3]byte{136, 224, 160}: "Shenzhen VisionSTOR Technologies Co., Ltd",
+ [3]byte{136, 224, 243}: "Juniper Networks",
+ [3]byte{136, 225, 97}: "Art Beijing Science and Technology Development Co., Ltd.",
+ [3]byte{136, 227, 171}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{136, 230, 3}: "Avotek corporation",
+ [3]byte{136, 230, 40}: "Shenzhen Kezhonglong Optoelectronic Technology Co.,Ltd",
+ [3]byte{136, 231, 18}: "Whirlpool Corporation",
+ [3]byte{136, 231, 166}: "iKnowledge Integration Corp.",
+ [3]byte{136, 232, 127}: "Apple, Inc.",
+ [3]byte{136, 232, 248}: "YONG TAI ELECTRONIC (DONGGUAN) LTD.",
+ [3]byte{136, 233, 23}: "Tamaggo",
+ [3]byte{136, 237, 28}: "Cudo Communication Co., Ltd.",
+ [3]byte{136, 240, 49}: "Cisco Systems, Inc",
+ [3]byte{136, 240, 119}: "Cisco Systems, Inc",
+ [3]byte{136, 244, 136}: "cellon communications technology(shenzhen)Co.,Ltd.",
+ [3]byte{136, 244, 144}: "Jetmobile Pte Ltd",
+ [3]byte{136, 247, 199}: "Technicolor CH USA Inc.",
+ [3]byte{136, 253, 21}: "LINEEYE CO., LTD",
+ [3]byte{136, 254, 214}: "ShangHai WangYong Software Co., Ltd.",
+ [3]byte{140, 0, 109}: "Apple, Inc.",
+ [3]byte{140, 4, 255}: "Technicolor CH USA Inc.",
+ [3]byte{140, 5, 81}: "Koubachi AG",
+ [3]byte{140, 7, 140}: "FLOW DATA INC",
+ [3]byte{140, 8, 139}: "Remote Solution",
+ [3]byte{140, 9, 244}: "ARRIS Group, Inc.",
+ [3]byte{140, 12, 144}: "Ruckus Wireless",
+ [3]byte{140, 12, 163}: "Amper",
+ [3]byte{140, 13, 118}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{140, 14, 227}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{140, 15, 111}: "PEGATRON CORPORATION",
+ [3]byte{140, 15, 131}: "Angie Hospitality LLC",
+ [3]byte{140, 16, 212}: "Sagemcom Broadband SAS",
+ [3]byte{140, 17, 203}: "ABUS Security-Center GmbH & Co. KG",
+ [3]byte{140, 20, 125}: "IEEE Registration Authority",
+ [3]byte{140, 24, 217}: "Shenzhen RF Technology Co., Ltd",
+ [3]byte{140, 25, 45}: "IEEE Registration Authority",
+ [3]byte{140, 26, 191}: "Samsung Electronics Co.,Ltd",
+ [3]byte{140, 31, 148}: "RF Surgical System Inc.",
+ [3]byte{140, 33, 10}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{140, 37, 5}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{140, 39, 29}: "QuantHouse",
+ [3]byte{140, 39, 138}: "Vocollect Inc",
+ [3]byte{140, 41, 55}: "Apple, Inc.",
+ [3]byte{140, 45, 170}: "Apple, Inc.",
+ [3]byte{140, 47, 57}: "IBA Dosimetry GmbH",
+ [3]byte{140, 47, 166}: "Solid Optics B.V.",
+ [3]byte{140, 51, 48}: "EmFirst Co., Ltd.",
+ [3]byte{140, 51, 87}: "HiteVision Digital Media Technology Co.,Ltd.",
+ [3]byte{140, 52, 253}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{140, 57, 92}: "Bit4id Srl",
+ [3]byte{140, 58, 227}: "LG Electronics (Mobile Communications)",
+ [3]byte{140, 59, 173}: "NETGEAR",
+ [3]byte{140, 60, 7}: "Skiva Technologies, Inc.",
+ [3]byte{140, 60, 74}: "NAKAYO Inc",
+ [3]byte{140, 65, 242}: "RDA Technologies Ltd.",
+ [3]byte{140, 68, 53}: "Shanghai BroadMobi Communication Technology Co., Ltd.",
+ [3]byte{140, 69, 0}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{140, 74, 238}: "GIGA TMS INC",
+ [3]byte{140, 75, 89}: "3D Imaging & Simulations Corp",
+ [3]byte{140, 76, 220}: "PLANEX COMMUNICATIONS INC.",
+ [3]byte{140, 77, 185}: "Unmonday Ltd",
+ [3]byte{140, 77, 234}: "Cerio Corporation",
+ [3]byte{140, 81, 5}: "Shenzhen ireadygo Information Technology CO.,LTD.",
+ [3]byte{140, 83, 247}: "A&D ENGINEERING CO., LTD.",
+ [3]byte{140, 84, 29}: "LGE",
+ [3]byte{140, 86, 157}: "Imaging Solutions Group",
+ [3]byte{140, 86, 197}: "Nintendo Co., Ltd.",
+ [3]byte{140, 87, 155}: "Wistron Neweb Corporation",
+ [3]byte{140, 87, 253}: "LVX Western",
+ [3]byte{140, 88, 119}: "Apple, Inc.",
+ [3]byte{140, 89, 139}: "C Technologies AB",
+ [3]byte{140, 89, 195}: "ADB Italia",
+ [3]byte{140, 90, 240}: "Exeltech Solar Products",
+ [3]byte{140, 91, 240}: "ARRIS Group, Inc.",
+ [3]byte{140, 92, 161}: "d-broad,INC",
+ [3]byte{140, 93, 96}: "UCI Corporation Co.,Ltd.",
+ [3]byte{140, 95, 72}: "Continental Intelligent Transportation Systems LLC",
+ [3]byte{140, 95, 223}: "Beijing Railway Signal Factory",
+ [3]byte{140, 96, 79}: "Cisco Systems, Inc",
+ [3]byte{140, 96, 231}: "MPGIO CO.,LTD",
+ [3]byte{140, 97, 2}: "Beijing Baofengmojing Technologies Co., Ltd",
+ [3]byte{140, 100, 11}: "Beyond Devices d.o.o.",
+ [3]byte{140, 100, 34}: "Sony Mobile Communications AB",
+ [3]byte{140, 104, 120}: "Nortek-AS",
+ [3]byte{140, 106, 228}: "Viogem Limited",
+ [3]byte{140, 109, 80}: "SHENZHEN MTC CO LTD",
+ [3]byte{140, 112, 90}: "Intel Corporate",
+ [3]byte{140, 113, 248}: "Samsung Electronics Co.,Ltd",
+ [3]byte{140, 115, 110}: "FUJITSU LIMITED",
+ [3]byte{140, 118, 193}: "Goden Tech Limited",
+ [3]byte{140, 119, 18}: "Samsung Electronics Co.,Ltd",
+ [3]byte{140, 119, 22}: "LONGCHEER TELECOMMUNICATION LIMITED",
+ [3]byte{140, 120, 215}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+ [3]byte{140, 121, 103}: "zte corporation",
+ [3]byte{140, 123, 157}: "Apple, Inc.",
+ [3]byte{140, 124, 146}: "Apple, Inc.",
+ [3]byte{140, 124, 181}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{140, 124, 255}: "Brocade Communications Systems, Inc.",
+ [3]byte{140, 126, 179}: "Lytro, Inc.",
+ [3]byte{140, 127, 59}: "ARRIS Group, Inc.",
+ [3]byte{140, 130, 168}: "Insigma Technology Co.,Ltd",
+ [3]byte{140, 131, 157}: "SHENZHEN XINYUPENG ELECTRONIC TECHNOLOGY CO., LTD",
+ [3]byte{140, 132, 1}: "Private",
+ [3]byte{140, 133, 128}: "Smart Innovation LLC",
+ [3]byte{140, 133, 144}: "Apple, Inc.",
+ [3]byte{140, 135, 59}: "Leica Camera AG",
+ [3]byte{140, 137, 122}: "AUGTEK",
+ [3]byte{140, 137, 165}: "Micro-Star INT'L CO., LTD",
+ [3]byte{140, 138, 110}: "ESTUN AUTOMATION TECHNOLOY CO., LTD",
+ [3]byte{140, 138, 187}: "Beijing Orient View Technology Co., Ltd.",
+ [3]byte{140, 139, 131}: "Texas Instruments",
+ [3]byte{140, 142, 118}: "taskit GmbH",
+ [3]byte{140, 142, 242}: "Apple, Inc.",
+ [3]byte{140, 143, 233}: "Apple, Inc.",
+ [3]byte{140, 144, 211}: "Nokia",
+ [3]byte{140, 145, 9}: "Toyoshima Electric Technoeogy(Suzhou) Co.,Ltd.",
+ [3]byte{140, 146, 54}: "Aus.Linx Technology Co., Ltd.",
+ [3]byte{140, 147, 81}: "Jigowatts Inc.",
+ [3]byte{140, 148, 207}: "Encell Technology, Inc.",
+ [3]byte{140, 153, 230}: "TCT mobile ltd",
+ [3]byte{140, 159, 59}: "Qingdao Hisense Communications Co.,Ltd.",
+ [3]byte{140, 160, 72}: "Beijing NeTopChip Technology Co.,LTD",
+ [3]byte{140, 162, 253}: "Starry, Inc.",
+ [3]byte{140, 165, 161}: "Oregano Systems - Design & Consulting GmbH",
+ [3]byte{140, 166, 223}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{140, 169, 130}: "Intel Corporate",
+ [3]byte{140, 171, 142}: "Shanghai Feixun Communication Co.,Ltd.",
+ [3]byte{140, 174, 76}: "Plugable Technologies",
+ [3]byte{140, 174, 137}: "Y-cam Solutions Ltd",
+ [3]byte{140, 176, 148}: "Airtech I&C Co., Ltd",
+ [3]byte{140, 182, 79}: "Cisco Systems, Inc",
+ [3]byte{140, 183, 247}: "Shenzhen UniStrong Science & Technology Co., Ltd",
+ [3]byte{140, 184, 44}: "IPitomy Communications",
+ [3]byte{140, 184, 100}: "AcSiP Technology Corp.",
+ [3]byte{140, 190, 190}: "Xiaomi Communications Co Ltd",
+ [3]byte{140, 191, 157}: "Shanghai Xinyou Information Technology Ltd. Co.",
+ [3]byte{140, 191, 166}: "Samsung Electronics Co.,Ltd",
+ [3]byte{140, 193, 33}: "Panasonic Corporation AVC Networks Company",
+ [3]byte{140, 197, 225}: "ShenZhen Konka Telecommunication Technology Co.,Ltd",
+ [3]byte{140, 198, 97}: "Current, powered by GE",
+ [3]byte{140, 199, 170}: "Radinet Communications Inc.",
+ [3]byte{140, 199, 208}: "zhejiang ebang communication co.,ltd",
+ [3]byte{140, 200, 205}: "Samsung Electronics Co.,Ltd",
+ [3]byte{140, 200, 244}: "IEEE Registration Authority",
+ [3]byte{140, 205, 162}: "ACTP, Inc.",
+ [3]byte{140, 205, 232}: "Nintendo Co., Ltd.",
+ [3]byte{140, 207, 9}: "Dell EMC",
+ [3]byte{140, 207, 92}: "BEFEGA GmbH",
+ [3]byte{140, 209, 123}: "CG Mobile",
+ [3]byte{140, 210, 233}: "YOKOTE SEIKO CO., LTD.",
+ [3]byte{140, 211, 162}: "VisSim AS",
+ [3]byte{140, 212, 142}: "ITEL MOBILE LIMITED",
+ [3]byte{140, 214, 40}: "Ikor Metering",
+ [3]byte{140, 219, 37}: "ESG Solutions",
+ [3]byte{140, 220, 212}: "Hewlett Packard",
+ [3]byte{140, 221, 141}: "Wifly-City System Inc.",
+ [3]byte{140, 222, 82}: "ISSC Technologies Corp.",
+ [3]byte{140, 222, 153}: "Comlab Inc.",
+ [3]byte{140, 223, 157}: "NEC Corporation",
+ [3]byte{140, 224, 129}: "zte corporation",
+ [3]byte{140, 225, 23}: "zte corporation",
+ [3]byte{140, 226, 218}: "Circle Media Inc",
+ [3]byte{140, 227, 142}: "Toshiba Memory Corporation",
+ [3]byte{140, 231, 72}: "Private",
+ [3]byte{140, 231, 140}: "DK Networks",
+ [3]byte{140, 231, 179}: "Sonardyne International Ltd",
+ [3]byte{140, 234, 27}: "Edgecore Networks Corporation",
+ [3]byte{140, 235, 198}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{140, 236, 75}: "Dell Inc.",
+ [3]byte{140, 238, 198}: "Precepscion Pty. Ltd.",
+ [3]byte{140, 242, 40}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+ [3]byte{140, 245, 163}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{140, 248, 19}: "ORANGE POLSKA",
+ [3]byte{140, 249, 69}: "Power Automation pte Ltd",
+ [3]byte{140, 249, 201}: "MESADA Technology Co.,Ltd.",
+ [3]byte{140, 250, 186}: "Apple, Inc.",
+ [3]byte{140, 253, 240}: "Qualcomm Inc.",
+ [3]byte{140, 254, 180}: "VSOONTECH ELECTRONICS CO., LIMITED",
+ [3]byte{144, 0, 78}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{144, 0, 219}: "Samsung Electronics Co.,Ltd",
+ [3]byte{144, 1, 59}: "Sagemcom Broadband SAS",
+ [3]byte{144, 2, 138}: "Shenzhen Shidean Legrand Electronic Products Co.,Ltd",
+ [3]byte{144, 2, 169}: "Zhejiang Dahua Technology Co., Ltd.",
+ [3]byte{144, 3, 37}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{144, 3, 183}: "PARROT SA",
+ [3]byte{144, 6, 40}: "Samsung Electronics Co.,Ltd",
+ [3]byte{144, 9, 23}: "Far-sighted mobile",
+ [3]byte{144, 10, 26}: "Taicang T&W Electronics",
+ [3]byte{144, 10, 57}: "Wiio, Inc.",
+ [3]byte{144, 10, 58}: "PSG Plastic Service GmbH",
+ [3]byte{144, 11, 193}: "Sprocomm Technologies CO.,Ltd",
+ [3]byte{144, 12, 180}: "Alinket Electronic Technology Co., Ltd",
+ [3]byte{144, 13, 102}: "Digimore Electronics Co., Ltd",
+ [3]byte{144, 13, 203}: "ARRIS Group, Inc.",
+ [3]byte{144, 14, 131}: "Monico Monitoring, Inc.",
+ [3]byte{144, 23, 17}: "Hagenuk Marinekommunikation GmbH",
+ [3]byte{144, 23, 155}: "Nanomegas",
+ [3]byte{144, 23, 172}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{144, 24, 94}: "Apex Tool Group GmbH & Co OHG",
+ [3]byte{144, 24, 124}: "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+ [3]byte{144, 24, 174}: "Shanghai Meridian Technologies, Co. Ltd.",
+ [3]byte{144, 25, 0}: "SCS SA",
+ [3]byte{144, 26, 202}: "ARRIS Group, Inc.",
+ [3]byte{144, 27, 14}: "Fujitsu Technology Solutions GmbH",
+ [3]byte{144, 29, 39}: "zte corporation",
+ [3]byte{144, 30, 221}: "GREAT COMPUTER CORPORATION",
+ [3]byte{144, 32, 58}: "BYD Precision Manufacture Co.,Ltd",
+ [3]byte{144, 32, 131}: "General Engine Management Systems Ltd.",
+ [3]byte{144, 33, 6}: "BSkyB Ltd",
+ [3]byte{144, 33, 85}: "HTC Corporation",
+ [3]byte{144, 33, 129}: "Shanghai Huaqin Telecom Technology Co.,Ltd",
+ [3]byte{144, 35, 236}: "Availink, Inc.",
+ [3]byte{144, 39, 228}: "Apple, Inc.",
+ [3]byte{144, 43, 52}: "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+ [3]byte{144, 44, 199}: "C-MAX Asia Limited",
+ [3]byte{144, 46, 28}: "Intel Corporate",
+ [3]byte{144, 46, 135}: "LabJack",
+ [3]byte{144, 49, 205}: "Onyx Healthcare Inc.",
+ [3]byte{144, 50, 75}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{144, 52, 43}: "Gatekeeper Systems, Inc.",
+ [3]byte{144, 52, 252}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{144, 53, 110}: "Vodafone Omnitel N.V.",
+ [3]byte{144, 56, 9}: "Ericsson AB",
+ [3]byte{144, 56, 223}: "Changzhou Tiannengbo System Co. Ltd.",
+ [3]byte{144, 58, 160}: "Nokia",
+ [3]byte{144, 58, 230}: "PARROT SA",
+ [3]byte{144, 60, 146}: "Apple, Inc.",
+ [3]byte{144, 60, 174}: "Yunnan KSEC Digital Technology Co.,Ltd.",
+ [3]byte{144, 61, 90}: "Shenzhen Wision Technology Holding Limited",
+ [3]byte{144, 61, 107}: "Zicon Technology Corp.",
+ [3]byte{144, 61, 189}: "SECURE METERS LIMITED",
+ [3]byte{144, 62, 171}: "ARRIS Group, Inc.",
+ [3]byte{144, 69, 6}: "Tokyo Boeki Medisys Inc.",
+ [3]byte{144, 70, 162}: "Tedipay UK Ltd",
+ [3]byte{144, 70, 183}: "Vadaro Pte Ltd",
+ [3]byte{144, 71, 22}: "RORZE CORPORATION",
+ [3]byte{144, 72, 154}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{144, 73, 250}: "Intel Corporate",
+ [3]byte{144, 76, 229}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{144, 77, 74}: "Sagemcom Broadband SAS",
+ [3]byte{144, 78, 43}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{144, 78, 145}: "IEEE Registration Authority",
+ [3]byte{144, 80, 90}: "unGlue, Inc",
+ [3]byte{144, 80, 123}: "Advanced PANMOBIL Systems GmbH & Co. KG",
+ [3]byte{144, 80, 202}: "Hitron Technologies. Inc",
+ [3]byte{144, 81, 63}: "Elettronica Santerno SpA",
+ [3]byte{144, 84, 70}: "TES ELECTRONIC SOLUTIONS",
+ [3]byte{144, 85, 174}: "Ericsson, EAB/RWI/K",
+ [3]byte{144, 86, 130}: "Lenbrook Industries Limited",
+ [3]byte{144, 86, 146}: "Autotalks Ltd.",
+ [3]byte{144, 89, 175}: "Texas Instruments",
+ [3]byte{144, 92, 68}: "Compal Broadband Networks, Inc.",
+ [3]byte{144, 95, 46}: "TCT mobile ltd",
+ [3]byte{144, 95, 141}: "modas GmbH",
+ [3]byte{144, 96, 241}: "Apple, Inc.",
+ [3]byte{144, 97, 12}: "Fida International (S) Pte Ltd",
+ [3]byte{144, 97, 174}: "Intel Corporate",
+ [3]byte{144, 103, 23}: "Alphion India Private Limited",
+ [3]byte{144, 103, 28}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{144, 103, 181}: "Alcatel-Lucent",
+ [3]byte{144, 103, 243}: "Alcatel Lucent",
+ [3]byte{144, 104, 195}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{144, 108, 172}: "Fortinet, Inc.",
+ [3]byte{144, 109, 200}: "DLG Automação Industrial Ltda",
+ [3]byte{144, 110, 187}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{144, 111, 24}: "Private",
+ [3]byte{144, 111, 169}: "NANJING PUTIAN TELECOMMUNICATIONS TECHNOLOGY CO.,LTD.",
+ [3]byte{144, 112, 37}: "Garea Microsys Co.,Ltd.",
+ [3]byte{144, 112, 101}: "Texas Instruments",
+ [3]byte{144, 114, 64}: "Apple, Inc.",
+ [3]byte{144, 114, 130}: "Sagemcom Broadband SAS",
+ [3]byte{144, 121, 144}: "Benchmark Electronics Romania SRL",
+ [3]byte{144, 122, 10}: "Gebr. Bode GmbH & Co KG",
+ [3]byte{144, 122, 40}: "Beijing Morncloud Information And Technology Co. Ltd.",
+ [3]byte{144, 122, 241}: "Wally",
+ [3]byte{144, 126, 186}: "UTEK TECHNOLOGY (SHENZHEN) CO.,LTD",
+ [3]byte{144, 127, 97}: "Chicony Electronics Co., Ltd.",
+ [3]byte{144, 130, 96}: "IEEE 1904.1 Working Group",
+ [3]byte{144, 131, 122}: "General Electric Water & Process Technologies",
+ [3]byte{144, 132, 13}: "Apple, Inc.",
+ [3]byte{144, 132, 43}: "LEGO System A/S",
+ [3]byte{144, 134, 116}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+ [3]byte{144, 136, 162}: "IONICS TECHNOLOGY ME LTDA",
+ [3]byte{144, 140, 9}: "Total Phase",
+ [3]byte{144, 140, 68}: "H.K ZONGMU TECHNOLOGY CO., LTD.",
+ [3]byte{144, 140, 99}: "GZ Weedong Networks Technology Co. , Ltd",
+ [3]byte{144, 141, 29}: "GH Technologies",
+ [3]byte{144, 141, 108}: "Apple, Inc.",
+ [3]byte{144, 141, 120}: "D-Link International",
+ [3]byte{144, 143, 207}: "UNO System Co., Ltd",
+ [3]byte{144, 144, 60}: "TRISON TECHNOLOGY CORPORATION",
+ [3]byte{144, 144, 96}: "RSI VIDEO TECHNOLOGIES",
+ [3]byte{144, 146, 180}: "Diehl BGT Defence GmbH & Co. KG",
+ [3]byte{144, 148, 228}: "D-Link International",
+ [3]byte{144, 151, 213}: "Espressif Inc.",
+ [3]byte{144, 151, 243}: "Samsung Electronics Co.,Ltd",
+ [3]byte{144, 152, 100}: "Impex-Sat GmbH&amp;Co KG",
+ [3]byte{144, 153, 22}: "ELVEES NeoTek OJSC",
+ [3]byte{144, 157, 125}: "ARRIS Group, Inc.",
+ [3]byte{144, 157, 224}: "Newland Design + Assoc. Inc.",
+ [3]byte{144, 159, 51}: "EFM Networks",
+ [3]byte{144, 159, 67}: "Accutron Instruments Inc.",
+ [3]byte{144, 162, 16}: "United Telecoms Ltd",
+ [3]byte{144, 162, 218}: "GHEO SA",
+ [3]byte{144, 163, 101}: "HMD Global Oy",
+ [3]byte{144, 164, 106}: "SISNET CO., LTD",
+ [3]byte{144, 164, 222}: "Wistron Neweb Corporation",
+ [3]byte{144, 166, 47}: "NAVER",
+ [3]byte{144, 167, 131}: "JSW PACIFIC CORPORATION",
+ [3]byte{144, 167, 193}: "Pakedge Device and Software Inc.",
+ [3]byte{144, 172, 63}: "BrightSign LLC",
+ [3]byte{144, 173, 247}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{144, 174, 27}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{144, 176, 237}: "Apple, Inc.",
+ [3]byte{144, 177, 28}: "Dell Inc.",
+ [3]byte{144, 177, 52}: "ARRIS Group, Inc.",
+ [3]byte{144, 177, 224}: "Beijing Nebula Link Technology Co., Ltd",
+ [3]byte{144, 178, 31}: "Apple, Inc.",
+ [3]byte{144, 182, 134}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{144, 184, 208}: "Joyent, Inc.",
+ [3]byte{144, 185, 49}: "Apple, Inc.",
+ [3]byte{144, 185, 125}: "Johnson Outdoors Marine Electronics d/b/a Minnkota",
+ [3]byte{144, 193, 21}: "Sony Mobile Communications AB",
+ [3]byte{144, 193, 198}: "Apple, Inc.",
+ [3]byte{144, 195, 95}: "Nanjing Jiahao Technology Co., Ltd.",
+ [3]byte{144, 198, 130}: "IEEE Registration Authority",
+ [3]byte{144, 199, 146}: "ARRIS Group, Inc.",
+ [3]byte{144, 199, 216}: "zte corporation",
+ [3]byte{144, 201, 155}: "Recore Systems",
+ [3]byte{144, 204, 36}: "Synaptics, Inc",
+ [3]byte{144, 205, 182}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{144, 207, 21}: "Nokia Corporation",
+ [3]byte{144, 207, 111}: "Dlogixs Co Ltd",
+ [3]byte{144, 207, 125}: "Qingdao Hisense Communications Co.,Ltd.",
+ [3]byte{144, 209, 27}: "Palomar Medical Technologies",
+ [3]byte{144, 215, 79}: "Bookeen",
+ [3]byte{144, 215, 190}: "Wavelab Global Inc.",
+ [3]byte{144, 215, 235}: "Texas Instruments",
+ [3]byte{144, 216, 82}: "Comtec Co., Ltd.",
+ [3]byte{144, 216, 243}: "zte corporation",
+ [3]byte{144, 217, 44}: "HUG-WITSCHI AG",
+ [3]byte{144, 218, 78}: "AVANU",
+ [3]byte{144, 218, 106}: "FOCUS H&S Co., Ltd.",
+ [3]byte{144, 219, 70}: "E-LEAD ELECTRONIC CO., LTD",
+ [3]byte{144, 223, 183}: "s.m.s smart microwave sensors GmbH",
+ [3]byte{144, 223, 251}: "HOMERIDER SYSTEMS",
+ [3]byte{144, 224, 240}: "IEEE 1722a Working Group",
+ [3]byte{144, 226, 186}: "Intel Corporate",
+ [3]byte{144, 230, 186}: "ASUSTek COMPUTER INC.",
+ [3]byte{144, 231, 196}: "HTC Corporation",
+ [3]byte{144, 234, 96}: "SPI Lasers Ltd",
+ [3]byte{144, 236, 80}: "C.O.B.O. SPA",
+ [3]byte{144, 238, 217}: "UNIVERSAL DE DESARROLLOS ELECTRÓNICOS, SA",
+ [3]byte{144, 239, 104}: "Zyxel Communications Corporation",
+ [3]byte{144, 240, 82}: "MEIZU Technology Co., Ltd.",
+ [3]byte{144, 241, 170}: "Samsung Electronics Co.,Ltd",
+ [3]byte{144, 241, 176}: "Hangzhou Anheng Info&Tech CO.,LTD",
+ [3]byte{144, 242, 120}: "Radius Gateway",
+ [3]byte{144, 243, 5}: "HUMAX Co., Ltd.",
+ [3]byte{144, 243, 183}: "Kirisun Communications Co., Ltd.",
+ [3]byte{144, 244, 193}: "Rand McNally",
+ [3]byte{144, 246, 82}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{144, 247, 47}: "Phillips Machine & Welding Co., Inc.",
+ [3]byte{144, 251, 91}: "Avaya Inc",
+ [3]byte{144, 251, 166}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{144, 253, 97}: "Apple, Inc.",
+ [3]byte{144, 253, 159}: "Silicon Laboratories",
+ [3]byte{144, 255, 121}: "Metro Ethernet Forum",
+ [3]byte{148, 0, 6}: "jinyoung",
+ [3]byte{148, 0, 112}: "Nokia Corporation",
+ [3]byte{148, 1, 73}: "AutoHotBox",
+ [3]byte{148, 1, 194}: "Samsung Electronics Co.,Ltd",
+ [3]byte{148, 4, 156}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{148, 5, 182}: "Liling FullRiver Electronics & Technology Ltd",
+ [3]byte{148, 9, 55}: "HUMAX Co., Ltd.",
+ [3]byte{148, 11, 45}: "NetView Technologies(Shenzhen) Co., Ltd",
+ [3]byte{148, 11, 213}: "Himax Technologies, Inc",
+ [3]byte{148, 12, 109}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{148, 14, 107}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{148, 16, 62}: "Belkin International Inc.",
+ [3]byte{148, 17, 218}: "ITF Fröschl GmbH",
+ [3]byte{148, 20, 122}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{148, 22, 115}: "Point Core SARL",
+ [3]byte{148, 24, 130}: "Hewlett Packard Enterprise",
+ [3]byte{148, 29, 28}: "TLab West Systems AB",
+ [3]byte{148, 32, 83}: "Nokia Corporation",
+ [3]byte{148, 33, 151}: "Stalmart Technology Limited",
+ [3]byte{148, 35, 110}: "Shenzhen Junlan Electronic Ltd",
+ [3]byte{148, 40, 46}: "New H3C Technologies Co., Ltd",
+ [3]byte{148, 42, 63}: "Diversey Inc",
+ [3]byte{148, 44, 179}: "HUMAX Co., Ltd.",
+ [3]byte{148, 46, 23}: "Schneider Electric Canada Inc",
+ [3]byte{148, 46, 99}: "Finsécur",
+ [3]byte{148, 49, 155}: "Alphatronics BV",
+ [3]byte{148, 51, 221}: "Taco Inc",
+ [3]byte{148, 53, 10}: "Samsung Electronics Co.,Ltd",
+ [3]byte{148, 54, 224}: "Sichuan Bihong Broadcast &amp; Television New Technologies Co.,Ltd",
+ [3]byte{148, 57, 229}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{148, 58, 240}: "Nokia Corporation",
+ [3]byte{148, 59, 177}: "Kaonmedia CO., LTD.",
+ [3]byte{148, 61, 201}: "Asahi Net, Inc.",
+ [3]byte{148, 63, 194}: "Hewlett Packard Enterprise",
+ [3]byte{148, 64, 162}: "Anywave Communication Technologies, Inc.",
+ [3]byte{148, 65, 193}: "Mini-Cam Limited",
+ [3]byte{148, 68, 68}: "LG Innotek",
+ [3]byte{148, 68, 82}: "Belkin International Inc.",
+ [3]byte{148, 70, 150}: "BaudTec Corporation",
+ [3]byte{148, 73, 150}: "WiSilica Inc",
+ [3]byte{148, 74, 9}: "BitWise Controls",
+ [3]byte{148, 74, 12}: "Sercomm Corporation",
+ [3]byte{148, 80, 71}: "Rechnerbetriebsgruppe",
+ [3]byte{148, 80, 137}: "SimonsVoss Technologies GmbH",
+ [3]byte{148, 81, 3}: "Samsung Electronics Co.,Ltd",
+ [3]byte{148, 81, 61}: "iSmart Alarm, Inc.",
+ [3]byte{148, 81, 191}: "Hyundai ESG",
+ [3]byte{148, 83, 48}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{148, 84, 147}: "Rigado, LLC",
+ [3]byte{148, 87, 165}: "Hewlett Packard",
+ [3]byte{148, 89, 7}: "Shanghai HITE-BELDEN Network Technology Co., Ltd.",
+ [3]byte{148, 89, 45}: "EKE Building Technology Systems Ltd",
+ [3]byte{148, 91, 126}: "TRILOBIT LTDA.",
+ [3]byte{148, 97, 30}: "Wata Electronics Co.,Ltd.",
+ [3]byte{148, 97, 36}: "Pason Systems",
+ [3]byte{148, 98, 105}: "ARRIS Group, Inc.",
+ [3]byte{148, 99, 209}: "Samsung Electronics Co.,Ltd",
+ [3]byte{148, 101, 45}: "OnePlus Technology (Shenzhen) Co., Ltd",
+ [3]byte{148, 101, 156}: "Intel Corporate",
+ [3]byte{148, 102, 231}: "WOM Engineering",
+ [3]byte{148, 112, 210}: "WINFIRM TECHNOLOGY",
+ [3]byte{148, 113, 172}: "TCT mobile ltd",
+ [3]byte{148, 117, 110}: "QinetiQ North America",
+ [3]byte{148, 118, 183}: "Samsung Electronics Co.,Ltd",
+ [3]byte{148, 119, 43}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{148, 123, 190}: "Ubicquia",
+ [3]byte{148, 123, 231}: "Samsung Electronics Co.,Ltd",
+ [3]byte{148, 124, 62}: "Polewall Norge AS",
+ [3]byte{148, 126, 185}: "National Narrowband Network Communications Pty Ltd",
+ [3]byte{148, 129, 164}: "Azuray Technologies",
+ [3]byte{148, 133, 122}: "Evantage Industries Corp",
+ [3]byte{148, 134, 205}: "SEOUL ELECTRONICS&TELECOM",
+ [3]byte{148, 134, 212}: "Surveillance Pro Corporation",
+ [3]byte{148, 135, 124}: "ARRIS Group, Inc.",
+ [3]byte{148, 136, 21}: "Infinique Worldwide Inc",
+ [3]byte{148, 136, 84}: "Texas Instruments",
+ [3]byte{148, 136, 94}: "Surfilter Network Technology Co., Ltd.",
+ [3]byte{148, 139, 3}: "EAGET Innovation and Technology Co., Ltd.",
+ [3]byte{148, 139, 193}: "Samsung Electronics Co.,Ltd",
+ [3]byte{148, 141, 80}: "Beamex Oy Ab",
+ [3]byte{148, 142, 137}: "INDUSTRIAS UNIDAS SA DE CV",
+ [3]byte{148, 143, 238}: "Verizon Telematics",
+ [3]byte{148, 146, 188}: "SYNTECH(HK) TECHNOLOGY LIMITED",
+ [3]byte{148, 148, 38}: "Apple, Inc.",
+ [3]byte{148, 149, 160}: "Google, Inc.",
+ [3]byte{148, 152, 162}: "Shanghai LISTEN TECH.LTD",
+ [3]byte{148, 153, 1}: "Shenzhen YITOA Digital Appliance CO.,LTD",
+ [3]byte{148, 154, 169}: "Microsoft Corporation",
+ [3]byte{148, 155, 253}: "Trans New Technology, Inc.",
+ [3]byte{148, 156, 85}: "Alta Data Technologies",
+ [3]byte{148, 159, 62}: "Sonos, Inc.",
+ [3]byte{148, 159, 63}: "Optek Digital Technology company limited",
+ [3]byte{148, 159, 180}: "ChengDu JiaFaAnTai Technology Co.,Ltd",
+ [3]byte{148, 160, 78}: "Bostex Technology Co., LTD",
+ [3]byte{148, 161, 162}: "AMPAK Technology, Inc.",
+ [3]byte{148, 167, 183}: "zte corporation",
+ [3]byte{148, 167, 188}: "BodyMedia, Inc.",
+ [3]byte{148, 170, 184}: "Joview(Beijing) Technology Co. Ltd.",
+ [3]byte{148, 171, 222}: "OMX Technology - FZE",
+ [3]byte{148, 172, 202}: "trivum technologies GmbH",
+ [3]byte{148, 174, 97}: "Alcatel Lucent",
+ [3]byte{148, 174, 227}: "Belden Hirschmann Industries (Suzhou) Ltd.",
+ [3]byte{148, 177, 10}: "Samsung Electronics Co.,Ltd",
+ [3]byte{148, 178, 204}: "PIONEER CORPORATION",
+ [3]byte{148, 180, 15}: "Aruba Networks",
+ [3]byte{148, 184, 25}: "Nokia",
+ [3]byte{148, 184, 197}: "RuggedCom Inc.",
+ [3]byte{148, 185, 180}: "Aptos Technology",
+ [3]byte{148, 186, 49}: "Visiontec da Amazônia Ltda.",
+ [3]byte{148, 186, 86}: "Shenzhen Coship Electronics Co., Ltd.",
+ [3]byte{148, 187, 174}: "Husqvarna AB",
+ [3]byte{148, 191, 30}: "eflow Inc. / Smart Device Planning and Development Division",
+ [3]byte{148, 191, 149}: "Shenzhen Coship Electronics Co., Ltd",
+ [3]byte{148, 192, 20}: "Sorter Sp. j. Konrad Grzeszczyk MichaA, Ziomek",
+ [3]byte{148, 192, 56}: "Tallac Networks",
+ [3]byte{148, 193, 80}: "2Wire Inc",
+ [3]byte{148, 195, 228}: "SCA Schucker Gmbh & Co KG",
+ [3]byte{148, 196, 233}: "PowerLayer Microsystems HongKong Limited",
+ [3]byte{148, 198, 145}: "EliteGroup Computer Systems Co., LTD",
+ [3]byte{148, 198, 235}: "NOVA electronics, Inc.",
+ [3]byte{148, 199, 175}: "Raylios Technology",
+ [3]byte{148, 201, 96}: "Zhongshan B&T technology.co.,ltd",
+ [3]byte{148, 201, 98}: "Teseq AG",
+ [3]byte{148, 202, 15}: "Honeywell Analytics",
+ [3]byte{148, 204, 185}: "ARRIS Group, Inc.",
+ [3]byte{148, 205, 172}: "Creowave Oy",
+ [3]byte{148, 206, 44}: "Sony Mobile Communications AB",
+ [3]byte{148, 206, 49}: "CTS Limited",
+ [3]byte{148, 208, 25}: "Cydle Corp.",
+ [3]byte{148, 208, 41}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{148, 212, 23}: "GPI KOREA INC.",
+ [3]byte{148, 212, 105}: "Cisco Systems, Inc",
+ [3]byte{148, 214, 14}: "shenzhen yunmao information technologies co., ltd",
+ [3]byte{148, 215, 35}: "Shanghai DareGlobal Technologies Co.,Ltd",
+ [3]byte{148, 215, 113}: "Samsung Electronics Co.,Ltd",
+ [3]byte{148, 216, 89}: "TCT mobile ltd",
+ [3]byte{148, 217, 60}: "ENELPS",
+ [3]byte{148, 217, 179}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{148, 219, 73}: "SITCORP",
+ [3]byte{148, 219, 201}: "AzureWave Technology Inc.",
+ [3]byte{148, 219, 218}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{148, 221, 63}: "A+V Link Technologies, Corp.",
+ [3]byte{148, 222, 14}: "SmartOptics AS",
+ [3]byte{148, 222, 128}: "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+ [3]byte{148, 223, 78}: "Wistron InfoComm(Kunshan)Co.,Ltd.",
+ [3]byte{148, 223, 88}: "IJ Electron CO.,Ltd.",
+ [3]byte{148, 224, 208}: "HealthStream Taiwan Inc.",
+ [3]byte{148, 226, 38}: "D. ORtiz Consulting, LLC",
+ [3]byte{148, 226, 253}: "Boge Kompressoren OTTO Boge GmbH & Co. KG",
+ [3]byte{148, 227, 109}: "Texas Instruments",
+ [3]byte{148, 231, 17}: "Xirka Dama Persada PT",
+ [3]byte{148, 232, 72}: "FYLDE MICRO LTD",
+ [3]byte{148, 232, 197}: "ARRIS Group, Inc.",
+ [3]byte{148, 233, 106}: "Apple, Inc.",
+ [3]byte{148, 233, 121}: "Liteon Technology Corporation",
+ [3]byte{148, 233, 140}: "Nokia",
+ [3]byte{148, 235, 44}: "Google, Inc.",
+ [3]byte{148, 235, 205}: "BlackBerry RTS",
+ [3]byte{148, 241, 40}: "Hewlett Packard Enterprise",
+ [3]byte{148, 241, 158}: "HUIZHOU MAORONG INTELLIGENT TECHNOLOGY CO.,LTD",
+ [3]byte{148, 242, 120}: "Elma Electronic",
+ [3]byte{148, 245, 81}: "Cadi Scientific Pte Ltd",
+ [3]byte{148, 246, 101}: "Ruckus Wireless",
+ [3]byte{148, 246, 146}: "Geminico co.,Ltd.",
+ [3]byte{148, 246, 163}: "Apple, Inc.",
+ [3]byte{148, 247, 32}: "Tianjin Deviser Electronics Instrument Co., Ltd",
+ [3]byte{148, 250, 232}: "Shenzhen Eycom Technology Co., Ltd",
+ [3]byte{148, 251, 41}: "Zebra Technologies Inc.",
+ [3]byte{148, 251, 178}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+ [3]byte{148, 253, 29}: "WhereWhen Corp",
+ [3]byte{148, 253, 46}: "Shanghai Uniscope Technologies Co.,Ltd",
+ [3]byte{148, 254, 34}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{148, 254, 244}: "Sagemcom Broadband SAS",
+ [3]byte{152, 0, 116}: "Raisecom Technology CO., LTD",
+ [3]byte{152, 0, 193}: "GuangZhou CREATOR Technology Co.,Ltd.(CHINA)",
+ [3]byte{152, 0, 198}: "Apple, Inc.",
+ [3]byte{152, 1, 167}: "Apple, Inc.",
+ [3]byte{152, 2, 132}: "Theobroma Systems GmbH",
+ [3]byte{152, 2, 216}: "IEEE Registration Authority",
+ [3]byte{152, 3, 160}: "ABB n.v. Power Quality Products",
+ [3]byte{152, 3, 216}: "Apple, Inc.",
+ [3]byte{152, 7, 45}: "Texas Instruments",
+ [3]byte{152, 12, 130}: "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+ [3]byte{152, 12, 165}: "Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.",
+ [3]byte{152, 13, 46}: "HTC Corporation",
+ [3]byte{152, 14, 228}: "Private",
+ [3]byte{152, 16, 148}: "Shenzhen Vsun communication technology Co.,ltd",
+ [3]byte{152, 16, 232}: "Apple, Inc.",
+ [3]byte{152, 19, 51}: "zte corporation",
+ [3]byte{152, 22, 236}: "IC Intracom",
+ [3]byte{152, 29, 250}: "Samsung Electronics Co.,Ltd",
+ [3]byte{152, 30, 15}: "Jeelan (Shanghai Jeelan Technology Information Inc",
+ [3]byte{152, 31, 177}: "Shenzhen Lemon Network Technology Co.,Ltd",
+ [3]byte{152, 32, 142}: "Definium Technologies",
+ [3]byte{152, 34, 239}: "Liteon Technology Corporation",
+ [3]byte{152, 35, 78}: "Micromedia AG",
+ [3]byte{152, 38, 42}: "Applied Research Associates, Inc",
+ [3]byte{152, 40, 166}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+ [3]byte{152, 41, 29}: "Jaguar de Mexico, SA de CV",
+ [3]byte{152, 41, 63}: "Fujian Start Computer Equipment Co.,Ltd",
+ [3]byte{152, 41, 166}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+ [3]byte{152, 44, 190}: "2Wire Inc",
+ [3]byte{152, 45, 86}: "Resolution Audio",
+ [3]byte{152, 45, 104}: "Samsung Electronics Co., Ltd",
+ [3]byte{152, 45, 186}: "Fibergate Inc.",
+ [3]byte{152, 47, 60}: "Sichuan Changhong Electric Ltd.",
+ [3]byte{152, 48, 0}: "Beijing KEMACOM Technologies Co., Ltd.",
+ [3]byte{152, 48, 113}: "DAIKYUNG VASCOM",
+ [3]byte{152, 52, 157}: "Krauss Maffei Technologies GmbH",
+ [3]byte{152, 53, 113}: "Sub10 Systems Ltd",
+ [3]byte{152, 53, 184}: "Assembled Products Corporation",
+ [3]byte{152, 55, 19}: "PT.Navicom Indonesia",
+ [3]byte{152, 57, 142}: "Samsung Electronics Co.,Ltd",
+ [3]byte{152, 59, 22}: "AMPAK Technology, Inc.",
+ [3]byte{152, 63, 159}: "China SSJ (Suzhou) Network Technology Inc.",
+ [3]byte{152, 64, 187}: "Dell Inc.",
+ [3]byte{152, 66, 70}: "SOL INDUSTRY PTE., LTD",
+ [3]byte{152, 67, 218}: "INTERTECH",
+ [3]byte{152, 71, 60}: "SHANGHAI SUNMON COMMUNICATION TECHNOGY CO.,LTD",
+ [3]byte{152, 74, 71}: "CHG Hospital Beds",
+ [3]byte{152, 75, 74}: "ARRIS Group, Inc.",
+ [3]byte{152, 75, 225}: "Hewlett Packard",
+ [3]byte{152, 76, 4}: "Zhangzhou Keneng Electrical Equipment Co Ltd",
+ [3]byte{152, 76, 211}: "Mantis Deposition",
+ [3]byte{152, 78, 151}: "Starlight Marketing (H. K.) Ltd.",
+ [3]byte{152, 79, 238}: "Intel Corporate",
+ [3]byte{152, 82, 177}: "Samsung Electronics Co.,Ltd",
+ [3]byte{152, 84, 27}: "Intel Corporate",
+ [3]byte{152, 87, 211}: "HON HAI-CCPBG PRECISION IND.CO.,LTD.",
+ [3]byte{152, 88, 138}: "SYSGRATION Ltd.",
+ [3]byte{152, 89, 69}: "Texas Instruments",
+ [3]byte{152, 90, 235}: "Apple, Inc.",
+ [3]byte{152, 91, 176}: "KMDATA INC.",
+ [3]byte{152, 92, 147}: "SBG Systems SAS",
+ [3]byte{152, 93, 70}: "PeopleNet Communication",
+ [3]byte{152, 93, 173}: "Texas Instruments",
+ [3]byte{152, 94, 27}: "ConversDigital Co., Ltd.",
+ [3]byte{152, 95, 211}: "Microsoft Corporation",
+ [3]byte{152, 96, 34}: "EMW Co., Ltd.",
+ [3]byte{152, 102, 234}: "Industrial Control Communications, Inc.",
+ [3]byte{152, 107, 61}: "ARRIS Group, Inc.",
+ [3]byte{152, 108, 92}: "Jiangxi Gosun Guard Security Co.,Ltd",
+ [3]byte{152, 108, 245}: "zte corporation",
+ [3]byte{152, 109, 53}: "IEEE Registration Authority",
+ [3]byte{152, 109, 200}: "TOSHIBA MITSUBISHI-ELECTRIC INDUSTRIAL SYSTEMS CORPORATION",
+ [3]byte{152, 111, 96}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{152, 112, 232}: "INNATECH SDN BHD",
+ [3]byte{152, 115, 196}: "Sage Electronic Engineering LLC",
+ [3]byte{152, 116, 61}: "Shenzhen Jun Kai Hengye Technology Co. Ltd",
+ [3]byte{152, 116, 218}: "Infinix mobility limited",
+ [3]byte{152, 118, 182}: "Adafruit",
+ [3]byte{152, 119, 112}: "Pep Digital Technology (Guangzhou) Co., Ltd",
+ [3]byte{152, 123, 243}: "Texas Instruments",
+ [3]byte{152, 126, 70}: "Emizon Networks Limited",
+ [3]byte{152, 130, 23}: "Disruptive Ltd",
+ [3]byte{152, 131, 137}: "Samsung Electronics Co.,Ltd",
+ [3]byte{152, 132, 227}: "Texas Instruments",
+ [3]byte{152, 134, 177}: "Flyaudio corporation (China)",
+ [3]byte{152, 135, 68}: "Wuxi Hongda Science and Technology Co.,LTD",
+ [3]byte{152, 137, 237}: "Anadem Information Inc.",
+ [3]byte{152, 139, 93}: "Sagemcom Broadband SAS",
+ [3]byte{152, 139, 173}: "Corintech Ltd.",
+ [3]byte{152, 142, 52}: "ZHEJIANG BOXSAM ELECTRONIC CO.,LTD",
+ [3]byte{152, 142, 74}: "NOXUS(BEIJING) TECHNOLOGY CO.,LTD",
+ [3]byte{152, 142, 221}: "TE Connectivity Limerick",
+ [3]byte{152, 144, 128}: "Linkpower Network System Inc Ltd.",
+ [3]byte{152, 144, 150}: "Dell Inc.",
+ [3]byte{152, 147, 204}: "LG ELECTRONICS INC",
+ [3]byte{152, 148, 73}: "Skyworth Wireless Technology Ltd.",
+ [3]byte{152, 151, 209}: "MitraStar Technology Corp.",
+ [3]byte{152, 156, 87}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{152, 158, 99}: "Apple, Inc.",
+ [3]byte{152, 164, 14}: "Snap, Inc.",
+ [3]byte{152, 167, 176}: "MCST ZAO",
+ [3]byte{152, 170, 60}: "Will i-tech Co., Ltd.",
+ [3]byte{152, 170, 215}: "BLUE WAVE NETWORKING CO LTD",
+ [3]byte{152, 170, 252}: "IEEE Registration Authority",
+ [3]byte{152, 176, 57}: "Nokia",
+ [3]byte{152, 182, 233}: "Nintendo Co.,Ltd",
+ [3]byte{152, 184, 227}: "Apple, Inc.",
+ [3]byte{152, 187, 30}: "BYD Precision Manufacture Company Ltd.",
+ [3]byte{152, 188, 87}: "SVA TECHNOLOGIES CO.LTD",
+ [3]byte{152, 188, 153}: "Edeltech Co.,Ltd.",
+ [3]byte{152, 190, 148}: "IBM",
+ [3]byte{152, 192, 235}: "Global Regency Ltd",
+ [3]byte{152, 197, 219}: "Ericsson AB",
+ [3]byte{152, 200, 69}: "PacketAccess",
+ [3]byte{152, 203, 39}: "Galore Networks Pvt. Ltd.",
+ [3]byte{152, 205, 180}: "Virident Systems, Inc.",
+ [3]byte{152, 207, 83}: "BBK EDUCATIONAL ELECTRONICS CORP.,LTD.",
+ [3]byte{152, 210, 147}: "Google, Inc.",
+ [3]byte{152, 211, 49}: "Shenzhen Bolutek Technology Co.,Ltd.",
+ [3]byte{152, 211, 210}: "MEKRA Lang GmbH & Co. KG",
+ [3]byte{152, 214, 134}: "Chyi Lee industry Co., ltd.",
+ [3]byte{152, 214, 187}: "Apple, Inc.",
+ [3]byte{152, 214, 247}: "LG Electronics (Mobile Communications)",
+ [3]byte{152, 216, 140}: "Nortel Networks",
+ [3]byte{152, 218, 146}: "Vuzix Corporation",
+ [3]byte{152, 220, 217}: "UNITEC Co., Ltd.",
+ [3]byte{152, 221, 234}: "Infinix mobility limited",
+ [3]byte{152, 222, 208}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{152, 224, 217}: "Apple, Inc.",
+ [3]byte{152, 225, 101}: "Accutome",
+ [3]byte{152, 228, 118}: "Zentan",
+ [3]byte{152, 231, 154}: "Foxconn(NanJing) Communication Co.,Ltd.",
+ [3]byte{152, 231, 244}: "Hewlett Packard",
+ [3]byte{152, 231, 245}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{152, 232, 72}: "Axiim",
+ [3]byte{152, 236, 101}: "Cosesy ApS",
+ [3]byte{152, 238, 203}: "Wistron Infocomm (Zhongshan) Corporation",
+ [3]byte{152, 239, 155}: "OHSUNG",
+ [3]byte{152, 240, 88}: "Lynxspring, Incl.",
+ [3]byte{152, 240, 171}: "Apple, Inc.",
+ [3]byte{152, 241, 112}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{152, 241, 153}: "NEC Platforms, Ltd.",
+ [3]byte{152, 242, 179}: "Hewlett Packard Enterprise",
+ [3]byte{152, 244, 40}: "zte corporation",
+ [3]byte{152, 245, 55}: "zte corporation",
+ [3]byte{152, 245, 169}: "OHSUNG",
+ [3]byte{152, 247, 215}: "ARRIS Group, Inc.",
+ [3]byte{152, 248, 193}: "IDT Technology Limited",
+ [3]byte{152, 248, 219}: "Marini Impianti Industriali s.r.l.",
+ [3]byte{152, 250, 227}: "Xiaomi Communications Co Ltd",
+ [3]byte{152, 251, 18}: "Grand Electronics (HK) Ltd",
+ [3]byte{152, 252, 17}: "Cisco-Linksys, LLC",
+ [3]byte{152, 253, 116}: "ACT.CO.LTD",
+ [3]byte{152, 253, 180}: "Primax Electronics Ltd.",
+ [3]byte{152, 254, 3}: "Ericsson - North America",
+ [3]byte{152, 254, 148}: "Apple, Inc.",
+ [3]byte{152, 255, 106}: "OTEC(Shanghai)Technology Co.,Ltd.",
+ [3]byte{152, 255, 208}: "Lenovo Mobile Communication Technology Ltd.",
+ [3]byte{156, 1, 17}: "Shenzhen Newabel Electronic Co., Ltd.",
+ [3]byte{156, 2, 152}: "Samsung Electronics Co.,Ltd",
+ [3]byte{156, 3, 158}: "Beijing Winchannel Software Technology Co., Ltd",
+ [3]byte{156, 4, 115}: "Tecmobile (International) Ltd.",
+ [3]byte{156, 4, 235}: "Apple, Inc.",
+ [3]byte{156, 6, 27}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{156, 6, 110}: "Hytera Communications Corporation Limited",
+ [3]byte{156, 13, 172}: "Tymphany HK Limited",
+ [3]byte{156, 14, 74}: "Shenzhen Vastking Electronic Co.,Ltd.",
+ [3]byte{156, 19, 171}: "Chanson Water Co., Ltd.",
+ [3]byte{156, 20, 101}: "Edata Elektronik San. ve Tic. A.Ş.",
+ [3]byte{156, 24, 116}: "Nokia Danmark A/S",
+ [3]byte{156, 28, 18}: "Aruba Networks",
+ [3]byte{156, 29, 88}: "Texas Instruments",
+ [3]byte{156, 30, 149}: "Actiontec Electronics, Inc",
+ [3]byte{156, 31, 221}: "Accupix Inc.",
+ [3]byte{156, 32, 123}: "Apple, Inc.",
+ [3]byte{156, 33, 106}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{156, 34, 14}: "TASCAN Systems GmbH",
+ [3]byte{156, 40, 64}: "Discovery Technology,LTD..",
+ [3]byte{156, 40, 191}: "Continental Automotive Czech Republic s.r.o.",
+ [3]byte{156, 40, 239}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{156, 41, 63}: "Apple, Inc.",
+ [3]byte{156, 42, 112}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{156, 42, 131}: "Samsung Electronics Co.,Ltd",
+ [3]byte{156, 48, 91}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{156, 48, 102}: "RWE Effizienz GmbH",
+ [3]byte{156, 49, 120}: "Foshan Huadian Intelligent Communications Teachnologies Co.,Ltd",
+ [3]byte{156, 49, 182}: "Kulite Semiconductor Products Inc",
+ [3]byte{156, 50, 169}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+ [3]byte{156, 52, 38}: "ARRIS Group, Inc.",
+ [3]byte{156, 53, 131}: "Nipro Diagnostics, Inc",
+ [3]byte{156, 53, 235}: "Apple, Inc.",
+ [3]byte{156, 55, 244}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{156, 58, 175}: "Samsung Electronics Co.,Ltd",
+ [3]byte{156, 61, 207}: "NETGEAR",
+ [3]byte{156, 62, 170}: "EnvyLogic Co.,Ltd.",
+ [3]byte{156, 65, 124}: "Hame Technology Co., Limited",
+ [3]byte{156, 68, 61}: "CHENGDU XUGUANG TECHNOLOGY CO, LTD",
+ [3]byte{156, 68, 166}: "SwiftTest, Inc.",
+ [3]byte{156, 69, 99}: "DIMEP Sistemas",
+ [3]byte{156, 74, 123}: "Nokia Corporation",
+ [3]byte{156, 76, 174}: "Mesa Labs",
+ [3]byte{156, 78, 32}: "Cisco Systems, Inc",
+ [3]byte{156, 78, 54}: "Intel Corporate",
+ [3]byte{156, 78, 142}: "ALT Systems Ltd",
+ [3]byte{156, 78, 191}: "BoxCast",
+ [3]byte{156, 79, 207}: "TCT mobile ltd",
+ [3]byte{156, 79, 218}: "Apple, Inc.",
+ [3]byte{156, 80, 238}: "Cambridge Industries(Group) Co.,Ltd.",
+ [3]byte{156, 82, 248}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{156, 83, 205}: "ENGICAM s.r.l.",
+ [3]byte{156, 84, 28}: "Shenzhen My-power Technology Co.,Ltd",
+ [3]byte{156, 84, 202}: "Zhengzhou VCOM Science and Technology Co.,Ltd",
+ [3]byte{156, 85, 180}: "I.S.E. S.r.l.",
+ [3]byte{156, 87, 17}: "Feitian Xunda(Beijing) Aeronautical Information Technology Co., Ltd.",
+ [3]byte{156, 87, 173}: "Cisco Systems, Inc",
+ [3]byte{156, 91, 150}: "NMR Corporation",
+ [3]byte{156, 92, 141}: "FIREMAX INDÚSTRIA E COMÉRCIO DE PRODUTOS ELETRÔNICOS LTDA",
+ [3]byte{156, 92, 142}: "ASUSTek COMPUTER INC.",
+ [3]byte{156, 92, 249}: "Sony Mobile Communications AB",
+ [3]byte{156, 93, 18}: "Aerohive Networks Inc.",
+ [3]byte{156, 93, 149}: "VTC Electronics Corp.",
+ [3]byte{156, 94, 115}: "Calibre UK LTD",
+ [3]byte{156, 97, 29}: "Omni-ID USA, Inc.",
+ [3]byte{156, 97, 33}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+ [3]byte{156, 98, 171}: "Sumavision Technologies Co.,Ltd",
+ [3]byte{156, 99, 237}: "zte corporation",
+ [3]byte{156, 100, 94}: "Harman Consumer Group",
+ [3]byte{156, 101, 176}: "Samsung Electronics Co.,Ltd",
+ [3]byte{156, 101, 238}: "DASAN Network Solutions",
+ [3]byte{156, 101, 249}: "AcSiP Technology Corp.",
+ [3]byte{156, 102, 80}: "Glodio Technolies Co.,Ltd Tianjin Branch",
+ [3]byte{156, 104, 91}: "Octonion SA",
+ [3]byte{156, 106, 190}: "QEES ApS.",
+ [3]byte{156, 108, 21}: "Microsoft Corporation",
+ [3]byte{156, 111, 82}: "zte corporation",
+ [3]byte{156, 116, 26}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{156, 117, 20}: "Wildix srl",
+ [3]byte{156, 119, 170}: "NADASNV",
+ [3]byte{156, 121, 172}: "Suntec Software(Shanghai) Co., Ltd.",
+ [3]byte{156, 122, 3}: "Ciena Corporation",
+ [3]byte{156, 123, 210}: "NEOLAB Convergence",
+ [3]byte{156, 125, 163}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{156, 128, 125}: "SYSCABLE Korea Inc.",
+ [3]byte{156, 128, 223}: "Arcadyan Technology Corporation",
+ [3]byte{156, 131, 191}: "PRO-VISION, Inc.",
+ [3]byte{156, 132, 191}: "Apple, Inc.",
+ [3]byte{156, 134, 218}: "Phoenix Geophysics Ltd.",
+ [3]byte{156, 136, 136}: "Simac Techniek NV",
+ [3]byte{156, 136, 173}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{156, 139, 160}: "Apple, Inc.",
+ [3]byte{156, 139, 241}: "The Warehouse Limited",
+ [3]byte{156, 140, 110}: "Samsung Electronics Co.,Ltd",
+ [3]byte{156, 141, 26}: "INTEG process group inc",
+ [3]byte{156, 141, 124}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{156, 141, 211}: "Leonton Technologies",
+ [3]byte{156, 142, 153}: "Hewlett Packard",
+ [3]byte{156, 142, 205}: "Amcrest Technologies",
+ [3]byte{156, 142, 220}: "Teracom Limited",
+ [3]byte{156, 147, 78}: "Xerox Corporation",
+ [3]byte{156, 147, 228}: "Private",
+ [3]byte{156, 149, 248}: "SmartDoor Systems, LLC",
+ [3]byte{156, 151, 38}: "Technicolor",
+ [3]byte{156, 152, 17}: "Guangzhou Sunrise Electronics Development Co., Ltd",
+ [3]byte{156, 153, 160}: "Xiaomi Communications Co Ltd",
+ [3]byte{156, 156, 29}: "Starkey Labs Inc.",
+ [3]byte{156, 156, 64}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+ [3]byte{156, 157, 93}: "Raden Inc",
+ [3]byte{156, 161, 10}: "SCLE SFE",
+ [3]byte{156, 161, 52}: "Nike, Inc.",
+ [3]byte{156, 163, 169}: "Guangzhou Juan Optical and Electronical Tech Joint Stock Co., Ltd",
+ [3]byte{156, 163, 186}: "SAKURA Internet Inc.",
+ [3]byte{156, 165, 119}: "Osorno Enterprises Inc.",
+ [3]byte{156, 165, 192}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{156, 166, 157}: "Whaley Technology Co.Ltd",
+ [3]byte{156, 169, 228}: "zte corporation",
+ [3]byte{156, 172, 109}: "Universal Electronics, Inc.",
+ [3]byte{156, 173, 151}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{156, 173, 239}: "Obihai Technology, Inc.",
+ [3]byte{156, 174, 211}: "Seiko Epson Corporation",
+ [3]byte{156, 175, 111}: "ITEL MOBILE LIMITED",
+ [3]byte{156, 175, 202}: "Cisco Systems, Inc",
+ [3]byte{156, 176, 8}: "Ubiquitous Computing Technology Corporation",
+ [3]byte{156, 178, 6}: "PROCENTEC",
+ [3]byte{156, 178, 178}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{156, 182, 84}: "Hewlett Packard",
+ [3]byte{156, 182, 208}: "Rivet Networks",
+ [3]byte{156, 183, 13}: "Liteon Technology Corporation",
+ [3]byte{156, 183, 147}: "Creatcomm Technology Inc.",
+ [3]byte{156, 187, 152}: "Shen Zhen RND Electronic Co.,LTD",
+ [3]byte{156, 189, 157}: "SkyDisk, Inc.",
+ [3]byte{156, 190, 224}: "Biosoundlab Co., Ltd.",
+ [3]byte{156, 192, 119}: "PrintCounts, LLC",
+ [3]byte{156, 192, 210}: "Conductix-Wampfler GmbH",
+ [3]byte{156, 193, 114}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{156, 199, 166}: "AVM GmbH",
+ [3]byte{156, 199, 209}: "SHARP Corporation",
+ [3]byte{156, 200, 174}: "Becton, Dickinson and Company",
+ [3]byte{156, 202, 217}: "Nokia Corporation",
+ [3]byte{156, 204, 131}: "Juniper Networks",
+ [3]byte{156, 205, 130}: "CHENG UEI PRECISION INDUSTRY CO.,LTD",
+ [3]byte{156, 210, 30}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{156, 210, 75}: "zte corporation",
+ [3]byte{156, 211, 50}: "PLC Technology Ltd",
+ [3]byte{156, 211, 91}: "Samsung Electronics Co.,Ltd",
+ [3]byte{156, 211, 109}: "NETGEAR",
+ [3]byte{156, 212, 139}: "Innolux Technology Europe BV",
+ [3]byte{156, 214, 67}: "D-Link International",
+ [3]byte{156, 217, 23}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{156, 217, 203}: "Lesira Manufacturing Pty Ltd",
+ [3]byte{156, 218, 62}: "Intel Corporate",
+ [3]byte{156, 220, 113}: "Hewlett Packard Enterprise",
+ [3]byte{156, 221, 31}: "Intelligent Steward Co.,Ltd",
+ [3]byte{156, 223, 3}: "Harman/Becker Automotive Systems GmbH",
+ [3]byte{156, 223, 177}: "Shenzhen Crave Communication Co., LTD",
+ [3]byte{156, 224, 99}: "Samsung Electronics Co.,Ltd",
+ [3]byte{156, 225, 14}: "NCTech Ltd",
+ [3]byte{156, 225, 214}: "Junger Audio-Studiotechnik GmbH",
+ [3]byte{156, 226, 48}: "JULONG CO,.LTD.",
+ [3]byte{156, 227, 63}: "Apple, Inc.",
+ [3]byte{156, 227, 116}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{156, 230, 53}: "Nintendo Co., Ltd.",
+ [3]byte{156, 230, 231}: "Samsung Electronics Co.,Ltd",
+ [3]byte{156, 231, 189}: "Winduskorea co., Ltd",
+ [3]byte{156, 233, 81}: "Shenzhen Sang Fei Consumer Communications Ltd., Co.",
+ [3]byte{156, 235, 232}: "BizLink (Kunshan) Co.,Ltd",
+ [3]byte{156, 239, 213}: "Panda Wireless, Inc.",
+ [3]byte{156, 243, 135}: "Apple, Inc.",
+ [3]byte{156, 244, 142}: "Apple, Inc.",
+ [3]byte{156, 246, 26}: "UTC Fire and Security",
+ [3]byte{156, 246, 125}: "Ricardo Prague, s.r.o.",
+ [3]byte{156, 248, 219}: "shenzhen eyunmei technology co,.ltd",
+ [3]byte{156, 249, 56}: "AREVA NP GmbH",
+ [3]byte{156, 251, 213}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{156, 251, 241}: "MESOMATIC GmbH & Co.KG",
+ [3]byte{156, 252, 1}: "Apple, Inc.",
+ [3]byte{156, 252, 209}: "Aetheris Technology (Shanghai) Co., Ltd.",
+ [3]byte{156, 255, 190}: "OTSL Inc.",
+ [3]byte{160, 2, 220}: "Amazon Technologies Inc.",
+ [3]byte{160, 3, 99}: "Robert Bosch Healthcare GmbH",
+ [3]byte{160, 4, 62}: "Parker Hannifin Manufacturing Germany GmbH & Co. KG",
+ [3]byte{160, 4, 96}: "NETGEAR",
+ [3]byte{160, 6, 39}: "NEXPA System",
+ [3]byte{160, 7, 152}: "Samsung Electronics Co.,Ltd",
+ [3]byte{160, 7, 182}: "Advanced Technical Support, Inc.",
+ [3]byte{160, 8, 111}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{160, 9, 76}: "CenturyLink",
+ [3]byte{160, 9, 237}: "Avaya Inc",
+ [3]byte{160, 10, 191}: "Wieson Technologies Co., Ltd.",
+ [3]byte{160, 11, 186}: "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+ [3]byte{160, 12, 161}: "SKTB SKiT",
+ [3]byte{160, 16, 129}: "Samsung Electronics Co.,Ltd",
+ [3]byte{160, 18, 144}: "Avaya Inc",
+ [3]byte{160, 18, 219}: "TABUCHI ELECTRIC CO.,LTD",
+ [3]byte{160, 19, 59}: "HiTi Digital, Inc.",
+ [3]byte{160, 19, 203}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{160, 20, 61}: "PARROT SA",
+ [3]byte{160, 22, 92}: "Triteka LTD",
+ [3]byte{160, 24, 40}: "Apple, Inc.",
+ [3]byte{160, 24, 89}: "Shenzhen Yidashi Electronics Co Ltd",
+ [3]byte{160, 25, 23}: "Bertel S.p.a.",
+ [3]byte{160, 27, 41}: "Sagemcom Broadband SAS",
+ [3]byte{160, 28, 5}: "NIMAX TELECOM CO.,LTD.",
+ [3]byte{160, 29, 72}: "Hewlett Packard",
+ [3]byte{160, 30, 11}: "MINIX Technology Limited",
+ [3]byte{160, 32, 166}: "Espressif Inc.",
+ [3]byte{160, 33, 149}: "Samsung Electronics Co.,Ltd",
+ [3]byte{160, 33, 183}: "NETGEAR",
+ [3]byte{160, 35, 27}: "TeleComp R&D Corp.",
+ [3]byte{160, 35, 159}: "Cisco Systems, Inc",
+ [3]byte{160, 43, 184}: "Hewlett Packard",
+ [3]byte{160, 44, 54}: "FN-LINK TECHNOLOGY LIMITED",
+ [3]byte{160, 46, 243}: "United Integrated Services Co., Led.",
+ [3]byte{160, 50, 153}: "Lenovo (Beijing) Co., Ltd.",
+ [3]byte{160, 52, 27}: "TrackR, Inc",
+ [3]byte{160, 54, 159}: "Intel Corporate",
+ [3]byte{160, 54, 240}: "Comprehensive Power",
+ [3]byte{160, 54, 250}: "Ettus Research LLC",
+ [3]byte{160, 57, 247}: "LG Electronics (Mobile Communications)",
+ [3]byte{160, 58, 117}: "PSS Belgium N.V.",
+ [3]byte{160, 59, 27}: "Inspire Tech",
+ [3]byte{160, 59, 227}: "Apple, Inc.",
+ [3]byte{160, 61, 111}: "Cisco Systems, Inc",
+ [3]byte{160, 62, 107}: "IEEE Registration Authority",
+ [3]byte{160, 64, 37}: "Actioncable, Inc.",
+ [3]byte{160, 64, 65}: "SAMWONFA Co.,Ltd.",
+ [3]byte{160, 64, 160}: "NETGEAR",
+ [3]byte{160, 65, 94}: "Opsens Solution Inc.",
+ [3]byte{160, 65, 167}: "NL Ministry of Defense",
+ [3]byte{160, 66, 63}: "Tyan Computer Corp",
+ [3]byte{160, 67, 219}: "Sitael S.p.A.",
+ [3]byte{160, 72, 28}: "Hewlett Packard",
+ [3]byte{160, 76, 91}: "Shenzhen TINNO Mobile Technology Corp.",
+ [3]byte{160, 76, 193}: "Helixtech Corp.",
+ [3]byte{160, 78, 1}: "CENTRAL ENGINEERING co.,ltd.",
+ [3]byte{160, 78, 4}: "Nokia Corporation",
+ [3]byte{160, 78, 167}: "Apple, Inc.",
+ [3]byte{160, 79, 212}: "ADB Broadband Italia",
+ [3]byte{160, 81, 198}: "Avaya Inc",
+ [3]byte{160, 85, 79}: "Cisco Systems, Inc",
+ [3]byte{160, 85, 222}: "ARRIS Group, Inc.",
+ [3]byte{160, 86, 178}: "Harman/Becker Automotive Systems GmbH",
+ [3]byte{160, 89, 58}: "V.D.S. Video Display Systems srl",
+ [3]byte{160, 90, 164}: "Grand Products Nevada, Inc.",
+ [3]byte{160, 91, 33}: "ENVINET GmbH",
+ [3]byte{160, 93, 193}: "TMCT Co., LTD.",
+ [3]byte{160, 93, 231}: "DIRECTV, Inc.",
+ [3]byte{160, 94, 107}: "MELPER Co., Ltd.",
+ [3]byte{160, 96, 144}: "Samsung Electronics Co.,Ltd",
+ [3]byte{160, 99, 145}: "NETGEAR",
+ [3]byte{160, 100, 143}: "ASKEY COMPUTER CORP",
+ [3]byte{160, 101, 24}: "VNPT TECHNOLOGY",
+ [3]byte{160, 103, 190}: "Sicon srl",
+ [3]byte{160, 105, 134}: "Wellav Technologies Ltd",
+ [3]byte{160, 106, 0}: "Verilink Corporation",
+ [3]byte{160, 106, 68}: "Vizio, Inc",
+ [3]byte{160, 108, 236}: "RIM",
+ [3]byte{160, 109, 9}: "Intelcan Technosystems Inc.",
+ [3]byte{160, 110, 80}: "Nanotek Elektronik Sistemler Ltd. Sti.",
+ [3]byte{160, 111, 170}: "LG Innotek",
+ [3]byte{160, 112, 153}: "Beijing Huacan Electronics Co., Ltd",
+ [3]byte{160, 113, 169}: "Nokia Corporation",
+ [3]byte{160, 114, 44}: "HUMAX Co., Ltd.",
+ [3]byte{160, 114, 228}: "NJ SYSTEM CO.,LTD",
+ [3]byte{160, 115, 50}: "Cashmaster International Limited",
+ [3]byte{160, 115, 252}: "Rancore Technologies Private Limited",
+ [3]byte{160, 117, 145}: "Samsung Electronics Co.,Ltd",
+ [3]byte{160, 119, 113}: "Vialis BV",
+ [3]byte{160, 120, 186}: "Pantech Co., Ltd.",
+ [3]byte{160, 130, 31}: "Samsung Electronics Co.,Ltd",
+ [3]byte{160, 130, 172}: "Linear DMS Solutions Sdn. Bhd.",
+ [3]byte{160, 130, 199}: "P.T.I Co.,LTD",
+ [3]byte{160, 132, 203}: "SonicSensory,Inc.",
+ [3]byte{160, 134, 29}: "Chengdu Fuhuaxin Technology co.,Ltd",
+ [3]byte{160, 134, 198}: "Xiaomi Communications Co Ltd",
+ [3]byte{160, 134, 236}: "SAEHAN HITEC Co., Ltd",
+ [3]byte{160, 136, 105}: "Intel Corporate",
+ [3]byte{160, 136, 180}: "Intel Corporate",
+ [3]byte{160, 137, 228}: "Skyworth Digital Technology(Shenzhen) Co.,Ltd",
+ [3]byte{160, 138, 135}: "HuiZhou KaiYue Electronic Co.,Ltd",
+ [3]byte{160, 140, 21}: "Gerhard D. Wempe KG",
+ [3]byte{160, 140, 155}: "Xtreme Technologies Corp",
+ [3]byte{160, 140, 248}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{160, 140, 253}: "Hewlett Packard",
+ [3]byte{160, 141, 22}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{160, 142, 120}: "Sagemcom Broadband SAS",
+ [3]byte{160, 144, 222}: "VEEDIMS,LLC",
+ [3]byte{160, 145, 105}: "LG Electronics (Mobile Communications)",
+ [3]byte{160, 145, 200}: "zte corporation",
+ [3]byte{160, 147, 71}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{160, 149, 12}: "China Mobile IOTCompany Limited",
+ [3]byte{160, 152, 5}: "OpenVox Communication Co Ltd",
+ [3]byte{160, 152, 237}: "Shandong Intelligent Optical Communication Development Co., Ltd.",
+ [3]byte{160, 153, 155}: "Apple, Inc.",
+ [3]byte{160, 154, 90}: "Time Domain",
+ [3]byte{160, 155, 189}: "Total Aviation Solutions Pty Ltd",
+ [3]byte{160, 157, 134}: "Alcatel-Lucent Shanghai Bell Co., Ltd",
+ [3]byte{160, 157, 145}: "SoundBridge",
+ [3]byte{160, 157, 193}: "China Dragon Technology Limited",
+ [3]byte{160, 158, 26}: "Polar Electro Oy",
+ [3]byte{160, 161, 48}: "DLI Taiwan Branch office",
+ [3]byte{160, 162, 60}: "GPMS",
+ [3]byte{160, 163, 59}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{160, 163, 226}: "Actiontec Electronics, Inc",
+ [3]byte{160, 166, 92}: "Supercomputing Systems AG",
+ [3]byte{160, 167, 99}: "Polytron Vertrieb GmbH",
+ [3]byte{160, 168, 205}: "Intel Corporate",
+ [3]byte{160, 170, 253}: "EraThink Technologies Corp.",
+ [3]byte{160, 171, 27}: "D-Link International",
+ [3]byte{160, 173, 161}: "JMR Electronics, Inc",
+ [3]byte{160, 175, 189}: "Intel Corporate",
+ [3]byte{160, 177, 0}: "ShenZhen Cando Electronics Co.,Ltd",
+ [3]byte{160, 179, 204}: "Hewlett Packard",
+ [3]byte{160, 180, 55}: "GD Mission Systems",
+ [3]byte{160, 180, 165}: "Samsung Electronics Co.,Ltd",
+ [3]byte{160, 181, 218}: "HongKong THTF Co., Ltd",
+ [3]byte{160, 182, 98}: "Acutvista Innovation Co., Ltd.",
+ [3]byte{160, 184, 248}: "Amgen U.S.A. Inc.",
+ [3]byte{160, 185, 237}: "Skytap",
+ [3]byte{160, 186, 184}: "Pixon Imaging",
+ [3]byte{160, 187, 62}: "IEEE Registration Authority",
+ [3]byte{160, 189, 205}: "BSkyB Ltd",
+ [3]byte{160, 191, 80}: "S.C. ADD-PRODUCTION S.R.L.",
+ [3]byte{160, 191, 165}: "CORESYS",
+ [3]byte{160, 194, 222}: "Costar Video Systems",
+ [3]byte{160, 195, 222}: "Triton Electronic Systems Ltd.",
+ [3]byte{160, 196, 165}: "SYGN HOUSE CO.,LTD",
+ [3]byte{160, 197, 98}: "ARRIS Group, Inc.",
+ [3]byte{160, 197, 137}: "Intel Corporate",
+ [3]byte{160, 197, 242}: "IEEE Registration Authority",
+ [3]byte{160, 198, 236}: "ShenZhen ANYK Technology Co.,LTD",
+ [3]byte{160, 201, 160}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{160, 203, 253}: "Samsung Electronics Co.,Ltd",
+ [3]byte{160, 204, 43}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{160, 206, 200}: "CE LINK LIMITED",
+ [3]byte{160, 207, 91}: "Cisco Systems, Inc",
+ [3]byte{160, 209, 42}: "AXPRO Technology Inc.",
+ [3]byte{160, 211, 122}: "Intel Corporate",
+ [3]byte{160, 211, 133}: "AUMA Riester GmbH & Co. KG",
+ [3]byte{160, 211, 193}: "Hewlett Packard",
+ [3]byte{160, 215, 149}: "Apple, Inc.",
+ [3]byte{160, 216, 111}: "Private",
+ [3]byte{160, 218, 146}: "Nanjing Glarun Atten Technology Co. Ltd.",
+ [3]byte{160, 220, 4}: "Becker-Antriebe GmbH",
+ [3]byte{160, 221, 151}: "PolarLink Technologies, Ltd",
+ [3]byte{160, 221, 229}: "SHARP Corporation",
+ [3]byte{160, 222, 5}: "JSC Irbis-T",
+ [3]byte{160, 224, 175}: "Cisco Systems, Inc",
+ [3]byte{160, 226, 1}: "AVTrace Ltd.(China)",
+ [3]byte{160, 226, 90}: "Amicus SK, s.r.o.",
+ [3]byte{160, 226, 149}: "DAT System Co.,Ltd",
+ [3]byte{160, 228, 83}: "Sony Mobile Communications AB",
+ [3]byte{160, 228, 203}: "Zyxel Communications Corporation",
+ [3]byte{160, 229, 52}: "Stratec Biomedical AG",
+ [3]byte{160, 229, 233}: "enimai Inc",
+ [3]byte{160, 230, 248}: "Texas Instruments",
+ [3]byte{160, 233, 219}: "Ningbo FreeWings Technologies Co.,Ltd",
+ [3]byte{160, 235, 118}: "AirCUVE Inc.",
+ [3]byte{160, 236, 128}: "zte corporation",
+ [3]byte{160, 236, 249}: "Cisco Systems, Inc",
+ [3]byte{160, 237, 205}: "Apple, Inc.",
+ [3]byte{160, 239, 132}: "Seine Image Int'l Co., Ltd",
+ [3]byte{160, 242, 23}: "GE Medical System(China) Co., Ltd.",
+ [3]byte{160, 243, 193}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{160, 243, 228}: "Alcatel-Lucent IPD",
+ [3]byte{160, 244, 25}: "Nokia Corporation",
+ [3]byte{160, 244, 80}: "HTC Corporation",
+ [3]byte{160, 244, 89}: "FN-LINK TECHNOLOGY LIMITED",
+ [3]byte{160, 244, 121}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{160, 246, 253}: "Texas Instruments",
+ [3]byte{160, 248, 73}: "Cisco Systems, Inc",
+ [3]byte{160, 248, 149}: "Shenzhen TINNO Mobile Technology Corp.",
+ [3]byte{160, 249, 224}: "VIVATEL COMPANY LIMITED",
+ [3]byte{160, 252, 110}: "Telegrafia a.s.",
+ [3]byte{160, 254, 97}: "Vivint Wireless Inc.",
+ [3]byte{160, 254, 145}: "AVAT Automation GmbH",
+ [3]byte{164, 1, 48}: "ABIsystems Co., LTD",
+ [3]byte{164, 2, 185}: "Intel Corporate",
+ [3]byte{164, 4, 80}: "nFore Technology Inc.",
+ [3]byte{164, 5, 158}: "STA Infinity LLP",
+ [3]byte{164, 7, 182}: "Samsung Electronics Co.,Ltd",
+ [3]byte{164, 8, 234}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{164, 8, 245}: "Sagemcom Broadband SAS",
+ [3]byte{164, 9, 203}: "Alfred Kaercher GmbH &amp; Co KG",
+ [3]byte{164, 11, 237}: "Carry Technology Co.,Ltd",
+ [3]byte{164, 12, 195}: "Cisco Systems, Inc",
+ [3]byte{164, 13, 188}: "Xiamen Intretech Inc.",
+ [3]byte{164, 14, 43}: "Facebook Inc",
+ [3]byte{164, 17, 21}: "Robert Bosch Engineering and Business Solutions pvt. Ltd.",
+ [3]byte{164, 17, 99}: "IEEE Registration Authority",
+ [3]byte{164, 18, 66}: "NEC Platforms, Ltd.",
+ [3]byte{164, 19, 78}: "Luxul",
+ [3]byte{164, 20, 55}: "Hangzhou Hikvision Digital Technology Co.,Ltd.",
+ [3]byte{164, 21, 102}: "Weifang GoerTek Technology Co.,Ltd.",
+ [3]byte{164, 21, 136}: "ARRIS Group, Inc.",
+ [3]byte{164, 23, 49}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{164, 24, 117}: "Cisco Systems, Inc",
+ [3]byte{164, 27, 192}: "Fastec Imaging Corporation",
+ [3]byte{164, 31, 114}: "Dell Inc.",
+ [3]byte{164, 33, 138}: "Nortel Networks",
+ [3]byte{164, 35, 5}: "Open Networking Laboratory",
+ [3]byte{164, 36, 179}: "FlatFrog Laboratories AB",
+ [3]byte{164, 36, 221}: "Cambrionix Ltd",
+ [3]byte{164, 37, 27}: "Avaya Inc",
+ [3]byte{164, 41, 64}: "Shenzhen YOUHUA Technology Co., Ltd",
+ [3]byte{164, 41, 131}: "Boeing Defence Australia",
+ [3]byte{164, 41, 183}: "bluesky",
+ [3]byte{164, 43, 140}: "NETGEAR",
+ [3]byte{164, 43, 176}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{164, 44, 8}: "Masterwork Automodules",
+ [3]byte{164, 49, 17}: "ZIV",
+ [3]byte{164, 49, 53}: "Apple, Inc.",
+ [3]byte{164, 51, 209}: "Fibrlink Communications Co.,Ltd.",
+ [3]byte{164, 52, 18}: "Thales Alenia Space",
+ [3]byte{164, 52, 217}: "Intel Corporate",
+ [3]byte{164, 52, 241}: "Texas Instruments",
+ [3]byte{164, 56, 49}: "RF elements s.r.o.",
+ [3]byte{164, 56, 252}: "Plastic Logic",
+ [3]byte{164, 58, 105}: "Vers Inc",
+ [3]byte{164, 59, 250}: "IEEE Registration Authority",
+ [3]byte{164, 61, 120}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{164, 62, 81}: "ANOV FRANCE",
+ [3]byte{164, 68, 209}: "Wingtech Group (HongKong)Limited",
+ [3]byte{164, 70, 107}: "EOC Technology",
+ [3]byte{164, 70, 250}: "AmTRAN Video Corporation",
+ [3]byte{164, 74, 211}: "ST Electronics(Shanghai) Co.,Ltd",
+ [3]byte{164, 75, 21}: "Sun Cupid Technology (HK) LTD",
+ [3]byte{164, 76, 17}: "Cisco Systems, Inc",
+ [3]byte{164, 76, 200}: "Dell Inc.",
+ [3]byte{164, 78, 45}: "Adaptive Wireless Solutions, LLC",
+ [3]byte{164, 78, 49}: "Intel Corporate",
+ [3]byte{164, 79, 41}: "IEEE Registration Authority",
+ [3]byte{164, 80, 85}: "busware.de",
+ [3]byte{164, 81, 111}: "Microsoft Mobile Oy",
+ [3]byte{164, 82, 111}: "ADB Broadband Italia",
+ [3]byte{164, 83, 133}: "Weifang GoerTek Technology Co.,Ltd.",
+ [3]byte{164, 86, 2}: "fenglian Technology Co.,Ltd.",
+ [3]byte{164, 86, 27}: "MCOT Corporation",
+ [3]byte{164, 86, 48}: "Cisco Systems, Inc",
+ [3]byte{164, 88, 15}: "IEEE Registration Authority",
+ [3]byte{164, 90, 28}: "smart-electronic GmbH",
+ [3]byte{164, 92, 39}: "Nintendo Co., Ltd.",
+ [3]byte{164, 93, 54}: "Hewlett Packard",
+ [3]byte{164, 93, 161}: "ADB Broadband Italia",
+ [3]byte{164, 94, 96}: "Apple, Inc.",
+ [3]byte{164, 96, 17}: "Verifone",
+ [3]byte{164, 96, 50}: "MRV Communications (Networks) LTD",
+ [3]byte{164, 98, 223}: "DS Global. Co., LTD",
+ [3]byte{164, 103, 6}: "Apple, Inc.",
+ [3]byte{164, 104, 188}: "Private",
+ [3]byte{164, 108, 42}: "Cisco Systems, Inc",
+ [3]byte{164, 108, 193}: "LTi REEnergy GmbH",
+ [3]byte{164, 110, 121}: "DFT System Co.Ltd",
+ [3]byte{164, 112, 214}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{164, 113, 116}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{164, 119, 51}: "Google, Inc.",
+ [3]byte{164, 119, 88}: "Ningbo Freewings Technologies Co.,Ltd",
+ [3]byte{164, 119, 96}: "Nokia Corporation",
+ [3]byte{164, 120, 134}: "Avaya Inc",
+ [3]byte{164, 121, 228}: "KLINFO Corp",
+ [3]byte{164, 122, 164}: "ARRIS Group, Inc.",
+ [3]byte{164, 122, 207}: "VIBICOM COMMUNICATIONS INC.",
+ [3]byte{164, 123, 44}: "Nokia",
+ [3]byte{164, 123, 133}: "ULTIMEDIA Co Ltd,",
+ [3]byte{164, 123, 157}: "Espressif Inc.",
+ [3]byte{164, 124, 20}: "ChargeStorm AB",
+ [3]byte{164, 124, 31}: "Cobham plc",
+ [3]byte{164, 126, 57}: "zte corporation",
+ [3]byte{164, 129, 238}: "Nokia Corporation",
+ [3]byte{164, 130, 105}: "Datrium, Inc.",
+ [3]byte{164, 132, 49}: "Samsung Electronics Co.,Ltd",
+ [3]byte{164, 133, 107}: "Q Electronics Ltd",
+ [3]byte{164, 134, 174}: "Quectel Wireless Solutions",
+ [3]byte{164, 137, 91}: "ARK INFOSOLUTIONS PVT LTD",
+ [3]byte{164, 140, 219}: "Lenovo",
+ [3]byte{164, 141, 59}: "Vizio, Inc",
+ [3]byte{164, 142, 10}: "DeLaval International AB",
+ [3]byte{164, 144, 5}: "CHINA GREATWALL COMPUTER SHENZHEN CO.,LTD",
+ [3]byte{164, 145, 177}: "Technicolor",
+ [3]byte{164, 147, 76}: "Cisco Systems, Inc",
+ [3]byte{164, 151, 187}: "Hitachi Industrial Equipment Systems Co.,Ltd",
+ [3]byte{164, 153, 71}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{164, 153, 129}: "FuJian Elite Power Tech CO.,LTD.",
+ [3]byte{164, 154, 88}: "Samsung Electronics Co.,Ltd",
+ [3]byte{164, 155, 19}: "Digital Check",
+ [3]byte{164, 155, 245}: "Hybridserver Tec GmbH",
+ [3]byte{164, 157, 73}: "Ketra, Inc.",
+ [3]byte{164, 158, 219}: "AutoCrib, Inc.",
+ [3]byte{164, 159, 133}: "Lyve Minds, Inc",
+ [3]byte{164, 159, 137}: "Shanghai Rui Rui Communication Technology Co.Ltd.",
+ [3]byte{164, 161, 194}: "Ericsson AB",
+ [3]byte{164, 161, 228}: "Innotube, Inc.",
+ [3]byte{164, 162, 74}: "Cisco SPVTG",
+ [3]byte{164, 164, 211}: "Bluebank Communication Technology Co.Ltd",
+ [3]byte{164, 166, 169}: "Private",
+ [3]byte{164, 168, 15}: "Shenzhen Coship Electronics Co., Ltd.",
+ [3]byte{164, 173, 0}: "Ragsdale Technology",
+ [3]byte{164, 173, 184}: "Vitec Group, Camera Dynamics Ltd",
+ [3]byte{164, 174, 154}: "Maestro Wireless Solutions ltd.",
+ [3]byte{164, 177, 33}: "Arantia 2010 S.L.",
+ [3]byte{164, 177, 151}: "Apple, Inc.",
+ [3]byte{164, 177, 233}: "Technicolor",
+ [3]byte{164, 177, 238}: "H. ZANDER GmbH & Co. KG",
+ [3]byte{164, 178, 167}: "Adaxys Solutions AG",
+ [3]byte{164, 179, 106}: "JSC SDO Chromatec",
+ [3]byte{164, 181, 46}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+ [3]byte{164, 184, 5}: "Apple, Inc.",
+ [3]byte{164, 184, 24}: "PENTA Gesellschaft für elektronische Industriedatenverarbeitung mbH",
+ [3]byte{164, 185, 128}: "Parking BOXX Inc.",
+ [3]byte{164, 186, 118}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{164, 186, 219}: "Dell Inc.",
+ [3]byte{164, 187, 175}: "Lime Instruments",
+ [3]byte{164, 190, 97}: "EutroVision System, Inc.",
+ [3]byte{164, 191, 1}: "Intel Corporate",
+ [3]byte{164, 192, 199}: "ShenZhen Hitom Communication Technology Co..LTD",
+ [3]byte{164, 192, 225}: "Nintendo Co., Ltd.",
+ [3]byte{164, 193, 56}: "Telink Semiconductor (Taipei) Co. Ltd.",
+ [3]byte{164, 194, 171}: "Hangzhou LEAD-IT Information & Technology Co.,Ltd",
+ [3]byte{164, 195, 97}: "Apple, Inc.",
+ [3]byte{164, 196, 148}: "Intel Corporate",
+ [3]byte{164, 198, 79}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{164, 199, 222}: "Cambridge Industries(Group) Co.,Ltd.",
+ [3]byte{164, 202, 160}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{164, 204, 50}: "Inficomm Co., Ltd",
+ [3]byte{164, 208, 148}: "Erwin Peters Systemtechnik GmbH",
+ [3]byte{164, 209, 140}: "Apple, Inc.",
+ [3]byte{164, 209, 143}: "Shenzhen Skyee Optical Fiber Communication Technology Ltd.",
+ [3]byte{164, 209, 209}: "ECOtality North America",
+ [3]byte{164, 209, 210}: "Apple, Inc.",
+ [3]byte{164, 211, 181}: "GLITEL Stropkov, s.r.o.",
+ [3]byte{164, 213, 120}: "Texas Instruments",
+ [3]byte{164, 216, 86}: "Gimbal, Inc",
+ [3]byte{164, 216, 202}: "HONG KONG WATER WORLD TECHNOLOGY CO. LIMITED",
+ [3]byte{164, 217, 164}: "neXus ID Solutions AB",
+ [3]byte{164, 218, 63}: "Bionics Corp.",
+ [3]byte{164, 219, 46}: "Kingspan Environmental Ltd",
+ [3]byte{164, 219, 48}: "Liteon Technology Corporation",
+ [3]byte{164, 220, 190}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{164, 222, 80}: "Total Walther GmbH",
+ [3]byte{164, 222, 201}: "QLove Mobile Intelligence Information Technology (W.H.) Co. Ltd.",
+ [3]byte{164, 224, 230}: "FILIZOLA S.A. PESAGEM E AUTOMACAO",
+ [3]byte{164, 227, 46}: "Silicon & Software Systems Ltd.",
+ [3]byte{164, 227, 145}: "DENY FONTAINE",
+ [3]byte{164, 228, 184}: "BlackBerry RTS",
+ [3]byte{164, 229, 151}: "Gessler GmbH",
+ [3]byte{164, 230, 177}: "Shanghai Joindata Technology Co.,Ltd.",
+ [3]byte{164, 231, 49}: "Nokia Corporation",
+ [3]byte{164, 231, 228}: "Connex GmbH",
+ [3]byte{164, 233, 117}: "Apple, Inc.",
+ [3]byte{164, 233, 145}: "SISTEMAS AUDIOVISUALES ITELSIS S.L.",
+ [3]byte{164, 233, 163}: "Honest Technology Co., Ltd",
+ [3]byte{164, 235, 211}: "Samsung Electronics Co.,Ltd",
+ [3]byte{164, 237, 78}: "ARRIS Group, Inc.",
+ [3]byte{164, 238, 87}: "Seiko Epson Corporation",
+ [3]byte{164, 239, 82}: "Telewave Co., Ltd.",
+ [3]byte{164, 241, 232}: "Apple, Inc.",
+ [3]byte{164, 243, 193}: "Open Source Robotics Foundation, Inc.",
+ [3]byte{164, 243, 231}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+ [3]byte{164, 244, 194}: "VNPT TECHNOLOGY",
+ [3]byte{164, 245, 34}: "CHOFU SEISAKUSHO CO.,LTD",
+ [3]byte{164, 247, 208}: "LAN Accessories Co., Ltd.",
+ [3]byte{164, 251, 141}: "Hangzhou Dunchong Technology Co.Ltd",
+ [3]byte{164, 252, 206}: "Security Expert Ltd.",
+ [3]byte{168, 1, 128}: "IMAGO Technologies GmbH",
+ [3]byte{168, 6, 0}: "Samsung Electronics Co.,Ltd",
+ [3]byte{168, 12, 13}: "Cisco Systems, Inc",
+ [3]byte{168, 12, 99}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{168, 12, 202}: "Shenzhen Sundray Technologies Company Limited",
+ [3]byte{168, 17, 252}: "ARRIS Group, Inc.",
+ [3]byte{168, 19, 116}: "Panasonic Corporation AVC Networks Company",
+ [3]byte{168, 21, 77}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{168, 21, 89}: "Breathometer, Inc.",
+ [3]byte{168, 21, 214}: "Shenzhen Meione Technology CO., LTD",
+ [3]byte{168, 22, 178}: "LG Electronics (Mobile Communications)",
+ [3]byte{168, 23, 88}: "Elektronik System i Umeå AB",
+ [3]byte{168, 27, 24}: "XTS CORP",
+ [3]byte{168, 27, 90}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{168, 27, 93}: "Foxtel Management Pty Ltd",
+ [3]byte{168, 27, 106}: "Texas Instruments",
+ [3]byte{168, 29, 22}: "AzureWave Technology Inc.",
+ [3]byte{168, 30, 132}: "QUANTA COMPUTER INC.",
+ [3]byte{168, 31, 175}: "KRYPTON POLSKA",
+ [3]byte{168, 32, 102}: "Apple, Inc.",
+ [3]byte{168, 36, 235}: "ZAO NPO Introtest",
+ [3]byte{168, 37, 235}: "Cambridge Industries(Group) Co.,Ltd.",
+ [3]byte{168, 38, 217}: "HTC Corporation",
+ [3]byte{168, 41, 76}: "Precision Optical Transceivers, Inc.",
+ [3]byte{168, 43, 181}: "Edgecore Networks Corporation",
+ [3]byte{168, 43, 214}: "Shina System Co., Ltd",
+ [3]byte{168, 48, 173}: "Weifang GoerTek Technology Co.,Ltd.",
+ [3]byte{168, 50, 154}: "Digicom Futuristic Technologies Ltd.",
+ [3]byte{168, 57, 68}: "Actiontec Electronics, Inc",
+ [3]byte{168, 64, 65}: "Dragino Technology Co., Limited",
+ [3]byte{168, 68, 129}: "Nokia Corporation",
+ [3]byte{168, 69, 205}: "Siselectron Technology LTD.",
+ [3]byte{168, 69, 233}: "Firich Enterprises CO., LTD.",
+ [3]byte{168, 71, 74}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{168, 73, 165}: "Lisantech Co., Ltd.",
+ [3]byte{168, 78, 63}: "Hitron Technologies. Inc",
+ [3]byte{168, 84, 178}: "Wistron Neweb Corporation",
+ [3]byte{168, 85, 106}: "Pocketnet Technology Inc.",
+ [3]byte{168, 87, 78}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{168, 88, 64}: "Cambridge Industries(Group) Co.,Ltd.",
+ [3]byte{168, 91, 120}: "Apple, Inc.",
+ [3]byte{168, 91, 176}: "Shenzhen Dehoo Technology Co.,Ltd",
+ [3]byte{168, 91, 243}: "Audivo GmbH",
+ [3]byte{168, 92, 44}: "Apple, Inc.",
+ [3]byte{168, 94, 228}: "12Sided Technology, LLC",
+ [3]byte{168, 96, 182}: "Apple, Inc.",
+ [3]byte{168, 97, 170}: "Cloudview Limited",
+ [3]byte{168, 98, 162}: "JIWUMEDIA CO., LTD.",
+ [3]byte{168, 99, 223}: "DISPLAIRE CORPORATION",
+ [3]byte{168, 99, 242}: "Texas Instruments",
+ [3]byte{168, 100, 5}: "nimbus 9, Inc",
+ [3]byte{168, 101, 178}: "DONGGUAN YISHANG ELECTRONIC TECHNOLOGY CO., LIMITED",
+ [3]byte{168, 102, 127}: "Apple, Inc.",
+ [3]byte{168, 106, 111}: "RIM",
+ [3]byte{168, 106, 193}: "HanbitEDS Co., Ltd.",
+ [3]byte{168, 107, 124}: "SHENZHEN FENGLIAN TECHNOLOGY CO., LTD.",
+ [3]byte{168, 107, 173}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{168, 112, 165}: "UniComm Inc.",
+ [3]byte{168, 114, 133}: "IDT, INC.",
+ [3]byte{168, 116, 29}: "PHOENIX CONTACT Electronics GmbH",
+ [3]byte{168, 117, 214}: "FreeTek International Co., Ltd.",
+ [3]byte{168, 117, 226}: "Aventura Technologies, Inc.",
+ [3]byte{168, 119, 111}: "Zonoff",
+ [3]byte{168, 123, 57}: "Nokia Corporation",
+ [3]byte{168, 124, 1}: "Samsung Electronics Co.,Ltd",
+ [3]byte{168, 126, 51}: "Nokia Danmark A/S",
+ [3]byte{168, 128, 56}: "ShenZhen MovingComm Technology Co., Limited",
+ [3]byte{168, 129, 149}: "Samsung Electronics Co.,Ltd",
+ [3]byte{168, 129, 241}: "BMEYE B.V.",
+ [3]byte{168, 130, 0}: "Hisense Electric Co.,Ltd",
+ [3]byte{168, 130, 127}: "CIBN Oriental Network(Beijing) CO.,Ltd",
+ [3]byte{168, 134, 221}: "Apple, Inc.",
+ [3]byte{168, 135, 146}: "Broadband Antenna Tracking Systems",
+ [3]byte{168, 135, 237}: "ARC Wireless LLC",
+ [3]byte{168, 136, 8}: "Apple, Inc.",
+ [3]byte{168, 140, 238}: "MicroMade Galka i Drozdz sp.j.",
+ [3]byte{168, 141, 123}: "SunDroid Global limited.",
+ [3]byte{168, 142, 36}: "Apple, Inc.",
+ [3]byte{168, 144, 8}: "Beijing Yuecheng Technology Co. Ltd.",
+ [3]byte{168, 146, 44}: "LG Electronics (Mobile Communications)",
+ [3]byte{168, 147, 82}: "SHANGHAI ZHONGMI COMMUNICATION TECHNOLOGY CO.,LTD",
+ [3]byte{168, 147, 230}: "JIANGXI JINGGANGSHAN CKING COMMUNICATION TECHNOLOGY CO.,LTD",
+ [3]byte{168, 149, 176}: "Aker Subsea Ltd",
+ [3]byte{168, 150, 117}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{168, 150, 138}: "Apple, Inc.",
+ [3]byte{168, 151, 220}: "IBM",
+ [3]byte{168, 152, 198}: "Shinbo Co., Ltd.",
+ [3]byte{168, 153, 92}: "aizo ag",
+ [3]byte{168, 155, 16}: "inMotion Ltd.",
+ [3]byte{168, 157, 33}: "Cisco Systems, Inc",
+ [3]byte{168, 157, 210}: "Shanghai DareGlobal Technologies Co.,Ltd",
+ [3]byte{168, 159, 186}: "Samsung Electronics Co.,Ltd",
+ [3]byte{168, 159, 236}: "ARRIS Group, Inc.",
+ [3]byte{168, 160, 137}: "Tactical Communications",
+ [3]byte{168, 161, 152}: "TCT mobile ltd",
+ [3]byte{168, 165, 226}: "MSF-Vathauer Antriebstechnik GmbH & Co KG",
+ [3]byte{168, 166, 72}: "Qingdao Hisense Communications Co.,Ltd.",
+ [3]byte{168, 166, 104}: "zte corporation",
+ [3]byte{168, 167, 149}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{168, 173, 61}: "Alcatel-Lucent Shanghai Bell Co., Ltd",
+ [3]byte{168, 176, 174}: "LEONI",
+ [3]byte{168, 177, 212}: "Cisco Systems, Inc",
+ [3]byte{168, 178, 218}: "FUJITSU LIMITED",
+ [3]byte{168, 184, 110}: "LG Electronics (Mobile Communications)",
+ [3]byte{168, 185, 179}: "ESSYS",
+ [3]byte{168, 187, 80}: "WiZ IoT Company Limited",
+ [3]byte{168, 187, 207}: "Apple, Inc.",
+ [3]byte{168, 189, 26}: "Honey Bee (Hong Kong) Limited",
+ [3]byte{168, 189, 39}: "Hewlett Packard Enterprise",
+ [3]byte{168, 189, 58}: "UNIONMAN TECHNOLOGY CO.,LTD",
+ [3]byte{168, 190, 39}: "Apple, Inc.",
+ [3]byte{168, 194, 34}: "TM-Research Inc.",
+ [3]byte{168, 200, 58}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{168, 200, 127}: "Roqos, Inc.",
+ [3]byte{168, 202, 123}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{168, 203, 149}: "EAST BEST CO., LTD.",
+ [3]byte{168, 204, 197}: "Saab AB (publ)",
+ [3]byte{168, 206, 144}: "CVC",
+ [3]byte{168, 208, 227}: "Systech Electronics Ltd.",
+ [3]byte{168, 208, 229}: "Juniper Networks",
+ [3]byte{168, 210, 54}: "Lightware Visual Engineering",
+ [3]byte{168, 211, 200}: "Topcon Electronics GmbH & Co. KG",
+ [3]byte{168, 211, 247}: "Arcadyan Technology Corporation",
+ [3]byte{168, 212, 9}: "USA 111 Inc",
+ [3]byte{168, 213, 121}: "Beijing Chushang Science and Technology Co.,Ltd",
+ [3]byte{168, 216, 40}: "Ascensia Diabetes Care",
+ [3]byte{168, 216, 138}: "Wyconn",
+ [3]byte{168, 224, 24}: "Nokia Corporation",
+ [3]byte{168, 227, 238}: "Sony Interactive Entertainment Inc.",
+ [3]byte{168, 229, 57}: "Moimstone Co.,Ltd",
+ [3]byte{168, 231, 5}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{168, 232, 36}: "INIM ELECTRONICS S.R.L.",
+ [3]byte{168, 238, 198}: "Muuselabs NV/SA",
+ [3]byte{168, 239, 38}: "Tritonwave",
+ [3]byte{168, 240, 56}: "SHEN ZHEN SHI JIN HUA TAI ELECTRONICS CO.,LTD",
+ [3]byte{168, 242, 116}: "Samsung Electronics Co.,Ltd",
+ [3]byte{168, 244, 112}: "Fujian Newland Communication Science Technologies Co.,Ltd.",
+ [3]byte{168, 247, 224}: "PLANET Technology Corporation",
+ [3]byte{168, 249, 75}: "Eltex Enterprise Ltd.",
+ [3]byte{168, 250, 216}: "Apple, Inc.",
+ [3]byte{168, 251, 112}: "WiseSec L.t.d",
+ [3]byte{168, 252, 183}: "Consolidated Resource Imaging",
+ [3]byte{170, 0, 0}: "DIGITAL EQUIPMENT CORPORATION",
+ [3]byte{170, 0, 1}: "DIGITAL EQUIPMENT CORPORATION",
+ [3]byte{170, 0, 2}: "DIGITAL EQUIPMENT CORPORATION",
+ [3]byte{170, 0, 3}: "DIGITAL EQUIPMENT CORPORATION",
+ [3]byte{170, 0, 4}: "DIGITAL EQUIPMENT CORPORATION",
+ [3]byte{172, 1, 66}: "Uriel Technologies SIA",
+ [3]byte{172, 2, 202}: "HI Solutions, Inc.",
+ [3]byte{172, 2, 207}: "RW Tecnologia Industria e Comercio Ltda",
+ [3]byte{172, 2, 239}: "Comsis",
+ [3]byte{172, 4, 11}: "Peloton Interactive, Inc",
+ [3]byte{172, 4, 129}: "Jiangsu Huaxing Electronics Co., Ltd.",
+ [3]byte{172, 6, 19}: "Senselogix Ltd",
+ [3]byte{172, 6, 199}: "ServerNet S.r.l.",
+ [3]byte{172, 10, 97}: "Labor S.r.L.",
+ [3]byte{172, 13, 27}: "LG Electronics (Mobile Communications)",
+ [3]byte{172, 13, 254}: "Ekon GmbH - myGEKKO",
+ [3]byte{172, 17, 211}: "Suzhou HOTEK Video Technology Co. Ltd",
+ [3]byte{172, 20, 97}: "ATAW Co., Ltd.",
+ [3]byte{172, 20, 210}: "wi-daq, inc.",
+ [3]byte{172, 22, 45}: "Hewlett Packard",
+ [3]byte{172, 23, 2}: "Fibar Group sp. z o.o.",
+ [3]byte{172, 24, 38}: "Seiko Epson Corporation",
+ [3]byte{172, 25, 159}: "SUNGROW POWER SUPPLY CO.,LTD.",
+ [3]byte{172, 29, 223}: "IEEE Registration Authority",
+ [3]byte{172, 31, 107}: "Super Micro Computer, Inc.",
+ [3]byte{172, 31, 116}: "Apple, Inc.",
+ [3]byte{172, 31, 215}: "Real Vision Technology Co.,Ltd.",
+ [3]byte{172, 32, 46}: "Hitron Technologies. Inc",
+ [3]byte{172, 32, 62}: "Wuhan Tianyu Information Industry Co., Ltd.",
+ [3]byte{172, 32, 170}: "DMATEK Co., Ltd.",
+ [3]byte{172, 34, 5}: "Compal Broadband Networks, Inc.",
+ [3]byte{172, 34, 11}: "ASUSTek COMPUTER INC.",
+ [3]byte{172, 35, 63}: "Shenzhen Minew Technologies Co., Ltd.",
+ [3]byte{172, 41, 58}: "Apple, Inc.",
+ [3]byte{172, 42, 12}: "CSR ZHUZHOU INSTITUTE CO.,LTD.",
+ [3]byte{172, 43, 110}: "Intel Corporate",
+ [3]byte{172, 45, 163}: "TXTR GmbH",
+ [3]byte{172, 47, 168}: "Humannix Co.,Ltd.",
+ [3]byte{172, 49, 157}: "Shenzhen TG-NET Botone Technology Co.,Ltd.",
+ [3]byte{172, 52, 203}: "Shanhai GBCOM Communication Technology Co. Ltd",
+ [3]byte{172, 54, 19}: "Samsung Electronics Co.,Ltd",
+ [3]byte{172, 55, 67}: "HTC Corporation",
+ [3]byte{172, 56, 112}: "Lenovo Mobile Communication Technology Ltd.",
+ [3]byte{172, 58, 122}: "Roku, Inc.",
+ [3]byte{172, 60, 11}: "Apple, Inc.",
+ [3]byte{172, 60, 180}: "Nilan A/S",
+ [3]byte{172, 61, 5}: "Instorescreen Aisa",
+ [3]byte{172, 61, 117}: "HANGZHOU ZHIWAY TECHNOLOGIES CO.,LTD.",
+ [3]byte{172, 63, 164}: "TAIYO YUDEN CO.,LTD",
+ [3]byte{172, 64, 234}: "C&T Solution Inc.",
+ [3]byte{172, 65, 34}: "Eclipse Electronic Systems Inc.",
+ [3]byte{172, 68, 242}: "YAMAHA CORPORATION",
+ [3]byte{172, 71, 35}: "Genelec",
+ [3]byte{172, 72, 45}: "Ralinwi Nanjing Electronic Technology Co., Ltd.",
+ [3]byte{172, 74, 254}: "Hisense Broadband Multimedia Technology Co.,Ltd.",
+ [3]byte{172, 75, 200}: "Juniper Networks",
+ [3]byte{172, 78, 46}: "Shenzhen JingHanDa Electronics Co.Ltd",
+ [3]byte{172, 78, 145}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{172, 79, 252}: "SVS-VISTEK GmbH",
+ [3]byte{172, 80, 54}: "Pi-Coral Inc",
+ [3]byte{172, 81, 44}: "Infinix mobility limited",
+ [3]byte{172, 81, 53}: "MPI TECH",
+ [3]byte{172, 81, 238}: "Cambridge Communication Systems Ltd",
+ [3]byte{172, 84, 236}: "IEEE P1823 Standards Working Group",
+ [3]byte{172, 86, 44}: "LAVA INTERNATIONAL(H.K) LIMITED",
+ [3]byte{172, 88, 59}: "Human Assembler, Inc.",
+ [3]byte{172, 88, 123}: "JCT Healthcare",
+ [3]byte{172, 90, 20}: "Samsung Electronics Co.,Ltd",
+ [3]byte{172, 93, 16}: "Pace Americas",
+ [3]byte{172, 94, 140}: "Utillink",
+ [3]byte{172, 95, 62}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{172, 96, 182}: "Ericsson AB",
+ [3]byte{172, 97, 35}: "Drivven, Inc.",
+ [3]byte{172, 97, 117}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{172, 97, 234}: "Apple, Inc.",
+ [3]byte{172, 98, 13}: "Jabil Circuit(Wuxi) Co.,Ltd",
+ [3]byte{172, 99, 190}: "Amazon Technologies Inc.",
+ [3]byte{172, 100, 23}: "Siemens AG - Industrial Automation - EWA",
+ [3]byte{172, 100, 98}: "zte corporation",
+ [3]byte{172, 100, 221}: "IEEE Registration Authority",
+ [3]byte{172, 103, 6}: "Ruckus Wireless",
+ [3]byte{172, 103, 111}: "Electrocompaniet A.S.",
+ [3]byte{172, 107, 15}: "CADENCE DESIGN SYSTEMS INC",
+ [3]byte{172, 107, 172}: "Jenny Science AG",
+ [3]byte{172, 110, 26}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+ [3]byte{172, 111, 79}: "Enspert Inc",
+ [3]byte{172, 111, 187}: "TATUNG Technology Inc.",
+ [3]byte{172, 111, 217}: "Valueplus Inc.",
+ [3]byte{172, 114, 54}: "Lexking Technology Co., Ltd.",
+ [3]byte{172, 114, 137}: "Intel Corporate",
+ [3]byte{172, 116, 9}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{172, 122, 66}: "iConnectivity",
+ [3]byte{172, 122, 77}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{172, 123, 161}: "Intel Corporate",
+ [3]byte{172, 126, 138}: "Cisco Systems, Inc",
+ [3]byte{172, 127, 62}: "Apple, Inc.",
+ [3]byte{172, 128, 214}: "Hexatronic AB",
+ [3]byte{172, 129, 18}: "Gemtek Technology Co., Ltd.",
+ [3]byte{172, 129, 243}: "Nokia Corporation",
+ [3]byte{172, 131, 23}: "Shenzhen Furtunetel Communication Co., Ltd",
+ [3]byte{172, 131, 240}: "ImmediaTV Corporation",
+ [3]byte{172, 131, 243}: "AMPAK Technology, Inc.",
+ [3]byte{172, 132, 198}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{172, 132, 201}: "Sagemcom Broadband SAS",
+ [3]byte{172, 133, 61}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{172, 134, 116}: "Open Mesh, Inc.",
+ [3]byte{172, 134, 126}: "Create New Technology (HK) Limited Company",
+ [3]byte{172, 135, 163}: "Apple, Inc.",
+ [3]byte{172, 137, 149}: "AzureWave Technology Inc.",
+ [3]byte{172, 138, 205}: "ROGER D.Wensker, G.Wensker sp.j.",
+ [3]byte{172, 141, 20}: "Smartrove Inc",
+ [3]byte{172, 147, 47}: "Nokia Corporation",
+ [3]byte{172, 148, 3}: "Envision Peripherals Inc",
+ [3]byte{172, 154, 34}: "NXP Semiconductors",
+ [3]byte{172, 154, 150}: "Lantiq Deutschland GmbH",
+ [3]byte{172, 155, 10}: "Sony Corporation",
+ [3]byte{172, 155, 132}: "Smak Tecnologia e Automacao",
+ [3]byte{172, 156, 228}: "Alcatel-Lucent Shanghai Bell Co., Ltd",
+ [3]byte{172, 158, 23}: "ASUSTek COMPUTER INC.",
+ [3]byte{172, 160, 22}: "Cisco Systems, Inc",
+ [3]byte{172, 162, 19}: "Shenzhen Bilian electronic CO.,LTD",
+ [3]byte{172, 162, 44}: "Baycity Technologies Ltd",
+ [3]byte{172, 163, 30}: "Aruba Networks",
+ [3]byte{172, 164, 48}: "Peerless AV",
+ [3]byte{172, 166, 103}: "Electronic Systems Protection, Inc.",
+ [3]byte{172, 169, 25}: "TrekStor GmbH",
+ [3]byte{172, 169, 160}: "Audioengine, Ltd.",
+ [3]byte{172, 171, 46}: "Beijing LasNubes Technology Co., Ltd.",
+ [3]byte{172, 171, 141}: "Lyngso Marine A/S",
+ [3]byte{172, 171, 191}: "AthenTek Inc.",
+ [3]byte{172, 175, 185}: "Samsung Electronics Co.,Ltd",
+ [3]byte{172, 179, 19}: "ARRIS Group, Inc.",
+ [3]byte{172, 181, 125}: "Liteon Technology Corporation",
+ [3]byte{172, 183, 79}: "METEL s.r.o.",
+ [3]byte{172, 184, 89}: "Uniband Electronic Corp,",
+ [3]byte{172, 188, 50}: "Apple, Inc.",
+ [3]byte{172, 189, 11}: "IMAC CO.,LTD",
+ [3]byte{172, 190, 117}: "Ufine Technologies Co.,Ltd.",
+ [3]byte{172, 190, 182}: "Visualedge Technology Co., Ltd.",
+ [3]byte{172, 193, 238}: "Xiaomi Communications Co Ltd",
+ [3]byte{172, 194, 236}: "CLT INT'L IND. CORP.",
+ [3]byte{172, 195, 58}: "Samsung Electronics Co.,Ltd",
+ [3]byte{172, 197, 27}: "Zhuhai Pantum Electronics Co., Ltd.",
+ [3]byte{172, 197, 149}: "Graphite Systems",
+ [3]byte{172, 198, 98}: "MitraStar Technology Corp.",
+ [3]byte{172, 198, 152}: "Kohzu Precision Co., Ltd.",
+ [3]byte{172, 199, 63}: "VITSMO CO., LTD.",
+ [3]byte{172, 201, 53}: "Ness Corporation",
+ [3]byte{172, 202, 84}: "Telldus Technologies AB",
+ [3]byte{172, 202, 142}: "ODA Technologies",
+ [3]byte{172, 202, 171}: "Virtual Electric Inc",
+ [3]byte{172, 202, 186}: "Midokura Co., Ltd.",
+ [3]byte{172, 203, 9}: "Hefcom Metering (Pty) Ltd",
+ [3]byte{172, 204, 142}: "Axis Communications AB",
+ [3]byte{172, 206, 143}: "HWA YAO TECHNOLOGIES CO., LTD",
+ [3]byte{172, 207, 35}: "Hi-flying electronics technology Co.,Ltd",
+ [3]byte{172, 207, 92}: "Apple, Inc.",
+ [3]byte{172, 207, 133}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{172, 208, 116}: "Espressif Inc.",
+ [3]byte{172, 209, 128}: "Crexendo Business Solutions, Inc.",
+ [3]byte{172, 209, 184}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{172, 211, 100}: "ABB SPA, ABB SACE DIV.",
+ [3]byte{172, 214, 87}: "Shaanxi GuoLian Digital TV Technology Co.,Ltd.",
+ [3]byte{172, 217, 214}: "tci GmbH",
+ [3]byte{172, 219, 218}: "Shenzhen Geniatech Inc, Ltd",
+ [3]byte{172, 220, 229}: "Procter & Gamble Company",
+ [3]byte{172, 222, 72}: "Private",
+ [3]byte{172, 224, 16}: "Liteon Technology Corporation",
+ [3]byte{172, 224, 105}: "ISAAC Instruments",
+ [3]byte{172, 226, 21}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{172, 226, 211}: "Hewlett Packard",
+ [3]byte{172, 227, 72}: "MadgeTech, Inc",
+ [3]byte{172, 228, 46}: "SK hynix",
+ [3]byte{172, 228, 181}: "Apple, Inc.",
+ [3]byte{172, 229, 240}: "Doppler Labs",
+ [3]byte{172, 230, 75}: "Shenzhen Baojia Battery Technology Co., Ltd.",
+ [3]byte{172, 231, 123}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+ [3]byte{172, 232, 123}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{172, 232, 126}: "Bytemark Computer Consulting Ltd",
+ [3]byte{172, 233, 127}: "IoT Tech Limited",
+ [3]byte{172, 233, 170}: "Hay Systems Ltd",
+ [3]byte{172, 234, 106}: "GENIX INFOCOMM CO., LTD.",
+ [3]byte{172, 236, 128}: "ARRIS Group, Inc.",
+ [3]byte{172, 237, 92}: "Intel Corporate",
+ [3]byte{172, 238, 59}: "6harmonics Inc",
+ [3]byte{172, 238, 158}: "Samsung Electronics Co.,Ltd",
+ [3]byte{172, 240, 178}: "Becker Electronics Taiwan Ltd.",
+ [3]byte{172, 241, 223}: "D-Link International",
+ [3]byte{172, 242, 197}: "Cisco Systems, Inc",
+ [3]byte{172, 247, 243}: "Xiaomi Communications Co Ltd",
+ [3]byte{172, 248, 92}: "Private",
+ [3]byte{172, 249, 126}: "ELESYS INC.",
+ [3]byte{172, 253, 147}: "Weifang GoerTek Technology Co.,Ltd.",
+ [3]byte{172, 253, 206}: "Intel Corporate",
+ [3]byte{172, 253, 236}: "Apple, Inc.",
+ [3]byte{176, 0, 180}: "Cisco Systems, Inc",
+ [3]byte{176, 5, 148}: "Liteon Technology Corporation",
+ [3]byte{176, 8, 191}: "Vital Connect, Inc.",
+ [3]byte{176, 9, 211}: "Avizia",
+ [3]byte{176, 9, 218}: "Ring Solutions",
+ [3]byte{176, 16, 65}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{176, 18, 3}: "Dynamics Hong Kong Limited",
+ [3]byte{176, 18, 102}: "Futaba-Kikaku",
+ [3]byte{176, 20, 8}: "LIGHTSPEED INTERNATIONAL CO.",
+ [3]byte{176, 23, 67}: "EDISON GLOBAL CIRCUITS LLC",
+ [3]byte{176, 25, 198}: "Apple, Inc.",
+ [3]byte{176, 27, 124}: "Ontrol A.S.",
+ [3]byte{176, 27, 210}: "Le Shi Zhi Xin Electronic Technology (Tianjin) Limited",
+ [3]byte{176, 28, 145}: "Elim Co",
+ [3]byte{176, 31, 41}: "Helvetia INC.",
+ [3]byte{176, 31, 129}: "IEEE Registration Authority",
+ [3]byte{176, 36, 243}: "Progeny Systems",
+ [3]byte{176, 37, 170}: "Private",
+ [3]byte{176, 38, 40}: "Broadcom Limited",
+ [3]byte{176, 52, 149}: "Apple, Inc.",
+ [3]byte{176, 53, 11}: "MOBIWIRE MOBILES (NINGBO) CO.,LTD",
+ [3]byte{176, 53, 141}: "Nokia Corporation",
+ [3]byte{176, 53, 159}: "Intel Corporate",
+ [3]byte{176, 56, 41}: "Siliconware Precision Industries Co., Ltd.",
+ [3]byte{176, 56, 80}: "Nanjing CAS-ZDC IOT SYSTEM CO.,LTD",
+ [3]byte{176, 57, 86}: "NETGEAR",
+ [3]byte{176, 61, 150}: "Vision Valley FZ LLC",
+ [3]byte{176, 62, 176}: "MICRODIA Ltd.",
+ [3]byte{176, 64, 137}: "Senient Systems LTD",
+ [3]byte{176, 65, 29}: "ITTIM Technologies",
+ [3]byte{176, 67, 93}: "NuLEDs, Inc.",
+ [3]byte{176, 69, 21}: "mira fitness,LLC.",
+ [3]byte{176, 69, 25}: "TCT mobile ltd",
+ [3]byte{176, 69, 69}: "YACOUB Automation GmbH",
+ [3]byte{176, 70, 252}: "MitraStar Technology Corp.",
+ [3]byte{176, 71, 191}: "Samsung Electronics Co.,Ltd",
+ [3]byte{176, 72, 26}: "Apple, Inc.",
+ [3]byte{176, 72, 122}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{176, 73, 95}: "OMRON HEALTHCARE Co., Ltd.",
+ [3]byte{176, 75, 191}: "PT HAN SUNG ELECTORONICS INDONESIA",
+ [3]byte{176, 76, 5}: "Fresenius Medical Care Deutschland GmbH",
+ [3]byte{176, 78, 38}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{176, 80, 188}: "SHENZHEN BASICOM ELECTRONIC CO.,LTD.",
+ [3]byte{176, 81, 142}: "Holl technology CO.Ltd.",
+ [3]byte{176, 82, 22}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{176, 85, 8}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{176, 87, 6}: "Vallox Oy",
+ [3]byte{176, 88, 196}: "Broadcast Microwave Services, Inc",
+ [3]byte{176, 89, 71}: "Shenzhen Qihu Intelligent Technology Company Limited",
+ [3]byte{176, 90, 218}: "Hewlett Packard",
+ [3]byte{176, 91, 31}: "THERMO FISHER SCIENTIFIC S.P.A.",
+ [3]byte{176, 91, 103}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{176, 92, 229}: "Nokia Corporation",
+ [3]byte{176, 97, 199}: "Ericsson-LG Enterprise",
+ [3]byte{176, 101, 99}: "Shanghai Railway Communication Factory",
+ [3]byte{176, 101, 189}: "Apple, Inc.",
+ [3]byte{176, 104, 182}: "Hangzhou OYE Technology Co. Ltd",
+ [3]byte{176, 105, 113}: "DEI Sales, Inc.",
+ [3]byte{176, 108, 191}: "3ality Digital Systems GmbH",
+ [3]byte{176, 110, 191}: "ASUSTek COMPUTER INC.",
+ [3]byte{176, 112, 45}: "Apple, Inc.",
+ [3]byte{176, 114, 191}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{176, 117, 12}: "QA Cafe",
+ [3]byte{176, 117, 77}: "Nokia",
+ [3]byte{176, 117, 213}: "zte corporation",
+ [3]byte{176, 119, 172}: "ARRIS Group, Inc.",
+ [3]byte{176, 120, 112}: "Wi-NEXT, Inc.",
+ [3]byte{176, 120, 240}: "Beijing HuaqinWorld Technology Co.,Ltd.",
+ [3]byte{176, 121, 8}: "Cummings Engineering",
+ [3]byte{176, 121, 60}: "Revolv Inc",
+ [3]byte{176, 121, 148}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{176, 125, 71}: "Cisco Systems, Inc",
+ [3]byte{176, 125, 98}: "Dipl.-Ing. H. Horstmann GmbH",
+ [3]byte{176, 126, 112}: "Zadara Storage Ltd.",
+ [3]byte{176, 127, 185}: "NETGEAR",
+ [3]byte{176, 128, 140}: "Laser Light Engines",
+ [3]byte{176, 129, 216}: "I-sys Corp",
+ [3]byte{176, 131, 254}: "Dell Inc.",
+ [3]byte{176, 134, 158}: "Chloride S.r.L",
+ [3]byte{176, 136, 7}: "Strata Worldwide",
+ [3]byte{176, 137, 0}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{176, 137, 145}: "LGE",
+ [3]byte{176, 137, 194}: "Zyptonite",
+ [3]byte{176, 142, 26}: "URadio Systems Co., Ltd",
+ [3]byte{176, 144, 116}: "Fulan Electronics Limited",
+ [3]byte{176, 144, 212}: "Shenzhen Hoin Internet Technology Co., Ltd",
+ [3]byte{176, 145, 34}: "Texas Instruments",
+ [3]byte{176, 145, 52}: "Taleo",
+ [3]byte{176, 145, 55}: "ISis ImageStream Internet Solutions, Inc",
+ [3]byte{176, 147, 91}: "ARRIS Group, Inc.",
+ [3]byte{176, 149, 142}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{176, 150, 108}: "Lanbowan Technology Ltd.",
+ [3]byte{176, 151, 58}: "E-Fuel Corporation",
+ [3]byte{176, 152, 43}: "Sagemcom Broadband SAS",
+ [3]byte{176, 152, 159}: "LG CNS",
+ [3]byte{176, 153, 40}: "FUJITSU LIMITED",
+ [3]byte{176, 154, 226}: "STEMMER IMAGING GmbH",
+ [3]byte{176, 155, 212}: "GNH Software India Private Limited",
+ [3]byte{176, 159, 186}: "Apple, Inc.",
+ [3]byte{176, 161, 10}: "Pivotal Systems Corporation",
+ [3]byte{176, 162, 231}: "Shenzhen TINNO Mobile Technology Corp.",
+ [3]byte{176, 163, 126}: "Qingdao Haier Telecom Co.,Ltd",
+ [3]byte{176, 167, 42}: "Ensemble Designs, Inc.",
+ [3]byte{176, 167, 55}: "Roku, Inc.",
+ [3]byte{176, 168, 110}: "Juniper Networks",
+ [3]byte{176, 170, 54}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{176, 170, 119}: "Cisco Systems, Inc",
+ [3]byte{176, 172, 250}: "FUJITSU LIMITED",
+ [3]byte{176, 173, 170}: "Avaya Inc",
+ [3]byte{176, 178, 143}: "Sagemcom Broadband SAS",
+ [3]byte{176, 178, 220}: "Zyxel Communications Corporation",
+ [3]byte{176, 179, 43}: "Slican Sp. z o.o.",
+ [3]byte{176, 180, 72}: "Texas Instruments",
+ [3]byte{176, 184, 213}: "Nanjing Nengrui Auto Equipment CO.,Ltd",
+ [3]byte{176, 185, 138}: "NETGEAR",
+ [3]byte{176, 189, 109}: "Echostreams Innovative Solutions",
+ [3]byte{176, 189, 161}: "ZAKLAD ELEKTRONICZNY SIMS",
+ [3]byte{176, 191, 153}: "WIZITDONGDO",
+ [3]byte{176, 192, 144}: "Chicony Electronics Co., Ltd.",
+ [3]byte{176, 193, 40}: "Adler ELREHA GmbH",
+ [3]byte{176, 193, 158}: "zte corporation",
+ [3]byte{176, 194, 5}: "BIONIME",
+ [3]byte{176, 194, 135}: "Technicolor CH USA Inc.",
+ [3]byte{176, 196, 108}: "Senseit",
+ [3]byte{176, 196, 231}: "Samsung Electronics Co.,Ltd",
+ [3]byte{176, 197, 84}: "D-Link International",
+ [3]byte{176, 197, 89}: "Samsung Electronics Co.,Ltd",
+ [3]byte{176, 197, 202}: "IEEE Registration Authority",
+ [3]byte{176, 198, 154}: "Juniper Networks",
+ [3]byte{176, 199, 69}: "BUFFALO.INC",
+ [3]byte{176, 200, 63}: "Jiangsu Cynray IOT Co., Ltd.",
+ [3]byte{176, 200, 173}: "People Power Company",
+ [3]byte{176, 201, 91}: "Beijing Symtech CO.,LTD",
+ [3]byte{176, 202, 104}: "Apple, Inc.",
+ [3]byte{176, 206, 24}: "Zhejiang shenghui lighting co.,Ltd",
+ [3]byte{176, 207, 77}: "MI-Zone Technology Ireland",
+ [3]byte{176, 208, 156}: "Samsung Electronics Co.,Ltd",
+ [3]byte{176, 210, 245}: "Vello Systems, Inc.",
+ [3]byte{176, 213, 157}: "Shenzhen Zowee Technology Co., Ltd",
+ [3]byte{176, 213, 204}: "Texas Instruments",
+ [3]byte{176, 215, 197}: "Logipix Ltd",
+ [3]byte{176, 215, 204}: "Tridonic GmbH & Co KG",
+ [3]byte{176, 218, 0}: "CERA ELECTRONIQUE",
+ [3]byte{176, 218, 249}: "ARRIS Group, Inc.",
+ [3]byte{176, 223, 58}: "Samsung Electronics Co.,Ltd",
+ [3]byte{176, 223, 193}: "Tenda Technology Co.,Ltd.Dongguan branch",
+ [3]byte{176, 224, 60}: "TCT mobile ltd",
+ [3]byte{176, 225, 126}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{176, 226, 53}: "Xiaomi Communications Co Ltd",
+ [3]byte{176, 226, 229}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{176, 227, 157}: "CAT SYSTEM CO.,LTD.",
+ [3]byte{176, 229, 14}: "NRG SYSTEMS INC",
+ [3]byte{176, 229, 237}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{176, 231, 84}: "2Wire Inc",
+ [3]byte{176, 232, 146}: "Seiko Epson Corporation",
+ [3]byte{176, 233, 126}: "Advanced Micro Peripherals",
+ [3]byte{176, 234, 188}: "ASKEY COMPUTER CORP",
+ [3]byte{176, 236, 113}: "Samsung Electronics Co.,Ltd",
+ [3]byte{176, 236, 143}: "GMX SAS",
+ [3]byte{176, 236, 225}: "Private",
+ [3]byte{176, 238, 69}: "AzureWave Technology Inc.",
+ [3]byte{176, 238, 123}: "Roku, Inc",
+ [3]byte{176, 241, 163}: "Fengfan (BeiJing) Technology Co., Ltd.",
+ [3]byte{176, 241, 188}: "Dhemax Ingenieros Ltda",
+ [3]byte{176, 241, 236}: "AMPAK Technology, Inc.",
+ [3]byte{176, 248, 147}: "Shanghai MXCHIP Information Technology Co., Ltd.",
+ [3]byte{176, 249, 99}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{176, 250, 235}: "Cisco Systems, Inc",
+ [3]byte{176, 252, 54}: "CyberTAN Technology Inc.",
+ [3]byte{176, 254, 189}: "Private",
+ [3]byte{180, 0, 22}: "INGENICO TERMINALS SAS",
+ [3]byte{180, 0, 156}: "CableWorld Ltd.",
+ [3]byte{180, 1, 66}: "GCI Science & Technology Co.,LTD",
+ [3]byte{180, 4, 24}: "Smartchip Integrated Inc.",
+ [3]byte{180, 5, 102}: "SP Best Corporation Co., LTD.",
+ [3]byte{180, 7, 249}: "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+ [3]byte{180, 8, 50}: "TC Communications",
+ [3]byte{180, 10, 198}: "DEXON Systems Ltd.",
+ [3]byte{180, 11, 68}: "Smartisan Technology Co., Ltd.",
+ [3]byte{180, 11, 122}: "Brusa Elektronik AG",
+ [3]byte{180, 12, 37}: "Palo Alto Networks",
+ [3]byte{180, 14, 150}: "HERAN",
+ [3]byte{180, 14, 220}: "LG-Ericsson Co.,Ltd.",
+ [3]byte{180, 15, 59}: "Tenda Technology Co.,Ltd.Dongguan branch",
+ [3]byte{180, 20, 137}: "Cisco Systems, Inc",
+ [3]byte{180, 21, 19}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{180, 23, 128}: "DTI Group Ltd",
+ [3]byte{180, 24, 209}: "Apple, Inc.",
+ [3]byte{180, 29, 239}: "Internet Laboratories, Inc.",
+ [3]byte{180, 33, 29}: "Beijing GuangXin Technology Co., Ltd",
+ [3]byte{180, 33, 138}: "Dog Hunter LLC",
+ [3]byte{180, 36, 231}: "Codetek Technology Co.,Ltd",
+ [3]byte{180, 40, 241}: "E-Prime Co., Ltd.",
+ [3]byte{180, 41, 61}: "Shenzhen Urovo Technology Co.,Ltd.",
+ [3]byte{180, 42, 14}: "Technicolor CH USA Inc.",
+ [3]byte{180, 42, 57}: "ORBIT MERRET, spol. s r. o.",
+ [3]byte{180, 44, 146}: "Zhejiang Weirong Electronic Co., Ltd",
+ [3]byte{180, 44, 190}: "Direct Payment Solutions Limited",
+ [3]byte{180, 45, 86}: "Extreme Networks, Inc.",
+ [3]byte{180, 48, 82}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{180, 48, 192}: "York Instruments Ltd",
+ [3]byte{180, 49, 184}: "Aviwest",
+ [3]byte{180, 52, 108}: "MATSUNICHI DIGITAL TECHNOLOGY (HONG KONG) LIMITED",
+ [3]byte{180, 53, 100}: "Fujian Tian Cheng Electron Science & Technical Development Co.,Ltd.",
+ [3]byte{180, 53, 247}: "Zhejiang Pearmain Electronics Co.ltd.",
+ [3]byte{180, 54, 169}: "Fibocom Wireless Inc.",
+ [3]byte{180, 54, 227}: "KBVISION GROUP",
+ [3]byte{180, 55, 65}: "Consert, Inc.",
+ [3]byte{180, 55, 209}: "IEEE Registration Authority",
+ [3]byte{180, 57, 52}: "Pen Generations, Inc.",
+ [3]byte{180, 57, 214}: "ProCurve Networking by HP",
+ [3]byte{180, 58, 40}: "Samsung Electronics Co.,Ltd",
+ [3]byte{180, 61, 178}: "Degreane Horizon",
+ [3]byte{180, 62, 59}: "Viableware, Inc",
+ [3]byte{180, 65, 122}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+ [3]byte{180, 67, 13}: "Broadlink Pty Ltd",
+ [3]byte{180, 71, 94}: "Avaya Inc",
+ [3]byte{180, 75, 210}: "Apple, Inc.",
+ [3]byte{180, 76, 194}: "NR ELECTRIC CO., LTD",
+ [3]byte{180, 79, 150}: "Zhejiang Xinzailing Technology co., ltd",
+ [3]byte{180, 81, 249}: "NB Software",
+ [3]byte{180, 82, 83}: "Seagate Technology",
+ [3]byte{180, 82, 125}: "Sony Mobile Communications AB",
+ [3]byte{180, 82, 126}: "Sony Mobile Communications AB",
+ [3]byte{180, 85, 112}: "Borea",
+ [3]byte{180, 86, 185}: "Teraspek Technologies Co.,Ltd",
+ [3]byte{180, 88, 97}: "CRemote, LLC",
+ [3]byte{180, 92, 164}: "Thing-talk Wireless Communication Technologies Corporation Limited",
+ [3]byte{180, 93, 80}: "Aruba Networks",
+ [3]byte{180, 97, 255}: "Lumigon A/S",
+ [3]byte{180, 98, 56}: "Exablox",
+ [3]byte{180, 98, 147}: "Samsung Electronics Co.,Ltd",
+ [3]byte{180, 98, 173}: "Elysia Germany GmbH",
+ [3]byte{180, 102, 152}: "Zealabs srl",
+ [3]byte{180, 103, 233}: "Qingdao GoerTek Technology Co., Ltd.",
+ [3]byte{180, 109, 53}: "Dalian Seasky Automation Co;Ltd",
+ [3]byte{180, 109, 131}: "Intel Corporate",
+ [3]byte{180, 115, 86}: "Hangzhou Treebear Networking Co., Ltd.",
+ [3]byte{180, 116, 67}: "Samsung Electronics Co.,Ltd",
+ [3]byte{180, 116, 71}: "CoreOS",
+ [3]byte{180, 116, 159}: "ASKEY COMPUTER CORP",
+ [3]byte{180, 117, 14}: "Belkin International Inc.",
+ [3]byte{180, 121, 167}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{180, 124, 41}: "Shenzhen Guzidi Technology Co.,Ltd",
+ [3]byte{180, 124, 156}: "Amazon Technologies Inc.",
+ [3]byte{180, 127, 94}: "Foresight Manufacture (S) Pte Ltd",
+ [3]byte{180, 130, 85}: "Research Products Corporation",
+ [3]byte{180, 130, 123}: "AKG Acoustics GmbH",
+ [3]byte{180, 130, 197}: "Relay2, Inc.",
+ [3]byte{180, 130, 254}: "ASKEY COMPUTER CORP",
+ [3]byte{180, 133, 71}: "Amptown System Company GmbH",
+ [3]byte{180, 137, 16}: "Coster T.E. S.P.A.",
+ [3]byte{180, 139, 25}: "Apple, Inc.",
+ [3]byte{180, 148, 78}: "WeTelecom Co., Ltd.",
+ [3]byte{180, 150, 145}: "Intel Corporate",
+ [3]byte{180, 152, 66}: "zte corporation",
+ [3]byte{180, 153, 76}: "Texas Instruments",
+ [3]byte{180, 153, 186}: "Hewlett Packard",
+ [3]byte{180, 156, 223}: "Apple, Inc.",
+ [3]byte{180, 157, 11}: "BQ",
+ [3]byte{180, 157, 180}: "Axion Technologies Inc.",
+ [3]byte{180, 158, 172}: "Imagik Int'l Corp",
+ [3]byte{180, 158, 230}: "SHENZHEN TECHNOLOGY CO LTD",
+ [3]byte{180, 163, 130}: "Hangzhou Hikvision Digital Technology Co.,Ltd.",
+ [3]byte{180, 164, 181}: "Zen Eye Co.,Ltd",
+ [3]byte{180, 164, 227}: "Cisco Systems, Inc",
+ [3]byte{180, 165, 169}: "MODI GmbH",
+ [3]byte{180, 165, 239}: "Sercomm Corporation.",
+ [3]byte{180, 168, 40}: "Shenzhen Concox Information Technology Co., Ltd",
+ [3]byte{180, 168, 43}: "Histar Digital Electronics Co., Ltd.",
+ [3]byte{180, 169, 90}: "Avaya Inc",
+ [3]byte{180, 169, 132}: "Symantec Corporation",
+ [3]byte{180, 169, 254}: "GHIA Technology (Shenzhen) LTD",
+ [3]byte{180, 170, 77}: "Ensequence, Inc.",
+ [3]byte{180, 171, 44}: "MtM Technology Corporation",
+ [3]byte{180, 174, 43}: "Microsoft",
+ [3]byte{180, 174, 111}: "Circle Reliance, Inc DBA Cranberry Networks",
+ [3]byte{180, 176, 23}: "Avaya Inc",
+ [3]byte{180, 177, 90}: "Siemens AG Energy Management Division",
+ [3]byte{180, 178, 101}: "DAEHO I&T",
+ [3]byte{180, 179, 98}: "zte corporation",
+ [3]byte{180, 179, 132}: "ShenZhen Figigantic Electronic Co.,Ltd",
+ [3]byte{180, 181, 47}: "Hewlett Packard",
+ [3]byte{180, 181, 66}: "Hubbell Power Systems, Inc.",
+ [3]byte{180, 181, 175}: "Minsung Electronics",
+ [3]byte{180, 182, 118}: "Intel Corporate",
+ [3]byte{180, 184, 89}: "Texa Spa",
+ [3]byte{180, 184, 141}: "Thuh Company",
+ [3]byte{180, 191, 246}: "Samsung Electronics Co.,Ltd",
+ [3]byte{180, 193, 112}: "Yi chip Microelectronics (Hangzhou) Co., Ltd",
+ [3]byte{180, 196, 78}: "VXL eTech Pvt Ltd",
+ [3]byte{180, 198, 248}: "Axilspot Communication",
+ [3]byte{180, 199, 153}: "Extreme Networks, Inc.",
+ [3]byte{180, 200, 16}: "UMPI Elettronica",
+ [3]byte{180, 204, 233}: "PROSYST",
+ [3]byte{180, 206, 246}: "HTC Corporation",
+ [3]byte{180, 207, 219}: "Shenzhen Jiuzhou Electric Co.,LTD",
+ [3]byte{180, 209, 53}: "Cloudistics",
+ [3]byte{180, 213, 189}: "Intel Corporate",
+ [3]byte{180, 214, 78}: "Caldero Limited",
+ [3]byte{180, 216, 169}: "BetterBots",
+ [3]byte{180, 216, 222}: "iota Computing, Inc.",
+ [3]byte{180, 221, 21}: "ControlThings Oy Ab",
+ [3]byte{180, 223, 59}: "Chromlech",
+ [3]byte{180, 223, 250}: "Litemax Electronics Inc.",
+ [3]byte{180, 224, 205}: "Fusion-io, Inc",
+ [3]byte{180, 225, 15}: "Dell Inc.",
+ [3]byte{180, 225, 196}: "Microsoft Mobile Oy",
+ [3]byte{180, 225, 235}: "Private",
+ [3]byte{180, 230, 42}: "LG Innotek",
+ [3]byte{180, 231, 130}: "Vivalnk",
+ [3]byte{180, 233, 176}: "Cisco Systems, Inc",
+ [3]byte{180, 237, 25}: "Pie Digital, Inc.",
+ [3]byte{180, 237, 84}: "Wohler Technologies",
+ [3]byte{180, 238, 180}: "ASKEY COMPUTER CORP",
+ [3]byte{180, 238, 212}: "Texas Instruments",
+ [3]byte{180, 239, 4}: "DAIHAN Scientific Co., Ltd.",
+ [3]byte{180, 239, 57}: "Samsung Electronics Co.,Ltd",
+ [3]byte{180, 239, 250}: "Lemobile Information Technology (Beijing) Co., Ltd.",
+ [3]byte{180, 240, 171}: "Apple, Inc.",
+ [3]byte{180, 241, 218}: "LG Electronics (Mobile Communications)",
+ [3]byte{180, 242, 232}: "ARRIS Group, Inc.",
+ [3]byte{180, 243, 35}: "PETATEL INC.",
+ [3]byte{180, 246, 28}: "Apple, Inc.",
+ [3]byte{180, 248, 30}: "Kinova",
+ [3]byte{180, 251, 228}: "Ubiquiti Networks Inc.",
+ [3]byte{180, 252, 117}: "SEMA Electronics(HK) CO.,LTD",
+ [3]byte{180, 254, 140}: "Centro Sicurezza Italia SpA",
+ [3]byte{184, 0, 24}: "Htel",
+ [3]byte{184, 3, 5}: "Intel Corporate",
+ [3]byte{184, 4, 21}: "Bayan Audio",
+ [3]byte{184, 5, 171}: "zte corporation",
+ [3]byte{184, 7, 22}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{184, 8, 207}: "Intel Corporate",
+ [3]byte{184, 8, 215}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{184, 9, 138}: "Apple, Inc.",
+ [3]byte{184, 11, 157}: "ROPEX Industrie-Elektronik GmbH",
+ [3]byte{184, 19, 233}: "Trace Live Network",
+ [3]byte{184, 20, 19}: "Keen High Holding(HK) Ltd.",
+ [3]byte{184, 22, 25}: "ARRIS Group, Inc.",
+ [3]byte{184, 22, 219}: "CHANT SINCERE CO.,LTD",
+ [3]byte{184, 23, 194}: "Apple, Inc.",
+ [3]byte{184, 24, 111}: "ORIENTAL MOTOR CO., LTD.",
+ [3]byte{184, 25, 153}: "Nesys",
+ [3]byte{184, 29, 170}: "LG Electronics (Mobile Communications)",
+ [3]byte{184, 32, 231}: "Guangzhou Horizontal Information & Network Integration Co. Ltd",
+ [3]byte{184, 34, 79}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+ [3]byte{184, 36, 16}: "Magneti Marelli Slovakia s.r.o.",
+ [3]byte{184, 36, 26}: "SWEDA INFORMATICA LTDA",
+ [3]byte{184, 36, 240}: "SOYO Technology Development Co., Ltd.",
+ [3]byte{184, 38, 108}: "ANOV France",
+ [3]byte{184, 38, 212}: "Furukawa Industrial S.A. Produtos Elétricos",
+ [3]byte{184, 39, 235}: "Raspberry Pi Foundation",
+ [3]byte{184, 40, 139}: "Parker Hannifin Manufacturing (UK) Ltd",
+ [3]byte{184, 41, 247}: "Blaster Tech",
+ [3]byte{184, 42, 114}: "Dell Inc.",
+ [3]byte{184, 42, 220}: "EFR Europäische Funk-Rundsteuerung GmbH",
+ [3]byte{184, 44, 160}: "Honeywell HomMed",
+ [3]byte{184, 48, 168}: "Road-Track Telematics Development",
+ [3]byte{184, 50, 65}: "Wuhan Tianyu Information Industry Co., Ltd.",
+ [3]byte{184, 54, 216}: "Videoswitch",
+ [3]byte{184, 55, 101}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{184, 56, 97}: "Cisco Systems, Inc",
+ [3]byte{184, 56, 202}: "Kyokko Tsushin System CO.,LTD",
+ [3]byte{184, 58, 8}: "Tenda Technology Co.,Ltd.Dongguan branch",
+ [3]byte{184, 58, 123}: "Worldplay (Canada) Inc.",
+ [3]byte{184, 58, 157}: "Alarm.com",
+ [3]byte{184, 61, 78}: "Shenzhen Cultraview Digital Technology Co.,Ltd Shanghai Branch",
+ [3]byte{184, 62, 89}: "Roku, Inc.",
+ [3]byte{184, 65, 95}: "ASP AG",
+ [3]byte{184, 67, 228}: "Vlatacom",
+ [3]byte{184, 68, 217}: "Apple, Inc.",
+ [3]byte{184, 71, 198}: "SanJet Technology Corp.",
+ [3]byte{184, 79, 213}: "Microsoft Corporation",
+ [3]byte{184, 80, 1}: "Extreme Networks, Inc.",
+ [3]byte{184, 83, 172}: "Apple, Inc.",
+ [3]byte{184, 85, 16}: "Zioncom Electronics (Shenzhen) Ltd.",
+ [3]byte{184, 86, 189}: "ITT LLC",
+ [3]byte{184, 87, 216}: "Samsung Electronics Co.,Ltd",
+ [3]byte{184, 88, 16}: "NUMERA, INC.",
+ [3]byte{184, 90, 115}: "Samsung Electronics Co.,Ltd",
+ [3]byte{184, 90, 247}: "Ouya, Inc",
+ [3]byte{184, 90, 254}: "Handaer Communication Technology (Beijing) Co., Ltd",
+ [3]byte{184, 94, 123}: "Samsung Electronics Co.,Ltd",
+ [3]byte{184, 96, 145}: "Onnet Technologies and Innovations LLC",
+ [3]byte{184, 97, 111}: "Accton Technology Corp",
+ [3]byte{184, 98, 31}: "Cisco Systems, Inc",
+ [3]byte{184, 99, 77}: "Apple, Inc.",
+ [3]byte{184, 99, 188}: "ROBOTIS, Co, Ltd",
+ [3]byte{184, 100, 145}: "CK Telecom Ltd",
+ [3]byte{184, 101, 59}: "Bolymin, Inc.",
+ [3]byte{184, 105, 194}: "Sunitec Enterprise Co., Ltd.",
+ [3]byte{184, 107, 35}: "Toshiba",
+ [3]byte{184, 108, 232}: "Samsung Electronics Co.,Ltd",
+ [3]byte{184, 112, 244}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+ [3]byte{184, 116, 36}: "Viessmann Elektronik GmbH",
+ [3]byte{184, 116, 71}: "Convergence Technologies",
+ [3]byte{184, 117, 192}: "PayPal, Inc.",
+ [3]byte{184, 118, 63}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{184, 119, 195}: "METER Group",
+ [3]byte{184, 120, 46}: "Apple, Inc.",
+ [3]byte{184, 120, 121}: "Roche Diagnostics GmbH",
+ [3]byte{184, 121, 126}: "Secure Meters (UK) Limited",
+ [3]byte{184, 122, 201}: "Siemens Ltd.",
+ [3]byte{184, 124, 242}: "Aerohive Networks Inc.",
+ [3]byte{184, 129, 152}: "Intel Corporate",
+ [3]byte{184, 134, 135}: "Liteon Technology Corporation",
+ [3]byte{184, 135, 30}: "Good Mind Industries Co., Ltd.",
+ [3]byte{184, 135, 168}: "Step Ahead Innovations Inc.",
+ [3]byte{184, 136, 227}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+ [3]byte{184, 137, 129}: "Chengdu InnoThings Technology Co., Ltd.",
+ [3]byte{184, 137, 202}: "ILJIN ELECTRIC Co., Ltd.",
+ [3]byte{184, 138, 96}: "Intel Corporate",
+ [3]byte{184, 141, 18}: "Apple, Inc.",
+ [3]byte{184, 142, 58}: "Infinite Technologies JLT",
+ [3]byte{184, 142, 198}: "Stateless Networks",
+ [3]byte{184, 142, 223}: "Zencheer Communication Technology Co., Ltd.",
+ [3]byte{184, 143, 20}: "Analytica GmbH",
+ [3]byte{184, 146, 29}: "BG T&A",
+ [3]byte{184, 148, 210}: "Retail Innovation HTT AB",
+ [3]byte{184, 150, 116}: "AllDSP GmbH & Co. KG",
+ [3]byte{184, 151, 90}: "BIOSTAR Microtech Int'l Corp.",
+ [3]byte{184, 152, 176}: "Atlona Inc.",
+ [3]byte{184, 152, 247}: "Gionee Communication Equipment Co,Ltd.ShenZhen",
+ [3]byte{184, 153, 25}: "7signal Solutions, Inc",
+ [3]byte{184, 153, 176}: "Cohere Technologies",
+ [3]byte{184, 154, 205}: "ELITE OPTOELECTRONIC(ASIA)CO.,LTD",
+ [3]byte{184, 154, 237}: "OceanServer Technology, Inc",
+ [3]byte{184, 155, 201}: "SMC Networks Inc",
+ [3]byte{184, 155, 228}: "ABB Power Systems Power Generation",
+ [3]byte{184, 161, 117}: "Roku, Inc.",
+ [3]byte{184, 163, 134}: "D-Link International",
+ [3]byte{184, 163, 224}: "BenRui Technology Co.,Ltd",
+ [3]byte{184, 168, 175}: "Logic S.p.A.",
+ [3]byte{184, 172, 111}: "Dell Inc.",
+ [3]byte{184, 173, 62}: "BLUECOM",
+ [3]byte{184, 174, 110}: "Nintendo Co., Ltd.",
+ [3]byte{184, 174, 237}: "Elitegroup Computer Systems Co.,Ltd.",
+ [3]byte{184, 175, 103}: "Hewlett Packard",
+ [3]byte{184, 177, 199}: "BT&COM CO.,LTD",
+ [3]byte{184, 178, 235}: "Googol Technology (HK) Limited",
+ [3]byte{184, 179, 220}: "DEREK (SHAOGUAN) LIMITED",
+ [3]byte{184, 180, 46}: "Gionee Communication Equipment Co,Ltd.ShenZhen",
+ [3]byte{184, 183, 215}: "2GIG Technologies",
+ [3]byte{184, 184, 30}: "Intel Corporate",
+ [3]byte{184, 185, 78}: "Shenzhen iBaby Labs, Inc.",
+ [3]byte{184, 186, 104}: "Xi'an Jizhong Digital Communication Co.,Ltd",
+ [3]byte{184, 186, 114}: "Cynove",
+ [3]byte{184, 187, 35}: "Guangdong Nufront CSC Co., Ltd",
+ [3]byte{184, 187, 109}: "ENERES Co.,Ltd.",
+ [3]byte{184, 187, 175}: "Samsung Electronics Co.,Ltd",
+ [3]byte{184, 188, 27}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{184, 189, 121}: "TrendPoint Systems",
+ [3]byte{184, 190, 191}: "Cisco Systems, Inc",
+ [3]byte{184, 191, 131}: "Intel Corporate",
+ [3]byte{184, 193, 17}: "Apple, Inc.",
+ [3]byte{184, 193, 162}: "Dragon Path Technologies Co., Limited",
+ [3]byte{184, 195, 191}: "Henan Chengshi NetWork Technology Co.,Ltd",
+ [3]byte{184, 196, 111}: "PRIMMCON INDUSTRIES INC",
+ [3]byte{184, 198, 142}: "Samsung Electronics Co.,Ltd",
+ [3]byte{184, 199, 22}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{184, 199, 93}: "Apple, Inc.",
+ [3]byte{184, 200, 85}: "Shanghai GBCOM Communication Technology Co.,Ltd.",
+ [3]byte{184, 200, 235}: "ITEL MOBILE LIMITED",
+ [3]byte{184, 202, 4}: "Holtek Semiconductor Inc.",
+ [3]byte{184, 202, 58}: "Dell Inc.",
+ [3]byte{184, 205, 147}: "Penetek, Inc",
+ [3]byte{184, 205, 167}: "Maxeler Technologies Ltd.",
+ [3]byte{184, 208, 111}: "GUANGZHOU HKUST FOK YING TUNG RESEARCH INSTITUTE",
+ [3]byte{184, 212, 157}: "M Seven System Ltd.",
+ [3]byte{184, 213, 11}: "Sunitec Enterprise Co.,Ltd",
+ [3]byte{184, 215, 175}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{184, 216, 18}: "IEEE Registration Authority",
+ [3]byte{184, 217, 77}: "Sagemcom Broadband SAS",
+ [3]byte{184, 217, 206}: "Samsung Electronics Co.,Ltd",
+ [3]byte{184, 218, 241}: "Strahlenschutz- Entwicklungs- und Ausruestungsgesellschaft mbH",
+ [3]byte{184, 218, 247}: "Advanced Photonics, Inc.",
+ [3]byte{184, 219, 28}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+ [3]byte{184, 220, 135}: "IAI Corporation",
+ [3]byte{184, 223, 107}: "SpotCam Co., Ltd.",
+ [3]byte{184, 229, 137}: "Payter BV",
+ [3]byte{184, 230, 37}: "2Wire Inc",
+ [3]byte{184, 231, 121}: "9Solutions Oy",
+ [3]byte{184, 232, 86}: "Apple, Inc.",
+ [3]byte{184, 233, 55}: "Sonos, Inc.",
+ [3]byte{184, 234, 170}: "ICG NETWORKS CO.,ltd",
+ [3]byte{184, 236, 163}: "Zyxel Communications Corporation",
+ [3]byte{184, 238, 14}: "Sagemcom Broadband SAS",
+ [3]byte{184, 238, 101}: "Liteon Technology Corporation",
+ [3]byte{184, 238, 121}: "YWire Technologies, Inc.",
+ [3]byte{184, 240, 128}: "SPS, INC.",
+ [3]byte{184, 243, 23}: "iSun Smasher Communications Private Limited",
+ [3]byte{184, 244, 208}: "Herrmann Ultraschalltechnik GmbH & Co. Kg",
+ [3]byte{184, 245, 231}: "WayTools, LLC",
+ [3]byte{184, 246, 177}: "Apple, Inc.",
+ [3]byte{184, 247, 50}: "Aryaka Networks Inc",
+ [3]byte{184, 247, 74}: "RCNTEC",
+ [3]byte{184, 248, 40}: "Changshu Gaoshida Optoelectronic Technology Co. Ltd.",
+ [3]byte{184, 248, 131}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{184, 248, 190}: "BLUECOM",
+ [3]byte{184, 249, 52}: "Sony Mobile Communications AB",
+ [3]byte{184, 252, 154}: "Le Shi Zhi Xin Electronic Technology (Tianjin) Limited",
+ [3]byte{184, 253, 50}: "Zhejiang ROICX Microelectronics",
+ [3]byte{184, 255, 97}: "Apple, Inc.",
+ [3]byte{184, 255, 111}: "Shanghai Typrotech Technology Co.Ltd",
+ [3]byte{184, 255, 179}: "MitraStar Technology Corp.",
+ [3]byte{184, 255, 254}: "Texas Instruments",
+ [3]byte{188, 2, 0}: "Stewart Audio",
+ [3]byte{188, 2, 74}: "HMD Global Oy",
+ [3]byte{188, 5, 67}: "AVM GmbH",
+ [3]byte{188, 13, 165}: "Texas Instruments",
+ [3]byte{188, 15, 43}: "FORTUNE TECHGROUP CO.,LTD",
+ [3]byte{188, 15, 100}: "Intel Corporate",
+ [3]byte{188, 18, 94}: "Beijing WisVideo INC.",
+ [3]byte{188, 20, 1}: "Hitron Technologies. Inc",
+ [3]byte{188, 20, 133}: "Samsung Electronics Co.,Ltd",
+ [3]byte{188, 20, 239}: "ITON Technology Limited",
+ [3]byte{188, 21, 166}: "Taiwan Jantek Electronics,Ltd.",
+ [3]byte{188, 21, 172}: "Vodafone Italia S.p.A.",
+ [3]byte{188, 22, 101}: "Cisco Systems, Inc",
+ [3]byte{188, 22, 245}: "Cisco Systems, Inc",
+ [3]byte{188, 26, 103}: "YF Technology Co., Ltd",
+ [3]byte{188, 28, 129}: "Sichuan iLink Technology Co., Ltd.",
+ [3]byte{188, 32, 164}: "Samsung Electronics Co.,Ltd",
+ [3]byte{188, 32, 186}: "Inspur (Shandong) Electronic Information Co., Ltd",
+ [3]byte{188, 37, 224}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{188, 37, 240}: "3D Display Technologies Co., Ltd.",
+ [3]byte{188, 38, 29}: "HONG KONG TECON TECHNOLOGY",
+ [3]byte{188, 40, 44}: "e-Smart Systems Pvt. Ltd",
+ [3]byte{188, 40, 70}: "NextBIT Computing Pvt. Ltd.",
+ [3]byte{188, 40, 214}: "Rowley Associates Limited",
+ [3]byte{188, 43, 107}: "Beijing Haier IC Design Co.,Ltd",
+ [3]byte{188, 43, 215}: "Revogi Innovation Co., Ltd.",
+ [3]byte{188, 44, 85}: "Bear Flag Design, Inc.",
+ [3]byte{188, 45, 152}: "ThinGlobal LLC",
+ [3]byte{188, 46, 72}: "ARRIS Group, Inc.",
+ [3]byte{188, 47, 61}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{188, 48, 91}: "Dell Inc.",
+ [3]byte{188, 48, 125}: "Wistron Neweb Corporation",
+ [3]byte{188, 48, 126}: "Wistron Neweb Corporation",
+ [3]byte{188, 52, 0}: "IEEE Registration Authority",
+ [3]byte{188, 53, 229}: "Hydro Systems Company",
+ [3]byte{188, 56, 210}: "Pandachip Limited",
+ [3]byte{188, 57, 166}: "CSUN System Technology Co.,LTD",
+ [3]byte{188, 57, 217}: "Z-TEC",
+ [3]byte{188, 58, 234}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{188, 59, 175}: "Apple, Inc.",
+ [3]byte{188, 61, 133}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{188, 62, 19}: "Accordance Systems Inc.",
+ [3]byte{188, 63, 143}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{188, 65, 0}: "CODACO ELECTRONIC s.r.o.",
+ [3]byte{188, 65, 1}: "Shenzhen TINNO Mobile Technology Corp.",
+ [3]byte{188, 67, 119}: "Hang Zhou Huite Technology Co.,ltd.",
+ [3]byte{188, 68, 52}: "Shenzhen TINNO Mobile Technology Corp.",
+ [3]byte{188, 68, 134}: "Samsung Electronics Co.,Ltd",
+ [3]byte{188, 68, 176}: "Elastifile",
+ [3]byte{188, 69, 46}: "Knowledge Development for POF S.L.",
+ [3]byte{188, 70, 153}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{188, 71, 96}: "Samsung Electronics Co.,Ltd",
+ [3]byte{188, 75, 121}: "SensingTek",
+ [3]byte{188, 76, 196}: "Apple, Inc.",
+ [3]byte{188, 77, 251}: "Hitron Technologies. Inc",
+ [3]byte{188, 78, 60}: "CORE STAFF CO., LTD.",
+ [3]byte{188, 78, 93}: "ZhongMiao Technology Co., Ltd.",
+ [3]byte{188, 81, 254}: "Swann communications Pty Ltd",
+ [3]byte{188, 82, 180}: "Nokia",
+ [3]byte{188, 82, 183}: "Apple, Inc.",
+ [3]byte{188, 84, 54}: "Apple, Inc.",
+ [3]byte{188, 84, 81}: "Samsung Electronics Co.,Ltd",
+ [3]byte{188, 84, 249}: "Drogoo Technology Co., Ltd.",
+ [3]byte{188, 84, 252}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+ [3]byte{188, 92, 76}: "ELECOM CO.,LTD.",
+ [3]byte{188, 95, 244}: "ASRock Incorporation",
+ [3]byte{188, 95, 246}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+ [3]byte{188, 96, 16}: "Qingdao Hisense Communications Co.,Ltd.",
+ [3]byte{188, 96, 167}: "Sony Interactive Entertainment Inc.",
+ [3]byte{188, 98, 14}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{188, 98, 159}: "Telenet Systems P. Ltd.",
+ [3]byte{188, 100, 75}: "ARRIS Group, Inc.",
+ [3]byte{188, 102, 65}: "IEEE Registration Authority",
+ [3]byte{188, 102, 222}: "Shadow Creator Information Technology Co.,Ltd.",
+ [3]byte{188, 103, 28}: "Cisco Systems, Inc",
+ [3]byte{188, 103, 120}: "Apple, Inc.",
+ [3]byte{188, 103, 132}: "Environics Oy",
+ [3]byte{188, 106, 22}: "tdvine",
+ [3]byte{188, 106, 41}: "Texas Instruments",
+ [3]byte{188, 106, 47}: "Henge Docks LLC",
+ [3]byte{188, 106, 68}: "Commend International GmbH",
+ [3]byte{188, 107, 77}: "Nokia",
+ [3]byte{188, 108, 33}: "Apple, Inc.",
+ [3]byte{188, 110, 100}: "Sony Mobile Communications AB",
+ [3]byte{188, 110, 118}: "Green Energy Options Ltd",
+ [3]byte{188, 113, 193}: "XTrillion, Inc.",
+ [3]byte{188, 114, 177}: "Samsung Electronics Co.,Ltd",
+ [3]byte{188, 116, 215}: "HangZhou JuRu Technology CO.,LTD",
+ [3]byte{188, 117, 116}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{188, 118, 78}: "Rackspace US, Inc.",
+ [3]byte{188, 118, 94}: "Samsung Electronics Co.,Ltd",
+ [3]byte{188, 118, 112}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{188, 119, 55}: "Intel Corporate",
+ [3]byte{188, 119, 159}: "SBM Co., Ltd.",
+ [3]byte{188, 121, 173}: "Samsung Electronics Co.,Ltd",
+ [3]byte{188, 125, 209}: "Radio Data Comms",
+ [3]byte{188, 129, 31}: "Ingate Systems",
+ [3]byte{188, 129, 153}: "BASIC Co.,Ltd.",
+ [3]byte{188, 130, 93}: "MITSUMI ELECTRIC CO.,LTD.",
+ [3]byte{188, 131, 133}: "Microsoft Corporation",
+ [3]byte{188, 131, 167}: "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD",
+ [3]byte{188, 133, 31}: "Samsung Electronics Co.,Ltd",
+ [3]byte{188, 133, 86}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{188, 136, 147}: "VILLBAU Ltd.",
+ [3]byte{188, 136, 195}: "Ningbo Dooya Mechanic & Electronic Technology Co., Ltd",
+ [3]byte{188, 138, 163}: "NHN Entertainment",
+ [3]byte{188, 138, 232}: "QING DAO HAIER TELECOM CO.,LTD.",
+ [3]byte{188, 139, 85}: "NPP ELIKS America Inc. DBA T&M Atlantic",
+ [3]byte{188, 140, 205}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{188, 141, 14}: "Nokia",
+ [3]byte{188, 144, 58}: "Robert Bosch GmbH",
+ [3]byte{188, 145, 181}: "Infinix mobility limited",
+ [3]byte{188, 146, 107}: "Apple, Inc.",
+ [3]byte{188, 150, 128}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+ [3]byte{188, 152, 137}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{188, 153, 188}: "FonSee Technology Inc.",
+ [3]byte{188, 156, 49}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{188, 156, 197}: "Beijing Huafei Technology Co., Ltd.",
+ [3]byte{188, 157, 165}: "DASCOM Europe GmbH",
+ [3]byte{188, 159, 239}: "Apple, Inc.",
+ [3]byte{188, 160, 66}: "SHANGHAI FLYCO ELECTRICAL APPLIANCE CO.,LTD",
+ [3]byte{188, 164, 225}: "Nabto",
+ [3]byte{188, 168, 166}: "Intel Corporate",
+ [3]byte{188, 169, 32}: "Apple, Inc.",
+ [3]byte{188, 169, 214}: "Cyber-Rain, Inc.",
+ [3]byte{188, 173, 40}: "Hangzhou Hikvision Digital Technology Co.,Ltd.",
+ [3]byte{188, 173, 171}: "Avaya Inc",
+ [3]byte{188, 174, 197}: "ASUSTek COMPUTER INC.",
+ [3]byte{188, 177, 129}: "SHARP CORPORATION",
+ [3]byte{188, 177, 243}: "Samsung Electronics Co.,Ltd",
+ [3]byte{188, 179, 8}: "HONGKONG RAGENTEK COMMUNICATION TECHNOLOGY CO.,LIMITED",
+ [3]byte{188, 184, 82}: "Cybera, Inc.",
+ [3]byte{188, 186, 225}: "AREC Inc.",
+ [3]byte{188, 187, 201}: "Kellendonk Elektronik GmbH",
+ [3]byte{188, 188, 70}: "SKS Welding Systems GmbH",
+ [3]byte{188, 192, 15}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{188, 193, 104}: "DinBox Sverige AB",
+ [3]byte{188, 194, 58}: "Thomson Video Networks",
+ [3]byte{188, 195, 27}: "Kygo Life AS",
+ [3]byte{188, 195, 66}: "Panasonic Communications Co., Ltd.",
+ [3]byte{188, 196, 147}: "Cisco Systems, Inc",
+ [3]byte{188, 198, 26}: "SPECTRA EMBEDDED SYSTEMS",
+ [3]byte{188, 198, 219}: "Nokia Corporation",
+ [3]byte{188, 200, 16}: "Cisco SPVTG",
+ [3]byte{188, 202, 181}: "ARRIS Group, Inc.",
+ [3]byte{188, 205, 69}: "VOISMART",
+ [3]byte{188, 207, 204}: "HTC Corporation",
+ [3]byte{188, 209, 31}: "Samsung Electronics Co.,Ltd",
+ [3]byte{188, 209, 101}: "Cisco SPVTG",
+ [3]byte{188, 209, 119}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{188, 209, 211}: "Shenzhen TINNO Mobile Technology Corp.",
+ [3]byte{188, 213, 182}: "d2d technologies",
+ [3]byte{188, 215, 19}: "Owl Labs",
+ [3]byte{188, 217, 64}: "ASR Co,.Ltd.",
+ [3]byte{188, 224, 157}: "Eoslink",
+ [3]byte{188, 229, 159}: "WATERWORLD Technology Co.,LTD",
+ [3]byte{188, 230, 63}: "Samsung Electronics Co.,Ltd",
+ [3]byte{188, 231, 103}: "Quanzhou TDX Electronics Co., Ltd",
+ [3]byte{188, 234, 43}: "CityCom GmbH",
+ [3]byte{188, 234, 250}: "Hewlett Packard",
+ [3]byte{188, 235, 95}: "Fujian Beifeng Telecom Technology Co., Ltd.",
+ [3]byte{188, 236, 35}: "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD",
+ [3]byte{188, 236, 93}: "Apple, Inc.",
+ [3]byte{188, 238, 123}: "ASUSTek COMPUTER INC.",
+ [3]byte{188, 241, 242}: "Cisco Systems, Inc",
+ [3]byte{188, 242, 146}: "PLANTRONICS, INC.",
+ [3]byte{188, 242, 175}: "devolo AG",
+ [3]byte{188, 245, 172}: "LG Electronics (Mobile Communications)",
+ [3]byte{188, 246, 28}: "Geomodeling Wuxi Technology Co. Ltd.",
+ [3]byte{188, 246, 133}: "D-Link International",
+ [3]byte{188, 248, 17}: "Xiamen DNAKE Technology Co.,Ltd",
+ [3]byte{188, 254, 140}: "Altronic, LLC",
+ [3]byte{188, 255, 172}: "TOPCON CORPORATION",
+ [3]byte{188, 255, 235}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{192, 2, 141}: "WINSTAR Display CO.,Ltd",
+ [3]byte{192, 5, 194}: "ARRIS Group, Inc.",
+ [3]byte{192, 13, 126}: "Additech, Inc.",
+ [3]byte{192, 17, 115}: "Samsung Electronics Co.,Ltd",
+ [3]byte{192, 17, 166}: "Fort-Telecom ltd.",
+ [3]byte{192, 18, 66}: "Alpha Security Products",
+ [3]byte{192, 20, 61}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{192, 23, 77}: "Samsung Electronics Co.,Ltd",
+ [3]byte{192, 24, 133}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{192, 26, 218}: "Apple, Inc.",
+ [3]byte{192, 30, 155}: "Pixavi AS",
+ [3]byte{192, 33, 13}: "SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.",
+ [3]byte{192, 34, 80}: "Private",
+ [3]byte{192, 37, 6}: "AVM GmbH",
+ [3]byte{192, 37, 92}: "Cisco Systems, Inc",
+ [3]byte{192, 37, 103}: "Nexxt Solutions",
+ [3]byte{192, 37, 162}: "NEC Platforms, Ltd.",
+ [3]byte{192, 37, 233}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{192, 39, 185}: "Beijing National Railway Research & Design Institute of Signal & Communication Co., Ltd.",
+ [3]byte{192, 40, 141}: "Logitech, Inc",
+ [3]byte{192, 41, 115}: "Audyssey Laboratories Inc.",
+ [3]byte{192, 41, 243}: "XySystem",
+ [3]byte{192, 43, 252}: "iNES. applied informatics GmbH",
+ [3]byte{192, 44, 122}: "Shenzhen Horn Audio Co.,Ltd.",
+ [3]byte{192, 45, 238}: "Cuff",
+ [3]byte{192, 47, 241}: "Volta Networks",
+ [3]byte{192, 51, 94}: "Microsoft",
+ [3]byte{192, 52, 180}: "Gigastone Corporation",
+ [3]byte{192, 53, 128}: "A&R TECH",
+ [3]byte{192, 53, 189}: "Velocytech Aps",
+ [3]byte{192, 53, 197}: "Prosoft Systems LTD",
+ [3]byte{192, 56, 150}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{192, 56, 249}: "Nokia Danmark A/S",
+ [3]byte{192, 59, 143}: "Minicom Digital Signage",
+ [3]byte{192, 61, 70}: "Shanghai Sango Network Technology Co.,Ltd",
+ [3]byte{192, 62, 15}: "BSkyB Ltd",
+ [3]byte{192, 63, 14}: "NETGEAR",
+ [3]byte{192, 63, 42}: "Biscotti, Inc.",
+ [3]byte{192, 63, 213}: "Elitegroup Computer Systems Co.,Ltd.",
+ [3]byte{192, 65, 246}: "LG ELECTRONICS INC",
+ [3]byte{192, 67, 1}: "Epec Oy",
+ [3]byte{192, 68, 227}: "Shenzhen Sinkna Electronics Co., LTD",
+ [3]byte{192, 73, 61}: "MAITRISE TECHNOLOGIQUE",
+ [3]byte{192, 74, 0}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{192, 74, 9}: "Zhejiang Everbright Communication Equip. Co,. Ltd",
+ [3]byte{192, 77, 247}: "SERELEC",
+ [3]byte{192, 86, 39}: "Belkin International Inc.",
+ [3]byte{192, 86, 227}: "Hangzhou Hikvision Digital Technology Co.,Ltd.",
+ [3]byte{192, 87, 188}: "Avaya Inc",
+ [3]byte{192, 88, 167}: "Pico Systems Co., Ltd.",
+ [3]byte{192, 94, 111}: "V. Stonkaus firma Kodinis Raktas",
+ [3]byte{192, 94, 121}: "SHENZHEN HUAXUN ARK TECHNOLOGIES CO.,LTD",
+ [3]byte{192, 97, 24}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{192, 98, 107}: "Cisco Systems, Inc",
+ [3]byte{192, 99, 148}: "Apple, Inc.",
+ [3]byte{192, 100, 198}: "Nokia Corporation",
+ [3]byte{192, 101, 153}: "Samsung Electronics Co.,Ltd",
+ [3]byte{192, 103, 175}: "Cisco Systems, Inc",
+ [3]byte{192, 108, 15}: "Dobbs Stanford",
+ [3]byte{192, 108, 109}: "MagneMotion, Inc.",
+ [3]byte{192, 109, 26}: "Tianjin Henxinhuifeng Technology Co.,Ltd.",
+ [3]byte{192, 112, 9}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{192, 116, 43}: "SHENZHEN XUNLONG SOFTWARE CO.,LIMITED",
+ [3]byte{192, 123, 188}: "Cisco Systems, Inc",
+ [3]byte{192, 124, 209}: "PEGATRON CORPORATION",
+ [3]byte{192, 126, 64}: "SHENZHEN XDK COMMUNICATION EQUIPMENT CO.,LTD",
+ [3]byte{192, 129, 112}: "Effigis GeoSolutions",
+ [3]byte{192, 131, 10}: "2Wire Inc",
+ [3]byte{192, 132, 122}: "Apple, Inc.",
+ [3]byte{192, 132, 136}: "Finis Inc",
+ [3]byte{192, 133, 76}: "Ragentek Technology Group",
+ [3]byte{192, 135, 235}: "Samsung Electronics Co.,Ltd",
+ [3]byte{192, 136, 91}: "SnD Tech Co., Ltd.",
+ [3]byte{192, 137, 151}: "Samsung Electronics Co.,Ltd",
+ [3]byte{192, 138, 222}: "Ruckus Wireless",
+ [3]byte{192, 139, 111}: "S I Sistemas Inteligentes Eletrônicos Ltda",
+ [3]byte{192, 140, 96}: "Cisco Systems, Inc",
+ [3]byte{192, 145, 50}: "Patriot Memory",
+ [3]byte{192, 145, 52}: "ProCurve Networking by HP",
+ [3]byte{192, 151, 39}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{192, 152, 121}: "Acer Inc.",
+ [3]byte{192, 152, 229}: "University of Michigan",
+ [3]byte{192, 154, 113}: "XIAMEN MEITU MOBILE TECHNOLOGY CO.LTD",
+ [3]byte{192, 156, 4}: "Shaanxi GuoLian Digital TV Technology Co.,Ltd.",
+ [3]byte{192, 156, 146}: "COBY",
+ [3]byte{192, 157, 38}: "Topicon HK Lmd.",
+ [3]byte{192, 159, 5}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{192, 159, 66}: "Apple, Inc.",
+ [3]byte{192, 160, 13}: "ARRIS Group, Inc.",
+ [3]byte{192, 160, 187}: "D-Link International",
+ [3]byte{192, 160, 199}: "FAIRFIELD INDUSTRIES",
+ [3]byte{192, 160, 222}: "Multi Touch Oy",
+ [3]byte{192, 160, 226}: "Eden Innovations",
+ [3]byte{192, 161, 162}: "MarqMetrix",
+ [3]byte{192, 162, 109}: "Abbott Point of Care",
+ [3]byte{192, 163, 100}: "3D Systems Massachusetts",
+ [3]byte{192, 163, 158}: "EarthCam, Inc.",
+ [3]byte{192, 165, 62}: "Apple, Inc.",
+ [3]byte{192, 165, 221}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+ [3]byte{192, 170, 104}: "OSASI Technos Inc.",
+ [3]byte{192, 172, 84}: "Sagemcom Broadband SAS",
+ [3]byte{192, 179, 57}: "Comigo Ltd.",
+ [3]byte{192, 179, 87}: "Yoshiki Electronics Industry Ltd.",
+ [3]byte{192, 183, 19}: "Beijing Xiaoyuer Technology Co. Ltd.",
+ [3]byte{192, 184, 177}: "BitBox Ltd",
+ [3]byte{192, 186, 230}: "Application Solutions (Electronics and Vision) Ltd",
+ [3]byte{192, 189, 66}: "ZPA Smart Energy a.s.",
+ [3]byte{192, 189, 209}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{192, 191, 192}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{192, 193, 192}: "Cisco-Linksys, LLC",
+ [3]byte{192, 195, 182}: "Automatic Systems",
+ [3]byte{192, 197, 32}: "Ruckus Wireless",
+ [3]byte{192, 197, 34}: "ARRIS Group, Inc.",
+ [3]byte{192, 197, 105}: "SHANGHAI LYNUC CNC TECHNOLOGY CO.,LTD",
+ [3]byte{192, 198, 135}: "Cisco SPVTG",
+ [3]byte{192, 201, 70}: "MITSUYA LABORATORIES INC.",
+ [3]byte{192, 201, 118}: "Shenzhen TINNO Mobile Technology Corp.",
+ [3]byte{192, 203, 56}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{192, 204, 248}: "Apple, Inc.",
+ [3]byte{192, 206, 205}: "Apple, Inc.",
+ [3]byte{192, 207, 163}: "Creative Electronics & Software, Inc.",
+ [3]byte{192, 208, 18}: "Apple, Inc.",
+ [3]byte{192, 208, 68}: "Sagemcom Broadband SAS",
+ [3]byte{192, 211, 145}: "IEEE Registration Authority",
+ [3]byte{192, 211, 192}: "Samsung Electronics Co.,Ltd",
+ [3]byte{192, 217, 98}: "ASKEY COMPUTER CORP",
+ [3]byte{192, 217, 247}: "ShanDong Domor Intelligent S&T CO.,Ltd",
+ [3]byte{192, 218, 116}: "Hangzhou Sunyard Technology Co., Ltd.",
+ [3]byte{192, 220, 106}: "Qingdao Eastsoft Communication Technology Co.,LTD",
+ [3]byte{192, 223, 119}: "Conrad Electronic SE",
+ [3]byte{192, 228, 34}: "Texas Instruments",
+ [3]byte{192, 228, 45}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{192, 229, 78}: "ARIES Embedded GmbH",
+ [3]byte{192, 234, 228}: "Sonicwall",
+ [3]byte{192, 238, 64}: "Laird Technologies",
+ [3]byte{192, 238, 251}: "OnePlus Tech (Shenzhen) Ltd",
+ [3]byte{192, 241, 196}: "Pacidal Corporation Ltd.",
+ [3]byte{192, 242, 251}: "Apple, Inc.",
+ [3]byte{192, 246, 54}: "Hangzhou Kuaiyue Technologies, Ltd.",
+ [3]byte{192, 247, 157}: "Powercode",
+ [3]byte{192, 248, 218}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{192, 249, 69}: "Toshiba Toko Meter Systems Co., LTD.",
+ [3]byte{192, 249, 145}: "GME Standard Communications P/L",
+ [3]byte{192, 255, 212}: "NETGEAR",
+ [3]byte{196, 0, 6}: "Lipi Data Systems Ltd.",
+ [3]byte{196, 0, 73}: "Kamama",
+ [3]byte{196, 1, 66}: "MaxMedia Technology Limited",
+ [3]byte{196, 1, 124}: "Ruckus Wireless",
+ [3]byte{196, 1, 177}: "SeekTech INC",
+ [3]byte{196, 1, 206}: "PRESITION (2000) CO., LTD.",
+ [3]byte{196, 4, 21}: "NETGEAR",
+ [3]byte{196, 4, 123}: "Shenzhen YOUHUA Technology Co., Ltd",
+ [3]byte{196, 5, 40}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{196, 7, 47}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{196, 8, 74}: "Nokia",
+ [3]byte{196, 8, 128}: "Shenzhen UTEPO Tech Co., Ltd.",
+ [3]byte{196, 9, 56}: "FUJIAN STAR-NET COMMUNICATION CO.,LTD",
+ [3]byte{196, 10, 203}: "Cisco Systems, Inc",
+ [3]byte{196, 11, 203}: "Xiaomi Communications Co Ltd",
+ [3]byte{196, 14, 69}: "ACK Networks,Inc.",
+ [3]byte{196, 15, 9}: "Hermes electronic GmbH",
+ [3]byte{196, 16, 138}: "Ruckus Wireless",
+ [3]byte{196, 17, 224}: "Bull Group Co., Ltd",
+ [3]byte{196, 18, 245}: "D-Link International",
+ [3]byte{196, 19, 226}: "Aerohive Networks Inc.",
+ [3]byte{196, 20, 60}: "Cisco Systems, Inc",
+ [3]byte{196, 22, 250}: "Prysm Inc",
+ [3]byte{196, 23, 254}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{196, 25, 139}: "Dominion Voting Systems Corporation",
+ [3]byte{196, 25, 236}: "Qualisys AB",
+ [3]byte{196, 28, 255}: "Vizio, Inc",
+ [3]byte{196, 30, 206}: "HMI Sources Ltd.",
+ [3]byte{196, 33, 200}: "KYOCERA CORPORATION",
+ [3]byte{196, 35, 122}: "WhizNets Inc.",
+ [3]byte{196, 36, 46}: "Galvanic Applied Sciences Inc",
+ [3]byte{196, 38, 40}: "Airo Wireless",
+ [3]byte{196, 39, 149}: "Technicolor CH USA Inc.",
+ [3]byte{196, 40, 45}: "Embedded Intellect Pty Ltd",
+ [3]byte{196, 41, 29}: "KLEMSAN ELEKTRIK ELEKTRONIK SAN.VE TIC.AS.",
+ [3]byte{196, 44, 3}: "Apple, Inc.",
+ [3]byte{196, 47, 144}: "Hangzhou Hikvision Digital Technology Co.,Ltd.",
+ [3]byte{196, 48, 24}: "MCS Logic Inc.",
+ [3]byte{196, 52, 107}: "Hewlett Packard",
+ [3]byte{196, 54, 85}: "Shenzhen Fenglian Technology Co., Ltd.",
+ [3]byte{196, 54, 108}: "LG Innotek",
+ [3]byte{196, 54, 218}: "Rusteletech Ltd.",
+ [3]byte{196, 56, 211}: "TAGATEC CO.,LTD",
+ [3]byte{196, 57, 58}: "SMC Networks Inc",
+ [3]byte{196, 58, 159}: "Siconix Inc.",
+ [3]byte{196, 58, 190}: "Sony Mobile Communications AB",
+ [3]byte{196, 60, 60}: "CYBELEC SA",
+ [3]byte{196, 61, 199}: "NETGEAR",
+ [3]byte{196, 64, 68}: "RackTop Systems Inc.",
+ [3]byte{196, 66, 2}: "Samsung Electronics Co.,Ltd",
+ [3]byte{196, 67, 143}: "LG Electronics (Mobile Communications)",
+ [3]byte{196, 68, 160}: "Cisco Systems, Inc",
+ [3]byte{196, 69, 103}: "SAMBON PRECISON and ELECTRONICS",
+ [3]byte{196, 69, 236}: "Shanghai Yali Electron Co.,LTD",
+ [3]byte{196, 70, 25}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{196, 71, 63}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{196, 72, 56}: "Satcom Direct, Inc.",
+ [3]byte{196, 73, 187}: "MITSUMI ELECTRIC CO.,LTD.",
+ [3]byte{196, 74, 208}: "FIREFLIES SYSTEMS",
+ [3]byte{196, 75, 68}: "Omniprint Inc.",
+ [3]byte{196, 75, 209}: "Wallys Communications Teachnologies Co.,Ltd.",
+ [3]byte{196, 78, 31}: "BlueN",
+ [3]byte{196, 78, 172}: "Shenzhen Shiningworth Technology Co., Ltd.",
+ [3]byte{196, 80, 6}: "Samsung Electronics Co.,Ltd",
+ [3]byte{196, 84, 68}: "QUANTA COMPUTER INC.",
+ [3]byte{196, 85, 166}: "Cadac Holdings Ltd",
+ [3]byte{196, 85, 194}: "Bach-Simpson",
+ [3]byte{196, 86, 0}: "Galleon Embedded Computing",
+ [3]byte{196, 86, 254}: "Lava International Ltd.",
+ [3]byte{196, 87, 31}: "June Life Inc",
+ [3]byte{196, 87, 110}: "Samsung Electronics Co.,Ltd",
+ [3]byte{196, 88, 194}: "Shenzhen TATFOOK Technology Co., Ltd.",
+ [3]byte{196, 89, 118}: "Fugoo Coorporation",
+ [3]byte{196, 93, 216}: "HDMI Forum",
+ [3]byte{196, 96, 68}: "Everex Electronics Limited",
+ [3]byte{196, 98, 107}: "ZPT Vigantice",
+ [3]byte{196, 98, 234}: "Samsung Electronics Co.,Ltd",
+ [3]byte{196, 99, 84}: "U-Raku, Inc.",
+ [3]byte{196, 100, 19}: "Cisco Systems, Inc",
+ [3]byte{196, 102, 153}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{196, 103, 181}: "Libratone A/S",
+ [3]byte{196, 104, 208}: "VTech Telecommunications Ltd.",
+ [3]byte{196, 105, 62}: "Turbulence Design Inc.",
+ [3]byte{196, 106, 183}: "Xiaomi Communications Co Ltd",
+ [3]byte{196, 107, 180}: "myIDkey",
+ [3]byte{196, 109, 241}: "DataGravity",
+ [3]byte{196, 110, 31}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{196, 112, 11}: "GUANGZHOU CHIP TECHNOLOGIES CO.,LTD",
+ [3]byte{196, 113, 48}: "Fon Technology S.L.",
+ [3]byte{196, 113, 84}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{196, 113, 254}: "Cisco Systems, Inc",
+ [3]byte{196, 114, 149}: "Cisco Systems, Inc",
+ [3]byte{196, 115, 30}: "Samsung Electronics Co.,Ltd",
+ [3]byte{196, 119, 171}: "Beijing ASU Tech Co.,Ltd",
+ [3]byte{196, 119, 175}: "Advanced Digital Broadcast SA",
+ [3]byte{196, 123, 47}: "Beijing JoinHope Image Technology Ltd.",
+ [3]byte{196, 123, 163}: "NAVIS Inc.",
+ [3]byte{196, 124, 141}: "IEEE Registration Authority",
+ [3]byte{196, 125, 70}: "FUJITSU LIMITED",
+ [3]byte{196, 125, 79}: "Cisco Systems, Inc",
+ [3]byte{196, 125, 204}: "Zebra Technologies Inc",
+ [3]byte{196, 125, 254}: "A.N. Solutions GmbH",
+ [3]byte{196, 127, 81}: "Inventek Systems",
+ [3]byte{196, 130, 63}: "Fujian Newland Auto-ID Tech. Co,.Ltd.",
+ [3]byte{196, 130, 78}: "Changzhou Uchip Electronics Co., LTD.",
+ [3]byte{196, 131, 111}: "Ciena Corporation",
+ [3]byte{196, 133, 8}: "Intel Corporate",
+ [3]byte{196, 134, 233}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{196, 136, 229}: "Samsung Electronics Co.,Ltd",
+ [3]byte{196, 142, 143}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{196, 143, 7}: "Shenzhen Yihao Hulian Science and Technology Co., Ltd.",
+ [3]byte{196, 145, 58}: "Shenzhen Sanland Electronic Co., ltd.",
+ [3]byte{196, 146, 76}: "KEISOKUKI CENTER CO.,LTD.",
+ [3]byte{196, 147, 0}: "8Devices",
+ [3]byte{196, 147, 19}: "100fio networks technology llc",
+ [3]byte{196, 147, 128}: "Speedytel technology",
+ [3]byte{196, 149, 162}: "SHENZHEN WEIJIU INDUSTRY AND TRADE DEVELOPMENT CO., LTD",
+ [3]byte{196, 152, 5}: "Minieum Networks, Inc",
+ [3]byte{196, 154, 2}: "LG Electronics (Mobile Communications)",
+ [3]byte{196, 157, 237}: "Microsoft Corporation",
+ [3]byte{196, 158, 65}: "G24 Power Limited",
+ [3]byte{196, 159, 243}: "Mciao Technologies, Inc.",
+ [3]byte{196, 163, 102}: "zte corporation",
+ [3]byte{196, 168, 29}: "D-Link International",
+ [3]byte{196, 170, 161}: "SUMMIT DEVELOPMENT, spol.s r.o.",
+ [3]byte{196, 171, 178}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{196, 173, 33}: "MEDIAEDGE Corporation",
+ [3]byte{196, 173, 241}: "GOPEACE Inc.",
+ [3]byte{196, 174, 18}: "Samsung Electronics Co.,Ltd",
+ [3]byte{196, 179, 1}: "Apple, Inc.",
+ [3]byte{196, 181, 18}: "General Electric Digital Energy",
+ [3]byte{196, 185, 205}: "Cisco Systems, Inc",
+ [3]byte{196, 186, 153}: "I+ME Actia Informatik und Mikro-Elektronik GmbH",
+ [3]byte{196, 186, 163}: "Beijing Winicssec Technologies Co., Ltd.",
+ [3]byte{196, 187, 76}: "Zebra Information Tech Co. Ltd",
+ [3]byte{196, 187, 234}: "Pakedge Device and Software Inc",
+ [3]byte{196, 189, 106}: "SKF GmbH",
+ [3]byte{196, 190, 132}: "Texas Instruments",
+ [3]byte{196, 190, 212}: "Avaya Inc",
+ [3]byte{196, 192, 174}: "MIDORI ELECTRONIC CO., LTD.",
+ [3]byte{196, 193, 159}: "National Oilwell Varco Instrumentation, Monitoring, and Optimization (NOV IMO)",
+ [3]byte{196, 197, 99}: "TECNO MOBILE LIMITED",
+ [3]byte{196, 199, 85}: "Beijing HuaqinWorld Technology Co.,Ltd",
+ [3]byte{196, 201, 25}: "Energy Imports Ltd",
+ [3]byte{196, 201, 236}: "Gugaoo HK Limited",
+ [3]byte{196, 202, 217}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{196, 203, 107}: "Airista Flow, Inc.",
+ [3]byte{196, 205, 69}: "Beijing Boomsense Technology CO.,LTD.",
+ [3]byte{196, 205, 130}: "Hangzhou Lowan Information Technology Co., Ltd.",
+ [3]byte{196, 209, 151}: "Ventia Utility Services",
+ [3]byte{196, 212, 137}: "JiangSu Joyque Information Industry Co.,Ltd",
+ [3]byte{196, 214, 85}: "Tercel technology co.,ltd",
+ [3]byte{196, 217, 135}: "Intel Corporate",
+ [3]byte{196, 218, 38}: "NOBLEX SA",
+ [3]byte{196, 218, 125}: "Ivium Technologies B.V.",
+ [3]byte{196, 224, 50}: "IEEE 1904.1 Working Group",
+ [3]byte{196, 225, 124}: "U2S co.",
+ [3]byte{196, 229, 16}: "Mechatro, Inc.",
+ [3]byte{196, 231, 190}: "SCSpro Co.,Ltd",
+ [3]byte{196, 233, 47}: "AB Sciex",
+ [3]byte{196, 233, 132}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{196, 234, 29}: "Technicolor",
+ [3]byte{196, 235, 227}: "RRCN SAS",
+ [3]byte{196, 237, 186}: "Texas Instruments",
+ [3]byte{196, 238, 174}: "VSS Monitoring",
+ [3]byte{196, 238, 245}: "II-VI Incorporated",
+ [3]byte{196, 239, 112}: "Home Skinovations",
+ [3]byte{196, 240, 129}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{196, 241, 209}: "BEIJING SOGOU TECHNOLOGY DEVELOPMENT CO., LTD.",
+ [3]byte{196, 243, 18}: "Texas Instruments",
+ [3]byte{196, 244, 100}: "Spica international",
+ [3]byte{196, 245, 124}: "Brocade Communications Systems, Inc.",
+ [3]byte{196, 245, 165}: "Kumalift Co., Ltd.",
+ [3]byte{196, 252, 228}: "DishTV NZ Ltd",
+ [3]byte{196, 255, 31}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{200, 0, 132}: "Cisco Systems, Inc",
+ [3]byte{200, 2, 16}: "LG Innotek",
+ [3]byte{200, 2, 88}: "ITW GSE ApS",
+ [3]byte{200, 2, 143}: "Nova Electronics (Shanghai) Co., Ltd.",
+ [3]byte{200, 2, 166}: "Beijing Newmine Technology",
+ [3]byte{200, 7, 24}: "TDSi",
+ [3]byte{200, 8, 233}: "LG Electronics",
+ [3]byte{200, 10, 169}: "QUANTA COMPUTER INC.",
+ [3]byte{200, 12, 200}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{200, 14, 20}: "AVM Audiovisuelles Marketing und Computersysteme GmbH",
+ [3]byte{200, 14, 119}: "Le Shi Zhi Xin Electronic Technology (Tianjin) Limited",
+ [3]byte{200, 14, 149}: "OmniLync Inc.",
+ [3]byte{200, 16, 115}: "CENTURY OPTICOMM CO.,LTD",
+ [3]byte{200, 20, 81}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{200, 20, 121}: "Samsung Electronics Co.,Ltd",
+ [3]byte{200, 22, 165}: "Masimo Corporation",
+ [3]byte{200, 22, 189}: "Qingdao Hisense Communications Co.,Ltd.",
+ [3]byte{200, 25, 247}: "Samsung Electronics Co.,Ltd",
+ [3]byte{200, 26, 254}: "DLOGIC GmbH",
+ [3]byte{200, 27, 92}: "BCTech",
+ [3]byte{200, 27, 107}: "Innova Security",
+ [3]byte{200, 30, 142}: "ADV Security (S) Pte Ltd",
+ [3]byte{200, 30, 231}: "Apple, Inc.",
+ [3]byte{200, 31, 102}: "Dell Inc.",
+ [3]byte{200, 31, 190}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{200, 31, 234}: "Avaya Inc",
+ [3]byte{200, 32, 142}: "Storagedata",
+ [3]byte{200, 33, 88}: "Intel Corporate",
+ [3]byte{200, 37, 225}: "Lemobile Information Technology (Beijing) Co., Ltd",
+ [3]byte{200, 41, 42}: "Barun Electronics",
+ [3]byte{200, 42, 20}: "Apple, Inc.",
+ [3]byte{200, 46, 148}: "Halfa Enterprise Co., Ltd.",
+ [3]byte{200, 49, 104}: "eZEX corporation",
+ [3]byte{200, 50, 50}: "Hunting Innova",
+ [3]byte{200, 51, 75}: "Apple, Inc.",
+ [3]byte{200, 52, 142}: "Intel Corporate",
+ [3]byte{200, 53, 184}: "Ericsson, EAB/RWI/K",
+ [3]byte{200, 56, 112}: "Samsung Electronics Co.,Ltd",
+ [3]byte{200, 58, 53}: "Tenda Technology Co., Ltd.",
+ [3]byte{200, 58, 107}: "Roku, Inc",
+ [3]byte{200, 59, 69}: "JRI",
+ [3]byte{200, 60, 133}: "Apple, Inc.",
+ [3]byte{200, 61, 151}: "Nokia Corporation",
+ [3]byte{200, 61, 212}: "CyberTAN Technology Inc.",
+ [3]byte{200, 61, 252}: "Pioneer DJ Corporation",
+ [3]byte{200, 62, 153}: "Texas Instruments",
+ [3]byte{200, 62, 167}: "KUNBUS GmbH",
+ [3]byte{200, 63, 38}: "Microsoft Corporation",
+ [3]byte{200, 63, 180}: "ARRIS Group, Inc.",
+ [3]byte{200, 64, 41}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{200, 69, 41}: "IMK Networks Co.,Ltd",
+ [3]byte{200, 69, 68}: "Asia Pacific CIS (Wuxi) Co, Ltd",
+ [3]byte{200, 69, 143}: "Wyler AG",
+ [3]byte{200, 71, 140}: "Beken Corporation",
+ [3]byte{200, 72, 245}: "MEDISON Xray Co., Ltd",
+ [3]byte{200, 76, 117}: "Cisco Systems, Inc",
+ [3]byte{200, 80, 233}: "Raisecom Technology CO., LTD",
+ [3]byte{200, 81, 149}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{200, 86, 69}: "Intermas France",
+ [3]byte{200, 86, 99}: "Sunflex Europe GmbH",
+ [3]byte{200, 91, 118}: "LCFC(HeFei) Electronics Technology co., ltd",
+ [3]byte{200, 96, 0}: "ASUSTek COMPUTER INC.",
+ [3]byte{200, 99, 241}: "Sony Interactive Entertainment Inc.",
+ [3]byte{200, 100, 199}: "zte corporation",
+ [3]byte{200, 102, 44}: "Beijing Haitai Fangyuan High Technology Co,.Ltd.",
+ [3]byte{200, 102, 93}: "Aerohive Networks Inc.",
+ [3]byte{200, 103, 94}: "Aerohive Networks Inc.",
+ [3]byte{200, 105, 205}: "Apple, Inc.",
+ [3]byte{200, 108, 30}: "Display Systems Ltd",
+ [3]byte{200, 108, 135}: "Zyxel Communications Corporation",
+ [3]byte{200, 108, 182}: "Optcom Co., Ltd.",
+ [3]byte{200, 111, 29}: "Apple, Inc.",
+ [3]byte{200, 114, 72}: "Aplicom Oy",
+ [3]byte{200, 115, 36}: "Sow Cheng Technology Co. Ltd.",
+ [3]byte{200, 117, 91}: "Quantify Technology Pty. Ltd.",
+ [3]byte{200, 119, 139}: "Themis Computer",
+ [3]byte{200, 123, 91}: "zte corporation",
+ [3]byte{200, 124, 188}: "Valink Co., Ltd.",
+ [3]byte{200, 125, 119}: "Shenzhen Kingtech Communication Equipment Co.,Ltd",
+ [3]byte{200, 126, 117}: "Samsung Electronics Co.,Ltd",
+ [3]byte{200, 132, 57}: "Sunrise Technologies",
+ [3]byte{200, 132, 71}: "Beautiful Enterprise Co., Ltd",
+ [3]byte{200, 133, 80}: "Apple, Inc.",
+ [3]byte{200, 135, 34}: "Lumenpulse",
+ [3]byte{200, 135, 59}: "Net Optics",
+ [3]byte{200, 138, 131}: "Dongguan HuaHong Electronics Co.,Ltd",
+ [3]byte{200, 139, 71}: "Nolangroup S.P.A con Socio Unico",
+ [3]byte{200, 141, 131}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{200, 142, 209}: "IEEE Registration Authority",
+ [3]byte{200, 144, 62}: "Pakton Technologies",
+ [3]byte{200, 145, 249}: "Sagemcom Broadband SAS",
+ [3]byte{200, 147, 70}: "MXCHIP Company Limited",
+ [3]byte{200, 147, 131}: "Embedded Automation, Inc.",
+ [3]byte{200, 148, 187}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{200, 148, 210}: "Jiangsu Datang Electronic Products Co., Ltd",
+ [3]byte{200, 151, 159}: "Nokia Corporation",
+ [3]byte{200, 156, 29}: "Cisco Systems, Inc",
+ [3]byte{200, 156, 220}: "Elitegroup Computer Systems Co.,Ltd.",
+ [3]byte{200, 159, 29}: "SHENZHEN COMMUNICATION TECHNOLOGIES CO.,LTD",
+ [3]byte{200, 159, 66}: "VDII Innovation AB",
+ [3]byte{200, 160, 48}: "Texas Instruments",
+ [3]byte{200, 161, 182}: "Shenzhen Longway Technologies Co., Ltd",
+ [3]byte{200, 161, 186}: "Neul Ltd",
+ [3]byte{200, 162, 206}: "Oasis Media Systems LLC",
+ [3]byte{200, 166, 32}: "Nebula, Inc",
+ [3]byte{200, 167, 10}: "Verizon Business",
+ [3]byte{200, 167, 41}: "SYStronics Co., Ltd.",
+ [3]byte{200, 168, 35}: "Samsung Electronics Co.,Ltd",
+ [3]byte{200, 169, 252}: "Goyoo Networks Inc.",
+ [3]byte{200, 170, 33}: "ARRIS Group, Inc.",
+ [3]byte{200, 170, 85}: "Hunan Comtom Electronic Incorporated Co.,Ltd",
+ [3]byte{200, 170, 204}: "Private",
+ [3]byte{200, 174, 156}: "Shanghai TYD Elecronic Technology Co. Ltd",
+ [3]byte{200, 175, 64}: "marco Systemanalyse und Entwicklung GmbH",
+ [3]byte{200, 175, 227}: "Hefei Radio Communication Technology Co., Ltd",
+ [3]byte{200, 178, 30}: "CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.",
+ [3]byte{200, 179, 115}: "Cisco-Linksys, LLC",
+ [3]byte{200, 181, 173}: "Hewlett Packard Enterprise",
+ [3]byte{200, 181, 183}: "Apple, Inc.",
+ [3]byte{200, 186, 148}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{200, 187, 211}: "Embrane",
+ [3]byte{200, 188, 200}: "Apple, Inc.",
+ [3]byte{200, 190, 25}: "D-Link International",
+ [3]byte{200, 193, 38}: "ZPM Industria e Comercio Ltda",
+ [3]byte{200, 193, 60}: "RuggedTek Hangzhou Co., Ltd",
+ [3]byte{200, 194, 198}: "Shanghai Airm2m Communication Technology Co., Ltd",
+ [3]byte{200, 197, 14}: "Shenzhen Primestone Network Technologies.Co., Ltd.",
+ [3]byte{200, 199, 145}: "Zero1.tv GmbH",
+ [3]byte{200, 203, 184}: "Hewlett Packard",
+ [3]byte{200, 205, 114}: "Sagemcom Broadband SAS",
+ [3]byte{200, 208, 25}: "Shanghai Tigercel Communication Technology Co.,Ltd",
+ [3]byte{200, 209, 11}: "Nokia Corporation",
+ [3]byte{200, 209, 42}: "Comtrend Corporation",
+ [3]byte{200, 209, 94}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{200, 209, 209}: "AGAiT Technology Corporation",
+ [3]byte{200, 210, 193}: "Jetlun (Shenzhen) Corporation",
+ [3]byte{200, 211, 163}: "D-Link International",
+ [3]byte{200, 211, 255}: "Hewlett Packard",
+ [3]byte{200, 212, 41}: "Muehlbauer AG",
+ [3]byte{200, 213, 144}: "FLIGHT DATA SYSTEMS",
+ [3]byte{200, 213, 254}: "Shenzhen Zowee Technology Co., Ltd",
+ [3]byte{200, 215, 25}: "Cisco-Linksys, LLC",
+ [3]byte{200, 215, 121}: "Qingdao Haier Telecom Co.,Ltd",
+ [3]byte{200, 215, 176}: "Samsung Electronics Co.,Ltd",
+ [3]byte{200, 219, 38}: "Logitech",
+ [3]byte{200, 221, 201}: "Lenovo Mobile Communication Technology Ltd.",
+ [3]byte{200, 222, 81}: "IntegraOptics",
+ [3]byte{200, 222, 201}: "Coriant",
+ [3]byte{200, 223, 124}: "Nokia Corporation",
+ [3]byte{200, 223, 132}: "Texas Instruments",
+ [3]byte{200, 224, 235}: "Apple, Inc.",
+ [3]byte{200, 225, 48}: "Milkyway Group Ltd",
+ [3]byte{200, 225, 167}: "Vertu Corporation Limited",
+ [3]byte{200, 228, 47}: "Technical Research Design and Development",
+ [3]byte{200, 231, 118}: "PTCOM Technology",
+ [3]byte{200, 231, 216}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+ [3]byte{200, 231, 240}: "Juniper Networks",
+ [3]byte{200, 238, 8}: "TANGTOP TECHNOLOGY CO.,LTD",
+ [3]byte{200, 238, 117}: "Pishion International Co. Ltd",
+ [3]byte{200, 238, 166}: "Shenzhen SHX Technology Co., Ltd",
+ [3]byte{200, 239, 46}: "Beijing Gefei Tech. Co., Ltd",
+ [3]byte{200, 242, 48}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{200, 243, 107}: "Yamato Scale Co.,Ltd.",
+ [3]byte{200, 243, 134}: "Shenzhen Xiaoniao Technology Co.,Ltd",
+ [3]byte{200, 244, 6}: "Avaya Inc",
+ [3]byte{200, 246, 80}: "Apple, Inc.",
+ [3]byte{200, 246, 141}: "S.E.TECHNOLOGIES LIMITED",
+ [3]byte{200, 247, 4}: "Building Block Video",
+ [3]byte{200, 247, 51}: "Intel Corporate",
+ [3]byte{200, 248, 109}: "Alcatel-Lucent Shanghai Bell Co., Ltd",
+ [3]byte{200, 249, 70}: "LOCOSYS Technology Inc.",
+ [3]byte{200, 249, 129}: "Seneca s.r.l.",
+ [3]byte{200, 249, 200}: "NewSharp Technology(SuZhou)Co,Ltd",
+ [3]byte{200, 249, 249}: "Cisco Systems, Inc",
+ [3]byte{200, 251, 38}: "Cisco SPVTG",
+ [3]byte{200, 253, 25}: "Texas Instruments",
+ [3]byte{200, 254, 48}: "Bejing DAYO Mobile Communication Technology Ltd.",
+ [3]byte{200, 255, 40}: "Liteon Technology Corporation",
+ [3]byte{200, 255, 119}: "Dyson Limited",
+ [3]byte{204, 0, 128}: "BETTINI SRL",
+ [3]byte{204, 3, 217}: "Cisco Meraki",
+ [3]byte{204, 3, 250}: "Technicolor CH USA Inc.",
+ [3]byte{204, 4, 124}: "G-WAY Microwave",
+ [3]byte{204, 4, 180}: "Select Comfort",
+ [3]byte{204, 5, 27}: "Samsung Electronics Co.,Ltd",
+ [3]byte{204, 6, 119}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{204, 7, 171}: "Samsung Electronics Co.,Ltd",
+ [3]byte{204, 7, 228}: "Lenovo Mobile Communication Technology Ltd.",
+ [3]byte{204, 8, 141}: "Apple, Inc.",
+ [3]byte{204, 8, 224}: "Apple, Inc.",
+ [3]byte{204, 9, 200}: "IMAQLIQ LTD",
+ [3]byte{204, 12, 218}: "Miljovakt AS",
+ [3]byte{204, 13, 236}: "Cisco SPVTG",
+ [3]byte{204, 16, 163}: "Beijing Nan Bao Technology Co., Ltd.",
+ [3]byte{204, 20, 166}: "Yichun MyEnergy Domain, Inc",
+ [3]byte{204, 22, 126}: "Cisco Systems, Inc",
+ [3]byte{204, 24, 123}: "Manzanita Systems, Inc.",
+ [3]byte{204, 25, 168}: "PT Inovação e Sistemas SA",
+ [3]byte{204, 26, 250}: "zte corporation",
+ [3]byte{204, 27, 224}: "IEEE Registration Authority",
+ [3]byte{204, 30, 255}: "Metrological Group BV",
+ [3]byte{204, 31, 196}: "InVue",
+ [3]byte{204, 32, 232}: "Apple, Inc.",
+ [3]byte{204, 34, 24}: "InnoDigital Co., Ltd.",
+ [3]byte{204, 34, 55}: "IEEE Registration Authority",
+ [3]byte{204, 37, 239}: "Apple, Inc.",
+ [3]byte{204, 38, 45}: "Verifi, LLC",
+ [3]byte{204, 41, 245}: "Apple, Inc.",
+ [3]byte{204, 42, 128}: "Micro-Biz intelligence solutions Co.,Ltd",
+ [3]byte{204, 45, 33}: "Tenda Technology Co.,Ltd.Dongguan branch",
+ [3]byte{204, 45, 131}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{204, 45, 140}: "LG ELECTRONICS INC",
+ [3]byte{204, 45, 224}: "Routerboard.com",
+ [3]byte{204, 47, 113}: "Intel Corporate",
+ [3]byte{204, 48, 128}: "VAIO Corporation",
+ [3]byte{204, 51, 187}: "Sagemcom Broadband SAS",
+ [3]byte{204, 52, 41}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{204, 52, 215}: "GEWISS S.P.A.",
+ [3]byte{204, 53, 64}: "Technicolor CH USA Inc.",
+ [3]byte{204, 55, 171}: "Edgecore Networks Corportation",
+ [3]byte{204, 57, 140}: "Shiningtek",
+ [3]byte{204, 58, 97}: "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+ [3]byte{204, 58, 223}: "Private",
+ [3]byte{204, 59, 62}: "Lester Electrical",
+ [3]byte{204, 60, 63}: "SA.S.S. Datentechnik AG",
+ [3]byte{204, 61, 130}: "Intel Corporate",
+ [3]byte{204, 62, 95}: "Hewlett Packard",
+ [3]byte{204, 63, 29}: "Intesis Software SL",
+ [3]byte{204, 64, 208}: "NETGEAR",
+ [3]byte{204, 67, 227}: "Trump s.a.",
+ [3]byte{204, 68, 99}: "Apple, Inc.",
+ [3]byte{204, 70, 57}: "WAAV, Inc.",
+ [3]byte{204, 70, 214}: "Cisco Systems, Inc",
+ [3]byte{204, 71, 3}: "Intercon Systems Co., Ltd.",
+ [3]byte{204, 74, 225}: "fourtec -Fourier Technologies",
+ [3]byte{204, 75, 115}: "AMPAK Technology, Inc.",
+ [3]byte{204, 75, 251}: "Hellberg Safety AB",
+ [3]byte{204, 78, 36}: "Brocade Communications Systems, Inc.",
+ [3]byte{204, 78, 236}: "HUMAX Co., Ltd.",
+ [3]byte{204, 80, 10}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{204, 80, 28}: "KVH Industries, Inc.",
+ [3]byte{204, 80, 118}: "Ocom Communications, Inc.",
+ [3]byte{204, 82, 175}: "Universal Global Scientific Industrial Co., Ltd.",
+ [3]byte{204, 83, 181}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{204, 84, 89}: "OnTime Networks AS",
+ [3]byte{204, 85, 173}: "RIM",
+ [3]byte{204, 89, 62}: "TOUMAZ LTD",
+ [3]byte{204, 90, 83}: "Cisco Systems, Inc",
+ [3]byte{204, 92, 117}: "Weightech Com. Imp. Exp. Equip. Pesagem Ltda",
+ [3]byte{204, 93, 78}: "Zyxel Communications Corporation",
+ [3]byte{204, 93, 87}: "Information System Research Institute,Inc.",
+ [3]byte{204, 95, 191}: "Topwise 3G Communication Co., Ltd.",
+ [3]byte{204, 96, 187}: "Empower RF Systems",
+ [3]byte{204, 97, 229}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{204, 101, 173}: "ARRIS Group, Inc.",
+ [3]byte{204, 102, 178}: "Nokia",
+ [3]byte{204, 105, 176}: "Global Traffic Technologies, LLC",
+ [3]byte{204, 107, 152}: "Minetec Wireless Technologies",
+ [3]byte{204, 107, 241}: "Sound Masking Inc.",
+ [3]byte{204, 109, 160}: "Roku, Inc.",
+ [3]byte{204, 109, 239}: "TJK Tietolaite Oy",
+ [3]byte{204, 110, 164}: "Samsung Electronics Co.,Ltd",
+ [3]byte{204, 114, 15}: "Viscount Systems Inc.",
+ [3]byte{204, 115, 20}: "HONG KONG WHEATEK TECHNOLOGY LIMITED",
+ [3]byte{204, 116, 152}: "Filmetrics Inc.",
+ [3]byte{204, 118, 105}: "SEETECH",
+ [3]byte{204, 120, 95}: "Apple, Inc.",
+ [3]byte{204, 120, 171}: "Texas Instruments",
+ [3]byte{204, 121, 74}: "BLU Products Inc.",
+ [3]byte{204, 121, 207}: "SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.",
+ [3]byte{204, 122, 48}: "CMAX Wireless Co., Ltd.",
+ [3]byte{204, 123, 53}: "zte corporation",
+ [3]byte{204, 125, 55}: "ARRIS Group, Inc.",
+ [3]byte{204, 126, 231}: "Panasonic Corporation AVC Networks Company",
+ [3]byte{204, 129, 218}: "Phicomm (Shanghai) Co., Ltd.",
+ [3]byte{204, 130, 235}: "KYOCERA CORPORATION",
+ [3]byte{204, 133, 108}: "SHENZHEN MDK DIGITAL TECHNOLOGY CO.,LTD",
+ [3]byte{204, 137, 253}: "Nokia Corporation",
+ [3]byte{204, 140, 218}: "Shenzhen Wei Da Intelligent Technology Go.,Ltd",
+ [3]byte{204, 140, 227}: "Texas Instruments",
+ [3]byte{204, 144, 147}: "Hansong Tehnologies",
+ [3]byte{204, 144, 232}: "Shenzhen YOUHUA Technology Co., Ltd",
+ [3]byte{204, 145, 43}: "TE Connectivity Touch Solutions",
+ [3]byte{204, 148, 74}: "Pfeiffer Vacuum GmbH",
+ [3]byte{204, 148, 112}: "Kinestral Technologies, Inc.",
+ [3]byte{204, 149, 215}: "Vizio, Inc",
+ [3]byte{204, 150, 53}: "LVS Co.,Ltd.",
+ [3]byte{204, 150, 160}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{204, 152, 145}: "Cisco Systems, Inc",
+ [3]byte{204, 158, 0}: "Nintendo Co., Ltd.",
+ [3]byte{204, 159, 53}: "Transbit Sp. z o.o.",
+ [3]byte{204, 159, 122}: "Chiun Mai Communication Systems, Inc",
+ [3]byte{204, 160, 229}: "DZG Metering GmbH",
+ [3]byte{204, 162, 25}: "SHENZHEN ALONG INVESTMENT CO.,LTD",
+ [3]byte{204, 162, 35}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{204, 162, 96}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+ [3]byte{204, 163, 116}: "Guangdong Guanglian Electronic Technology Co.Ltd",
+ [3]byte{204, 164, 98}: "ARRIS Group, Inc.",
+ [3]byte{204, 164, 175}: "Shenzhen Sowell Technology Co., LTD",
+ [3]byte{204, 166, 20}: "AIFA TECHNOLOGY CORP.",
+ [3]byte{204, 175, 120}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{204, 176, 218}: "Liteon Technology Corporation",
+ [3]byte{204, 177, 26}: "Samsung Electronics Co.,Ltd",
+ [3]byte{204, 178, 85}: "D-Link International",
+ [3]byte{204, 179, 171}: "shenzhen Biocare Bio-Medical Equipment Co.,Ltd.",
+ [3]byte{204, 179, 248}: "FUJITSU ISOTEC LIMITED",
+ [3]byte{204, 181, 90}: "Fraunhofer ITWM",
+ [3]byte{204, 182, 145}: "NECMagnusCommunications",
+ [3]byte{204, 184, 136}: "AnB Securite s.a.",
+ [3]byte{204, 184, 168}: "AMPAK Technology, Inc.",
+ [3]byte{204, 184, 241}: "EAGLE KINGDOM TECHNOLOGIES LIMITED",
+ [3]byte{204, 189, 53}: "Steinel GmbH",
+ [3]byte{204, 189, 211}: "Ultimaker B.V.",
+ [3]byte{204, 190, 89}: "Calix Inc.",
+ [3]byte{204, 190, 113}: "OptiLogix BV",
+ [3]byte{204, 193, 4}: "Applied Technical Systems",
+ [3]byte{204, 195, 234}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{204, 197, 10}: "SHENZHEN DAJIAHAO TECHNOLOGY CO.,LTD",
+ [3]byte{204, 197, 239}: "Co-Comm Servicios Telecomunicaciones S.L.",
+ [3]byte{204, 198, 43}: "Tri-Systems Corporation",
+ [3]byte{204, 199, 96}: "Apple, Inc.",
+ [3]byte{204, 200, 215}: "CIAS Elettronica srl",
+ [3]byte{204, 204, 78}: "Sun Fountainhead USA. Corp",
+ [3]byte{204, 204, 129}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{204, 205, 100}: "SM-Electronic GmbH",
+ [3]byte{204, 206, 30}: "AVM Audiovisuelles Marketing und Computersysteme GmbH",
+ [3]byte{204, 206, 64}: "Janteq Corp",
+ [3]byte{204, 210, 155}: "Shenzhen Bopengfa Elec&Technology CO.,Ltd",
+ [3]byte{204, 211, 30}: "IEEE Registration Authority",
+ [3]byte{204, 211, 226}: "Jiangsu Yinhe Electronics Co.,Ltd.",
+ [3]byte{204, 213, 57}: "Cisco Systems, Inc",
+ [3]byte{204, 216, 17}: "Aiconn Technology Corporation",
+ [3]byte{204, 216, 193}: "Cisco Systems, Inc",
+ [3]byte{204, 217, 233}: "SCR Engineers Ltd.",
+ [3]byte{204, 224, 195}: "Mangstor, Inc.",
+ [3]byte{204, 225, 127}: "Juniper Networks",
+ [3]byte{204, 225, 213}: "BUFFALO.INC",
+ [3]byte{204, 231, 152}: "My Social Stuff",
+ [3]byte{204, 231, 223}: "American Magnetics, Inc.",
+ [3]byte{204, 232, 172}: "SOYEA Technology Co.,Ltd.",
+ [3]byte{204, 234, 28}: "DCONWORKS Co., Ltd",
+ [3]byte{204, 238, 217}: "VAHLE DETO GmbH",
+ [3]byte{204, 239, 72}: "Cisco Systems, Inc",
+ [3]byte{204, 243, 165}: "Chi Mei Communication Systems, Inc",
+ [3]byte{204, 244, 7}: "EUKREA ELECTROMATIQUE SARL",
+ [3]byte{204, 245, 56}: "3isysnetworks",
+ [3]byte{204, 246, 122}: "Ayecka Communication Systems LTD",
+ [3]byte{204, 248, 65}: "Lumewave",
+ [3]byte{204, 248, 240}: "Xi'an HISU Multimedia Technology Co.,Ltd.",
+ [3]byte{204, 249, 84}: "Avaya Inc",
+ [3]byte{204, 249, 87}: "u-blox AG",
+ [3]byte{204, 249, 232}: "Samsung Electronics Co.,Ltd",
+ [3]byte{204, 250, 0}: "LG Electronics (Mobile Communications)",
+ [3]byte{204, 251, 101}: "Nintendo Co., Ltd.",
+ [3]byte{204, 252, 109}: "RIZ TRANSMITTERS",
+ [3]byte{204, 252, 177}: "Wireless Technology, Inc.",
+ [3]byte{204, 253, 23}: "TCT mobile ltd",
+ [3]byte{204, 254, 60}: "Samsung Electronics Co.,Ltd",
+ [3]byte{208, 3, 75}: "Apple, Inc.",
+ [3]byte{208, 4, 1}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{208, 4, 146}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{208, 5, 42}: "Arcadyan Corporation",
+ [3]byte{208, 7, 144}: "Texas Instruments",
+ [3]byte{208, 7, 202}: "Juniper Networks",
+ [3]byte{208, 10, 171}: "Yokogawa Digital Computer Corporation",
+ [3]byte{208, 14, 164}: "Porsche Cars North America",
+ [3]byte{208, 14, 217}: "Taicang T&W Electronics",
+ [3]byte{208, 15, 109}: "T&W Electronics Company",
+ [3]byte{208, 18, 66}: "BIOS Corporation",
+ [3]byte{208, 19, 30}: "Sunrex Technology Corp",
+ [3]byte{208, 19, 253}: "LG Electronics (Mobile Communications)",
+ [3]byte{208, 21, 74}: "zte corporation",
+ [3]byte{208, 23, 106}: "Samsung Electronics Co.,Ltd",
+ [3]byte{208, 23, 194}: "ASUSTek COMPUTER INC.",
+ [3]byte{208, 26, 167}: "UniPrint",
+ [3]byte{208, 28, 187}: "Beijing Ctimes Digital Technology Co., Ltd.",
+ [3]byte{208, 34, 18}: "IEEE Registration Authority",
+ [3]byte{208, 34, 190}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{208, 35, 219}: "Apple, Inc.",
+ [3]byte{208, 37, 22}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+ [3]byte{208, 37, 68}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{208, 37, 152}: "Apple, Inc.",
+ [3]byte{208, 39, 136}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{208, 44, 69}: "littleBits Electronics, Inc.",
+ [3]byte{208, 45, 179}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{208, 49, 16}: "Ingenic Semiconductor Co.,Ltd",
+ [3]byte{208, 49, 105}: "Samsung Electronics Co.,Ltd",
+ [3]byte{208, 51, 17}: "Apple, Inc.",
+ [3]byte{208, 55, 66}: "Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd",
+ [3]byte{208, 55, 97}: "Texas Instruments",
+ [3]byte{208, 57, 114}: "Texas Instruments",
+ [3]byte{208, 57, 179}: "ARRIS Group, Inc.",
+ [3]byte{208, 61, 195}: "AQ Corporation",
+ [3]byte{208, 62, 92}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{208, 67, 30}: "Dell Inc.",
+ [3]byte{208, 70, 220}: "Southwest Research Institute",
+ [3]byte{208, 72, 243}: "DATTUS Inc",
+ [3]byte{208, 73, 139}: "ZOOM SERVER",
+ [3]byte{208, 76, 193}: "SINTRONES Technology Corp.",
+ [3]byte{208, 77, 44}: "Roku, Inc.",
+ [3]byte{208, 79, 126}: "Apple, Inc.",
+ [3]byte{208, 80, 153}: "ASRock Incorporation",
+ [3]byte{208, 81, 98}: "Sony Mobile Communications AB",
+ [3]byte{208, 82, 168}: "Physical Graph Corporation",
+ [3]byte{208, 83, 73}: "Liteon Technology Corporation",
+ [3]byte{208, 84, 45}: "Cambridge Industries(Group) Co.,Ltd.",
+ [3]byte{208, 85, 178}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+ [3]byte{208, 87, 76}: "Cisco Systems, Inc",
+ [3]byte{208, 87, 123}: "Intel Corporate",
+ [3]byte{208, 87, 133}: "Pantech Co., Ltd.",
+ [3]byte{208, 87, 161}: "Werma Signaltechnik GmbH & Co. KG",
+ [3]byte{208, 88, 117}: "Active Control Technology Inc.",
+ [3]byte{208, 88, 168}: "zte corporation",
+ [3]byte{208, 89, 149}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{208, 89, 195}: "CeraMicro Technology Corporation",
+ [3]byte{208, 89, 228}: "Samsung Electronics Co.,Ltd",
+ [3]byte{208, 90, 0}: "Technicolor CH USA Inc.",
+ [3]byte{208, 90, 15}: "I-BT DIGITAL CO.,LTD",
+ [3]byte{208, 90, 241}: "Shenzhen Pulier Tech CO.,Ltd",
+ [3]byte{208, 91, 168}: "zte corporation",
+ [3]byte{208, 92, 122}: "Sartura d.o.o.",
+ [3]byte{208, 95, 184}: "Texas Instruments",
+ [3]byte{208, 95, 206}: "Hitachi Data Systems",
+ [3]byte{208, 96, 140}: "zte corporation",
+ [3]byte{208, 98, 160}: "China Essence Technology (Zhumadian) Co., Ltd.",
+ [3]byte{208, 99, 77}: "Meiko Maschinenbau GmbH &amp; Co. KG",
+ [3]byte{208, 99, 180}: "SolidRun Ltd.",
+ [3]byte{208, 101, 202}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{208, 102, 109}: "Shenzhen Bus-Lan Technology Co., Ltd.",
+ [3]byte{208, 102, 123}: "Samsung Electronics Co.,Ltd",
+ [3]byte{208, 103, 38}: "Hewlett Packard Enterprise",
+ [3]byte{208, 103, 229}: "Dell Inc.",
+ [3]byte{208, 105, 158}: "LUMINEX Lighting Control Equipment",
+ [3]byte{208, 105, 208}: "Verto Medical Solutions, LLC",
+ [3]byte{208, 106, 31}: "BSE CO.,LTD.",
+ [3]byte{208, 111, 74}: "TOPWELL INTERNATIONAL HOLDINGS LIMITED",
+ [3]byte{208, 111, 130}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{208, 113, 196}: "zte corporation",
+ [3]byte{208, 114, 220}: "Cisco Systems, Inc",
+ [3]byte{208, 115, 127}: "Mini-Circuits",
+ [3]byte{208, 115, 142}: "DONG OH PRECISION CO., LTD.",
+ [3]byte{208, 115, 213}: "LIFI LABS MANAGEMENT PTY LTD",
+ [3]byte{208, 117, 190}: "Reno A&E",
+ [3]byte{208, 118, 80}: "IEEE Registration Authority",
+ [3]byte{208, 122, 181}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{208, 124, 45}: "Leie IOT technology Co., Ltd",
+ [3]byte{208, 125, 229}: "Forward Pay Systems, Inc.",
+ [3]byte{208, 126, 40}: "Hewlett Packard",
+ [3]byte{208, 126, 53}: "Intel Corporate",
+ [3]byte{208, 127, 196}: "Ou Wei Technology Co.,Ltd. of Shenzhen City",
+ [3]byte{208, 131, 212}: "Xtel Wireless ApS",
+ [3]byte{208, 132, 176}: "Sagemcom Broadband SAS",
+ [3]byte{208, 135, 226}: "Samsung Electronics Co.,Ltd",
+ [3]byte{208, 137, 153}: "APCON, Inc.",
+ [3]byte{208, 138, 85}: "Skullcandy",
+ [3]byte{208, 139, 126}: "Passif Semiconductor",
+ [3]byte{208, 140, 181}: "Texas Instruments",
+ [3]byte{208, 140, 255}: "UPWIS AB",
+ [3]byte{208, 146, 158}: "Microsoft Corporation",
+ [3]byte{208, 147, 128}: "Ducere Technologies Pvt. Ltd.",
+ [3]byte{208, 147, 248}: "Stonestreet One LLC",
+ [3]byte{208, 148, 102}: "Dell Inc.",
+ [3]byte{208, 149, 199}: "Pantech Co., Ltd.",
+ [3]byte{208, 150, 251}: "DASAN Network Solutions",
+ [3]byte{208, 153, 213}: "Alcatel-Lucent",
+ [3]byte{208, 155, 5}: "Emtronix",
+ [3]byte{208, 156, 48}: "Foster Electric Company, Limited",
+ [3]byte{208, 157, 10}: "LINKCOM",
+ [3]byte{208, 157, 171}: "TCT mobile ltd",
+ [3]byte{208, 160, 214}: "Chengdu TD Tech Ltd.",
+ [3]byte{208, 163, 17}: "Neuberger Gebäudeautomation GmbH",
+ [3]byte{208, 164, 177}: "Sonifex Ltd.",
+ [3]byte{208, 165, 166}: "Cisco Systems, Inc",
+ [3]byte{208, 166, 55}: "Apple, Inc.",
+ [3]byte{208, 174, 236}: "Alpha Networks Inc.",
+ [3]byte{208, 175, 182}: "Linktop Technology Co., LTD",
+ [3]byte{208, 176, 205}: "Moen",
+ [3]byte{208, 177, 40}: "Samsung Electronics Co.,Ltd",
+ [3]byte{208, 178, 196}: "Technicolor CH USA Inc.",
+ [3]byte{208, 179, 63}: "Shenzhen TINNO Mobile Technology Corp.",
+ [3]byte{208, 180, 152}: "Robert Bosch LLC Automotive Electronics",
+ [3]byte{208, 181, 35}: "Bestcare Cloucal Corp.",
+ [3]byte{208, 181, 61}: "SEPRO ROBOTIQUE",
+ [3]byte{208, 181, 194}: "Texas Instruments",
+ [3]byte{208, 186, 228}: "Shanghai MXCHIP Information Technology Co., Ltd.",
+ [3]byte{208, 187, 128}: "SHL Telemedicine International Ltd.",
+ [3]byte{208, 189, 1}: "DS International",
+ [3]byte{208, 190, 44}: "CNSLink Co., Ltd.",
+ [3]byte{208, 191, 156}: "Hewlett Packard",
+ [3]byte{208, 192, 191}: "Actions Microelectronics Co., Ltd",
+ [3]byte{208, 193, 147}: "SKYBELL, INC",
+ [3]byte{208, 193, 177}: "Samsung Electronics Co.,Ltd",
+ [3]byte{208, 194, 130}: "Cisco Systems, Inc",
+ [3]byte{208, 196, 47}: "Tamagawa Seiki Co.,Ltd.",
+ [3]byte{208, 197, 243}: "Apple, Inc.",
+ [3]byte{208, 199, 137}: "Cisco Systems, Inc",
+ [3]byte{208, 199, 192}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{208, 205, 225}: "Scientech Electronics",
+ [3]byte{208, 207, 94}: "Energy Micro AS",
+ [3]byte{208, 208, 75}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{208, 208, 253}: "Cisco Systems, Inc",
+ [3]byte{208, 210, 18}: "K2NET Co.,Ltd.",
+ [3]byte{208, 210, 134}: "Beckman Coulter K.K.",
+ [3]byte{208, 210, 176}: "Apple, Inc.",
+ [3]byte{208, 211, 252}: "Mios, Ltd.",
+ [3]byte{208, 212, 18}: "ADB Broadband Italia",
+ [3]byte{208, 212, 113}: "MVTECH co., Ltd",
+ [3]byte{208, 214, 204}: "Wintop",
+ [3]byte{208, 217, 79}: "IEEE Registration Authority",
+ [3]byte{208, 219, 50}: "Nokia Corporation",
+ [3]byte{208, 223, 154}: "Liteon Technology Corporation",
+ [3]byte{208, 223, 178}: "Genie Networks Limited",
+ [3]byte{208, 223, 199}: "Samsung Electronics Co.,Ltd",
+ [3]byte{208, 225, 64}: "Apple, Inc.",
+ [3]byte{208, 227, 71}: "Yoga",
+ [3]byte{208, 228, 11}: "Wearable Inc.",
+ [3]byte{208, 228, 74}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{208, 229, 77}: "ARRIS Group, Inc.",
+ [3]byte{208, 231, 130}: "AzureWave Technology Inc.",
+ [3]byte{208, 235, 3}: "Zhehua technology limited",
+ [3]byte{208, 235, 158}: "Seowoo Inc.",
+ [3]byte{208, 240, 219}: "Ericsson",
+ [3]byte{208, 242, 127}: "SteadyServ Technoligies, LLC",
+ [3]byte{208, 247, 59}: "Helmut Mauell GmbH Werk Weida",
+ [3]byte{208, 248, 140}: "Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.",
+ [3]byte{208, 250, 29}: "Qihoo 360 Technology Co.,Ltd",
+ [3]byte{208, 252, 204}: "Samsung Electronics Co.,Ltd",
+ [3]byte{208, 255, 80}: "Texas Instruments",
+ [3]byte{208, 255, 152}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{212, 0, 13}: "Phoenix Broadband Technologies, LLC.",
+ [3]byte{212, 0, 87}: "MC Technologies GmbH",
+ [3]byte{212, 1, 41}: "Broadcom",
+ [3]byte{212, 1, 109}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{212, 2, 74}: "Delphian Systems LLC",
+ [3]byte{212, 4, 205}: "ARRIS Group, Inc.",
+ [3]byte{212, 4, 255}: "Juniper Networks",
+ [3]byte{212, 5, 152}: "ARRIS Group, Inc.",
+ [3]byte{212, 10, 169}: "ARRIS Group, Inc.",
+ [3]byte{212, 11, 26}: "HTC Corporation",
+ [3]byte{212, 11, 185}: "Solid Semecs bv.",
+ [3]byte{212, 15, 178}: "Applied Micro Electronics AME bv",
+ [3]byte{212, 16, 144}: "iNFORM Systems AG",
+ [3]byte{212, 16, 207}: "Huanshun Network Science and Technology Co., Ltd.",
+ [3]byte{212, 17, 214}: "ShotSpotter, Inc.",
+ [3]byte{212, 18, 150}: "Anobit Technologies Ltd.",
+ [3]byte{212, 18, 187}: "Quadrant Components Inc. Ltd",
+ [3]byte{212, 19, 111}: "Asia Pacific Brands",
+ [3]byte{212, 26, 63}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{212, 28, 28}: "RCF S.P.A.",
+ [3]byte{212, 29, 113}: "Palo Alto Networks",
+ [3]byte{212, 30, 53}: "TOHO Electronics INC.",
+ [3]byte{212, 31, 12}: "JAI Oy",
+ [3]byte{212, 32, 109}: "HTC Corporation",
+ [3]byte{212, 33, 34}: "Sercomm Corporation",
+ [3]byte{212, 34, 63}: "Lenovo Mobile Communication Technology Ltd.",
+ [3]byte{212, 34, 78}: "Alcatel Lucent",
+ [3]byte{212, 37, 139}: "Intel Corporate",
+ [3]byte{212, 39, 81}: "Infopia Co., Ltd",
+ [3]byte{212, 40, 178}: "ioBridge, Inc.",
+ [3]byte{212, 40, 213}: "TCT mobile ltd",
+ [3]byte{212, 41, 234}: "Zimory GmbH",
+ [3]byte{212, 44, 15}: "ARRIS Group, Inc.",
+ [3]byte{212, 44, 61}: "Sky Light Digital Limited",
+ [3]byte{212, 44, 68}: "Cisco Systems, Inc",
+ [3]byte{212, 47, 35}: "Akenori PTE Ltd",
+ [3]byte{212, 49, 157}: "Sinwatec",
+ [3]byte{212, 50, 102}: "Fike Corporation",
+ [3]byte{212, 54, 57}: "Texas Instruments",
+ [3]byte{212, 54, 219}: "Jiangsu Toppower Automotive Electronics Co., Ltd",
+ [3]byte{212, 55, 215}: "zte corporation",
+ [3]byte{212, 56, 156}: "Sony Mobile Communications AB",
+ [3]byte{212, 58, 101}: "IGRS Engineering Lab Ltd.",
+ [3]byte{212, 58, 233}: "DONGGUAN ipt INDUSTRIAL CO., LTD",
+ [3]byte{212, 61, 103}: "Carma Industries Inc.",
+ [3]byte{212, 61, 126}: "Micro-Star Int'l Co, Ltd",
+ [3]byte{212, 64, 240}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{212, 65, 101}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+ [3]byte{212, 67, 168}: "Changzhou Haojie Electric Co., Ltd.",
+ [3]byte{212, 69, 232}: "Jiangxi Hongpai Technology Co., Ltd.",
+ [3]byte{212, 75, 94}: "TAIYO YUDEN CO., LTD.",
+ [3]byte{212, 76, 36}: "Vuppalamritha Magnetic Components LTD",
+ [3]byte{212, 76, 156}: "Shenzhen YOOBAO Technology Co.Ltd",
+ [3]byte{212, 76, 167}: "Informtekhnika & Communication, LLC",
+ [3]byte{212, 79, 128}: "Kemper Digital GmbH",
+ [3]byte{212, 80, 63}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{212, 80, 122}: "CEIVA Logic, Inc",
+ [3]byte{212, 82, 42}: "TangoWiFi.com",
+ [3]byte{212, 82, 81}: "IBT Ingenieurbureau Broennimann Thun",
+ [3]byte{212, 82, 151}: "nSTREAMS Technologies, Inc.",
+ [3]byte{212, 83, 175}: "VIGO System S.A.",
+ [3]byte{212, 85, 86}: "Fiber Mountain Inc.",
+ [3]byte{212, 85, 190}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+ [3]byte{212, 90, 178}: "Galleon Systems",
+ [3]byte{212, 92, 112}: "Wi-Fi Alliance",
+ [3]byte{212, 93, 66}: "Nokia Corporation",
+ [3]byte{212, 93, 223}: "PEGATRON CORPORATION",
+ [3]byte{212, 95, 37}: "Shenzhen YOUHUA Technology Co., Ltd",
+ [3]byte{212, 97, 46}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{212, 97, 50}: "Pro Concept Manufacturer Co.,Ltd.",
+ [3]byte{212, 97, 157}: "Apple, Inc.",
+ [3]byte{212, 97, 254}: "Hangzhou H3C Technologies Co., Limited",
+ [3]byte{212, 99, 198}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{212, 99, 254}: "Arcadyan Corporation",
+ [3]byte{212, 100, 247}: "CHENGDU USEE DIGITAL TECHNOLOGY CO., LTD",
+ [3]byte{212, 102, 168}: "Riedo Networks GmbH",
+ [3]byte{212, 103, 97}: "SAHAB TECHNOLOGY",
+ [3]byte{212, 103, 231}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{212, 104, 77}: "Ruckus Wireless",
+ [3]byte{212, 104, 103}: "Neoventus Design Group",
+ [3]byte{212, 104, 186}: "Shenzhen Sundray Technologies Company Limited",
+ [3]byte{212, 106, 106}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{212, 106, 145}: "Snap AV",
+ [3]byte{212, 106, 168}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{212, 108, 191}: "Goodrich ISR",
+ [3]byte{212, 108, 218}: "CSM GmbH",
+ [3]byte{212, 109, 80}: "Cisco Systems, Inc",
+ [3]byte{212, 110, 14}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{212, 110, 92}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{212, 111, 66}: "WAXESS USA Inc",
+ [3]byte{212, 114, 8}: "Bragi GmbH",
+ [3]byte{212, 118, 234}: "zte corporation",
+ [3]byte{212, 120, 86}: "Avaya Inc",
+ [3]byte{212, 121, 195}: "Cameronet GmbH & Co. KG",
+ [3]byte{212, 122, 226}: "Samsung Electronics Co.,Ltd",
+ [3]byte{212, 123, 53}: "NEO Monitors AS",
+ [3]byte{212, 123, 117}: "HARTING Electronics GmbH",
+ [3]byte{212, 123, 176}: "ASKEY COMPUTER CORP",
+ [3]byte{212, 125, 252}: "TECNO MOBILE LIMITED",
+ [3]byte{212, 129, 202}: "iDevices, LLC",
+ [3]byte{212, 129, 215}: "Dell Inc.",
+ [3]byte{212, 130, 62}: "Argosy Technologies, Ltd.",
+ [3]byte{212, 131, 4}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+ [3]byte{212, 133, 100}: "Hewlett Packard",
+ [3]byte{212, 135, 216}: "Samsung Electronics Co.,Ltd",
+ [3]byte{212, 136, 63}: "HDPRO CO., LTD.",
+ [3]byte{212, 136, 144}: "Samsung Electronics Co.,Ltd",
+ [3]byte{212, 140, 181}: "Cisco Systems, Inc",
+ [3]byte{212, 141, 217}: "Meld Technology, Inc",
+ [3]byte{212, 143, 51}: "Microsoft Corporation",
+ [3]byte{212, 143, 170}: "Sogecam Industrial, S.A.",
+ [3]byte{212, 144, 224}: "Topcon Electronics GmbH & Co. KG",
+ [3]byte{212, 145, 175}: "Electroacustica General Iberica, S.A.",
+ [3]byte{212, 147, 152}: "Nokia Corporation",
+ [3]byte{212, 147, 160}: "Fidelix Oy",
+ [3]byte{212, 148, 90}: "COSMO CO., LTD",
+ [3]byte{212, 148, 161}: "Texas Instruments",
+ [3]byte{212, 148, 232}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{212, 149, 36}: "Clover Network, Inc.",
+ [3]byte{212, 150, 223}: "SUNGJIN C&T CO.,LTD",
+ [3]byte{212, 151, 11}: "Xiaomi Communications Co Ltd",
+ [3]byte{212, 154, 32}: "Apple, Inc.",
+ [3]byte{212, 155, 92}: "Chongqing Miedu Technology Co., Ltd.",
+ [3]byte{212, 156, 40}: "JayBird LLC",
+ [3]byte{212, 156, 142}: "University of FUKUI",
+ [3]byte{212, 158, 109}: "Wuhan Zhongyuan Huadian Science & Technology Co.,",
+ [3]byte{212, 160, 42}: "Cisco Systems, Inc",
+ [3]byte{212, 161, 72}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{212, 164, 37}: "SMAX Technology Co., Ltd.",
+ [3]byte{212, 164, 153}: "InView Technology Corporation",
+ [3]byte{212, 169, 40}: "GreenWave Reality Inc",
+ [3]byte{212, 170, 255}: "MICRO WORLD",
+ [3]byte{212, 172, 78}: "BODi rS, LLC",
+ [3]byte{212, 173, 45}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{212, 174, 5}: "Samsung Electronics Co.,Ltd",
+ [3]byte{212, 174, 82}: "Dell Inc.",
+ [3]byte{212, 177, 16}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{212, 177, 105}: "Le Shi Zhi Xin Electronic Technology (Tianjin) Limited",
+ [3]byte{212, 178, 122}: "ARRIS Group, Inc.",
+ [3]byte{212, 180, 62}: "Messcomp Datentechnik GmbH",
+ [3]byte{212, 184, 255}: "Home Control Singapore Pte Ltd",
+ [3]byte{212, 190, 217}: "Dell Inc.",
+ [3]byte{212, 191, 45}: "SE Controls Asia Pacific Ltd",
+ [3]byte{212, 191, 127}: "UPVEL",
+ [3]byte{212, 193, 200}: "zte corporation",
+ [3]byte{212, 193, 252}: "Nokia Corporation",
+ [3]byte{212, 199, 102}: "Acentic GmbH",
+ [3]byte{212, 200, 176}: "Prime Electronics & Satellitics Inc.",
+ [3]byte{212, 201, 178}: "Quanergy Systems Inc",
+ [3]byte{212, 201, 239}: "Hewlett Packard",
+ [3]byte{212, 202, 109}: "Routerboard.com",
+ [3]byte{212, 202, 110}: "u-blox AG",
+ [3]byte{212, 203, 175}: "Nokia Corporation",
+ [3]byte{212, 206, 184}: "Enatel LTD",
+ [3]byte{212, 207, 55}: "Symbolic IO",
+ [3]byte{212, 207, 249}: "Shenzhen Sen5 Technology Co., Ltd.",
+ [3]byte{212, 209, 132}: "ADB Broadband Italia",
+ [3]byte{212, 210, 73}: "Power Ethernet",
+ [3]byte{212, 210, 229}: "BKAV Corporation",
+ [3]byte{212, 213, 13}: "Southwest Microwave, Inc",
+ [3]byte{212, 215, 72}: "Cisco Systems, Inc",
+ [3]byte{212, 215, 169}: "Shanghai Kaixiang Info Tech LTD",
+ [3]byte{212, 216, 152}: "Korea CNO Tech Co., Ltd",
+ [3]byte{212, 217, 25}: "GoPro",
+ [3]byte{212, 220, 205}: "Apple, Inc.",
+ [3]byte{212, 223, 87}: "Alpinion Medical Systems",
+ [3]byte{212, 224, 142}: "ValueHD Corporation",
+ [3]byte{212, 227, 44}: "S. Siedle & Sohne",
+ [3]byte{212, 227, 63}: "Nokia",
+ [3]byte{212, 232, 178}: "Samsung Electronics Co.,Ltd",
+ [3]byte{212, 233, 11}: "CVT CO.,LTD",
+ [3]byte{212, 234, 14}: "Avaya Inc",
+ [3]byte{212, 236, 12}: "Harley-Davidson Motor Company",
+ [3]byte{212, 236, 134}: "LinkedHope Intelligent Technologies Co., Ltd",
+ [3]byte{212, 238, 7}: "HIWIFI Co., Ltd.",
+ [3]byte{212, 240, 39}: "Navetas Energy Management",
+ [3]byte{212, 240, 180}: "Napco Security Technologies",
+ [3]byte{212, 241, 67}: "IPROAD.,Inc",
+ [3]byte{212, 242, 7}: "DIAODIAO(Beijing)Technology CO.,Ltd",
+ [3]byte{212, 244, 111}: "Apple, Inc.",
+ [3]byte{212, 244, 190}: "Palo Alto Networks",
+ [3]byte{212, 245, 19}: "Texas Instruments",
+ [3]byte{212, 246, 63}: "IEA S.R.L.",
+ [3]byte{212, 249, 161}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{216, 0, 77}: "Apple, Inc.",
+ [3]byte{216, 5, 46}: "Skyviia Corporation",
+ [3]byte{216, 6, 209}: "Honeywell Fire System (Shanghai) Co,. Ltd.",
+ [3]byte{216, 8, 49}: "Samsung Electronics Co.,Ltd",
+ [3]byte{216, 8, 245}: "Arcadia Networks Co. Ltd.",
+ [3]byte{216, 9, 195}: "Cercacor Labs",
+ [3]byte{216, 12, 207}: "C.G.V. S.A.S.",
+ [3]byte{216, 13, 227}: "FXI TECHNOLOGIES AS",
+ [3]byte{216, 15, 153}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{216, 20, 214}: "SURE SYSTEM Co Ltd",
+ [3]byte{216, 21, 13}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{216, 22, 10}: "Nippon Electro-Sensory Devices",
+ [3]byte{216, 22, 193}: "DEWAV (HK) ELECTRONICS LIMITED",
+ [3]byte{216, 24, 43}: "Conti Temic Microelectronic GmbH",
+ [3]byte{216, 25, 122}: "Nuheara Ltd",
+ [3]byte{216, 25, 206}: "Telesquare",
+ [3]byte{216, 27, 254}: "TWINLINX CORPORATION",
+ [3]byte{216, 28, 20}: "Compacta International, Ltd.",
+ [3]byte{216, 29, 114}: "Apple, Inc.",
+ [3]byte{216, 30, 222}: "B&W Group Ltd",
+ [3]byte{216, 31, 204}: "Brocade Communications Systems, Inc.",
+ [3]byte{216, 32, 159}: "Cubro Acronet GesmbH",
+ [3]byte{216, 34, 244}: "Avnet Silica",
+ [3]byte{216, 36, 189}: "Cisco Systems, Inc",
+ [3]byte{216, 37, 34}: "ARRIS Group, Inc.",
+ [3]byte{216, 37, 176}: "Rockeetech Systems Co.,Ltd.",
+ [3]byte{216, 38, 185}: "Guangdong Coagent Electronics S&amp;T Co.,Ltd.",
+ [3]byte{216, 39, 12}: "MaxTronic International Co., Ltd.",
+ [3]byte{216, 40, 201}: "General Electric Consumer and Industrial",
+ [3]byte{216, 41, 22}: "Ascent Communication Technology",
+ [3]byte{216, 41, 134}: "Best Wish Technology LTD",
+ [3]byte{216, 42, 21}: "Leitner SpA",
+ [3]byte{216, 42, 126}: "Nokia Corporation",
+ [3]byte{216, 45, 155}: "Shenzhen G.Credit Communication Technology Co., Ltd",
+ [3]byte{216, 45, 225}: "Tricascade Inc.",
+ [3]byte{216, 48, 98}: "Apple, Inc.",
+ [3]byte{216, 49, 207}: "Samsung Electronics Co.,Ltd",
+ [3]byte{216, 50, 20}: "Tenda Technology Co.,Ltd.Dongguan branch",
+ [3]byte{216, 50, 90}: "Shenzhen YOUHUA Technology Co., Ltd",
+ [3]byte{216, 51, 127}: "Office FA.com Co.,Ltd.",
+ [3]byte{216, 55, 190}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+ [3]byte{216, 56, 13}: "SHENZHEN IP-COM Network Co.,Ltd",
+ [3]byte{216, 56, 252}: "Ruckus Wireless",
+ [3]byte{216, 60, 105}: "Shenzhen TINNO Mobile Technology Corp.",
+ [3]byte{216, 66, 172}: "Shanghai Feixun Communication Co.,Ltd.",
+ [3]byte{216, 66, 226}: "Canary Connect, Inc.",
+ [3]byte{216, 67, 237}: "Suzuken",
+ [3]byte{216, 69, 43}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+ [3]byte{216, 70, 6}: "Silicon Valley Global Marketing",
+ [3]byte{216, 71, 16}: "Sichuan Changhong Electric Ltd.",
+ [3]byte{216, 72, 238}: "Hangzhou Xueji Technology Co., Ltd.",
+ [3]byte{216, 73, 11}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{216, 73, 47}: "CANON INC.",
+ [3]byte{216, 74, 135}: "OI ELECTRIC CO.,LTD",
+ [3]byte{216, 75, 42}: "Cognitas Technologies, Inc.",
+ [3]byte{216, 79, 184}: "LG ELECTRONICS",
+ [3]byte{216, 80, 230}: "ASUSTek COMPUTER INC.",
+ [3]byte{216, 84, 58}: "Texas Instruments",
+ [3]byte{216, 84, 162}: "Aerohive Networks Inc.",
+ [3]byte{216, 85, 163}: "zte corporation",
+ [3]byte{216, 87, 239}: "Samsung Electronics Co.,Ltd",
+ [3]byte{216, 88, 215}: "CZ.NIC, z.s.p.o.",
+ [3]byte{216, 91, 42}: "Samsung Electronics Co.,Ltd",
+ [3]byte{216, 93, 76}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{216, 93, 132}: "CAx soft GmbH",
+ [3]byte{216, 93, 226}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{216, 93, 239}: "Busch-Jaeger Elektro GmbH",
+ [3]byte{216, 93, 251}: "Private",
+ [3]byte{216, 96, 176}: "bioMérieux Italia S.p.A.",
+ [3]byte{216, 96, 179}: "Guangdong Global Electronic Technology CO.,LTD",
+ [3]byte{216, 97, 98}: "Wistron Neweb Corporation",
+ [3]byte{216, 97, 148}: "Objetivos y Sevicios de Valor Añadido",
+ [3]byte{216, 98, 219}: "Eno Inc.",
+ [3]byte{216, 99, 117}: "Xiaomi Communications Co Ltd",
+ [3]byte{216, 101, 149}: "Toy's Myth Inc.",
+ [3]byte{216, 102, 198}: "Shenzhen Daystar Technology Co.,ltd",
+ [3]byte{216, 102, 238}: "BOXIN COMMUNICATION CO.,LTD.",
+ [3]byte{216, 103, 217}: "Cisco Systems, Inc",
+ [3]byte{216, 105, 96}: "Steinsvik",
+ [3]byte{216, 107, 247}: "Nintendo Co., Ltd.",
+ [3]byte{216, 108, 2}: "Huaqin Telecom Technology Co.,Ltd",
+ [3]byte{216, 108, 99}: "Google, Inc.",
+ [3]byte{216, 108, 233}: "Sagemcom Broadband SAS",
+ [3]byte{216, 113, 87}: "Lenovo Mobile Communication Technology Ltd.",
+ [3]byte{216, 116, 149}: "zte corporation",
+ [3]byte{216, 117, 51}: "Nokia Corporation",
+ [3]byte{216, 118, 10}: "Escort, Inc.",
+ [3]byte{216, 120, 229}: "KUHN SA",
+ [3]byte{216, 121, 136}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{216, 124, 221}: "SANIX INCORPORATED",
+ [3]byte{216, 126, 177}: "x.o.ware, inc.",
+ [3]byte{216, 128, 57}: "Microchip Technology Inc.",
+ [3]byte{216, 128, 60}: "Anhui Huami Information Technology Company Limited",
+ [3]byte{216, 129, 206}: "AHN INC.",
+ [3]byte{216, 132, 102}: "Extreme Networks, Inc.",
+ [3]byte{216, 135, 213}: "Leadcore Technology CO.,LTD",
+ [3]byte{216, 136, 206}: "RF Technology Pty Ltd",
+ [3]byte{216, 138, 59}: "UNIT-EM",
+ [3]byte{216, 139, 76}: "KingTing Tech.",
+ [3]byte{216, 141, 92}: "Elentec",
+ [3]byte{216, 143, 118}: "Apple, Inc.",
+ [3]byte{216, 144, 232}: "Samsung Electronics Co.,Ltd",
+ [3]byte{216, 147, 65}: "General Electric Global Research",
+ [3]byte{216, 148, 3}: "Hewlett Packard Enterprise",
+ [3]byte{216, 149, 47}: "Texas Instruments",
+ [3]byte{216, 150, 133}: "GoPro",
+ [3]byte{216, 150, 149}: "Apple, Inc.",
+ [3]byte{216, 150, 224}: "Alibaba Cloud Computing Ltd.",
+ [3]byte{216, 151, 59}: "Artesyn Embedded Technologies",
+ [3]byte{216, 151, 96}: "C2 Development, Inc.",
+ [3]byte{216, 151, 124}: "Grey Innovation",
+ [3]byte{216, 151, 186}: "PEGATRON CORPORATION",
+ [3]byte{216, 154, 52}: "Beijing SHENQI Technology Co., Ltd.",
+ [3]byte{216, 157, 103}: "Hewlett Packard",
+ [3]byte{216, 157, 185}: "eMegatech International Corp.",
+ [3]byte{216, 158, 63}: "Apple, Inc.",
+ [3]byte{216, 158, 243}: "Dell Inc.",
+ [3]byte{216, 160, 29}: "Espressif Inc.",
+ [3]byte{216, 161, 5}: "Syslane, Co., Ltd.",
+ [3]byte{216, 162, 94}: "Apple, Inc.",
+ [3]byte{216, 165, 52}: "Spectronix Corporation",
+ [3]byte{216, 173, 221}: "Sonavation, Inc.",
+ [3]byte{216, 174, 144}: "Itibia Technologies",
+ [3]byte{216, 175, 59}: "Hangzhou Bigbright Integrated communications system Co.,Ltd",
+ [3]byte{216, 175, 241}: "Panasonic Appliances Company",
+ [3]byte{216, 176, 46}: "Guangzhou Zonerich Business Machine Co., LTD.",
+ [3]byte{216, 176, 76}: "Jinan USR IOT Technology Co., Ltd.",
+ [3]byte{216, 177, 34}: "Juniper Networks",
+ [3]byte{216, 177, 42}: "Panasonic Mobile Communications Co.,Ltd.",
+ [3]byte{216, 177, 144}: "Cisco Systems, Inc",
+ [3]byte{216, 179, 119}: "HTC Corporation",
+ [3]byte{216, 182, 183}: "Comtrend Corporation",
+ [3]byte{216, 182, 193}: "NetworkAccountant, Inc.",
+ [3]byte{216, 182, 214}: "Blu Tether Limited",
+ [3]byte{216, 184, 246}: "Nantworks",
+ [3]byte{216, 185, 14}: "Triple Domain Vision Co.,Ltd.",
+ [3]byte{216, 187, 44}: "Apple, Inc.",
+ [3]byte{216, 191, 76}: "Victory Concept Electronics Limited",
+ [3]byte{216, 192, 104}: "Netgenetech.co.,ltd.",
+ [3]byte{216, 192, 106}: "Hunantv.com Interactive Entertainment Media Co.,Ltd.",
+ [3]byte{216, 195, 251}: "DETRACOM",
+ [3]byte{216, 196, 106}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{216, 196, 151}: "Quanta Computer Inc.",
+ [3]byte{216, 196, 233}: "Samsung Electronics Co.,Ltd",
+ [3]byte{216, 198, 145}: "Hichan Technology Corp.",
+ [3]byte{216, 199, 113}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{216, 199, 200}: "Aruba Networks",
+ [3]byte{216, 200, 233}: "Phicomm (Shanghai) Co., Ltd.",
+ [3]byte{216, 201, 157}: "EA DISPLAY LIMITED",
+ [3]byte{216, 203, 138}: "Micro-Star INTL CO., LTD.",
+ [3]byte{216, 207, 156}: "Apple, Inc.",
+ [3]byte{216, 209, 203}: "Apple, Inc.",
+ [3]byte{216, 210, 124}: "JEMA ENERGY, SA",
+ [3]byte{216, 211, 133}: "Hewlett Packard",
+ [3]byte{216, 212, 60}: "Sony Corporation",
+ [3]byte{216, 213, 185}: "Rainforest Automation, Inc.",
+ [3]byte{216, 214, 126}: "GSK CNC EQUIPMENT CO.,LTD",
+ [3]byte{216, 215, 35}: "IDS, Inc",
+ [3]byte{216, 216, 102}: "SHENZHEN TOZED TECHNOLOGIES CO.,LTD.",
+ [3]byte{216, 218, 82}: "APATOR S.A.",
+ [3]byte{216, 220, 233}: "Kunshan Erlab ductless filtration system Co.,Ltd",
+ [3]byte{216, 221, 95}: "BALMUDA Inc.",
+ [3]byte{216, 221, 253}: "Texas Instruments",
+ [3]byte{216, 222, 206}: "ISUNG CO.,LTD",
+ [3]byte{216, 223, 13}: "beroNet GmbH",
+ [3]byte{216, 223, 122}: "Quest Software, Inc.",
+ [3]byte{216, 224, 4}: "Vodia Networks Inc",
+ [3]byte{216, 224, 184}: "BULAT LLC",
+ [3]byte{216, 224, 225}: "Samsung Electronics Co.,Ltd",
+ [3]byte{216, 227, 174}: "CIRTEC MEDICAL SYSTEMS",
+ [3]byte{216, 229, 109}: "TCT mobile ltd",
+ [3]byte{216, 231, 43}: "NetScout Systems, Inc.",
+ [3]byte{216, 231, 67}: "Wush, Inc",
+ [3]byte{216, 233, 82}: "KEOPSYS",
+ [3]byte{216, 235, 151}: "TRENDnet, Inc.",
+ [3]byte{216, 237, 28}: "Magna Technology SL",
+ [3]byte{216, 238, 120}: "Moog Protokraft",
+ [3]byte{216, 239, 205}: "Nokia",
+ [3]byte{216, 240, 242}: "Zeebo Inc",
+ [3]byte{216, 241, 240}: "Pepxim International Limited",
+ [3]byte{216, 247, 16}: "Libre Wireless Technologies Inc.",
+ [3]byte{216, 251, 17}: "AXACORE",
+ [3]byte{216, 251, 94}: "ASKEY COMPUTER CORP",
+ [3]byte{216, 251, 104}: "Cloud Corner Ltd.",
+ [3]byte{216, 252, 56}: "Giantec Semiconductor Inc",
+ [3]byte{216, 252, 147}: "Intel Corporate",
+ [3]byte{216, 254, 143}: "IDFone Co., Ltd.",
+ [3]byte{216, 254, 227}: "D-Link International",
+ [3]byte{220, 0, 119}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{220, 2, 101}: "Meditech Kft",
+ [3]byte{220, 2, 142}: "zte corporation",
+ [3]byte{220, 5, 47}: "National Products Inc.",
+ [3]byte{220, 5, 117}: "SIEMENS ENERGY AUTOMATION",
+ [3]byte{220, 5, 237}: "Nabtesco Corporation",
+ [3]byte{220, 7, 193}: "HangZhou QiYang Technology Co.,Ltd.",
+ [3]byte{220, 8, 86}: "Alcatel-Lucent Enterprise",
+ [3]byte{220, 9, 20}: "Talk-A-Phone Co.",
+ [3]byte{220, 9, 76}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{220, 11, 26}: "ADB Broadband Italia",
+ [3]byte{220, 11, 52}: "LG Electronics (Mobile Communications)",
+ [3]byte{220, 12, 45}: "WEIFANG GOERTEK ELECTRONICS CO.,LTD",
+ [3]byte{220, 12, 92}: "Apple, Inc.",
+ [3]byte{220, 13, 48}: "Shenzhen Feasycom Technology Co., Ltd.",
+ [3]byte{220, 14, 161}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+ [3]byte{220, 21, 219}: "Ge Ruili Intelligent Technology ( Beijing ) Co., Ltd.",
+ [3]byte{220, 22, 162}: "Medtronic Diabetes",
+ [3]byte{220, 23, 90}: "Hitachi High-Technologies Corporation",
+ [3]byte{220, 23, 146}: "Captivate Network",
+ [3]byte{220, 26, 1}: "Ecoliv Technology ( Shenzhen ) Ltd.",
+ [3]byte{220, 26, 197}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{220, 29, 159}: "U & B tech",
+ [3]byte{220, 29, 212}: "Microstep-MIS spol. s r.o.",
+ [3]byte{220, 30, 163}: "Accensus LLC",
+ [3]byte{220, 32, 8}: "ASD Electronics Ltd",
+ [3]byte{220, 40, 52}: "HAKKO Corporation",
+ [3]byte{220, 41, 58}: "Shenzhen Nuoshi Technology Co., LTD.",
+ [3]byte{220, 42, 20}: "Shanghai Longjing Technology Co.",
+ [3]byte{220, 43, 42}: "Apple, Inc.",
+ [3]byte{220, 43, 97}: "Apple, Inc.",
+ [3]byte{220, 43, 102}: "InfoBLOCK S.A. de C.V.",
+ [3]byte{220, 43, 202}: "Zera GmbH",
+ [3]byte{220, 44, 38}: "Iton Technology Limited",
+ [3]byte{220, 45, 203}: "Beijing Unis HengYue Technology Co., Ltd.",
+ [3]byte{220, 46, 106}: "HCT. Co., Ltd.",
+ [3]byte{220, 47, 3}: "Step forward Group Co., Ltd.",
+ [3]byte{220, 48, 156}: "Heyrex Limited",
+ [3]byte{220, 51, 13}: "Qingdao Haier Telecom Co.,Ltd",
+ [3]byte{220, 51, 80}: "TechSAT GmbH",
+ [3]byte{220, 53, 241}: "Positivo Informática SA.",
+ [3]byte{220, 55, 20}: "Apple, Inc.",
+ [3]byte{220, 55, 82}: "GE",
+ [3]byte{220, 55, 210}: "Hunan HKT Electronic Technology Co., Ltd",
+ [3]byte{220, 56, 225}: "Juniper Networks",
+ [3]byte{220, 57, 121}: "Skyport Systems",
+ [3]byte{220, 58, 94}: "Roku, Inc.",
+ [3]byte{220, 60, 46}: "Manufacturing System Insights, Inc.",
+ [3]byte{220, 60, 132}: "Ticom Geomatics, Inc.",
+ [3]byte{220, 60, 246}: "Atomic Rules LLC",
+ [3]byte{220, 62, 81}: "Solberg & Andersen AS",
+ [3]byte{220, 62, 248}: "Nokia Corporation",
+ [3]byte{220, 65, 95}: "Apple, Inc.",
+ [3]byte{220, 68, 39}: "IEEE Registration Authority",
+ [3]byte{220, 68, 109}: "Allwinner Technology Co., Ltd",
+ [3]byte{220, 68, 182}: "Samsung Electronics Co.,Ltd",
+ [3]byte{220, 69, 23}: "ARRIS Group, Inc.",
+ [3]byte{220, 72, 178}: "Baraja Pty. Ltd.",
+ [3]byte{220, 73, 201}: "CASCO SIGNAL LTD",
+ [3]byte{220, 74, 62}: "Hewlett Packard",
+ [3]byte{220, 77, 35}: "MRV Comunications",
+ [3]byte{220, 78, 222}: "SHINYEI TECHNOLOGY CO., LTD.",
+ [3]byte{220, 79, 34}: "Espressif Inc.",
+ [3]byte{220, 83, 96}: "Intel Corporate",
+ [3]byte{220, 83, 124}: "Compal Broadband Networks, Inc.",
+ [3]byte{220, 85, 131}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{220, 86, 230}: "Shenzhen Bococom Technology Co.,LTD",
+ [3]byte{220, 87, 38}: "Power-One",
+ [3]byte{220, 94, 54}: "Paterson Technology",
+ [3]byte{220, 96, 161}: "Teledyne DALSA Professional Imaging",
+ [3]byte{220, 100, 124}: "C.R.S. iiMotion GmbH",
+ [3]byte{220, 100, 184}: "Shenzhen JingHanDa Electronics Co.Ltd",
+ [3]byte{220, 102, 58}: "Apacer Technology Inc.",
+ [3]byte{220, 102, 114}: "Samsung Electronics Co.,Ltd",
+ [3]byte{220, 104, 235}: "Nintendo Co.,Ltd",
+ [3]byte{220, 106, 234}: "Infinix mobility limited",
+ [3]byte{220, 109, 205}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{220, 111, 0}: "Livescribe, Inc.",
+ [3]byte{220, 111, 8}: "Bay Storage Technology",
+ [3]byte{220, 112, 20}: "Private",
+ [3]byte{220, 113, 68}: "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+ [3]byte{220, 116, 168}: "Samsung Electronics Co.,Ltd",
+ [3]byte{220, 120, 52}: "LOGICOM SA",
+ [3]byte{220, 123, 148}: "Cisco Systems, Inc",
+ [3]byte{220, 127, 164}: "2Wire Inc",
+ [3]byte{220, 130, 91}: "JANUS, spol. s r.o.",
+ [3]byte{220, 130, 246}: "iPort",
+ [3]byte{220, 133, 222}: "AzureWave Technology Inc.",
+ [3]byte{220, 134, 216}: "Apple, Inc.",
+ [3]byte{220, 154, 142}: "Nanjing Cocomm electronics co., LTD",
+ [3]byte{220, 155, 30}: "Intercom, Inc.",
+ [3]byte{220, 155, 156}: "Apple, Inc.",
+ [3]byte{220, 156, 82}: "Sapphire Technology Limited.",
+ [3]byte{220, 156, 159}: "Shenzhen YOUHUA Technology Co., Ltd",
+ [3]byte{220, 159, 164}: "Nokia Corporation",
+ [3]byte{220, 159, 219}: "Ubiquiti Networks Inc.",
+ [3]byte{220, 163, 172}: "RBcloudtech",
+ [3]byte{220, 164, 202}: "Apple, Inc.",
+ [3]byte{220, 165, 244}: "Cisco Systems, Inc",
+ [3]byte{220, 166, 189}: "Beijing Lanbo Technology Co., Ltd.",
+ [3]byte{220, 167, 217}: "Compressor Controls Corp",
+ [3]byte{220, 168, 207}: "New Spin Golf, LLC.",
+ [3]byte{220, 169, 4}: "Apple, Inc.",
+ [3]byte{220, 169, 113}: "Intel Corporate",
+ [3]byte{220, 169, 137}: "MACANDC",
+ [3]byte{220, 173, 158}: "GreenPriz",
+ [3]byte{220, 174, 4}: "CELOXICA Ltd",
+ [3]byte{220, 176, 88}: "Bürkert Werke GmbH",
+ [3]byte{220, 179, 180}: "Honeywell Environmental & Combustion Controls (Tianjin) Co., Ltd.",
+ [3]byte{220, 180, 196}: "Microsoft XCG",
+ [3]byte{220, 190, 122}: "Zhejiang Nurotron Biotechnology Co.",
+ [3]byte{220, 191, 144}: "HUIZHOU QIAOXING TELECOMMUNICATION INDUSTRY CO.,LTD.",
+ [3]byte{220, 191, 233}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{220, 192, 219}: "Shenzhen Kaiboer Technology Co., Ltd.",
+ [3]byte{220, 192, 235}: "ASSA ABLOY CÔTE PICARDE",
+ [3]byte{220, 193, 1}: "SOLiD Technologies, Inc.",
+ [3]byte{220, 196, 34}: "Systembase Limited",
+ [3]byte{220, 198, 34}: "BUHEUNG SYSTEM",
+ [3]byte{220, 198, 75}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{220, 199, 147}: "Nokia Corporation",
+ [3]byte{220, 200, 245}: "Shanghai UMEinfo CO.,LTD.",
+ [3]byte{220, 203, 168}: "Explora Technologies Inc",
+ [3]byte{220, 206, 65}: "FE GLOBAL HONG KONG LIMITED",
+ [3]byte{220, 206, 188}: "Shenzhen JSR Technology Co.,Ltd.",
+ [3]byte{220, 206, 193}: "Cisco Systems, Inc",
+ [3]byte{220, 207, 148}: "Beijing Rongcheng Hutong Technology Co., Ltd.",
+ [3]byte{220, 207, 150}: "Samsung Electronics Co.,Ltd",
+ [3]byte{220, 208, 247}: "Bentek Systems Ltd.",
+ [3]byte{220, 210, 85}: "Kinpo Electronics, Inc.",
+ [3]byte{220, 210, 252}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{220, 211, 33}: "HUMAX Co., Ltd.",
+ [3]byte{220, 213, 42}: "Sunny Heart Limited",
+ [3]byte{220, 216, 124}: "Beijing Jingdong Century Trading Co., LTD.",
+ [3]byte{220, 216, 127}: "Shenzhen JoinCyber Telecom Equipment Ltd",
+ [3]byte{220, 217, 22}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{220, 218, 79}: "GETCK TECHNOLOGY, INC",
+ [3]byte{220, 219, 112}: "Tonfunk Systementwicklung und Service GmbH",
+ [3]byte{220, 220, 7}: "TRP Systems BV",
+ [3]byte{220, 222, 202}: "Akyllor",
+ [3]byte{220, 224, 38}: "Patrol Tag, Inc",
+ [3]byte{220, 225, 173}: "Shenzhen Wintop Photoelectric Technology Co., Ltd",
+ [3]byte{220, 226, 172}: "Lumens Digital Optics Inc.",
+ [3]byte{220, 229, 120}: "Experimental Factory of Scientific Engineering and Special Design Department",
+ [3]byte{220, 231, 28}: "AUG Elektronik GmbH",
+ [3]byte{220, 232, 56}: "CK Telecom (Shenzhen) Limited",
+ [3]byte{220, 235, 83}: "Wuhan QianXiao Elecronic Technology CO.,LTD",
+ [3]byte{220, 235, 148}: "Cisco Systems, Inc",
+ [3]byte{220, 236, 6}: "Heimi Network Technology Co., Ltd.",
+ [3]byte{220, 238, 6}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{220, 239, 9}: "NETGEAR",
+ [3]byte{220, 239, 202}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{220, 240, 93}: "Letta Teknoloji",
+ [3]byte{220, 240, 144}: "Nubia Technology Co.,Ltd.",
+ [3]byte{220, 241, 16}: "Nokia Corporation",
+ [3]byte{220, 247, 85}: "SITRONIK",
+ [3]byte{220, 248, 88}: "Lorent Networks, Inc.",
+ [3]byte{220, 250, 213}: "STRONG Ges.m.b.H.",
+ [3]byte{220, 251, 2}: "BUFFALO.INC",
+ [3]byte{220, 254, 7}: "PEGATRON CORPORATION",
+ [3]byte{220, 254, 24}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{224, 3, 112}: "ShenZhen Continental Wireless Technology Co., Ltd.",
+ [3]byte{224, 5, 197}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{224, 6, 230}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{224, 7, 27}: "Hewlett Packard Enterprise",
+ [3]byte{224, 11, 40}: "Inovonics",
+ [3]byte{224, 12, 127}: "Nintendo Co., Ltd.",
+ [3]byte{224, 13, 185}: "Cree, Inc.",
+ [3]byte{224, 14, 218}: "Cisco Systems, Inc",
+ [3]byte{224, 16, 127}: "Ruckus Wireless",
+ [3]byte{224, 20, 62}: "Modoosis Inc.",
+ [3]byte{224, 24, 119}: "FUJITSU LIMITED",
+ [3]byte{224, 25, 29}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{224, 26, 234}: "Allied Telesis, Inc.",
+ [3]byte{224, 28, 65}: "Aerohive Networks Inc.",
+ [3]byte{224, 28, 238}: "Bravo Tech, Inc.",
+ [3]byte{224, 29, 56}: "Beijing HuaqinWorld Technology Co.,Ltd",
+ [3]byte{224, 29, 59}: "Cambridge Industries(Group) Co.,Ltd.",
+ [3]byte{224, 30, 7}: "Anite Telecoms US. Inc",
+ [3]byte{224, 31, 10}: "Xslent Energy Technologies. LLC",
+ [3]byte{224, 34, 2}: "ARRIS Group, Inc.",
+ [3]byte{224, 36, 127}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{224, 37, 56}: "Titan Pet Products",
+ [3]byte{224, 38, 48}: "Intrigue Technologies, Inc.",
+ [3]byte{224, 38, 54}: "Nortel Networks",
+ [3]byte{224, 39, 26}: "TTC Next-generation Home Network System WG",
+ [3]byte{224, 40, 97}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{224, 40, 109}: "AVM Audiovisuelles Marketing und Computersysteme GmbH",
+ [3]byte{224, 42, 130}: "Universal Global Scientific Industrial Co., Ltd.",
+ [3]byte{224, 44, 178}: "Lenovo Mobile Communication (Wuhan) Company Limited",
+ [3]byte{224, 44, 243}: "MRS Electronic GmbH",
+ [3]byte{224, 47, 109}: "Cisco Systems, Inc",
+ [3]byte{224, 48, 5}: "Alcatel-Lucent Shanghai Bell Co., Ltd",
+ [3]byte{224, 49, 158}: "Valve Corporation",
+ [3]byte{224, 49, 208}: "SZ Telstar CO., LTD",
+ [3]byte{224, 52, 228}: "Feit Electric Company, Inc.",
+ [3]byte{224, 53, 96}: "Challenger Supply Holdings, LLC",
+ [3]byte{224, 54, 118}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{224, 54, 227}: "Stage One International Co., Ltd.",
+ [3]byte{224, 55, 191}: "Wistron Neweb Corporation",
+ [3]byte{224, 57, 215}: "Plexxi, Inc.",
+ [3]byte{224, 60, 91}: "SHENZHEN JIAXINJIE ELECTRON CO.,LTD",
+ [3]byte{224, 62, 68}: "Broadcom",
+ [3]byte{224, 62, 74}: "Cavanagh Group International",
+ [3]byte{224, 62, 125}: "data-complex GmbH",
+ [3]byte{224, 63, 73}: "ASUSTek COMPUTER INC.",
+ [3]byte{224, 65, 54}: "MitraStar Technology Corp.",
+ [3]byte{224, 67, 219}: "Shenzhen ViewAt Technology Co.,Ltd.",
+ [3]byte{224, 70, 154}: "NETGEAR",
+ [3]byte{224, 72, 175}: "Premietech Limited",
+ [3]byte{224, 72, 211}: "MOBIWIRE MOBILES (NINGBO) CO.,LTD",
+ [3]byte{224, 75, 69}: "Hi-P Electronics Pte Ltd",
+ [3]byte{224, 79, 67}: "Universal Global Scientific Industrial Co., Ltd.",
+ [3]byte{224, 79, 189}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+ [3]byte{224, 80, 139}: "Zhejiang Dahua Technology Co., Ltd.",
+ [3]byte{224, 81, 36}: "NXP Semiconductors",
+ [3]byte{224, 81, 99}: "Arcadyan Corporation",
+ [3]byte{224, 85, 61}: "Cisco Meraki",
+ [3]byte{224, 85, 151}: "Emergent Vision Technologies Inc.",
+ [3]byte{224, 86, 244}: "AxesNetwork Solutions inc.",
+ [3]byte{224, 88, 158}: "Laerdal Medical",
+ [3]byte{224, 91, 112}: "Innovid, Co., Ltd.",
+ [3]byte{224, 93, 166}: "Detlef Fink Elektronik & Softwareentwicklung",
+ [3]byte{224, 95, 69}: "Apple, Inc.",
+ [3]byte{224, 95, 185}: "Cisco Systems, Inc",
+ [3]byte{224, 96, 102}: "Sercomm Corporation",
+ [3]byte{224, 96, 137}: "Cloudleaf, Inc.",
+ [3]byte{224, 97, 178}: "HANGZHOU ZENOINTEL TECHNOLOGY CO., LTD",
+ [3]byte{224, 98, 144}: "Jinan Jovision Science & Technology Co., Ltd.",
+ [3]byte{224, 99, 229}: "Sony Mobile Communications AB",
+ [3]byte{224, 100, 187}: "DigiView S.r.l.",
+ [3]byte{224, 102, 120}: "Apple, Inc.",
+ [3]byte{224, 103, 179}: "C-Data Technology Co., Ltd",
+ [3]byte{224, 104, 109}: "Raybased AB",
+ [3]byte{224, 105, 149}: "PEGATRON CORPORATION",
+ [3]byte{224, 117, 10}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{224, 117, 125}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{224, 118, 208}: "AMPAK Technology, Inc.",
+ [3]byte{224, 120, 163}: "Shanghai Winner Information Technology Co.,Inc",
+ [3]byte{224, 124, 19}: "zte corporation",
+ [3]byte{224, 124, 98}: "Whistle Labs, Inc.",
+ [3]byte{224, 127, 83}: "TECHBOARD SRL",
+ [3]byte{224, 127, 136}: "EVIDENCE Network SIA",
+ [3]byte{224, 129, 119}: "GreenBytes, Inc.",
+ [3]byte{224, 132, 243}: "High Grade Controls Corporation",
+ [3]byte{224, 135, 177}: "Nata-Info Ltd.",
+ [3]byte{224, 136, 93}: "Technicolor CH USA Inc.",
+ [3]byte{224, 137, 157}: "Cisco Systems, Inc",
+ [3]byte{224, 138, 126}: "Exponent",
+ [3]byte{224, 142, 60}: "Aztech Electronics Pte Ltd",
+ [3]byte{224, 143, 236}: "REPOTEC CO., LTD.",
+ [3]byte{224, 145, 83}: "XAVi Technologies Corp.",
+ [3]byte{224, 145, 245}: "NETGEAR",
+ [3]byte{224, 148, 103}: "Intel Corporate",
+ [3]byte{224, 149, 121}: "ORTHOsoft inc, d/b/a Zimmer CAS",
+ [3]byte{224, 151, 150}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{224, 151, 242}: "Atomax Inc.",
+ [3]byte{224, 152, 97}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{224, 153, 113}: "Samsung Electronics Co.,Ltd",
+ [3]byte{224, 157, 49}: "Intel Corporate",
+ [3]byte{224, 157, 184}: "PLANEX COMMUNICATIONS INC.",
+ [3]byte{224, 157, 250}: "Wanan Hongsheng Electronic Co.Ltd",
+ [3]byte{224, 161, 152}: "NOJA Power Switchgear Pty Ltd",
+ [3]byte{224, 161, 215}: "SFR",
+ [3]byte{224, 163, 15}: "Pevco",
+ [3]byte{224, 163, 172}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{224, 166, 112}: "Nokia Corporation",
+ [3]byte{224, 167, 0}: "Verkada Inc",
+ [3]byte{224, 168, 184}: "Le Shi Zhi Xin Electronic Technology (Tianjin) Limited",
+ [3]byte{224, 170, 150}: "Samsung Electronics Co.,Ltd",
+ [3]byte{224, 170, 176}: "GENERAL VISION ELECTRONICS CO. LTD.",
+ [3]byte{224, 170, 219}: "Nanjing PANENG Technology Development Co.,Ltd",
+ [3]byte{224, 171, 254}: "Orb Networks, Inc.",
+ [3]byte{224, 172, 203}: "Apple, Inc.",
+ [3]byte{224, 172, 241}: "Cisco Systems, Inc",
+ [3]byte{224, 174, 94}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{224, 174, 178}: "Bender GmbH &amp; Co.KG",
+ [3]byte{224, 174, 237}: "LOENK",
+ [3]byte{224, 175, 75}: "Pluribus Networks, Inc.",
+ [3]byte{224, 178, 241}: "FN-LINK TECHNOLOGY LIMITED",
+ [3]byte{224, 181, 45}: "Apple, Inc.",
+ [3]byte{224, 182, 245}: "IEEE Registration Authority",
+ [3]byte{224, 183, 10}: "ARRIS Group, Inc.",
+ [3]byte{224, 183, 177}: "ARRIS Group, Inc.",
+ [3]byte{224, 185, 77}: "SHENZHEN BILIAN ELECTRONIC CO.,LTD",
+ [3]byte{224, 185, 165}: "AzureWave Technology Inc.",
+ [3]byte{224, 185, 186}: "Apple, Inc.",
+ [3]byte{224, 185, 229}: "Technicolor",
+ [3]byte{224, 188, 67}: "C2 Microsystems, Inc.",
+ [3]byte{224, 192, 209}: "CK Telecom (Shenzhen) Limited",
+ [3]byte{224, 194, 134}: "Aisai Communication Technology Co., Ltd.",
+ [3]byte{224, 194, 183}: "Masimo Corporation",
+ [3]byte{224, 195, 243}: "zte corporation",
+ [3]byte{224, 198, 179}: "MilDef AB",
+ [3]byte{224, 199, 103}: "Apple, Inc.",
+ [3]byte{224, 199, 157}: "Texas Instruments",
+ [3]byte{224, 200, 106}: "SHENZHEN TW-SCIE Co., Ltd",
+ [3]byte{224, 201, 34}: "Jireh Energy Tech., Ltd.",
+ [3]byte{224, 201, 122}: "Apple, Inc.",
+ [3]byte{224, 202, 77}: "Shenzhen Unistar Communication Co.,LTD",
+ [3]byte{224, 202, 148}: "ASKEY COMPUTER CORP",
+ [3]byte{224, 203, 29}: "Private",
+ [3]byte{224, 203, 78}: "ASUSTek COMPUTER INC.",
+ [3]byte{224, 203, 188}: "Cisco Meraki",
+ [3]byte{224, 203, 238}: "Samsung Electronics Co.,Ltd",
+ [3]byte{224, 205, 253}: "Beijing E3Control Technology Co, LTD",
+ [3]byte{224, 206, 195}: "ASKEY COMPUTER CORP",
+ [3]byte{224, 207, 45}: "Gemintek Corporation",
+ [3]byte{224, 209, 10}: "Katoudenkikougyousyo co ltd",
+ [3]byte{224, 209, 115}: "Cisco Systems, Inc",
+ [3]byte{224, 209, 230}: "Aliph dba Jawbone",
+ [3]byte{224, 211, 26}: "EQUES Technology Co., Limited",
+ [3]byte{224, 213, 94}: "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+ [3]byte{224, 215, 186}: "Texas Instruments",
+ [3]byte{224, 216, 72}: "Dell Inc.",
+ [3]byte{224, 217, 162}: "Hippih aps",
+ [3]byte{224, 217, 227}: "Eltex Enterprise Ltd.",
+ [3]byte{224, 218, 220}: "JVC KENWOOD Corporation",
+ [3]byte{224, 219, 16}: "Samsung Electronics Co.,Ltd",
+ [3]byte{224, 219, 85}: "Dell Inc.",
+ [3]byte{224, 219, 136}: "Open Standard Digital-IF Interface for SATCOM Systems",
+ [3]byte{224, 220, 160}: "Siemens Industrial Automation Products Ltd Chengdu",
+ [3]byte{224, 221, 192}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{224, 229, 207}: "Texas Instruments",
+ [3]byte{224, 230, 49}: "SNB TECHNOLOGIES LIMITED",
+ [3]byte{224, 231, 81}: "Nintendo Co., Ltd.",
+ [3]byte{224, 231, 187}: "Nureva, Inc.",
+ [3]byte{224, 232, 232}: "Olive Telecommunication Pvt. Ltd",
+ [3]byte{224, 237, 26}: "vastriver Technology Co., Ltd",
+ [3]byte{224, 237, 199}: "Shenzhen Friendcom Technology Development Co., Ltd",
+ [3]byte{224, 238, 27}: "Panasonic Automotive Systems Company of America",
+ [3]byte{224, 239, 37}: "Lintes Technology Co., Ltd.",
+ [3]byte{224, 242, 17}: "Digitalwatt",
+ [3]byte{224, 243, 121}: "Vaddio",
+ [3]byte{224, 245, 198}: "Apple, Inc.",
+ [3]byte{224, 245, 202}: "CHENG UEI PRECISION INDUSTRY CO.,LTD.",
+ [3]byte{224, 248, 71}: "Apple, Inc.",
+ [3]byte{224, 249, 190}: "Cloudena Corp.",
+ [3]byte{224, 250, 236}: "Platan sp. z o.o. sp. k.",
+ [3]byte{224, 255, 247}: "Softiron Inc.",
+ [3]byte{228, 2, 155}: "Intel Corporate",
+ [3]byte{228, 4, 57}: "TomTom Software Ltd",
+ [3]byte{228, 17, 91}: "Hewlett Packard",
+ [3]byte{228, 18, 24}: "ShenZhen Rapoo Technology Co., Ltd.",
+ [3]byte{228, 18, 29}: "Samsung Electronics Co.,Ltd",
+ [3]byte{228, 18, 137}: "topsystem Systemhaus GmbH",
+ [3]byte{228, 23, 216}: "8BITDO TECHNOLOGY HK LIMITED",
+ [3]byte{228, 24, 107}: "Zyxel Communications Corporation",
+ [3]byte{228, 26, 44}: "ZPE Systems, Inc.",
+ [3]byte{228, 28, 75}: "V2 TECHNOLOGY, INC.",
+ [3]byte{228, 29, 45}: "Mellanox Technologies, Inc.",
+ [3]byte{228, 31, 19}: "IBM Corp",
+ [3]byte{228, 34, 165}: "PLANTRONICS, INC.",
+ [3]byte{228, 35, 84}: "SHENZHEN FUZHI SOFTWARE TECHNOLOGY CO.,LTD",
+ [3]byte{228, 37, 231}: "Apple, Inc.",
+ [3]byte{228, 37, 233}: "Color-Chip",
+ [3]byte{228, 39, 113}: "Smartlabs",
+ [3]byte{228, 42, 211}: "Magneti Marelli S.p.A. Powertrain",
+ [3]byte{228, 43, 52}: "Apple, Inc.",
+ [3]byte{228, 44, 86}: "Lilee Systems, Ltd.",
+ [3]byte{228, 45, 2}: "TCT mobile ltd",
+ [3]byte{228, 47, 38}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{228, 47, 86}: "OptoMET GmbH",
+ [3]byte{228, 47, 246}: "Unicore communication Inc.",
+ [3]byte{228, 50, 203}: "Samsung Electronics Co.,Ltd",
+ [3]byte{228, 53, 147}: "Hangzhou GoTo technology Co.Ltd",
+ [3]byte{228, 53, 200}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{228, 53, 251}: "Sabre Technology (Hull) Ltd",
+ [3]byte{228, 55, 215}: "HENRI DEPAEPE S.A.S.",
+ [3]byte{228, 56, 242}: "Advantage Controls",
+ [3]byte{228, 58, 110}: "Shenzhen Zeroone Technology CO.,LTD",
+ [3]byte{228, 62, 215}: "Arcadyan Corporation",
+ [3]byte{228, 63, 162}: "Wuxi DSP Technologies Inc.",
+ [3]byte{228, 64, 226}: "Samsung Electronics Co.,Ltd",
+ [3]byte{228, 65, 230}: "Ottec Technology GmbH",
+ [3]byte{228, 66, 166}: "Intel Corporate",
+ [3]byte{228, 70, 189}: "C&C TECHNIC TAIWAN CO., LTD.",
+ [3]byte{228, 70, 218}: "Xiaomi Communications Co Ltd",
+ [3]byte{228, 71, 144}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{228, 72, 199}: "Cisco SPVTG",
+ [3]byte{228, 76, 108}: "Shenzhen Guo Wei Electronic Co,. Ltd.",
+ [3]byte{228, 78, 24}: "Gardasoft VisionLimited",
+ [3]byte{228, 79, 41}: "MA Lighting Technology GmbH",
+ [3]byte{228, 79, 95}: "EDS Elektronik Destek San.Tic.Ltd.Sti",
+ [3]byte{228, 80, 154}: "HW Communications Ltd",
+ [3]byte{228, 85, 234}: "Dedicated Computing",
+ [3]byte{228, 86, 20}: "Suttle Apparatus",
+ [3]byte{228, 87, 64}: "ARRIS Group, Inc.",
+ [3]byte{228, 87, 168}: "Stuart Manufacturing, Inc.",
+ [3]byte{228, 88, 184}: "Samsung Electronics Co.,Ltd",
+ [3]byte{228, 88, 231}: "Samsung Electronics Co.,Ltd",
+ [3]byte{228, 90, 162}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{228, 93, 81}: "SFR",
+ [3]byte{228, 93, 82}: "Avaya Inc",
+ [3]byte{228, 93, 117}: "Samsung Electronics Co.,Ltd",
+ [3]byte{228, 98, 81}: "HAO CHENG GROUP LIMITED",
+ [3]byte{228, 100, 73}: "ARRIS Group, Inc.",
+ [3]byte{228, 103, 186}: "Danish Interpretation Systems A/S",
+ [3]byte{228, 104, 163}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{228, 105, 90}: "Dictum Health, Inc.",
+ [3]byte{228, 108, 33}: "messMa GmbH",
+ [3]byte{228, 111, 19}: "D-Link International",
+ [3]byte{228, 112, 184}: "Intel Corporate",
+ [3]byte{228, 113, 133}: "Securifi Ltd",
+ [3]byte{228, 114, 226}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{228, 117, 30}: "Getinge Sterilization AB",
+ [3]byte{228, 119, 35}: "zte corporation",
+ [3]byte{228, 119, 107}: "AARTESYS AG",
+ [3]byte{228, 119, 212}: "Minrray Industry Co.,Ltd",
+ [3]byte{228, 123, 63}: "BEIJING CO-CLOUD TECHNOLOGY LTD.",
+ [3]byte{228, 124, 249}: "Samsung Electronics Co.,Ltd",
+ [3]byte{228, 125, 90}: "Beijing Hanbang Technology Corp.",
+ [3]byte{228, 125, 189}: "Samsung Electronics Co.,Ltd",
+ [3]byte{228, 125, 235}: "Shanghai Notion Information Technology CO.,LTD.",
+ [3]byte{228, 126, 102}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{228, 127, 178}: "FUJITSU LIMITED",
+ [3]byte{228, 129, 132}: "Nokia",
+ [3]byte{228, 129, 179}: "Shenzhen ACT Industrial Co.,Ltd.",
+ [3]byte{228, 131, 153}: "ARRIS Group, Inc.",
+ [3]byte{228, 133, 1}: "Geberit International AG",
+ [3]byte{228, 138, 213}: "RF WINDOW CO., LTD.",
+ [3]byte{228, 139, 127}: "Apple, Inc.",
+ [3]byte{228, 140, 15}: "Discovery Insure",
+ [3]byte{228, 141, 140}: "Routerboard.com",
+ [3]byte{228, 143, 52}: "Vodafone Italia S.p.A.",
+ [3]byte{228, 144, 105}: "Rockwell Automation",
+ [3]byte{228, 144, 126}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{228, 146, 231}: "Gridlink Tech. Co.,Ltd.",
+ [3]byte{228, 146, 251}: "Samsung Electronics Co.,Ltd",
+ [3]byte{228, 149, 110}: "IEEE Registration Authority",
+ [3]byte{228, 150, 174}: "ALTOGRAPHICS Inc.",
+ [3]byte{228, 151, 240}: "Shanghai VLC Technologies Ltd. Co.",
+ [3]byte{228, 152, 209}: "Microsoft Mobile Oy",
+ [3]byte{228, 152, 214}: "Apple, Inc.",
+ [3]byte{228, 154, 121}: "Apple, Inc.",
+ [3]byte{228, 154, 220}: "Apple, Inc.",
+ [3]byte{228, 158, 18}: "FREEBOX SAS",
+ [3]byte{228, 161, 230}: "Alcatel-Lucent Shanghai Bell Co., Ltd",
+ [3]byte{228, 163, 47}: "Shanghai Artimen Technology Co., Ltd.",
+ [3]byte{228, 163, 135}: "Control Solutions LLC",
+ [3]byte{228, 164, 113}: "Intel Corporate",
+ [3]byte{228, 165, 239}: "TRON LINK ELECTRONICS CO., LTD.",
+ [3]byte{228, 167, 73}: "Palo Alto Networks",
+ [3]byte{228, 167, 160}: "Intel Corporate",
+ [3]byte{228, 167, 197}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{228, 167, 253}: "Cellco Partnership",
+ [3]byte{228, 168, 182}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{228, 170, 93}: "Cisco Systems, Inc",
+ [3]byte{228, 171, 70}: "UAB Selteka",
+ [3]byte{228, 173, 125}: "SCL Elements",
+ [3]byte{228, 175, 161}: "HES-SO",
+ [3]byte{228, 176, 5}: "Beijing IQIYI Science & Technology Co., Ltd.",
+ [3]byte{228, 176, 33}: "Samsung Electronics Co.,Ltd",
+ [3]byte{228, 179, 24}: "Intel Corporate",
+ [3]byte{228, 186, 217}: "360 Fly Inc.",
+ [3]byte{228, 189, 75}: "zte corporation",
+ [3]byte{228, 190, 237}: "Netcore Technology Inc.",
+ [3]byte{228, 193, 70}: "Objetivos y Servicios de Valor A",
+ [3]byte{228, 193, 241}: "SHENZHEN SPOTMAU INFORMATION TECHNOLIGY CO., Ltd",
+ [3]byte{228, 194, 209}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{228, 198, 43}: "Airware",
+ [3]byte{228, 198, 61}: "Apple, Inc.",
+ [3]byte{228, 198, 230}: "Mophie, LLC",
+ [3]byte{228, 199, 34}: "Cisco Systems, Inc",
+ [3]byte{228, 200, 1}: "BLU Products Inc",
+ [3]byte{228, 200, 6}: "Ceiec Electric Technology Inc.",
+ [3]byte{228, 206, 2}: "WyreStorm Technologies Ltd",
+ [3]byte{228, 206, 112}: "Health & Life co., Ltd.",
+ [3]byte{228, 206, 143}: "Apple, Inc.",
+ [3]byte{228, 211, 50}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{228, 211, 241}: "Cisco Systems, Inc",
+ [3]byte{228, 213, 61}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{228, 215, 29}: "Oraya Therapeutics",
+ [3]byte{228, 221, 121}: "En-Vision America, Inc.",
+ [3]byte{228, 224, 197}: "Samsung Electronics Co.,Ltd",
+ [3]byte{228, 228, 9}: "LEIFHEIT AG",
+ [3]byte{228, 228, 171}: "Apple, Inc.",
+ [3]byte{228, 236, 16}: "Nokia Corporation",
+ [3]byte{228, 238, 253}: "MR&D Manufacturing",
+ [3]byte{228, 240, 4}: "Dell Inc.",
+ [3]byte{228, 240, 66}: "Google, Inc.",
+ [3]byte{228, 243, 101}: "Time-O-Matic, Inc.",
+ [3]byte{228, 243, 227}: "Shanghai iComhome Co.,Ltd.",
+ [3]byte{228, 243, 245}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+ [3]byte{228, 244, 198}: "NETGEAR",
+ [3]byte{228, 247, 161}: "Datafox GmbH",
+ [3]byte{228, 248, 156}: "Intel Corporate",
+ [3]byte{228, 248, 239}: "Samsung Electronics Co.,Ltd",
+ [3]byte{228, 249, 57}: "Minxon Hotel Technology INC.",
+ [3]byte{228, 250, 29}: "PAD Peripheral Advanced Design Inc.",
+ [3]byte{228, 250, 237}: "Samsung Electronics Co.,Ltd",
+ [3]byte{228, 250, 253}: "Intel Corporate",
+ [3]byte{228, 251, 93}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{228, 251, 143}: "MOBIWIRE MOBILES (NINGBO) CO.,LTD",
+ [3]byte{228, 254, 217}: "EDMI Europe Ltd",
+ [3]byte{228, 255, 221}: "ELECTRON INDIA",
+ [3]byte{232, 0, 54}: "Befs co,. ltd",
+ [3]byte{232, 3, 154}: "Samsung Electronics Co.,Ltd",
+ [3]byte{232, 4, 11}: "Apple, Inc.",
+ [3]byte{232, 4, 16}: "Private",
+ [3]byte{232, 4, 98}: "Cisco Systems, Inc",
+ [3]byte{232, 4, 243}: "Throughtek Co., Ltd.",
+ [3]byte{232, 5, 109}: "Nortel Networks",
+ [3]byte{232, 6, 136}: "Apple, Inc.",
+ [3]byte{232, 7, 52}: "Champion Optical Network Engineering, LLC",
+ [3]byte{232, 7, 191}: "SHENZHEN BOOMTECH INDUSTRY CO.,LTD",
+ [3]byte{232, 8, 139}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{232, 9, 69}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+ [3]byte{232, 9, 89}: "Guoguang Electric Co.,Ltd",
+ [3]byte{232, 11, 19}: "Akib Systems Taiwan, INC",
+ [3]byte{232, 12, 56}: "DAEYOUNG INFORMATION SYSTEM CO., LTD",
+ [3]byte{232, 12, 117}: "Syncbak, Inc.",
+ [3]byte{232, 16, 46}: "Really Simple Software, Inc",
+ [3]byte{232, 17, 50}: "Samsung Electronics Co.,Ltd",
+ [3]byte{232, 17, 202}: "SHANDONG KAER ELECTRIC.CO.,LTD",
+ [3]byte{232, 19, 36}: "GuangZhou Bonsoninfo System CO.,LTD",
+ [3]byte{232, 19, 99}: "Comstock RD, Inc.",
+ [3]byte{232, 19, 103}: "AIRSOUND Inc.",
+ [3]byte{232, 21, 14}: "Nokia Corporation",
+ [3]byte{232, 22, 43}: "IDEO Security Co., Ltd.",
+ [3]byte{232, 23, 252}: "Fujitsu Cloud Technologies Limited",
+ [3]byte{232, 24, 99}: "IEEE Registration Authority",
+ [3]byte{232, 29, 168}: "Ruckus Wireless",
+ [3]byte{232, 32, 226}: "HUMAX Co., Ltd.",
+ [3]byte{232, 40, 119}: "TMY Co., Ltd.",
+ [3]byte{232, 40, 213}: "Cots Technology",
+ [3]byte{232, 42, 68}: "Liteon Technology Corporation",
+ [3]byte{232, 42, 234}: "Intel Corporate",
+ [3]byte{232, 46, 36}: "Out of the Fog Research LLC",
+ [3]byte{232, 51, 129}: "ARRIS Group, Inc.",
+ [3]byte{232, 52, 62}: "Beijing Infosec Technologies Co., LTD.",
+ [3]byte{232, 54, 29}: "Sense Labs, Inc.",
+ [3]byte{232, 55, 122}: "Zyxel Communications Corporation",
+ [3]byte{232, 57, 53}: "Hewlett Packard",
+ [3]byte{232, 57, 223}: "ASKEY COMPUTER CORP",
+ [3]byte{232, 58, 18}: "Samsung Electronics Co.,Ltd",
+ [3]byte{232, 58, 151}: "Toshiba Corporation",
+ [3]byte{232, 62, 182}: "RIM",
+ [3]byte{232, 62, 251}: "GEODESIC LTD.",
+ [3]byte{232, 62, 252}: "ARRIS Group, Inc.",
+ [3]byte{232, 64, 64}: "Cisco Systems, Inc",
+ [3]byte{232, 64, 242}: "PEGATRON CORPORATION",
+ [3]byte{232, 67, 182}: "QNAP Systems, Inc.",
+ [3]byte{232, 68, 126}: "Bitdefender SRL",
+ [3]byte{232, 72, 31}: "Advanced Automotive Antennas",
+ [3]byte{232, 77, 208}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{232, 78, 6}: "EDUP INTERNATIONAL (HK) CO., LTD",
+ [3]byte{232, 78, 132}: "Samsung Electronics Co.,Ltd",
+ [3]byte{232, 78, 206}: "Nintendo Co., Ltd.",
+ [3]byte{232, 80, 139}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{232, 81, 110}: "TSMART Inc.",
+ [3]byte{232, 81, 157}: "Yeonhab Precision Co.,LTD",
+ [3]byte{232, 84, 132}: "NEO Information Systems Co., Ltd.",
+ [3]byte{232, 85, 180}: "SAI Technology Inc.",
+ [3]byte{232, 86, 89}: "Advanced-Connectek Inc.",
+ [3]byte{232, 86, 214}: "NCTech Ltd",
+ [3]byte{232, 90, 167}: "LLC Emzior",
+ [3]byte{232, 91, 91}: "LG ELECTRONICS INC",
+ [3]byte{232, 91, 240}: "Imaging Diagnostics",
+ [3]byte{232, 93, 107}: "Luminate Wireless",
+ [3]byte{232, 94, 83}: "Infratec Datentechnik GmbH",
+ [3]byte{232, 97, 31}: "Dawning Information Industry Co.,Ltd",
+ [3]byte{232, 97, 126}: "Liteon Technology Corporation",
+ [3]byte{232, 97, 131}: "Black Diamond Advanced Technology, LLC",
+ [3]byte{232, 97, 190}: "Melec Inc.",
+ [3]byte{232, 101, 73}: "Cisco Systems, Inc",
+ [3]byte{232, 101, 212}: "Tenda Technology Co.,Ltd.Dongguan branch",
+ [3]byte{232, 102, 196}: "Diamanti",
+ [3]byte{232, 104, 25}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{232, 108, 218}: "Supercomputers and Neurocomputers Research Center",
+ [3]byte{232, 109, 82}: "ARRIS Group, Inc.",
+ [3]byte{232, 109, 84}: "Digit Mobile Inc",
+ [3]byte{232, 109, 101}: "AUDIO MOBIL Elektronik GmbH",
+ [3]byte{232, 109, 110}: "voestalpine SIGNALING Fareham Ltd.",
+ [3]byte{232, 111, 242}: "Actiontec Electronics, Inc",
+ [3]byte{232, 113, 141}: "Elsys Equipamentos Eletronicos Ltda",
+ [3]byte{232, 116, 230}: "ADB Broadband Italia",
+ [3]byte{232, 117, 127}: "FIRS Technologies(Shenzhen) Co., Ltd",
+ [3]byte{232, 120, 161}: "BEOVIEW INTERCOM DOO",
+ [3]byte{232, 122, 243}: "S5 Tech S.r.l.",
+ [3]byte{232, 128, 46}: "Apple, Inc.",
+ [3]byte{232, 128, 216}: "GNTEK Electronics Co.,Ltd.",
+ [3]byte{232, 130, 91}: "ARRIS Group, Inc.",
+ [3]byte{232, 135, 163}: "Loxley Public Company Limited",
+ [3]byte{232, 136, 108}: "Shenzhen SC Technologies Co.,LTD",
+ [3]byte{232, 137, 44}: "ARRIS Group, Inc.",
+ [3]byte{232, 141, 40}: "Apple, Inc.",
+ [3]byte{232, 141, 245}: "ZNYX Networks, Inc.",
+ [3]byte{232, 142, 96}: "NSD Corporation",
+ [3]byte{232, 145, 32}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{232, 146, 24}: "Arcontia International AB",
+ [3]byte{232, 146, 164}: "LG Electronics (Mobile Communications)",
+ [3]byte{232, 147, 9}: "Samsung Electronics Co.,Ltd",
+ [3]byte{232, 148, 76}: "Cogent Healthcare Systems Ltd",
+ [3]byte{232, 148, 246}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{232, 150, 6}: "testo Instruments (Shenzhen) Co., Ltd.",
+ [3]byte{232, 153, 90}: "PiiGAB, Processinformation i Goteborg AB",
+ [3]byte{232, 153, 196}: "HTC Corporation",
+ [3]byte{232, 154, 143}: "QUANTA COMPUTER INC.",
+ [3]byte{232, 154, 255}: "Fujian Landi Commercial Equipment Co.,Ltd",
+ [3]byte{232, 157, 135}: "Toshiba",
+ [3]byte{232, 158, 12}: "Private",
+ [3]byte{232, 158, 180}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{232, 159, 236}: "CHENGDU KT ELECTRONIC HI-TECH CO.,LTD",
+ [3]byte{232, 163, 100}: "Signal Path International / Peachtree Audio",
+ [3]byte{232, 164, 193}: "Deep Sea Electronics PLC",
+ [3]byte{232, 167, 242}: "sTraffic",
+ [3]byte{232, 171, 250}: "Shenzhen Reecam Tech.Ltd.",
+ [3]byte{232, 177, 252}: "Intel Corporate",
+ [3]byte{232, 178, 172}: "Apple, Inc.",
+ [3]byte{232, 180, 174}: "Shenzhen C&D Electronics Co.,Ltd",
+ [3]byte{232, 180, 200}: "Samsung Electronics Co.,Ltd",
+ [3]byte{232, 182, 194}: "Juniper Networks",
+ [3]byte{232, 183, 72}: "Cisco Systems, Inc",
+ [3]byte{232, 186, 112}: "Cisco Systems, Inc",
+ [3]byte{232, 187, 61}: "Sino Prime-Tech Limited",
+ [3]byte{232, 187, 168}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{232, 189, 209}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{232, 190, 129}: "Sagemcom Broadband SAS",
+ [3]byte{232, 193, 215}: "Philips",
+ [3]byte{232, 194, 41}: "H-Displays (MSC) Bhd",
+ [3]byte{232, 195, 32}: "Austco Communication Systems Pty Ltd",
+ [3]byte{232, 199, 79}: "Liteon Technology Corporation",
+ [3]byte{232, 203, 161}: "Nokia Corporation",
+ [3]byte{232, 204, 24}: "D-Link International",
+ [3]byte{232, 204, 50}: "Micronet LTD",
+ [3]byte{232, 205, 45}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{232, 206, 6}: "SkyHawke Technologies, LLC.",
+ [3]byte{232, 208, 250}: "MKS Instruments Deutschland GmbH",
+ [3]byte{232, 209, 27}: "ASKEY COMPUTER CORP",
+ [3]byte{232, 212, 131}: "ULTIMATE Europe Transportation Equipment GmbH",
+ [3]byte{232, 212, 224}: "Beijing BenyWave Technology Co., Ltd.",
+ [3]byte{232, 216, 25}: "AzureWave Technology Inc.",
+ [3]byte{232, 218, 150}: "Zhuhai Tianrui Electrical Power Tech. Co., Ltd.",
+ [3]byte{232, 218, 170}: "VideoHome Technology Corp.",
+ [3]byte{232, 222, 39}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{232, 222, 142}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+ [3]byte{232, 222, 214}: "Intrising Networks, Inc.",
+ [3]byte{232, 223, 112}: "AVM Audiovisuelles Marketing und Computersysteme GmbH",
+ [3]byte{232, 223, 242}: "PRF Co., Ltd.",
+ [3]byte{232, 224, 143}: "GRAVOTECH MARKING SAS",
+ [3]byte{232, 224, 183}: "Toshiba",
+ [3]byte{232, 225, 225}: "Gemtek Technology Co., Ltd.",
+ [3]byte{232, 225, 226}: "Energotest",
+ [3]byte{232, 229, 214}: "Samsung Electronics Co.,Ltd",
+ [3]byte{232, 231, 50}: "Alcatel-Lucent Enterprise",
+ [3]byte{232, 231, 112}: "Warp9 Tech Design, Inc.",
+ [3]byte{232, 231, 118}: "Shenzhen Kootion Technology Co., Ltd",
+ [3]byte{232, 232, 117}: "iS5 Communications Inc.",
+ [3]byte{232, 234, 106}: "StarTech.com",
+ [3]byte{232, 234, 218}: "Denkovi Assembly Electronics LTD",
+ [3]byte{232, 235, 17}: "Texas Instruments",
+ [3]byte{232, 237, 5}: "ARRIS Group, Inc.",
+ [3]byte{232, 237, 243}: "Cisco Systems, Inc",
+ [3]byte{232, 239, 137}: "OPMEX Tech.",
+ [3]byte{232, 241, 176}: "Sagemcom Broadband SAS",
+ [3]byte{232, 242, 38}: "MILLSON CUSTOM SOLUTIONS INC.",
+ [3]byte{232, 242, 226}: "LG Innotek",
+ [3]byte{232, 242, 227}: "Starcor Beijing Co.,Limited",
+ [3]byte{232, 247, 36}: "Hewlett Packard Enterprise",
+ [3]byte{232, 249, 40}: "RFTECH SRL",
+ [3]byte{232, 252, 96}: "ELCOM Innovations Private Limited",
+ [3]byte{232, 252, 175}: "NETGEAR",
+ [3]byte{232, 253, 114}: "SHANGHAI LINGUO TECHNOLOGY CO., LTD.",
+ [3]byte{232, 253, 144}: "Turbostor",
+ [3]byte{232, 253, 232}: "CeLa Link Corporation",
+ [3]byte{236, 1, 51}: "TRINUS SYSTEMS INC.",
+ [3]byte{236, 1, 226}: "FOXCONN INTERCONNECT TECHNOLOGY",
+ [3]byte{236, 1, 238}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{236, 4, 65}: "ShenZhen TIGO Semiconductor Co., Ltd.",
+ [3]byte{236, 8, 107}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{236, 13, 154}: "Mellanox Technologies, Inc.",
+ [3]byte{236, 14, 196}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{236, 14, 214}: "ITECH INSTRUMENTS SAS",
+ [3]byte{236, 16, 123}: "Samsung Electronics Co.,Ltd",
+ [3]byte{236, 17, 32}: "FloDesign Wind Turbine Corporation",
+ [3]byte{236, 17, 39}: "Texas Instruments",
+ [3]byte{236, 19, 178}: "Netonix",
+ [3]byte{236, 19, 219}: "Juniper Networks",
+ [3]byte{236, 20, 246}: "BioControl AS",
+ [3]byte{236, 23, 47}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{236, 23, 102}: "Research Centre Module",
+ [3]byte{236, 26, 89}: "Belkin International Inc.",
+ [3]byte{236, 29, 127}: "zte corporation",
+ [3]byte{236, 29, 139}: "Cisco Systems, Inc",
+ [3]byte{236, 31, 114}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{236, 33, 159}: "VidaBox LLC",
+ [3]byte{236, 33, 229}: "Toshiba",
+ [3]byte{236, 34, 87}: "JiangSu NanJing University Electronic Information Technology Co.,Ltd",
+ [3]byte{236, 34, 128}: "D-Link International",
+ [3]byte{236, 35, 61}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{236, 35, 104}: "IntelliVoice Co.,Ltd.",
+ [3]byte{236, 35, 123}: "zte corporation",
+ [3]byte{236, 36, 184}: "Texas Instruments",
+ [3]byte{236, 38, 202}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{236, 38, 251}: "TECC CO.,LTD.",
+ [3]byte{236, 42, 240}: "Ypsomed AG",
+ [3]byte{236, 44, 73}: "University of Tokyo",
+ [3]byte{236, 46, 78}: "HITACHI-LG DATA STORAGE INC",
+ [3]byte{236, 48, 145}: "Cisco Systems, Inc",
+ [3]byte{236, 53, 134}: "Apple, Inc.",
+ [3]byte{236, 54, 63}: "Markov Corporation",
+ [3]byte{236, 56, 143}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{236, 59, 240}: "NovelSat",
+ [3]byte{236, 60, 90}: "SHEN ZHEN HENG SHENG HUI DIGITAL TECHNOLOGY CO.,LTD",
+ [3]byte{236, 60, 136}: "MCNEX Co.,Ltd.",
+ [3]byte{236, 61, 253}: "SHENZHEN BILIAN ELECTRONIC CO.,LTD",
+ [3]byte{236, 62, 9}: "PERFORMANCE DESIGNED PRODUCTS, LLC",
+ [3]byte{236, 62, 247}: "Juniper Networks",
+ [3]byte{236, 63, 5}: "Institute 706, The Second Academy China Aerospace Science & Industry Corp",
+ [3]byte{236, 66, 180}: "ADC Corporation",
+ [3]byte{236, 66, 240}: "ADL Embedded Solutions, Inc.",
+ [3]byte{236, 67, 139}: "YAPTV",
+ [3]byte{236, 67, 230}: "AWCER Ltd.",
+ [3]byte{236, 67, 246}: "Zyxel Communications Corporation",
+ [3]byte{236, 68, 118}: "Cisco Systems, Inc",
+ [3]byte{236, 70, 68}: "TTK SAS",
+ [3]byte{236, 70, 112}: "Meinberg Funkuhren GmbH & Co. KG",
+ [3]byte{236, 71, 60}: "Redwire, LLC",
+ [3]byte{236, 73, 147}: "Qihan Technology Co., Ltd",
+ [3]byte{236, 76, 77}: "ZAO NPK RoTeK",
+ [3]byte{236, 77, 71}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{236, 79, 130}: "Calix Inc.",
+ [3]byte{236, 81, 188}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{236, 82, 220}: "WORLD MEDIA AND TECHNOLOGY Corp.",
+ [3]byte{236, 84, 46}: "Shanghai XiMei Electronic Technology Co. Ltd",
+ [3]byte{236, 85, 249}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{236, 89, 231}: "Microsoft Corporation",
+ [3]byte{236, 90, 134}: "Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd",
+ [3]byte{236, 92, 105}: "MITSUBISHI HEAVY INDUSTRIES MECHATRONICS SYSTEMS,LTD.",
+ [3]byte{236, 95, 35}: "Qinghai Kimascend Electronics Technology Co. Ltd.",
+ [3]byte{236, 96, 224}: "AVI-ON LABS",
+ [3]byte{236, 98, 100}: "Global411 Internet Services, LLC",
+ [3]byte{236, 99, 229}: "ePBoard Design LLC",
+ [3]byte{236, 100, 231}: "MOCACARE Corporation",
+ [3]byte{236, 102, 209}: "B&W Group LTD",
+ [3]byte{236, 104, 129}: "Palo Alto Networks",
+ [3]byte{236, 108, 159}: "Chengdu Volans Technology CO.,LTD",
+ [3]byte{236, 112, 151}: "ARRIS Group, Inc.",
+ [3]byte{236, 113, 219}: "Shenzhen Baichuan Digital Technology Co., Ltd.",
+ [3]byte{236, 116, 186}: "Hirschmann Automation and Control GmbH",
+ [3]byte{236, 124, 116}: "Justone Technologies Co., Ltd.",
+ [3]byte{236, 125, 17}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{236, 125, 157}: "MEI",
+ [3]byte{236, 128, 9}: "NovaSparks",
+ [3]byte{236, 129, 147}: "Logitech, Inc",
+ [3]byte{236, 131, 80}: "Microsoft Corporation",
+ [3]byte{236, 131, 108}: "RM Tech Co., Ltd.",
+ [3]byte{236, 133, 47}: "Apple, Inc.",
+ [3]byte{236, 136, 143}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{236, 136, 146}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{236, 137, 245}: "Lenovo Mobile Communication Technology Ltd.",
+ [3]byte{236, 138, 76}: "zte corporation",
+ [3]byte{236, 138, 199}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{236, 140, 162}: "Ruckus Wireless",
+ [3]byte{236, 142, 173}: "DLX",
+ [3]byte{236, 142, 174}: "Nagravision SA",
+ [3]byte{236, 142, 181}: "Hewlett Packard",
+ [3]byte{236, 146, 51}: "Eddyfi NDT Inc",
+ [3]byte{236, 147, 39}: "MEMMERT GmbH + Co. KG",
+ [3]byte{236, 147, 237}: "DDoS-Guard LTD",
+ [3]byte{236, 150, 129}: "2276427 Ontario Inc",
+ [3]byte{236, 152, 108}: "Lufft Mess- und Regeltechnik GmbH",
+ [3]byte{236, 152, 193}: "Beijing Risbo Network Technology Co.,Ltd",
+ [3]byte{236, 154, 116}: "Hewlett Packard",
+ [3]byte{236, 155, 91}: "Nokia Corporation",
+ [3]byte{236, 155, 243}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{236, 158, 205}: "Artesyn Embedded Technologies",
+ [3]byte{236, 159, 13}: "IEEE Registration Authority",
+ [3]byte{236, 162, 155}: "Kemppi Oy",
+ [3]byte{236, 168, 107}: "Elitegroup Computer Systems Co.,Ltd.",
+ [3]byte{236, 169, 250}: "GUANGDONG GENIUS TECHNOLOGY CO.,LTD.",
+ [3]byte{236, 170, 160}: "PEGATRON CORPORATION",
+ [3]byte{236, 173, 184}: "Apple, Inc.",
+ [3]byte{236, 176, 225}: "Ciena Corporation",
+ [3]byte{236, 177, 6}: "Acuro Networks, Inc",
+ [3]byte{236, 177, 215}: "Hewlett Packard",
+ [3]byte{236, 181, 65}: "SHINANO E and E Co.Ltd.",
+ [3]byte{236, 181, 250}: "Philips Lighting BV",
+ [3]byte{236, 184, 112}: "Beijing Heweinet Technology Co.,Ltd.",
+ [3]byte{236, 185, 7}: "CloudGenix Inc",
+ [3]byte{236, 186, 254}: "GIROPTIC",
+ [3]byte{236, 187, 174}: "Digivoice Tecnologia em Eletronica Ltda",
+ [3]byte{236, 189, 9}: "FUSION Electronics Ltd",
+ [3]byte{236, 189, 29}: "Cisco Systems, Inc",
+ [3]byte{236, 192, 106}: "PowerChord Group Limited",
+ [3]byte{236, 195, 138}: "Accuenergy (CANADA) Inc",
+ [3]byte{236, 200, 130}: "Cisco Systems, Inc",
+ [3]byte{236, 203, 48}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{236, 205, 109}: "Allied Telesis, Inc.",
+ [3]byte{236, 208, 14}: "MiraeRecognition Co., Ltd.",
+ [3]byte{236, 208, 64}: "GEA Farm Technologies GmbH",
+ [3]byte{236, 208, 159}: "Xiaomi Communications Co Ltd",
+ [3]byte{236, 209, 154}: "Zhuhai Liming Industries Co., Ltd",
+ [3]byte{236, 214, 138}: "Shenzhen JMicron Intelligent Technology Developmen",
+ [3]byte{236, 217, 37}: "RAMI",
+ [3]byte{236, 217, 80}: "IRT SA",
+ [3]byte{236, 217, 209}: "Shenzhen TG-NET Botone Technology Co.,Ltd.",
+ [3]byte{236, 222, 61}: "Lamprey Networks, Inc.",
+ [3]byte{236, 223, 58}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{236, 224, 155}: "Samsung Electronics Co.,Ltd",
+ [3]byte{236, 225, 84}: "Beijing Unisound Information Technology Co.,Ltd.",
+ [3]byte{236, 225, 169}: "Cisco Systems, Inc",
+ [3]byte{236, 226, 253}: "SKG Electric Group(Thailand) Co., Ltd.",
+ [3]byte{236, 229, 18}: "tado GmbH",
+ [3]byte{236, 229, 85}: "Hirschmann Automation",
+ [3]byte{236, 231, 68}: "Omntec mfg. inc",
+ [3]byte{236, 233, 11}: "SISTEMA SOLUCOES ELETRONICAS LTDA - EASYTECH",
+ [3]byte{236, 233, 21}: "STI Ltd",
+ [3]byte{236, 233, 248}: "Guang Zhou TRI-SUN Electronics Technology Co., Ltd",
+ [3]byte{236, 234, 3}: "DARFON LIGHTING CORP",
+ [3]byte{236, 235, 184}: "Hewlett Packard Enterprise",
+ [3]byte{236, 238, 216}: "ZTLX Network Technology Co.,Ltd",
+ [3]byte{236, 240, 14}: "AboCom",
+ [3]byte{236, 242, 54}: "NEOMONTANA ELECTRONICS",
+ [3]byte{236, 243, 66}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{236, 243, 91}: "Nokia Corporation",
+ [3]byte{236, 244, 81}: "Arcadyan Corporation",
+ [3]byte{236, 244, 187}: "Dell Inc.",
+ [3]byte{236, 247, 43}: "HD DIGITAL TECH CO., LTD.",
+ [3]byte{236, 248, 235}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+ [3]byte{236, 250, 3}: "FCA",
+ [3]byte{236, 250, 170}: "The IMS Company",
+ [3]byte{236, 250, 188}: "Espressif Inc.",
+ [3]byte{236, 250, 244}: "SenRa Tech Pvt. Ltd",
+ [3]byte{236, 252, 85}: "A. Eberle GmbH & Co. KG",
+ [3]byte{236, 254, 126}: "BlueRadios, Inc.",
+ [3]byte{240, 0, 127}: "Janz - Contadores de Energia, SA",
+ [3]byte{240, 2, 43}: "Chrontel",
+ [3]byte{240, 2, 72}: "SmarteBuilding",
+ [3]byte{240, 3, 140}: "AzureWave Technology Inc.",
+ [3]byte{240, 7, 134}: "Shandong Bittel Electronics Co., Ltd",
+ [3]byte{240, 8, 241}: "Samsung Electronics Co.,Ltd",
+ [3]byte{240, 13, 92}: "JinQianMao Technology Co.,Ltd.",
+ [3]byte{240, 19, 195}: "SHENZHEN FENDA TECHNOLOGY CO., LTD",
+ [3]byte{240, 21, 160}: "KyungDong One Co., Ltd.",
+ [3]byte{240, 21, 185}: "PlayFusion Limited",
+ [3]byte{240, 24, 43}: "LG Chem",
+ [3]byte{240, 27, 108}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{240, 28, 19}: "LG Electronics (Mobile Communications)",
+ [3]byte{240, 28, 45}: "Juniper Networks",
+ [3]byte{240, 29, 188}: "Microsoft Corporation",
+ [3]byte{240, 30, 52}: "ORICO Technologies Co., Ltd",
+ [3]byte{240, 31, 175}: "Dell Inc.",
+ [3]byte{240, 33, 157}: "Cal-Comp Electronics & Communications Company Ltd.",
+ [3]byte{240, 34, 78}: "Esan electronic co.",
+ [3]byte{240, 35, 41}: "SHOWA DENKI CO.,LTD.",
+ [3]byte{240, 35, 185}: "IEEE Registration Authority",
+ [3]byte{240, 36, 5}: "OPUS High Technology Corporation",
+ [3]byte{240, 36, 8}: "Talaris (Sweden) AB",
+ [3]byte{240, 36, 117}: "Apple, Inc.",
+ [3]byte{240, 37, 114}: "Cisco Systems, Inc",
+ [3]byte{240, 37, 183}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{240, 38, 36}: "WAFA TECHNOLOGIES CO., LTD.",
+ [3]byte{240, 38, 76}: "Dr. Sigrist AG",
+ [3]byte{240, 39, 45}: "Amazon Technologies Inc.",
+ [3]byte{240, 39, 69}: "F-Secure Corporation",
+ [3]byte{240, 39, 101}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{240, 41, 41}: "Cisco Systems, Inc",
+ [3]byte{240, 42, 35}: "Creative Next Design",
+ [3]byte{240, 42, 97}: "Waldo Networks, Inc.",
+ [3]byte{240, 47, 167}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{240, 47, 216}: "Bi2-Vision",
+ [3]byte{240, 50, 26}: "Mita-Teknik A/S",
+ [3]byte{240, 52, 4}: "TCT mobile ltd",
+ [3]byte{240, 55, 161}: "Huike Electronics (SHENZHEN) CO., LTD.",
+ [3]byte{240, 58, 75}: "Bloombase, Inc.",
+ [3]byte{240, 58, 85}: "Omega Elektronik AS",
+ [3]byte{240, 61, 3}: "TECNO MOBILE LIMITED",
+ [3]byte{240, 61, 41}: "Actility",
+ [3]byte{240, 62, 144}: "Ruckus Wireless",
+ [3]byte{240, 62, 191}: "GOGORO TAIWAN LIMITED",
+ [3]byte{240, 63, 248}: "R L Drake",
+ [3]byte{240, 64, 123}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{240, 66, 28}: "Intel Corporate",
+ [3]byte{240, 67, 53}: "DVN(Shanghai)Ltd.",
+ [3]byte{240, 67, 71}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{240, 69, 218}: "Texas Instruments",
+ [3]byte{240, 74, 43}: "PYRAMID Computer GmbH",
+ [3]byte{240, 75, 106}: "Scientific Production Association Siberian Arsenal, Ltd.",
+ [3]byte{240, 75, 242}: "JTECH Communications, Inc.",
+ [3]byte{240, 77, 162}: "Dell Inc.",
+ [3]byte{240, 79, 124}: "Private",
+ [3]byte{240, 88, 73}: "CareView Communications",
+ [3]byte{240, 90, 9}: "Samsung Electronics Co.,Ltd",
+ [3]byte{240, 91, 123}: "Samsung Electronics Co.,Ltd",
+ [3]byte{240, 92, 25}: "Aruba Networks",
+ [3]byte{240, 93, 137}: "Dycon Limited",
+ [3]byte{240, 93, 200}: "Duracell Powermat",
+ [3]byte{240, 95, 90}: "Getriebebau NORD GmbH and Co. KG",
+ [3]byte{240, 97, 48}: "Advantage Pharmacy Services, LLC",
+ [3]byte{240, 98, 13}: "Shenzhen Egreat Tech Corp.,Ltd",
+ [3]byte{240, 98, 129}: "ProCurve Networking by HP",
+ [3]byte{240, 101, 194}: "Yanfeng Visteon Electronics Technology (Shanghai) Co.,Ltd.",
+ [3]byte{240, 101, 221}: "Primax Electronics Ltd.",
+ [3]byte{240, 104, 83}: "Integrated Corporation",
+ [3]byte{240, 107, 202}: "Samsung Electronics Co.,Ltd",
+ [3]byte{240, 109, 120}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{240, 110, 11}: "Microsoft Corporation",
+ [3]byte{240, 110, 50}: "MICROTEL INNOVATION S.R.L.",
+ [3]byte{240, 114, 140}: "Samsung Electronics Co.,Ltd",
+ [3]byte{240, 115, 174}: "PEAK-System Technik",
+ [3]byte{240, 116, 133}: "NGD Systems, Inc.",
+ [3]byte{240, 116, 228}: "Thundercomm Technology Co., Ltd",
+ [3]byte{240, 118, 28}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+ [3]byte{240, 119, 101}: "Sourcefire, Inc",
+ [3]byte{240, 119, 208}: "Xcellen",
+ [3]byte{240, 120, 22}: "Cisco Systems, Inc",
+ [3]byte{240, 121, 89}: "ASUSTek COMPUTER INC.",
+ [3]byte{240, 121, 96}: "Apple, Inc.",
+ [3]byte{240, 121, 232}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{240, 123, 203}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{240, 125, 104}: "D-Link Corporation",
+ [3]byte{240, 127, 6}: "Cisco Systems, Inc",
+ [3]byte{240, 127, 12}: "Leopold Kostal GmbH &Co. KG",
+ [3]byte{240, 129, 175}: "IRZ AUTOMATION TECHNOLOGIES LTD",
+ [3]byte{240, 130, 97}: "Sagemcom Broadband SAS",
+ [3]byte{240, 132, 47}: "ADB Broadband Italia",
+ [3]byte{240, 132, 201}: "zte corporation",
+ [3]byte{240, 133, 193}: "SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.",
+ [3]byte{240, 138, 40}: "JIANGSU HENGSION ELECTRONIC S and T CO.,LTD",
+ [3]byte{240, 139, 254}: "COSTEL.,CO.LTD",
+ [3]byte{240, 140, 251}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{240, 142, 219}: "VeloCloud Networks",
+ [3]byte{240, 146, 28}: "Hewlett Packard",
+ [3]byte{240, 146, 180}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+ [3]byte{240, 147, 58}: "NxtConect",
+ [3]byte{240, 147, 197}: "Garland Technology",
+ [3]byte{240, 151, 229}: "TAMIO, INC",
+ [3]byte{240, 152, 56}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{240, 152, 157}: "Apple, Inc.",
+ [3]byte{240, 153, 191}: "Apple, Inc.",
+ [3]byte{240, 154, 81}: "Shanghai Viroyal Electronic Technology Company Limited",
+ [3]byte{240, 156, 187}: "RaonThink Inc.",
+ [3]byte{240, 156, 233}: "Aerohive Networks Inc.",
+ [3]byte{240, 158, 99}: "Cisco Systems, Inc",
+ [3]byte{240, 159, 194}: "Ubiquiti Networks Inc.",
+ [3]byte{240, 162, 37}: "Private",
+ [3]byte{240, 167, 100}: "GST Co., Ltd.",
+ [3]byte{240, 171, 84}: "MITSUMI ELECTRIC CO.,LTD.",
+ [3]byte{240, 172, 164}: "HBC-radiomatic",
+ [3]byte{240, 172, 215}: "IEEE Registration Authority",
+ [3]byte{240, 173, 78}: "Globalscale Technologies, Inc.",
+ [3]byte{240, 174, 81}: "Xi3 Corp",
+ [3]byte{240, 176, 82}: "Ruckus Wireless",
+ [3]byte{240, 176, 231}: "Apple, Inc.",
+ [3]byte{240, 178, 229}: "Cisco Systems, Inc",
+ [3]byte{240, 180, 41}: "Xiaomi Communications Co Ltd",
+ [3]byte{240, 180, 121}: "Apple, Inc.",
+ [3]byte{240, 182, 235}: "Poslab Technology Co., Ltd.",
+ [3]byte{240, 188, 200}: "MaxID (Pty) Ltd",
+ [3]byte{240, 189, 46}: "H+S Polatis Ltd",
+ [3]byte{240, 189, 241}: "Sipod Inc.",
+ [3]byte{240, 191, 151}: "Sony Corporation",
+ [3]byte{240, 193, 241}: "Apple, Inc.",
+ [3]byte{240, 194, 76}: "Zhejiang FeiYue Digital Technology Co., Ltd",
+ [3]byte{240, 194, 124}: "Mianyang Netop Telecom Equipment Co.,Ltd.",
+ [3]byte{240, 199, 127}: "Texas Instruments",
+ [3]byte{240, 200, 80}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{240, 200, 140}: "LeddarTech Inc.",
+ [3]byte{240, 203, 161}: "Apple, Inc.",
+ [3]byte{240, 209, 79}: "LINEAR LLC",
+ [3]byte{240, 209, 169}: "Apple, Inc.",
+ [3]byte{240, 209, 184}: "LEDVANCE",
+ [3]byte{240, 210, 241}: "Amazon Technologies Inc.",
+ [3]byte{240, 211, 167}: "CobaltRay Co., Ltd",
+ [3]byte{240, 211, 231}: "Sensometrix SA",
+ [3]byte{240, 212, 246}: "Lars Thrane A/S",
+ [3]byte{240, 213, 191}: "Intel Corporate",
+ [3]byte{240, 214, 87}: "ECHOSENS",
+ [3]byte{240, 215, 103}: "Axema Passagekontroll AB",
+ [3]byte{240, 215, 170}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{240, 217, 178}: "EXO S.A.",
+ [3]byte{240, 218, 124}: "RLH INDUSTRIES,INC.",
+ [3]byte{240, 219, 48}: "Yottabyte",
+ [3]byte{240, 219, 226}: "Apple, Inc.",
+ [3]byte{240, 219, 248}: "Apple, Inc.",
+ [3]byte{240, 220, 226}: "Apple, Inc.",
+ [3]byte{240, 222, 113}: "Shanghai EDO Technologies Co.,Ltd.",
+ [3]byte{240, 222, 185}: "ShangHai Y&Y Electronics Co., Ltd",
+ [3]byte{240, 222, 241}: "Wistron Infocomm (Zhongshan) Corporation",
+ [3]byte{240, 229, 195}: "Drägerwerk AG & Co. KG aA",
+ [3]byte{240, 231, 126}: "Samsung Electronics Co.,Ltd",
+ [3]byte{240, 235, 208}: "Shanghai Feixun Communication Co.,Ltd.",
+ [3]byte{240, 236, 57}: "Essec",
+ [3]byte{240, 237, 30}: "Bilkon Bilgisayar Kontrollu Cih. Im.Ltd.",
+ [3]byte{240, 238, 16}: "Samsung Electronics Co.,Ltd",
+ [3]byte{240, 238, 88}: "PACE Telematics GmbH",
+ [3]byte{240, 238, 187}: "VIPAR GmbH",
+ [3]byte{240, 239, 210}: "TF PAYMENT SERVICE CO., LTD",
+ [3]byte{240, 240, 2}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{240, 242, 73}: "Hitron Technologies. Inc",
+ [3]byte{240, 242, 96}: "Mobitec AB",
+ [3]byte{240, 243, 54}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{240, 245, 174}: "Adaptrum Inc.",
+ [3]byte{240, 246, 28}: "Apple, Inc.",
+ [3]byte{240, 246, 68}: "Whitesky Science & Technology Co.,Ltd.",
+ [3]byte{240, 246, 105}: "Motion Analysis Corporation",
+ [3]byte{240, 247, 85}: "Cisco Systems, Inc",
+ [3]byte{240, 247, 179}: "Phorm",
+ [3]byte{240, 248, 66}: "KEEBOX, Inc.",
+ [3]byte{240, 248, 242}: "Texas Instruments",
+ [3]byte{240, 249, 247}: "IES GmbH & Co. KG",
+ [3]byte{240, 253, 160}: "Acurix Networks Pty Ltd",
+ [3]byte{240, 254, 107}: "Shanghai High-Flying Electronics Technology Co., Ltd",
+ [3]byte{244, 3, 4}: "Google, Inc.",
+ [3]byte{244, 3, 33}: "BeNeXt B.V.",
+ [3]byte{244, 3, 47}: "Reduxio Systems",
+ [3]byte{244, 3, 67}: "Hewlett Packard Enterprise",
+ [3]byte{244, 4, 76}: "ValenceTech Limited",
+ [3]byte{244, 6, 105}: "Intel Corporate",
+ [3]byte{244, 6, 141}: "devolo AG",
+ [3]byte{244, 6, 165}: "Hangzhou Bianfeng Networking Technology Co., Ltd.",
+ [3]byte{244, 9, 216}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{244, 10, 74}: "INDUSNET Communication Technology Co.,LTD",
+ [3]byte{244, 11, 147}: "BlackBerry RTS",
+ [3]byte{244, 14, 17}: "IEEE Registration Authority",
+ [3]byte{244, 14, 34}: "Samsung Electronics Co.,Ltd",
+ [3]byte{244, 14, 131}: "ARRIS Group, Inc.",
+ [3]byte{244, 15, 27}: "Cisco Systems, Inc",
+ [3]byte{244, 15, 36}: "Apple, Inc.",
+ [3]byte{244, 15, 155}: "WAVELINK",
+ [3]byte{244, 21, 53}: "SPON Communication Technology Co.,Ltd",
+ [3]byte{244, 21, 99}: "F5 Networks, Inc.",
+ [3]byte{244, 21, 253}: "Shanghai Pateo Electronic Equipment Manufacturing Co., Ltd.",
+ [3]byte{244, 23, 184}: "AirTies Wireless Networks",
+ [3]byte{244, 27, 161}: "Apple, Inc.",
+ [3]byte{244, 30, 38}: "Simon-Kaloi Engineering",
+ [3]byte{244, 30, 94}: "RtBrick Inc.",
+ [3]byte{244, 31, 11}: "YAMABISHI Corporation",
+ [3]byte{244, 31, 136}: "zte corporation",
+ [3]byte{244, 31, 194}: "Cisco Systems, Inc",
+ [3]byte{244, 32, 18}: "Cuciniale GmbH",
+ [3]byte{244, 40, 51}: "MMPC Inc.",
+ [3]byte{244, 40, 83}: "Zioncom Electronics (Shenzhen) Ltd.",
+ [3]byte{244, 40, 150}: "SPECTO PAINEIS ELETRONICOS LTDA",
+ [3]byte{244, 41, 129}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{244, 43, 72}: "Ubiqam",
+ [3]byte{244, 44, 86}: "SENOR TECH CO LTD",
+ [3]byte{244, 48, 185}: "Hewlett Packard",
+ [3]byte{244, 49, 195}: "Apple, Inc.",
+ [3]byte{244, 54, 225}: "Abilis Systems SARL",
+ [3]byte{244, 55, 183}: "Apple, Inc.",
+ [3]byte{244, 56, 20}: "Shanghai Howell Electronic Co.,Ltd",
+ [3]byte{244, 61, 128}: "FAG Industrial Services GmbH",
+ [3]byte{244, 62, 97}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+ [3]byte{244, 62, 157}: "Benu Networks, Inc.",
+ [3]byte{244, 65, 86}: "Arrikto Inc.",
+ [3]byte{244, 66, 39}: "S & S Research Inc.",
+ [3]byte{244, 66, 143}: "Samsung Electronics Co.,Ltd",
+ [3]byte{244, 68, 80}: "BND Co., Ltd.",
+ [3]byte{244, 69, 237}: "Portable Innovation Technology Ltd.",
+ [3]byte{244, 71, 19}: "Leading Public Performance Co., Ltd.",
+ [3]byte{244, 71, 42}: "Nanjing Rousing Sci. and Tech. Industrial Co., Ltd",
+ [3]byte{244, 72, 72}: "Amscreen Group Ltd",
+ [3]byte{244, 73, 239}: "EMSTONE",
+ [3]byte{244, 75, 42}: "Cisco SPVTG",
+ [3]byte{244, 76, 112}: "Skyworth Digital Technology(Shenzhen) Co.,Ltd",
+ [3]byte{244, 76, 127}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{244, 77, 23}: "GOLDCARD HIGH-TECH CO.,LTD.",
+ [3]byte{244, 77, 48}: "Elitegroup Computer Systems Co.,Ltd.",
+ [3]byte{244, 78, 5}: "Cisco Systems, Inc",
+ [3]byte{244, 78, 253}: "Actions Semiconductor Co.,Ltd.(Cayman Islands)",
+ [3]byte{244, 80, 235}: "Telechips Inc",
+ [3]byte{244, 82, 20}: "Mellanox Technologies, Inc.",
+ [3]byte{244, 84, 51}: "Rockwell Automation",
+ [3]byte{244, 85, 149}: "HENGBAO Corporation LTD.",
+ [3]byte{244, 85, 156}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{244, 85, 224}: "Niceway CNC Technology Co.,Ltd.Hunan Province",
+ [3]byte{244, 87, 62}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{244, 88, 66}: "Boxx TV Ltd",
+ [3]byte{244, 91, 115}: "Wanjiaan Interconnected Technology Co., Ltd",
+ [3]byte{244, 92, 137}: "Apple, Inc.",
+ [3]byte{244, 94, 171}: "Texas Instruments",
+ [3]byte{244, 95, 105}: "Matsufu Electronics distribution Company",
+ [3]byte{244, 95, 212}: "Cisco SPVTG",
+ [3]byte{244, 95, 247}: "DQ Technology Inc.",
+ [3]byte{244, 96, 13}: "Panoptic Technology, Inc",
+ [3]byte{244, 98, 208}: "Not for Radio, LLC",
+ [3]byte{244, 99, 73}: "Diffon Corporation",
+ [3]byte{244, 100, 93}: "Toshiba",
+ [3]byte{244, 103, 45}: "ShenZhen Topstar Technology Company",
+ [3]byte{244, 106, 146}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+ [3]byte{244, 106, 188}: "Adonit Corp. Ltd.",
+ [3]byte{244, 107, 239}: "Sagemcom Broadband SAS",
+ [3]byte{244, 109, 4}: "ASUSTek COMPUTER INC.",
+ [3]byte{244, 109, 226}: "zte corporation",
+ [3]byte{244, 110, 36}: "NEC Personal Computers, Ltd.",
+ [3]byte{244, 112, 171}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{244, 115, 202}: "Conversion Sound Inc.",
+ [3]byte{244, 118, 38}: "Viltechmeda UAB",
+ [3]byte{244, 122, 78}: "Woojeon&Handan",
+ [3]byte{244, 122, 204}: "SolidFire, Inc.",
+ [3]byte{244, 123, 94}: "Samsung Electronics Co.,Ltd",
+ [3]byte{244, 127, 53}: "Cisco Systems, Inc",
+ [3]byte{244, 129, 57}: "CANON INC.",
+ [3]byte{244, 131, 205}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{244, 131, 225}: "Shanghai Clouder Semiconductor Co.,Ltd",
+ [3]byte{244, 133, 198}: "FDT Technologies",
+ [3]byte{244, 135, 113}: "Infoblox",
+ [3]byte{244, 139, 50}: "Xiaomi Communications Co Ltd",
+ [3]byte{244, 140, 80}: "Intel Corporate",
+ [3]byte{244, 142, 9}: "Nokia Corporation",
+ [3]byte{244, 142, 56}: "Dell Inc.",
+ [3]byte{244, 142, 146}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{244, 144, 202}: "Tensorcom",
+ [3]byte{244, 144, 234}: "Deciso B.V.",
+ [3]byte{244, 145, 30}: "ZHUHAI EWPE INFORMATION TECHNOLOGY INC",
+ [3]byte{244, 147, 159}: "Hon Hai Precision Ind. Co., Ltd.",
+ [3]byte{244, 148, 97}: "NexGen Storage",
+ [3]byte{244, 148, 102}: "CountMax, ltd",
+ [3]byte{244, 150, 52}: "Intel Corporate",
+ [3]byte{244, 150, 81}: "NAKAYO Inc",
+ [3]byte{244, 153, 172}: "WEBER Schraubautomaten GmbH",
+ [3]byte{244, 158, 239}: "Taicang T&W Electronics",
+ [3]byte{244, 159, 84}: "Samsung Electronics Co.,Ltd",
+ [3]byte{244, 159, 243}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{244, 162, 148}: "EAGLE WORLD DEVELOPMENT CO., LIMITED",
+ [3]byte{244, 165, 42}: "Hawa Technologies Inc",
+ [3]byte{244, 167, 57}: "Juniper Networks",
+ [3]byte{244, 169, 151}: "CANON INC.",
+ [3]byte{244, 172, 193}: "Cisco Systems, Inc",
+ [3]byte{244, 177, 100}: "Lightning Telecommunications Technology Co. Ltd",
+ [3]byte{244, 179, 129}: "WindowMaster A/S",
+ [3]byte{244, 181, 32}: "Biostar Microtech international corp.",
+ [3]byte{244, 181, 47}: "Juniper Networks",
+ [3]byte{244, 181, 73}: "Xiamen Yeastar Information Technology Co., Ltd.",
+ [3]byte{244, 182, 229}: "TerraSem Co.,Ltd",
+ [3]byte{244, 183, 42}: "TIME INTERCONNECT LTD",
+ [3]byte{244, 183, 179}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{244, 183, 226}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{244, 184, 94}: "Texas Instruments",
+ [3]byte{244, 184, 167}: "zte corporation",
+ [3]byte{244, 189, 124}: "Chengdu jinshi communication Co., LTD",
+ [3]byte{244, 196, 71}: "Coagent International Enterprise Limited",
+ [3]byte{244, 196, 214}: "Shenzhen Xinfa Electronic Co.,ltd",
+ [3]byte{244, 198, 19}: "Alcatel-Lucent Shanghai Bell Co., Ltd",
+ [3]byte{244, 198, 215}: "blackned GmbH",
+ [3]byte{244, 199, 20}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{244, 199, 149}: "WEY Elektronik AG",
+ [3]byte{244, 202, 36}: "FreeBit Co., Ltd.",
+ [3]byte{244, 202, 229}: "FREEBOX SAS",
+ [3]byte{244, 203, 82}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{244, 204, 85}: "Juniper Networks",
+ [3]byte{244, 205, 144}: "Vispiron Rotec GmbH",
+ [3]byte{244, 206, 70}: "Hewlett Packard",
+ [3]byte{244, 207, 226}: "Cisco Systems, Inc",
+ [3]byte{244, 208, 50}: "Yunnan Ideal Information&Technology.,Ltd",
+ [3]byte{244, 210, 97}: "SEMOCON Co., Ltd",
+ [3]byte{244, 215, 178}: "LGS Innovations, LLC",
+ [3]byte{244, 217, 251}: "Samsung Electronics Co.,Ltd",
+ [3]byte{244, 220, 65}: "YOUNGZONE CULTURE (SHANGHAI) CORP",
+ [3]byte{244, 220, 77}: "Beijing CCD Digital Technology Co., Ltd",
+ [3]byte{244, 220, 218}: "Zhuhai Jiahe Communication Technology Co., limited",
+ [3]byte{244, 220, 249}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{244, 221, 158}: "GoPro",
+ [3]byte{244, 222, 12}: "ESPOD Ltd.",
+ [3]byte{244, 225, 66}: "Delta Elektronika BV",
+ [3]byte{244, 226, 4}: "Traqueur",
+ [3]byte{244, 227, 251}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{244, 228, 173}: "zte corporation",
+ [3]byte{244, 230, 215}: "Solar Power Technologies, Inc.",
+ [3]byte{244, 233, 38}: "Tianjin Zanpu Technology Inc.",
+ [3]byte{244, 233, 212}: "QLogic Corporation",
+ [3]byte{244, 234, 103}: "Cisco Systems, Inc",
+ [3]byte{244, 234, 181}: "Aerohive Networks Inc.",
+ [3]byte{244, 235, 56}: "Sagemcom Broadband SAS",
+ [3]byte{244, 236, 56}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{244, 237, 95}: "SHENZHEN KTC TECHNOLOGY GROUP",
+ [3]byte{244, 238, 20}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+ [3]byte{244, 239, 158}: "SGSG SCIENCE & TECHNOLOGY CO. LTD",
+ [3]byte{244, 241, 90}: "Apple, Inc.",
+ [3]byte{244, 241, 225}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{244, 242, 109}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{244, 243, 170}: "JBL GmbH & Co. KG",
+ [3]byte{244, 245, 36}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{244, 245, 165}: "Nokia Corporation",
+ [3]byte{244, 245, 216}: "Google, Inc.",
+ [3]byte{244, 245, 219}: "Xiaomi Communications Co Ltd",
+ [3]byte{244, 245, 232}: "Google, Inc.",
+ [3]byte{244, 246, 70}: "Dediprog Technology Co. Ltd.",
+ [3]byte{244, 249, 81}: "Apple, Inc.",
+ [3]byte{244, 252, 50}: "Texas Instruments",
+ [3]byte{244, 252, 177}: "JJ Corp",
+ [3]byte{244, 253, 43}: "ZOYI Company",
+ [3]byte{248, 1, 19}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{248, 2, 120}: "IEEE Registration Authority",
+ [3]byte{248, 3, 50}: "Khomp",
+ [3]byte{248, 3, 119}: "Apple, Inc.",
+ [3]byte{248, 4, 46}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{248, 5, 28}: "DRS Imaging and Targeting Solutions",
+ [3]byte{248, 11, 190}: "ARRIS Group, Inc.",
+ [3]byte{248, 11, 203}: "Cisco Systems, Inc",
+ [3]byte{248, 11, 208}: "Datang Telecom communication terminal (Tianjin) Co., Ltd.",
+ [3]byte{248, 12, 243}: "LG Electronics (Mobile Communications)",
+ [3]byte{248, 13, 67}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{248, 13, 96}: "CANON INC.",
+ [3]byte{248, 13, 234}: "ZyCast Technology Inc.",
+ [3]byte{248, 15, 65}: "Wistron Infocomm (Zhongshan) Corporation",
+ [3]byte{248, 15, 132}: "Natural Security SAS",
+ [3]byte{248, 16, 55}: "Atopia Systems, LP",
+ [3]byte{248, 21, 71}: "Avaya Inc",
+ [3]byte{248, 22, 84}: "Intel Corporate",
+ [3]byte{248, 24, 151}: "2Wire Inc",
+ [3]byte{248, 26, 103}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{248, 28, 229}: "Telefonbau Behnke GmbH",
+ [3]byte{248, 29, 15}: "Hitron Technologies. Inc",
+ [3]byte{248, 29, 120}: "IEEE Registration Authority",
+ [3]byte{248, 29, 144}: "Solidwintech",
+ [3]byte{248, 29, 147}: "Longdhua(Beijing) Controls Technology Co.,Ltd",
+ [3]byte{248, 30, 223}: "Apple, Inc.",
+ [3]byte{248, 32, 85}: "Green Information System",
+ [3]byte{248, 34, 133}: "Cypress Technology CO., LTD.",
+ [3]byte{248, 35, 178}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{248, 36, 65}: "Yeelink",
+ [3]byte{248, 39, 147}: "Apple, Inc.",
+ [3]byte{248, 40, 25}: "Liteon Technology Corporation",
+ [3]byte{248, 43, 200}: "Jiangsu Switter Co., Ltd",
+ [3]byte{248, 44, 24}: "2Wire Inc",
+ [3]byte{248, 46, 219}: "RTW GmbH & Co. KG",
+ [3]byte{248, 47, 8}: "Molex",
+ [3]byte{248, 47, 91}: "eGauge Systems LLC",
+ [3]byte{248, 47, 168}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{248, 48, 148}: "Alcatel-Lucent Telecom Limited",
+ [3]byte{248, 49, 62}: "endeavour GmbH",
+ [3]byte{248, 50, 228}: "ASUSTek COMPUTER INC.",
+ [3]byte{248, 51, 118}: "Good Mind Innovation Co., Ltd.",
+ [3]byte{248, 52, 65}: "Intel Corporate",
+ [3]byte{248, 53, 83}: "Magenta Research Ltd.",
+ [3]byte{248, 53, 221}: "Gemtek Technology Co., Ltd.",
+ [3]byte{248, 61, 78}: "Softlink Automation System Co., Ltd",
+ [3]byte{248, 61, 255}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{248, 63, 81}: "Samsung Electronics Co.,Ltd",
+ [3]byte{248, 66, 251}: "Yasuda Joho Co.,ltd.",
+ [3]byte{248, 68, 227}: "Taicang T&W Electronics",
+ [3]byte{248, 69, 173}: "Konka Group Co., Ltd.",
+ [3]byte{248, 70, 28}: "Sony Interactive Entertainment Inc.",
+ [3]byte{248, 70, 45}: "SYNTEC Incorporation",
+ [3]byte{248, 71, 45}: "X2gen Digital Corp. Ltd",
+ [3]byte{248, 72, 151}: "Hitachi, Ltd.",
+ [3]byte{248, 74, 115}: "EUMTECH CO., LTD",
+ [3]byte{248, 74, 127}: "Innometriks Inc",
+ [3]byte{248, 74, 191}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{248, 79, 87}: "Cisco Systems, Inc",
+ [3]byte{248, 80, 99}: "Verathon",
+ [3]byte{248, 81, 109}: "Denwa Technology Corp.",
+ [3]byte{248, 82, 223}: "VNL Europe AB",
+ [3]byte{248, 84, 175}: "ECI Telecom Ltd.",
+ [3]byte{248, 87, 46}: "Core Brands, LLC",
+ [3]byte{248, 89, 113}: "Intel Corporate",
+ [3]byte{248, 90, 0}: "Sanford LP",
+ [3]byte{248, 91, 156}: "SB SYSTEMS Co.,Ltd",
+ [3]byte{248, 91, 201}: "M-Cube Spa",
+ [3]byte{248, 92, 69}: "IC Nexus Co. Ltd.",
+ [3]byte{248, 92, 77}: "NOKIA",
+ [3]byte{248, 95, 42}: "Nokia Corporation",
+ [3]byte{248, 98, 20}: "Apple, Inc.",
+ [3]byte{248, 98, 170}: "xn systems",
+ [3]byte{248, 99, 63}: "Intel Corporate",
+ [3]byte{248, 100, 101}: "Anova Applied Electronics, Inc.",
+ [3]byte{248, 102, 1}: "Suzhou Chi-tek information technology Co., Ltd",
+ [3]byte{248, 102, 209}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{248, 102, 242}: "Cisco Systems, Inc",
+ [3]byte{248, 105, 113}: "Seibu Electric Co.,",
+ [3]byte{248, 108, 225}: "Taicang T&W Electronics",
+ [3]byte{248, 110, 207}: "Arcx Inc",
+ [3]byte{248, 110, 238}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{248, 113, 254}: "The Goldman Sachs Group, Inc.",
+ [3]byte{248, 114, 234}: "Cisco Systems, Inc",
+ [3]byte{248, 115, 148}: "NETGEAR",
+ [3]byte{248, 115, 162}: "Avaya Inc",
+ [3]byte{248, 117, 136}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{248, 118, 155}: "Neopis Co., Ltd.",
+ [3]byte{248, 119, 184}: "Samsung Electronics Co.,Ltd",
+ [3]byte{248, 122, 239}: "Rosonix Technology, Inc.",
+ [3]byte{248, 123, 32}: "Cisco Systems, Inc",
+ [3]byte{248, 123, 98}: "FASTWEL INTERNATIONAL CO., LTD. Taiwan Branch",
+ [3]byte{248, 123, 122}: "ARRIS Group, Inc.",
+ [3]byte{248, 123, 140}: "Amped Wireless",
+ [3]byte{248, 128, 150}: "Elsys Equipamentos Eletrônicos Ltda",
+ [3]byte{248, 129, 26}: "OVERKIZ",
+ [3]byte{248, 132, 121}: "Yaojin Technology(Shenzhen)Co.,Ltd",
+ [3]byte{248, 132, 242}: "Samsung Electronics Co.,Ltd",
+ [3]byte{248, 138, 60}: "IEEE Registration Authority",
+ [3]byte{248, 140, 28}: "KAISHUN ELECTRONIC TECHNOLOGY CO., LTD. BEIJING",
+ [3]byte{248, 141, 239}: "Tenebraex",
+ [3]byte{248, 142, 133}: "Comtrend Corporation",
+ [3]byte{248, 143, 202}: "Google, Inc.",
+ [3]byte{248, 145, 42}: "GLP German Light Products GmbH",
+ [3]byte{248, 147, 243}: "VOLANS",
+ [3]byte{248, 148, 194}: "Intel Corporate",
+ [3]byte{248, 149, 80}: "Proton Products Chengdu Ltd",
+ [3]byte{248, 149, 199}: "LG Electronics (Mobile Communications)",
+ [3]byte{248, 151, 207}: "DAESHIN-INFORMATION TECHNOLOGY CO., LTD.",
+ [3]byte{248, 152, 58}: "Leeman International (HongKong) Limited",
+ [3]byte{248, 152, 185}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{248, 153, 85}: "Fortress Technology Inc",
+ [3]byte{248, 157, 13}: "Control Technology Inc.",
+ [3]byte{248, 157, 187}: "Tintri",
+ [3]byte{248, 159, 184}: "YAZAKI Energy System Corporation",
+ [3]byte{248, 160, 61}: "Dinstar Technologies Co., Ltd.",
+ [3]byte{248, 160, 151}: "ARRIS Group, Inc.",
+ [3]byte{248, 161, 136}: "LED Roadway Lighting",
+ [3]byte{248, 162, 180}: "RHEWA-WAAGENFABRIK August Freudewald GmbH &amp;Co. KG",
+ [3]byte{248, 163, 79}: "zte corporation",
+ [3]byte{248, 164, 95}: "Xiaomi Communications Co Ltd",
+ [3]byte{248, 165, 197}: "Cisco Systems, Inc",
+ [3]byte{248, 169, 99}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+ [3]byte{248, 169, 208}: "LG Electronics (Mobile Communications)",
+ [3]byte{248, 169, 222}: "PUISSANCE PLUS",
+ [3]byte{248, 170, 138}: "Axview Technology (Shenzhen) Co.,Ltd",
+ [3]byte{248, 171, 5}: "Sagemcom Broadband SAS",
+ [3]byte{248, 172, 109}: "Deltenna Ltd",
+ [3]byte{248, 177, 86}: "Dell Inc.",
+ [3]byte{248, 178, 243}: "GUANGZHOU BOSMA TECHNOLOGY CO.,LTD",
+ [3]byte{248, 181, 104}: "IEEE Registration Authority",
+ [3]byte{248, 181, 153}: "Guangzhou CHNAVS Digital Technology Co.,Ltd",
+ [3]byte{248, 183, 226}: "Cisco Systems, Inc",
+ [3]byte{248, 187, 191}: "eero inc.",
+ [3]byte{248, 188, 18}: "Dell Inc.",
+ [3]byte{248, 188, 65}: "Rosslare Enterprises Limited",
+ [3]byte{248, 190, 13}: "A2UICT Co.,Ltd.",
+ [3]byte{248, 191, 9}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{248, 192, 1}: "Juniper Networks",
+ [3]byte{248, 192, 145}: "Highgates Technology",
+ [3]byte{248, 194, 136}: "Cisco Systems, Inc",
+ [3]byte{248, 195, 114}: "TSUZUKI DENKI",
+ [3]byte{248, 195, 151}: "NZXT Corp. Ltd.",
+ [3]byte{248, 198, 120}: "Carefusion",
+ [3]byte{248, 201, 108}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{248, 202, 184}: "Dell Inc.",
+ [3]byte{248, 207, 197}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{248, 208, 39}: "Seiko Epson Corporation",
+ [3]byte{248, 208, 172}: "Sony Interactive Entertainment Inc.",
+ [3]byte{248, 208, 189}: "Samsung Electronics Co.,Ltd",
+ [3]byte{248, 209, 17}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{248, 211, 169}: "AXAN Networks",
+ [3]byte{248, 212, 98}: "Pumatronix Equipamentos Eletronicos Ltda.",
+ [3]byte{248, 215, 86}: "Simm Tronic Limited",
+ [3]byte{248, 215, 191}: "REV Ritter GmbH",
+ [3]byte{248, 218, 12}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{248, 218, 223}: "EcoTech, Inc.",
+ [3]byte{248, 218, 226}: "Beta LaserMike",
+ [3]byte{248, 218, 244}: "Taishan Online Technology Co., Ltd.",
+ [3]byte{248, 219, 76}: "PNY Technologies, INC.",
+ [3]byte{248, 219, 127}: "HTC Corporation",
+ [3]byte{248, 219, 136}: "Dell Inc.",
+ [3]byte{248, 220, 122}: "Variscite LTD",
+ [3]byte{248, 223, 168}: "zte corporation",
+ [3]byte{248, 224, 121}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{248, 228, 251}: "Actiontec Electronics, Inc",
+ [3]byte{248, 230, 26}: "Samsung Electronics Co.,Ltd",
+ [3]byte{248, 231, 30}: "Ruckus Wireless",
+ [3]byte{248, 231, 181}: "µTech Tecnologia LTDA",
+ [3]byte{248, 232, 17}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{248, 233, 3}: "D-Link International",
+ [3]byte{248, 233, 104}: "Egker Kft.",
+ [3]byte{248, 234, 10}: "Dipl.-Math. Michael Rauch",
+ [3]byte{248, 237, 165}: "ARRIS Group, Inc.",
+ [3]byte{248, 240, 5}: "Newport Media Inc.",
+ [3]byte{248, 240, 20}: "RackWare Inc.",
+ [3]byte{248, 240, 130}: "NAG LLC",
+ [3]byte{248, 241, 182}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{248, 242, 30}: "Intel Corporate",
+ [3]byte{248, 242, 90}: "G-Lab GmbH",
+ [3]byte{248, 244, 100}: "Rawe Electonic GmbH",
+ [3]byte{248, 247, 211}: "International Communications Corporation",
+ [3]byte{248, 247, 255}: "SYN-TECH SYSTEMS INC",
+ [3]byte{248, 251, 47}: "Santur Corporation",
+ [3]byte{248, 254, 92}: "Reciprocal Labs Corp",
+ [3]byte{248, 254, 168}: "Technico Japan Corporation",
+ [3]byte{248, 255, 11}: "Electronic Technology Inc.",
+ [3]byte{248, 255, 95}: "Shenzhen Communication Technology Co.,Ltd",
+ [3]byte{252, 0, 18}: "Toshiba Samsung Storage Technolgoy Korea Corporation",
+ [3]byte{252, 1, 124}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{252, 1, 158}: "VIEVU",
+ [3]byte{252, 1, 205}: "FUNDACION TEKNIKER",
+ [3]byte{252, 6, 71}: "Cortland Research, LLC",
+ [3]byte{252, 6, 237}: "M2Motive Technology Inc.",
+ [3]byte{252, 7, 160}: "LRE Medical GmbH",
+ [3]byte{252, 8, 74}: "FUJITSU LIMITED",
+ [3]byte{252, 8, 119}: "Prentke Romich Company",
+ [3]byte{252, 9, 216}: "ACTEON Group",
+ [3]byte{252, 9, 246}: "GUANGDONG TONZE ELECTRIC CO.,LTD",
+ [3]byte{252, 10, 129}: "Extreme Networks, Inc.",
+ [3]byte{252, 15, 75}: "Texas Instruments",
+ [3]byte{252, 15, 230}: "Sony Interactive Entertainment Inc.",
+ [3]byte{252, 16, 189}: "Control Sistematizado S.A.",
+ [3]byte{252, 16, 198}: "Taicang T&W Electronics",
+ [3]byte{252, 17, 134}: "Logic3 plc",
+ [3]byte{252, 19, 73}: "Global Apps Corp.",
+ [3]byte{252, 21, 180}: "Hewlett Packard",
+ [3]byte{252, 22, 7}: "Taian Technology(Wuxi) Co.,Ltd.",
+ [3]byte{252, 23, 148}: "InterCreative Co., Ltd",
+ [3]byte{252, 25, 16}: "Samsung Electronics Co.,Ltd",
+ [3]byte{252, 25, 208}: "Cloud Vision Networks Technology Co.,Ltd.",
+ [3]byte{252, 26, 17}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{252, 27, 255}: "V-ZUG AG",
+ [3]byte{252, 29, 89}: "I Smart Cities HK Ltd",
+ [3]byte{252, 29, 132}: "Autobase",
+ [3]byte{252, 30, 22}: "IPEVO corp",
+ [3]byte{252, 31, 25}: "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+ [3]byte{252, 31, 192}: "EURECAM",
+ [3]byte{252, 34, 156}: "Han Kyung I Net Co.,Ltd.",
+ [3]byte{252, 35, 37}: "EosTek (Shenzhen) Co., Ltd.",
+ [3]byte{252, 37, 63}: "Apple, Inc.",
+ [3]byte{252, 39, 162}: "TRANS ELECTRIC CO., LTD.",
+ [3]byte{252, 42, 84}: "Connected Data, Inc.",
+ [3]byte{252, 45, 94}: "zte corporation",
+ [3]byte{252, 46, 45}: "Lorom Industrial Co.LTD.",
+ [3]byte{252, 47, 64}: "Calxeda, Inc.",
+ [3]byte{252, 47, 107}: "Everspin Technologies, Inc.",
+ [3]byte{252, 47, 170}: "Nokia",
+ [3]byte{252, 47, 239}: "UTT Technologies Co., Ltd.",
+ [3]byte{252, 50, 136}: "CELOT Wireless Co., Ltd",
+ [3]byte{252, 51, 95}: "Polyera",
+ [3]byte{252, 53, 152}: "Favite Inc.",
+ [3]byte{252, 53, 230}: "Visteon corp",
+ [3]byte{252, 55, 43}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+ [3]byte{252, 60, 233}: "Tsingtong Technologies Co, Ltd.",
+ [3]byte{252, 61, 147}: "LONGCHEER TELECOMMUNICATION LIMITED",
+ [3]byte{252, 63, 124}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{252, 63, 171}: "Henan Lanxin Technology Co., Ltd",
+ [3]byte{252, 63, 219}: "Hewlett Packard",
+ [3]byte{252, 66, 3}: "Samsung Electronics Co.,Ltd",
+ [3]byte{252, 68, 99}: "Universal Audio, Inc",
+ [3]byte{252, 68, 153}: "Swarco LEA d.o.o.",
+ [3]byte{252, 69, 95}: "JIANGXI SHANSHUI OPTOELECTRONIC TECHNOLOGY CO.,LTD",
+ [3]byte{252, 69, 150}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+ [3]byte{252, 72, 239}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{252, 74, 233}: "Castlenet Technology Inc.",
+ [3]byte{252, 75, 28}: "INTERSENSOR S.R.L.",
+ [3]byte{252, 75, 188}: "Sunplus Technology Co., Ltd.",
+ [3]byte{252, 77, 140}: "SHENZHEN PANTE ELECTRONICS TECHNOLOGY CO., LTD",
+ [3]byte{252, 77, 212}: "Universal Global Scientific Industrial Co., Ltd.",
+ [3]byte{252, 80, 144}: "SIMEX Sp. z o.o.",
+ [3]byte{252, 81, 164}: "ARRIS Group, Inc.",
+ [3]byte{252, 82, 141}: "Technicolor CH USA Inc.",
+ [3]byte{252, 82, 206}: "Control iD",
+ [3]byte{252, 83, 158}: "Shanghai Wind Technologies Co.,Ltd",
+ [3]byte{252, 85, 220}: "Baltic Latvian Universal Electronics LLC",
+ [3]byte{252, 88, 250}: "Shen Zhen Shi Xin Zhong Xin Technology Co.,Ltd.",
+ [3]byte{252, 90, 29}: "Hitron Technologies. Inc",
+ [3]byte{252, 91, 36}: "Weibel Scientific A/S",
+ [3]byte{252, 91, 38}: "MikroBits",
+ [3]byte{252, 91, 57}: "Cisco Systems, Inc",
+ [3]byte{252, 96, 24}: "Zhejiang Kangtai Electric Co., Ltd.",
+ [3]byte{252, 97, 152}: "NEC Personal Products, Ltd",
+ [3]byte{252, 98, 110}: "Beijing MDC Telecom",
+ [3]byte{252, 98, 185}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{252, 100, 186}: "Xiaomi Communications Co Ltd",
+ [3]byte{252, 101, 222}: "Amazon Technologies Inc.",
+ [3]byte{252, 104, 62}: "Directed Perception, Inc",
+ [3]byte{252, 108, 49}: "LXinstruments GmbH",
+ [3]byte{252, 109, 192}: "BME CORPORATION",
+ [3]byte{252, 111, 183}: "ARRIS Group, Inc.",
+ [3]byte{252, 117, 22}: "D-Link International",
+ [3]byte{252, 117, 230}: "Handreamnet",
+ [3]byte{252, 121, 11}: "Hitachi High Technologies America, Inc.",
+ [3]byte{252, 124, 231}: "FCI USA LLC",
+ [3]byte{252, 127, 86}: "CoSyst Control Systems GmbH",
+ [3]byte{252, 131, 41}: "Trei technics",
+ [3]byte{252, 131, 153}: "Avaya Inc",
+ [3]byte{252, 131, 198}: "N-Radio Technologies Co., Ltd.",
+ [3]byte{252, 139, 151}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+ [3]byte{252, 142, 126}: "ARRIS Group, Inc.",
+ [3]byte{252, 143, 144}: "Samsung Electronics Co.,Ltd",
+ [3]byte{252, 143, 196}: "Intelligent Technology Inc.",
+ [3]byte{252, 145, 20}: "Technicolor CH USA Inc.",
+ [3]byte{252, 146, 59}: "Nokia Corporation",
+ [3]byte{252, 148, 108}: "UBIVELOX",
+ [3]byte{252, 148, 227}: "Technicolor CH USA Inc.",
+ [3]byte{252, 153, 71}: "Cisco Systems, Inc",
+ [3]byte{252, 154, 250}: "Motus Global Inc.",
+ [3]byte{252, 157, 216}: "Beijing TongTongYiLian Science and Technology Ltd.",
+ [3]byte{252, 159, 174}: "Fidus Systems Inc",
+ [3]byte{252, 159, 225}: "CONWIN.Tech. Ltd",
+ [3]byte{252, 161, 62}: "Samsung Electronics Co.,Ltd",
+ [3]byte{252, 162, 42}: "PT. Callysta Multi Engineering",
+ [3]byte{252, 163, 134}: "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD",
+ [3]byte{252, 166, 103}: "Amazon Technologies Inc.",
+ [3]byte{252, 168, 65}: "Avaya Inc",
+ [3]byte{252, 168, 154}: "Sunitec Enterprise Co.,Ltd",
+ [3]byte{252, 169, 176}: "MIARTECH (SHANGHAI),INC.",
+ [3]byte{252, 170, 20}: "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+ [3]byte{252, 173, 15}: "QTS NETWORKS",
+ [3]byte{252, 175, 106}: "Qulsar Inc",
+ [3]byte{252, 175, 172}: "Socionext Inc.",
+ [3]byte{252, 176, 196}: "Shanghai DareGlobal Technologies Co.,Ltd",
+ [3]byte{252, 180, 230}: "ASKEY COMPUTER CORP",
+ [3]byte{252, 181, 138}: "Wapice Ltd.",
+ [3]byte{252, 182, 152}: "Cambridge Industries(Group) Co.,Ltd.",
+ [3]byte{252, 187, 161}: "Shenzhen Minicreate Technology Co.,Ltd",
+ [3]byte{252, 188, 156}: "Vimar Spa",
+ [3]byte{252, 194, 51}: "Private",
+ [3]byte{252, 194, 61}: "Atmel Corporation",
+ [3]byte{252, 194, 222}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{252, 199, 52}: "Samsung Electronics Co.,Ltd",
+ [3]byte{252, 200, 151}: "zte corporation",
+ [3]byte{252, 202, 196}: "LifeHealth, LLC",
+ [3]byte{252, 204, 228}: "Ascon Ltd.",
+ [3]byte{252, 207, 67}: "HUIZHOU CITY HUIYANG DISTRICT MEISIQI INDUSTRY DEVELOPMENT CO,.LTD",
+ [3]byte{252, 207, 98}: "IBM Corp",
+ [3]byte{252, 212, 242}: "The Coca Cola Company",
+ [3]byte{252, 212, 246}: "Messana Air.Ray Conditioning s.r.l.",
+ [3]byte{252, 213, 217}: "Shenzhen SDMC Technology Co., Ltd.",
+ [3]byte{252, 214, 189}: "Robert Bosch GmbH",
+ [3]byte{252, 215, 51}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{252, 216, 23}: "Beijing Hesun Technologies Co.Ltd.",
+ [3]byte{252, 216, 72}: "Apple, Inc.",
+ [3]byte{252, 219, 150}: "ENERVALLEY CO., LTD",
+ [3]byte{252, 219, 179}: "Murata Manufacturing Co., Ltd.",
+ [3]byte{252, 220, 74}: "G-Wearables Corp.",
+ [3]byte{252, 221, 85}: "Shenzhen WeWins wireless Co.,Ltd",
+ [3]byte{252, 225, 134}: "A3M Co., LTD",
+ [3]byte{252, 225, 146}: "Sichuan Jinwangtong Electronic Science&Technology Co,.Ltd",
+ [3]byte{252, 225, 217}: "Stable Imaging Solutions LLC",
+ [3]byte{252, 225, 251}: "Array Networks",
+ [3]byte{252, 226, 63}: "CLAY PAKY SPA",
+ [3]byte{252, 227, 60}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{252, 229, 87}: "Nokia Corporation",
+ [3]byte{252, 232, 146}: "Hangzhou Lancable Technology Co.,Ltd",
+ [3]byte{252, 233, 152}: "Apple, Inc.",
+ [3]byte{252, 236, 218}: "Ubiquiti Networks Inc.",
+ [3]byte{252, 237, 185}: "Arrayent",
+ [3]byte{252, 238, 230}: "FORMIKE ELECTRONIC CO., LTD",
+ [3]byte{252, 241, 54}: "Samsung Electronics Co.,Ltd",
+ [3]byte{252, 241, 82}: "Sony Corporation",
+ [3]byte{252, 241, 205}: "OPTEX-FA CO.,LTD.",
+ [3]byte{252, 245, 40}: "Zyxel Communications Corporation",
+ [3]byte{252, 246, 71}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{252, 248, 174}: "Intel Corporate",
+ [3]byte{252, 248, 183}: "TRONTEQ Electronic",
+ [3]byte{252, 250, 247}: "Shanghai Baud Data Communication Co.,Ltd.",
+ [3]byte{252, 251, 251}: "Cisco Systems, Inc",
+ [3]byte{252, 252, 72}: "Apple, Inc.",
+ [3]byte{252, 254, 119}: "Hitachi Reftechno, Inc.",
+ [3]byte{252, 254, 194}: "Invensys Controls UK Limited",
+ [3]byte{252, 255, 170}: "IEEE Registration Authority",
+}
diff --git a/vendor/github.com/google/gopacket/packet.go b/vendor/github.com/google/gopacket/packet.go
new file mode 100644
index 0000000..76b62d8
--- /dev/null
+++ b/vendor/github.com/google/gopacket/packet.go
@@ -0,0 +1,838 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package gopacket
+
+import (
+ "bytes"
+ "encoding/hex"
+ "errors"
+ "fmt"
+ "io"
+ "os"
+ "reflect"
+ "runtime/debug"
+ "strings"
+ "time"
+)
+
+// CaptureInfo provides standardized information about a packet captured off
+// the wire or read from a file.
+type CaptureInfo struct {
+ // Timestamp is the time the packet was captured, if that is known.
+ Timestamp time.Time
+ // CaptureLength is the total number of bytes read off of the wire.
+ CaptureLength int
+ // Length is the size of the original packet. Should always be >=
+ // CaptureLength.
+ Length int
+ // InterfaceIndex
+ InterfaceIndex int
+}
+
+// PacketMetadata contains metadata for a packet.
+type PacketMetadata struct {
+ CaptureInfo
+ // Truncated is true if packet decoding logic detects that there are fewer
+ // bytes in the packet than are detailed in various headers (for example, if
+ // the number of bytes in the IPv4 contents/payload is less than IPv4.Length).
+ // This is also set automatically for packets captured off the wire if
+ // CaptureInfo.CaptureLength < CaptureInfo.Length.
+ Truncated bool
+}
+
+// Packet is the primary object used by gopacket. Packets are created by a
+// Decoder's Decode call. A packet is made up of a set of Data, which
+// is broken into a number of Layers as it is decoded.
+type Packet interface {
+ //// Functions for outputting the packet as a human-readable string:
+ //// ------------------------------------------------------------------
+ // String returns a human-readable string representation of the packet.
+ // It uses LayerString on each layer to output the layer.
+ String() string
+ // Dump returns a verbose human-readable string representation of the packet,
+ // including a hex dump of all layers. It uses LayerDump on each layer to
+ // output the layer.
+ Dump() string
+
+ //// Functions for accessing arbitrary packet layers:
+ //// ------------------------------------------------------------------
+ // Layers returns all layers in this packet, computing them as necessary
+ Layers() []Layer
+ // Layer returns the first layer in this packet of the given type, or nil
+ Layer(LayerType) Layer
+ // LayerClass returns the first layer in this packet of the given class,
+ // or nil.
+ LayerClass(LayerClass) Layer
+
+ //// Functions for accessing specific types of packet layers. These functions
+ //// return the first layer of each type found within the packet.
+ //// ------------------------------------------------------------------
+ // LinkLayer returns the first link layer in the packet
+ LinkLayer() LinkLayer
+ // NetworkLayer returns the first network layer in the packet
+ NetworkLayer() NetworkLayer
+ // TransportLayer returns the first transport layer in the packet
+ TransportLayer() TransportLayer
+ // ApplicationLayer returns the first application layer in the packet
+ ApplicationLayer() ApplicationLayer
+ // ErrorLayer is particularly useful, since it returns nil if the packet
+ // was fully decoded successfully, and non-nil if an error was encountered
+ // in decoding and the packet was only partially decoded. Thus, its output
+ // can be used to determine if the entire packet was able to be decoded.
+ ErrorLayer() ErrorLayer
+
+ //// Functions for accessing data specific to the packet:
+ //// ------------------------------------------------------------------
+ // Data returns the set of bytes that make up this entire packet.
+ Data() []byte
+ // Metadata returns packet metadata associated with this packet.
+ Metadata() *PacketMetadata
+}
+
+// packet contains all the information we need to fulfill the Packet interface,
+// and its two "subclasses" (yes, no such thing in Go, bear with me),
+// eagerPacket and lazyPacket, provide eager and lazy decoding logic around the
+// various functions needed to access this information.
+type packet struct {
+ // data contains the entire packet data for a packet
+ data []byte
+ // initialLayers is space for an initial set of layers already created inside
+ // the packet.
+ initialLayers [6]Layer
+ // layers contains each layer we've already decoded
+ layers []Layer
+ // last is the last layer added to the packet
+ last Layer
+ // metadata is the PacketMetadata for this packet
+ metadata PacketMetadata
+
+ decodeOptions DecodeOptions
+
+ // Pointers to the various important layers
+ link LinkLayer
+ network NetworkLayer
+ transport TransportLayer
+ application ApplicationLayer
+ failure ErrorLayer
+}
+
+func (p *packet) SetTruncated() {
+ p.metadata.Truncated = true
+}
+
+func (p *packet) SetLinkLayer(l LinkLayer) {
+ if p.link == nil {
+ p.link = l
+ }
+}
+
+func (p *packet) SetNetworkLayer(l NetworkLayer) {
+ if p.network == nil {
+ p.network = l
+ }
+}
+
+func (p *packet) SetTransportLayer(l TransportLayer) {
+ if p.transport == nil {
+ p.transport = l
+ }
+}
+
+func (p *packet) SetApplicationLayer(l ApplicationLayer) {
+ if p.application == nil {
+ p.application = l
+ }
+}
+
+func (p *packet) SetErrorLayer(l ErrorLayer) {
+ if p.failure == nil {
+ p.failure = l
+ }
+}
+
+func (p *packet) AddLayer(l Layer) {
+ p.layers = append(p.layers, l)
+ p.last = l
+}
+
+func (p *packet) DumpPacketData() {
+ fmt.Fprint(os.Stderr, p.packetDump())
+ os.Stderr.Sync()
+}
+
+func (p *packet) Metadata() *PacketMetadata {
+ return &p.metadata
+}
+
+func (p *packet) Data() []byte {
+ return p.data
+}
+
+func (p *packet) DecodeOptions() *DecodeOptions {
+ return &p.decodeOptions
+}
+
+func (p *packet) addFinalDecodeError(err error, stack []byte) {
+ fail := &DecodeFailure{err: err, stack: stack}
+ if p.last == nil {
+ fail.data = p.data
+ } else {
+ fail.data = p.last.LayerPayload()
+ }
+ p.AddLayer(fail)
+ p.SetErrorLayer(fail)
+}
+
+func (p *packet) recoverDecodeError() {
+ if !p.decodeOptions.SkipDecodeRecovery {
+ if r := recover(); r != nil {
+ p.addFinalDecodeError(fmt.Errorf("%v", r), debug.Stack())
+ }
+ }
+}
+
+// LayerString outputs an individual layer as a string. The layer is output
+// in a single line, with no trailing newline. This function is specifically
+// designed to do the right thing for most layers... it follows the following
+// rules:
+// * If the Layer has a String function, just output that.
+// * Otherwise, output all exported fields in the layer, recursing into
+// exported slices and structs.
+// NOTE: This is NOT THE SAME AS fmt's "%#v". %#v will output both exported
+// and unexported fields... many times packet layers contain unexported stuff
+// that would just mess up the output of the layer, see for example the
+// Payload layer and it's internal 'data' field, which contains a large byte
+// array that would really mess up formatting.
+func LayerString(l Layer) string {
+ return fmt.Sprintf("%v\t%s", l.LayerType(), layerString(reflect.ValueOf(l), false, false))
+}
+
+// Dumper dumps verbose information on a value. If a layer type implements
+// Dumper, then its LayerDump() string will include the results in its output.
+type Dumper interface {
+ Dump() string
+}
+
+// LayerDump outputs a very verbose string representation of a layer. Its
+// output is a concatenation of LayerString(l) and hex.Dump(l.LayerContents()).
+// It contains newlines and ends with a newline.
+func LayerDump(l Layer) string {
+ var b bytes.Buffer
+ b.WriteString(LayerString(l))
+ b.WriteByte('\n')
+ if d, ok := l.(Dumper); ok {
+ dump := d.Dump()
+ if dump != "" {
+ b.WriteString(dump)
+ if dump[len(dump)-1] != '\n' {
+ b.WriteByte('\n')
+ }
+ }
+ }
+ b.WriteString(hex.Dump(l.LayerContents()))
+ return b.String()
+}
+
+// layerString outputs, recursively, a layer in a "smart" way. See docs for
+// LayerString for more details.
+//
+// Params:
+// i - value to write out
+// anonymous: if we're currently recursing an anonymous member of a struct
+// writeSpace: if we've already written a value in a struct, and need to
+// write a space before writing more. This happens when we write various
+// anonymous values, and need to keep writing more.
+func layerString(v reflect.Value, anonymous bool, writeSpace bool) string {
+ // Let String() functions take precedence.
+ if v.CanInterface() {
+ if s, ok := v.Interface().(fmt.Stringer); ok {
+ return s.String()
+ }
+ }
+ // Reflect, and spit out all the exported fields as key=value.
+ switch v.Type().Kind() {
+ case reflect.Interface, reflect.Ptr:
+ if v.IsNil() {
+ return "nil"
+ }
+ r := v.Elem()
+ return layerString(r, anonymous, writeSpace)
+ case reflect.Struct:
+ var b bytes.Buffer
+ typ := v.Type()
+ if !anonymous {
+ b.WriteByte('{')
+ }
+ for i := 0; i < v.NumField(); i++ {
+ // Check if this is upper-case.
+ ftype := typ.Field(i)
+ f := v.Field(i)
+ if ftype.Anonymous {
+ anonStr := layerString(f, true, writeSpace)
+ writeSpace = writeSpace || anonStr != ""
+ b.WriteString(anonStr)
+ } else if ftype.PkgPath == "" { // exported
+ if writeSpace {
+ b.WriteByte(' ')
+ }
+ writeSpace = true
+ fmt.Fprintf(&b, "%s=%s", typ.Field(i).Name, layerString(f, false, writeSpace))
+ }
+ }
+ if !anonymous {
+ b.WriteByte('}')
+ }
+ return b.String()
+ case reflect.Slice:
+ var b bytes.Buffer
+ b.WriteByte('[')
+ if v.Len() > 4 {
+ fmt.Fprintf(&b, "..%d..", v.Len())
+ } else {
+ for j := 0; j < v.Len(); j++ {
+ if j != 0 {
+ b.WriteString(", ")
+ }
+ b.WriteString(layerString(v.Index(j), false, false))
+ }
+ }
+ b.WriteByte(']')
+ return b.String()
+ }
+ return fmt.Sprintf("%v", v.Interface())
+}
+
+const (
+ longBytesLength = 128
+)
+
+// LongBytesGoString returns a string representation of the byte slice shortened
+// using the format '<type>{<truncated slice> ... (<n> bytes)}' if it
+// exceeds a predetermined length. Can be used to avoid filling the display with
+// very long byte strings.
+func LongBytesGoString(buf []byte) string {
+ if len(buf) < longBytesLength {
+ return fmt.Sprintf("%#v", buf)
+ }
+ s := fmt.Sprintf("%#v", buf[:longBytesLength-1])
+ s = strings.TrimSuffix(s, "}")
+ return fmt.Sprintf("%s ... (%d bytes)}", s, len(buf))
+}
+
+func baseLayerString(value reflect.Value) string {
+ t := value.Type()
+ content := value.Field(0)
+ c := make([]byte, content.Len())
+ for i := range c {
+ c[i] = byte(content.Index(i).Uint())
+ }
+ payload := value.Field(1)
+ p := make([]byte, payload.Len())
+ for i := range p {
+ p[i] = byte(payload.Index(i).Uint())
+ }
+ return fmt.Sprintf("%s{Contents:%s, Payload:%s}", t.String(),
+ LongBytesGoString(c),
+ LongBytesGoString(p))
+}
+
+func layerGoString(i interface{}, b *bytes.Buffer) {
+ if s, ok := i.(fmt.GoStringer); ok {
+ b.WriteString(s.GoString())
+ return
+ }
+
+ var v reflect.Value
+ var ok bool
+ if v, ok = i.(reflect.Value); !ok {
+ v = reflect.ValueOf(i)
+ }
+ switch v.Kind() {
+ case reflect.Ptr, reflect.Interface:
+ if v.Kind() == reflect.Ptr {
+ b.WriteByte('&')
+ }
+ layerGoString(v.Elem().Interface(), b)
+ case reflect.Struct:
+ t := v.Type()
+ b.WriteString(t.String())
+ b.WriteByte('{')
+ for i := 0; i < v.NumField(); i++ {
+ if i > 0 {
+ b.WriteString(", ")
+ }
+ if t.Field(i).Name == "BaseLayer" {
+ fmt.Fprintf(b, "BaseLayer:%s", baseLayerString(v.Field(i)))
+ } else if v.Field(i).Kind() == reflect.Struct {
+ fmt.Fprintf(b, "%s:", t.Field(i).Name)
+ layerGoString(v.Field(i), b)
+ } else if v.Field(i).Kind() == reflect.Ptr {
+ b.WriteByte('&')
+ layerGoString(v.Field(i), b)
+ } else {
+ fmt.Fprintf(b, "%s:%#v", t.Field(i).Name, v.Field(i))
+ }
+ }
+ b.WriteByte('}')
+ default:
+ fmt.Fprintf(b, "%#v", i)
+ }
+}
+
+// LayerGoString returns a representation of the layer in Go syntax,
+// taking care to shorten "very long" BaseLayer byte slices
+func LayerGoString(l Layer) string {
+ b := new(bytes.Buffer)
+ layerGoString(l, b)
+ return b.String()
+}
+
+func (p *packet) packetString() string {
+ var b bytes.Buffer
+ fmt.Fprintf(&b, "PACKET: %d bytes", len(p.Data()))
+ if p.metadata.Truncated {
+ b.WriteString(", truncated")
+ }
+ if p.metadata.Length > 0 {
+ fmt.Fprintf(&b, ", wire length %d cap length %d", p.metadata.Length, p.metadata.CaptureLength)
+ }
+ if !p.metadata.Timestamp.IsZero() {
+ fmt.Fprintf(&b, " @ %v", p.metadata.Timestamp)
+ }
+ b.WriteByte('\n')
+ for i, l := range p.layers {
+ fmt.Fprintf(&b, "- Layer %d (%02d bytes) = %s\n", i+1, len(l.LayerContents()), LayerString(l))
+ }
+ return b.String()
+}
+
+func (p *packet) packetDump() string {
+ var b bytes.Buffer
+ fmt.Fprintf(&b, "-- FULL PACKET DATA (%d bytes) ------------------------------------\n%s", len(p.data), hex.Dump(p.data))
+ for i, l := range p.layers {
+ fmt.Fprintf(&b, "--- Layer %d ---\n%s", i+1, LayerDump(l))
+ }
+ return b.String()
+}
+
+// eagerPacket is a packet implementation that does eager decoding. Upon
+// initial construction, it decodes all the layers it can from packet data.
+// eagerPacket implements Packet and PacketBuilder.
+type eagerPacket struct {
+ packet
+}
+
+var errNilDecoder = errors.New("NextDecoder passed nil decoder, probably an unsupported decode type")
+
+func (p *eagerPacket) NextDecoder(next Decoder) error {
+ if next == nil {
+ return errNilDecoder
+ }
+ if p.last == nil {
+ return errors.New("NextDecoder called, but no layers added yet")
+ }
+ d := p.last.LayerPayload()
+ if len(d) == 0 {
+ return nil
+ }
+ // Since we're eager, immediately call the next decoder.
+ return next.Decode(d, p)
+}
+func (p *eagerPacket) initialDecode(dec Decoder) {
+ defer p.recoverDecodeError()
+ err := dec.Decode(p.data, p)
+ if err != nil {
+ p.addFinalDecodeError(err, nil)
+ }
+}
+func (p *eagerPacket) LinkLayer() LinkLayer {
+ return p.link
+}
+func (p *eagerPacket) NetworkLayer() NetworkLayer {
+ return p.network
+}
+func (p *eagerPacket) TransportLayer() TransportLayer {
+ return p.transport
+}
+func (p *eagerPacket) ApplicationLayer() ApplicationLayer {
+ return p.application
+}
+func (p *eagerPacket) ErrorLayer() ErrorLayer {
+ return p.failure
+}
+func (p *eagerPacket) Layers() []Layer {
+ return p.layers
+}
+func (p *eagerPacket) Layer(t LayerType) Layer {
+ for _, l := range p.layers {
+ if l.LayerType() == t {
+ return l
+ }
+ }
+ return nil
+}
+func (p *eagerPacket) LayerClass(lc LayerClass) Layer {
+ for _, l := range p.layers {
+ if lc.Contains(l.LayerType()) {
+ return l
+ }
+ }
+ return nil
+}
+func (p *eagerPacket) String() string { return p.packetString() }
+func (p *eagerPacket) Dump() string { return p.packetDump() }
+
+// lazyPacket does lazy decoding on its packet data. On construction it does
+// no initial decoding. For each function call, it decodes only as many layers
+// as are necessary to compute the return value for that function.
+// lazyPacket implements Packet and PacketBuilder.
+type lazyPacket struct {
+ packet
+ next Decoder
+}
+
+func (p *lazyPacket) NextDecoder(next Decoder) error {
+ if next == nil {
+ return errNilDecoder
+ }
+ p.next = next
+ return nil
+}
+func (p *lazyPacket) decodeNextLayer() {
+ if p.next == nil {
+ return
+ }
+ d := p.data
+ if p.last != nil {
+ d = p.last.LayerPayload()
+ }
+ next := p.next
+ p.next = nil
+ // We've just set p.next to nil, so if we see we have no data, this should be
+ // the final call we get to decodeNextLayer if we return here.
+ if len(d) == 0 {
+ return
+ }
+ defer p.recoverDecodeError()
+ err := next.Decode(d, p)
+ if err != nil {
+ p.addFinalDecodeError(err, nil)
+ }
+}
+func (p *lazyPacket) LinkLayer() LinkLayer {
+ for p.link == nil && p.next != nil {
+ p.decodeNextLayer()
+ }
+ return p.link
+}
+func (p *lazyPacket) NetworkLayer() NetworkLayer {
+ for p.network == nil && p.next != nil {
+ p.decodeNextLayer()
+ }
+ return p.network
+}
+func (p *lazyPacket) TransportLayer() TransportLayer {
+ for p.transport == nil && p.next != nil {
+ p.decodeNextLayer()
+ }
+ return p.transport
+}
+func (p *lazyPacket) ApplicationLayer() ApplicationLayer {
+ for p.application == nil && p.next != nil {
+ p.decodeNextLayer()
+ }
+ return p.application
+}
+func (p *lazyPacket) ErrorLayer() ErrorLayer {
+ for p.failure == nil && p.next != nil {
+ p.decodeNextLayer()
+ }
+ return p.failure
+}
+func (p *lazyPacket) Layers() []Layer {
+ for p.next != nil {
+ p.decodeNextLayer()
+ }
+ return p.layers
+}
+func (p *lazyPacket) Layer(t LayerType) Layer {
+ for _, l := range p.layers {
+ if l.LayerType() == t {
+ return l
+ }
+ }
+ numLayers := len(p.layers)
+ for p.next != nil {
+ p.decodeNextLayer()
+ for _, l := range p.layers[numLayers:] {
+ if l.LayerType() == t {
+ return l
+ }
+ }
+ numLayers = len(p.layers)
+ }
+ return nil
+}
+func (p *lazyPacket) LayerClass(lc LayerClass) Layer {
+ for _, l := range p.layers {
+ if lc.Contains(l.LayerType()) {
+ return l
+ }
+ }
+ numLayers := len(p.layers)
+ for p.next != nil {
+ p.decodeNextLayer()
+ for _, l := range p.layers[numLayers:] {
+ if lc.Contains(l.LayerType()) {
+ return l
+ }
+ }
+ numLayers = len(p.layers)
+ }
+ return nil
+}
+func (p *lazyPacket) String() string { p.Layers(); return p.packetString() }
+func (p *lazyPacket) Dump() string { p.Layers(); return p.packetDump() }
+
+// DecodeOptions tells gopacket how to decode a packet.
+type DecodeOptions struct {
+ // Lazy decoding decodes the minimum number of layers needed to return data
+ // for a packet at each function call. Be careful using this with concurrent
+ // packet processors, as each call to packet.* could mutate the packet, and
+ // two concurrent function calls could interact poorly.
+ Lazy bool
+ // NoCopy decoding doesn't copy its input buffer into storage that's owned by
+ // the packet. If you can guarantee that the bytes underlying the slice
+ // passed into NewPacket aren't going to be modified, this can be faster. If
+ // there's any chance that those bytes WILL be changed, this will invalidate
+ // your packets.
+ NoCopy bool
+ // SkipDecodeRecovery skips over panic recovery during packet decoding.
+ // Normally, when packets decode, if a panic occurs, that panic is captured
+ // by a recover(), and a DecodeFailure layer is added to the packet detailing
+ // the issue. If this flag is set, panics are instead allowed to continue up
+ // the stack.
+ SkipDecodeRecovery bool
+ // DecodeStreamsAsDatagrams enables routing of application-level layers in the TCP
+ // decoder. If true, we should try to decode layers after TCP in single packets.
+ // This is disabled by default because the reassembly package drives the decoding
+ // of TCP payload data after reassembly.
+ DecodeStreamsAsDatagrams bool
+}
+
+// Default decoding provides the safest (but slowest) method for decoding
+// packets. It eagerly processes all layers (so it's concurrency-safe) and it
+// copies its input buffer upon creation of the packet (so the packet remains
+// valid if the underlying slice is modified. Both of these take time,
+// though, so beware. If you can guarantee that the packet will only be used
+// by one goroutine at a time, set Lazy decoding. If you can guarantee that
+// the underlying slice won't change, set NoCopy decoding.
+var Default = DecodeOptions{}
+
+// Lazy is a DecodeOptions with just Lazy set.
+var Lazy = DecodeOptions{Lazy: true}
+
+// NoCopy is a DecodeOptions with just NoCopy set.
+var NoCopy = DecodeOptions{NoCopy: true}
+
+// DecodeStreamsAsDatagrams is a DecodeOptions with just DecodeStreamsAsDatagrams set.
+var DecodeStreamsAsDatagrams = DecodeOptions{DecodeStreamsAsDatagrams: true}
+
+// NewPacket creates a new Packet object from a set of bytes. The
+// firstLayerDecoder tells it how to interpret the first layer from the bytes,
+// future layers will be generated from that first layer automatically.
+func NewPacket(data []byte, firstLayerDecoder Decoder, options DecodeOptions) Packet {
+ if !options.NoCopy {
+ dataCopy := make([]byte, len(data))
+ copy(dataCopy, data)
+ data = dataCopy
+ }
+ if options.Lazy {
+ p := &lazyPacket{
+ packet: packet{data: data, decodeOptions: options},
+ next: firstLayerDecoder,
+ }
+ p.layers = p.initialLayers[:0]
+ // Crazy craziness:
+ // If the following return statemet is REMOVED, and Lazy is FALSE, then
+ // eager packet processing becomes 17% FASTER. No, there is no logical
+ // explanation for this. However, it's such a hacky micro-optimization that
+ // we really can't rely on it. It appears to have to do with the size the
+ // compiler guesses for this function's stack space, since one symptom is
+ // that with the return statement in place, we more than double calls to
+ // runtime.morestack/runtime.lessstack. We'll hope the compiler gets better
+ // over time and we get this optimization for free. Until then, we'll have
+ // to live with slower packet processing.
+ return p
+ }
+ p := &eagerPacket{
+ packet: packet{data: data, decodeOptions: options},
+ }
+ p.layers = p.initialLayers[:0]
+ p.initialDecode(firstLayerDecoder)
+ return p
+}
+
+// PacketDataSource is an interface for some source of packet data. Users may
+// create their own implementations, or use the existing implementations in
+// gopacket/pcap (libpcap, allows reading from live interfaces or from
+// pcap files) or gopacket/pfring (PF_RING, allows reading from live
+// interfaces).
+type PacketDataSource interface {
+ // ReadPacketData returns the next packet available from this data source.
+ // It returns:
+ // data: The bytes of an individual packet.
+ // ci: Metadata about the capture
+ // err: An error encountered while reading packet data. If err != nil,
+ // then data/ci will be ignored.
+ ReadPacketData() (data []byte, ci CaptureInfo, err error)
+}
+
+// ConcatFinitePacketDataSources returns a PacketDataSource that wraps a set
+// of internal PacketDataSources, each of which will stop with io.EOF after
+// reading a finite number of packets. The returned PacketDataSource will
+// return all packets from the first finite source, followed by all packets from
+// the second, etc. Once all finite sources have returned io.EOF, the returned
+// source will as well.
+func ConcatFinitePacketDataSources(pds ...PacketDataSource) PacketDataSource {
+ c := concat(pds)
+ return &c
+}
+
+type concat []PacketDataSource
+
+func (c *concat) ReadPacketData() (data []byte, ci CaptureInfo, err error) {
+ for len(*c) > 0 {
+ data, ci, err = (*c)[0].ReadPacketData()
+ if err == io.EOF {
+ *c = (*c)[1:]
+ continue
+ }
+ return
+ }
+ return nil, CaptureInfo{}, io.EOF
+}
+
+// ZeroCopyPacketDataSource is an interface to pull packet data from sources
+// that allow data to be returned without copying to a user-controlled buffer.
+// It's very similar to PacketDataSource, except that the caller must be more
+// careful in how the returned buffer is handled.
+type ZeroCopyPacketDataSource interface {
+ // ZeroCopyReadPacketData returns the next packet available from this data source.
+ // It returns:
+ // data: The bytes of an individual packet. Unlike with
+ // PacketDataSource's ReadPacketData, the slice returned here points
+ // to a buffer owned by the data source. In particular, the bytes in
+ // this buffer may be changed by future calls to
+ // ZeroCopyReadPacketData. Do not use the returned buffer after
+ // subsequent ZeroCopyReadPacketData calls.
+ // ci: Metadata about the capture
+ // err: An error encountered while reading packet data. If err != nil,
+ // then data/ci will be ignored.
+ ZeroCopyReadPacketData() (data []byte, ci CaptureInfo, err error)
+}
+
+// PacketSource reads in packets from a PacketDataSource, decodes them, and
+// returns them.
+//
+// There are currently two different methods for reading packets in through
+// a PacketSource:
+//
+// Reading With Packets Function
+//
+// This method is the most convenient and easiest to code, but lacks
+// flexibility. Packets returns a 'chan Packet', then asynchronously writes
+// packets into that channel. Packets uses a blocking channel, and closes
+// it if an io.EOF is returned by the underlying PacketDataSource. All other
+// PacketDataSource errors are ignored and discarded.
+// for packet := range packetSource.Packets() {
+// ...
+// }
+//
+// Reading With NextPacket Function
+//
+// This method is the most flexible, and exposes errors that may be
+// encountered by the underlying PacketDataSource. It's also the fastest
+// in a tight loop, since it doesn't have the overhead of a channel
+// read/write. However, it requires the user to handle errors, most
+// importantly the io.EOF error in cases where packets are being read from
+// a file.
+// for {
+// packet, err := packetSource.NextPacket()
+// if err == io.EOF {
+// break
+// } else if err != nil {
+// log.Println("Error:", err)
+// continue
+// }
+// handlePacket(packet) // Do something with each packet.
+// }
+type PacketSource struct {
+ source PacketDataSource
+ decoder Decoder
+ // DecodeOptions is the set of options to use for decoding each piece
+ // of packet data. This can/should be changed by the user to reflect the
+ // way packets should be decoded.
+ DecodeOptions
+ c chan Packet
+}
+
+// NewPacketSource creates a packet data source.
+func NewPacketSource(source PacketDataSource, decoder Decoder) *PacketSource {
+ return &PacketSource{
+ source: source,
+ decoder: decoder,
+ }
+}
+
+// NextPacket returns the next decoded packet from the PacketSource. On error,
+// it returns a nil packet and a non-nil error.
+func (p *PacketSource) NextPacket() (Packet, error) {
+ data, ci, err := p.source.ReadPacketData()
+ if err != nil {
+ return nil, err
+ }
+ packet := NewPacket(data, p.decoder, p.DecodeOptions)
+ m := packet.Metadata()
+ m.CaptureInfo = ci
+ m.Truncated = m.Truncated || ci.CaptureLength < ci.Length
+ return packet, nil
+}
+
+// packetsToChannel reads in all packets from the packet source and sends them
+// to the given channel. When it receives an error, it ignores it. When it
+// receives an io.EOF, it closes the channel.
+func (p *PacketSource) packetsToChannel() {
+ defer close(p.c)
+ for {
+ packet, err := p.NextPacket()
+ if err == io.EOF {
+ return
+ } else if err == nil {
+ p.c <- packet
+ }
+ }
+}
+
+// Packets returns a channel of packets, allowing easy iterating over
+// packets. Packets will be asynchronously read in from the underlying
+// PacketDataSource and written to the returned channel. If the underlying
+// PacketDataSource returns an io.EOF error, the channel will be closed.
+// If any other error is encountered, it is ignored.
+//
+// for packet := range packetSource.Packets() {
+// handlePacket(packet) // Do something with each packet.
+// }
+//
+// If called more than once, returns the same channel.
+func (p *PacketSource) Packets() chan Packet {
+ if p.c == nil {
+ p.c = make(chan Packet, 1000)
+ go p.packetsToChannel()
+ }
+ return p.c
+}
diff --git a/vendor/github.com/google/gopacket/packet_test.go b/vendor/github.com/google/gopacket/packet_test.go
new file mode 100644
index 0000000..bd05448
--- /dev/null
+++ b/vendor/github.com/google/gopacket/packet_test.go
@@ -0,0 +1,62 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package gopacket
+
+import (
+ "io"
+ "reflect"
+ "testing"
+)
+
+type embedded struct {
+ A, B int
+}
+
+type embedding struct {
+ embedded
+ C, D int
+}
+
+func TestDumpEmbedded(t *testing.T) {
+ e := embedding{embedded: embedded{A: 1, B: 2}, C: 3, D: 4}
+ if got, want := layerString(reflect.ValueOf(e), false, false), "{A=1 B=2 C=3 D=4}"; got != want {
+ t.Errorf("embedded dump mismatch:\n got: %v\n want: %v", got, want)
+ }
+}
+
+type singlePacketSource [1][]byte
+
+func (s *singlePacketSource) ReadPacketData() ([]byte, CaptureInfo, error) {
+ if (*s)[0] == nil {
+ return nil, CaptureInfo{}, io.EOF
+ }
+ out := (*s)[0]
+ (*s)[0] = nil
+ return out, CaptureInfo{}, nil
+}
+
+func TestConcatPacketSources(t *testing.T) {
+ sourceA := &singlePacketSource{[]byte{1}}
+ sourceB := &singlePacketSource{[]byte{2}}
+ sourceC := &singlePacketSource{[]byte{3}}
+ concat := ConcatFinitePacketDataSources(sourceA, sourceB, sourceC)
+ a, _, err := concat.ReadPacketData()
+ if err != nil || len(a) != 1 || a[0] != 1 {
+ t.Errorf("expected [1], got %v/%v", a, err)
+ }
+ b, _, err := concat.ReadPacketData()
+ if err != nil || len(b) != 1 || b[0] != 2 {
+ t.Errorf("expected [2], got %v/%v", b, err)
+ }
+ c, _, err := concat.ReadPacketData()
+ if err != nil || len(c) != 1 || c[0] != 3 {
+ t.Errorf("expected [3], got %v/%v", c, err)
+ }
+ if _, _, err := concat.ReadPacketData(); err != io.EOF {
+ t.Errorf("expected io.EOF, got %v", err)
+ }
+}
diff --git a/vendor/github.com/google/gopacket/parser.go b/vendor/github.com/google/gopacket/parser.go
new file mode 100644
index 0000000..f786834
--- /dev/null
+++ b/vendor/github.com/google/gopacket/parser.go
@@ -0,0 +1,198 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package gopacket
+
+import (
+ "fmt"
+)
+
+// DecodingLayer is an interface for packet layers that can decode themselves.
+//
+// The important part of DecodingLayer is that they decode themselves in-place.
+// Calling DecodeFromBytes on a DecodingLayer totally resets the entire layer to
+// the new state defined by the data passed in. A returned error leaves the
+// DecodingLayer in an unknown intermediate state, thus its fields should not be
+// trusted.
+//
+// Because the DecodingLayer is resetting its own fields, a call to
+// DecodeFromBytes should normally not require any memory allocation.
+type DecodingLayer interface {
+ // DecodeFromBytes resets the internal state of this layer to the state
+ // defined by the passed-in bytes. Slices in the DecodingLayer may
+ // reference the passed-in data, so care should be taken to copy it
+ // first should later modification of data be required before the
+ // DecodingLayer is discarded.
+ DecodeFromBytes(data []byte, df DecodeFeedback) error
+ // CanDecode returns the set of LayerTypes this DecodingLayer can
+ // decode. For Layers that are also DecodingLayers, this will most
+ // often be that Layer's LayerType().
+ CanDecode() LayerClass
+ // NextLayerType returns the LayerType which should be used to decode
+ // the LayerPayload.
+ NextLayerType() LayerType
+ // LayerPayload is the set of bytes remaining to decode after a call to
+ // DecodeFromBytes.
+ LayerPayload() []byte
+}
+
+// DecodingLayerParser parses a given set of layer types. See DecodeLayers for
+// more information on how DecodingLayerParser should be used.
+type DecodingLayerParser struct {
+ // DecodingLayerParserOptions is the set of options available to the
+ // user to define the parser's behavior.
+ DecodingLayerParserOptions
+ first LayerType
+ decoders map[LayerType]DecodingLayer
+ df DecodeFeedback
+ // Truncated is set when a decode layer detects that the packet has been
+ // truncated.
+ Truncated bool
+}
+
+// AddDecodingLayer adds a decoding layer to the parser. This adds support for
+// the decoding layer's CanDecode layers to the parser... should they be
+// encountered, they'll be parsed.
+func (l *DecodingLayerParser) AddDecodingLayer(d DecodingLayer) {
+ for _, typ := range d.CanDecode().LayerTypes() {
+ l.decoders[typ] = d
+ }
+}
+
+// SetTruncated is used by DecodingLayers to set the Truncated boolean in the
+// DecodingLayerParser. Users should simply read Truncated after calling
+// DecodeLayers.
+func (l *DecodingLayerParser) SetTruncated() {
+ l.Truncated = true
+}
+
+// NewDecodingLayerParser creates a new DecodingLayerParser and adds in all
+// of the given DecodingLayers with AddDecodingLayer.
+//
+// Each call to DecodeLayers will attempt to decode the given bytes first by
+// treating them as a 'first'-type layer, then by using NextLayerType on
+// subsequently decoded layers to find the next relevant decoder. Should a
+// deoder not be available for the layer type returned by NextLayerType,
+// decoding will stop.
+func NewDecodingLayerParser(first LayerType, decoders ...DecodingLayer) *DecodingLayerParser {
+ dlp := &DecodingLayerParser{
+ decoders: make(map[LayerType]DecodingLayer),
+ first: first,
+ }
+ dlp.df = dlp // Cast this once to the interface
+ for _, d := range decoders {
+ dlp.AddDecodingLayer(d)
+ }
+ return dlp
+}
+
+// DecodeLayers decodes as many layers as possible from the given data. It
+// initially treats the data as layer type 'typ', then uses NextLayerType on
+// each subsequent decoded layer until it gets to a layer type it doesn't know
+// how to parse.
+//
+// For each layer successfully decoded, DecodeLayers appends the layer type to
+// the decoded slice. DecodeLayers truncates the 'decoded' slice initially, so
+// there's no need to empty it yourself.
+//
+// This decoding method is about an order of magnitude faster than packet
+// decoding, because it only decodes known layers that have already been
+// allocated. This means it doesn't need to allocate each layer it returns...
+// instead it overwrites the layers that already exist.
+//
+// Example usage:
+// func main() {
+// var eth layers.Ethernet
+// var ip4 layers.IPv4
+// var ip6 layers.IPv6
+// var tcp layers.TCP
+// var udp layers.UDP
+// var payload gopacket.Payload
+// parser := gopacket.NewDecodingLayerParser(layers.LayerTypeEthernet, &eth, &ip4, &ip6, &tcp, &udp, &payload)
+// var source gopacket.PacketDataSource = getMyDataSource()
+// decodedLayers := make([]gopacket.LayerType, 0, 10)
+// for {
+// data, _, err := source.ReadPacketData()
+// if err == nil {
+// fmt.Println("Error reading packet data: ", err)
+// continue
+// }
+// fmt.Println("Decoding packet")
+// err = parser.DecodeLayers(data, &decodedLayers)
+// for _, typ := range decodedLayers {
+// fmt.Println(" Successfully decoded layer type", typ)
+// switch typ {
+// case layers.LayerTypeEthernet:
+// fmt.Println(" Eth ", eth.SrcMAC, eth.DstMAC)
+// case layers.LayerTypeIPv4:
+// fmt.Println(" IP4 ", ip4.SrcIP, ip4.DstIP)
+// case layers.LayerTypeIPv6:
+// fmt.Println(" IP6 ", ip6.SrcIP, ip6.DstIP)
+// case layers.LayerTypeTCP:
+// fmt.Println(" TCP ", tcp.SrcPort, tcp.DstPort)
+// case layers.LayerTypeUDP:
+// fmt.Println(" UDP ", udp.SrcPort, udp.DstPort)
+// }
+// }
+// if decodedLayers.Truncated {
+// fmt.Println(" Packet has been truncated")
+// }
+// if err != nil {
+// fmt.Println(" Error encountered:", err)
+// }
+// }
+// }
+//
+// If DecodeLayers is unable to decode the next layer type, it will return the
+// error UnsupportedLayerType.
+func (l *DecodingLayerParser) DecodeLayers(data []byte, decoded *[]LayerType) (err error) {
+ l.Truncated = false
+ if !l.IgnorePanic {
+ defer panicToError(&err)
+ }
+ typ := l.first
+ *decoded = (*decoded)[:0] // Truncated decoded layers.
+ for len(data) > 0 {
+ decoder, ok := l.decoders[typ]
+ if !ok {
+ return UnsupportedLayerType(typ)
+ } else if err = decoder.DecodeFromBytes(data, l.df); err != nil {
+ return err
+ }
+ *decoded = append(*decoded, typ)
+ typ = decoder.NextLayerType()
+ data = decoder.LayerPayload()
+ }
+ return nil
+}
+
+// UnsupportedLayerType is returned by DecodingLayerParser if DecodeLayers
+// encounters a layer type that the DecodingLayerParser has no decoder for.
+type UnsupportedLayerType LayerType
+
+// Error implements the error interface, returning a string to say that the
+// given layer type is unsupported.
+func (e UnsupportedLayerType) Error() string {
+ return fmt.Sprintf("No decoder for layer type %v", LayerType(e))
+}
+
+func panicToError(e *error) {
+ if r := recover(); r != nil {
+ *e = fmt.Errorf("panic: %v", r)
+ }
+}
+
+// DecodingLayerParserOptions provides options to affect the behavior of a given
+// DecodingLayerParser.
+type DecodingLayerParserOptions struct {
+ // IgnorePanic determines whether a DecodingLayerParser should stop
+ // panics on its own (by returning them as an error from DecodeLayers)
+ // or should allow them to raise up the stack. Handling errors does add
+ // latency to the process of decoding layers, but is much safer for
+ // callers. IgnorePanic defaults to false, thus if the caller does
+ // nothing decode panics will be returned as errors.
+ IgnorePanic bool
+}
diff --git a/vendor/github.com/google/gopacket/pcap/doc.go b/vendor/github.com/google/gopacket/pcap/doc.go
new file mode 100644
index 0000000..5bf8d86
--- /dev/null
+++ b/vendor/github.com/google/gopacket/pcap/doc.go
@@ -0,0 +1,106 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+/*
+Package pcap allows users of gopacket to read packets off the wire or from
+pcap files.
+
+This package is meant to be used with its parent,
+http://github.com/google/gopacket, although it can also be used independently
+if you just want to get packet data from the wire.
+
+Reading PCAP Files
+
+The following code can be used to read in data from a pcap file.
+
+ if handle, err := pcap.OpenOffline("/path/to/my/file"); err != nil {
+ panic(err)
+ } else {
+ packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
+ for packet := range packetSource.Packets() {
+ handlePacket(packet) // Do something with a packet here.
+ }
+ }
+
+Reading Live Packets
+
+The following code can be used to read in data from a live device, in this case
+"eth0".
+
+ if handle, err := pcap.OpenLive("eth0", 1600, true, pcap.BlockForever); err != nil {
+ panic(err)
+ } else if err := handle.SetBPFFilter("tcp and port 80"); err != nil { // optional
+ panic(err)
+ } else {
+ packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
+ for packet := range packetSource.Packets() {
+ handlePacket(packet) // Do something with a packet here.
+ }
+ }
+
+Inactive Handles
+
+Newer PCAP functionality requires the concept of an 'inactive' PCAP handle.
+Instead of constantly adding new arguments to pcap_open_live, users now call
+pcap_create to create a handle, set it up with a bunch of optional function
+calls, then call pcap_activate to activate it. This library mirrors that
+mechanism, for those that want to expose/use these new features:
+
+ inactive, err := pcap.NewInactiveHandle(deviceName)
+ if err != nil {
+ log.Fatal(err)
+ }
+ defer inactive.CleanUp()
+
+ // Call various functions on inactive to set it up the way you'd like:
+ if err = inactive.SetTimeout(time.Minute); err != nil {
+ log.Fatal(err)
+ } else if err = inactive.SetTimestampSource("foo"); err != nil {
+ log.Fatal(err)
+ }
+
+ // Finally, create the actual handle by calling Activate:
+ handle, err := inactive.Activate() // after this, inactive is no longer valid
+ if err != nil {
+ log.Fatal(err)
+ }
+ defer handle.Close()
+
+ // Now use your handle as you see fit.
+
+PCAP Timeouts
+
+pcap.OpenLive and pcap.SetTimeout both take timeouts.
+If you don't care about timeouts, just pass in BlockForever,
+which should do what you expect with minimal fuss.
+
+A timeout of 0 is not recommended. Some platforms, like Macs
+(http://www.manpages.info/macosx/pcap.3.html) say:
+ The read timeout is used to arrange that the read not necessarily return
+ immediately when a packet is seen, but that it wait for some amount of time
+ to allow more packets to arrive and to read multiple packets from the OS
+ kernel in one operation.
+This means that if you only capture one packet, the kernel might decide to wait
+'timeout' for more packets to batch with it before returning. A timeout of
+0, then, means 'wait forever for more packets', which is... not good.
+
+To get around this, we've introduced the following behavior: if a negative
+timeout is passed in, we set the positive timeout in the handle, then loop
+internally in ReadPacketData/ZeroCopyReadPacketData when we see timeout
+errors.
+
+PCAP File Writing
+
+This package does not implement PCAP file writing. However, gopacket/pcapgo
+does! Look there if you'd like to write PCAP files.
+
+Note For Windows 10 Users
+
+If you're trying to use 64-bit winpcap on Windows 10, you might have to do
+the crazy hijinks detailed at
+http://stackoverflow.com/questions/38047858/compile-gopacket-on-windows-64bit
+*/
+package pcap
diff --git a/vendor/github.com/google/gopacket/pcap/gopacket_benchmark/benchmark.go b/vendor/github.com/google/gopacket/pcap/gopacket_benchmark/benchmark.go
new file mode 100644
index 0000000..cbcae17
--- /dev/null
+++ b/vendor/github.com/google/gopacket/pcap/gopacket_benchmark/benchmark.go
@@ -0,0 +1,247 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// This benchmark reads in file <tempdir>/gopacket_benchmark.pcap and measures
+// the time it takes to decode all packets from that file. If the file doesn't
+// exist, it's pulled down from a publicly available location. However, you can
+// feel free to substitute your own file at that location, in which case the
+// benchmark will run on your own data.
+//
+// It's also useful for figuring out which packets may be causing errors. Pass
+// in the --printErrors flag, and it'll print out error layers for each packet
+// that has them. This includes any packets that it's just unable to decode,
+// which is a great way to find new protocols to decode, and get test packets to
+// write tests for them.
+package main
+
+import (
+ "compress/gzip"
+ "encoding/hex"
+ "flag"
+ "fmt"
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+ "github.com/google/gopacket/pcap"
+ "github.com/google/gopacket/tcpassembly"
+ "io"
+ "io/ioutil"
+ "net/http"
+ "os"
+ "runtime"
+ "runtime/pprof"
+ "time"
+)
+
+var decodeLazy *bool = flag.Bool("lazy", false, "If true, use lazy decoding")
+var decodeNoCopy *bool = flag.Bool("nocopy", true, "If true, avoid an extra copy when decoding packets")
+var printErrors *bool = flag.Bool("printErrors", false, "If true, check for and print error layers.")
+var printLayers *bool = flag.Bool("printLayers", false, "If true, print out the layers of each packet")
+var repeat *int = flag.Int("repeat", 5, "Read over the file N times")
+var cpuProfile *string = flag.String("cpuprofile", "", "If set, write CPU profile to filename")
+var 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")
+
+type BufferPacketSource struct {
+ index int
+ data [][]byte
+ ci []gopacket.CaptureInfo
+}
+
+func NewBufferPacketSource(p gopacket.PacketDataSource) *BufferPacketSource {
+ start := time.Now()
+ b := &BufferPacketSource{}
+ for {
+ data, ci, err := p.ReadPacketData()
+ if err == io.EOF {
+ break
+ }
+ b.data = append(b.data, data)
+ b.ci = append(b.ci, ci)
+ }
+ duration := time.Since(start)
+ fmt.Printf("Reading packet data into memory: %d packets in %v, %v per packet\n", len(b.data), duration, duration/time.Duration(len(b.data)))
+ return b
+}
+
+func (b *BufferPacketSource) ReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {
+ if b.index >= len(b.data) {
+ err = io.EOF
+ return
+ }
+ data = b.data[b.index]
+ ci = b.ci[b.index]
+ b.index++
+ return
+}
+
+func (b *BufferPacketSource) Reset() {
+ runtime.GC()
+ b.index = 0
+}
+
+func main() {
+ flag.Parse()
+ filename := os.TempDir() + string(os.PathSeparator) + "gopacket_benchmark.pcap"
+ if _, err := os.Stat(filename); err != nil {
+ // This URL points to a publicly available packet data set from a DARPA
+ // intrusion detection evaluation. See
+ // http://www.ll.mit.edu/mission/communications/cyber/CSTcorpora/ideval/data/1999/training/week1/index.html
+ // for more details.
+ fmt.Println("Local pcap file", filename, "doesn't exist, reading from", *url)
+ if resp, err := http.Get(*url); err != nil {
+ panic(err)
+ } else if out, err := os.Create(filename); err != nil {
+ panic(err)
+ } else if gz, err := gzip.NewReader(resp.Body); err != nil {
+ panic(err)
+ } else if n, err := io.Copy(out, gz); err != nil {
+ panic(err)
+ } else if err := gz.Close(); err != nil {
+ panic(err)
+ } else if err := out.Close(); err != nil {
+ panic(err)
+ } else {
+ fmt.Println("Successfully read", n, "bytes from url, unzipped to local storage")
+ }
+ }
+ fmt.Println("Reading file once through to hopefully cache most of it")
+ if f, err := os.Open(filename); err != nil {
+ panic(err)
+ } else if n, err := io.Copy(ioutil.Discard, f); err != nil {
+ panic(err)
+ } else if err := f.Close(); err != nil {
+ panic(err)
+ } else {
+ fmt.Println("Read in file", filename, ", total of", n, "bytes")
+ }
+ if *cpuProfile != "" {
+ if cpu, err := os.Create(*cpuProfile); err != nil {
+ panic(err)
+ } else if err := pprof.StartCPUProfile(cpu); err != nil {
+ panic(err)
+ } else {
+ defer func() {
+ pprof.StopCPUProfile()
+ cpu.Close()
+ }()
+ }
+ }
+ var packetDataSource *BufferPacketSource
+ var packetSource *gopacket.PacketSource
+ fmt.Printf("Opening file %q for read\n", filename)
+ if h, err := pcap.OpenOffline(filename); err != nil {
+ panic(err)
+ } else {
+ fmt.Println("Reading all packets into memory with BufferPacketSource.")
+ start := time.Now()
+ packetDataSource = NewBufferPacketSource(h)
+ duration := time.Since(start)
+ fmt.Printf("Time to read packet data into memory from file: %v\n", duration)
+ packetSource = gopacket.NewPacketSource(packetDataSource, h.LinkType())
+ packetSource.DecodeOptions.Lazy = *decodeLazy
+ packetSource.DecodeOptions.NoCopy = *decodeNoCopy
+ }
+ fmt.Println()
+ for i := 0; i < *repeat; i++ {
+ packetDataSource.Reset()
+ fmt.Printf("Benchmarking decode %d/%d\n", i+1, *repeat)
+ benchmarkPacketDecode(packetSource)
+ }
+ fmt.Println()
+ for i := 0; i < *repeat; i++ {
+ packetDataSource.Reset()
+ fmt.Printf("Benchmarking decoding layer parser %d/%d\n", i+1, *repeat)
+ benchmarkLayerDecode(packetDataSource, false)
+ }
+ fmt.Println()
+ for i := 0; i < *repeat; i++ {
+ packetDataSource.Reset()
+ fmt.Printf("Benchmarking decoding layer parser with assembly %d/%d\n", i+1, *repeat)
+ benchmarkLayerDecode(packetDataSource, true)
+ }
+}
+
+func benchmarkPacketDecode(packetSource *gopacket.PacketSource) {
+ count, errors := 0, 0
+ start := time.Now()
+ for packet, err := packetSource.NextPacket(); err != io.EOF; packet, err = packetSource.NextPacket() {
+ if err != nil {
+ fmt.Println("Error reading in packet:", err)
+ continue
+ }
+ count++
+ var hasError bool
+ if *printErrors && packet.ErrorLayer() != nil {
+ fmt.Println("\n\n\nError decoding packet:", packet.ErrorLayer().Error())
+ fmt.Println(hex.Dump(packet.Data()))
+ fmt.Printf("%#v\n", packet.Data())
+ errors++
+ hasError = true
+ }
+ if *printLayers || hasError {
+ fmt.Printf("\n=== PACKET %d ===\n", count)
+ for _, l := range packet.Layers() {
+ fmt.Printf("--- LAYER %v ---\n%#v\n\n", l.LayerType(), l)
+ }
+ fmt.Println()
+ }
+ }
+ duration := time.Since(start)
+ fmt.Printf("\tRead in %v packets in %v, %v per packet\n", count, duration, duration/time.Duration(count))
+ if *printErrors {
+ fmt.Printf("%v errors, successfully decoded %.02f%%\n", errors, float64(count-errors)*100.0/float64(count))
+ }
+}
+
+type streamFactory struct {
+}
+
+func (s *streamFactory) New(netFlow, tcpFlow gopacket.Flow) tcpassembly.Stream {
+ return s
+}
+func (s *streamFactory) Reassembled([]tcpassembly.Reassembly) {
+}
+func (s *streamFactory) ReassemblyComplete() {
+}
+
+func benchmarkLayerDecode(source *BufferPacketSource, assemble bool) {
+ var tcp layers.TCP
+ var ip layers.IPv4
+ var eth layers.Ethernet
+ var udp layers.UDP
+ var icmp layers.ICMPv4
+ var payload gopacket.Payload
+ parser := gopacket.NewDecodingLayerParser(
+ layers.LayerTypeEthernet,
+ &eth, &ip, &icmp, &tcp, &udp, &payload)
+ pool := tcpassembly.NewStreamPool(&streamFactory{})
+ assembler := tcpassembly.NewAssembler(pool)
+ var decoded []gopacket.LayerType
+ start := time.Now()
+ packets, decodedlayers, assembled := 0, 0, 0
+ for {
+ packets++
+ data, ci, err := source.ReadPacketData()
+ if err == io.EOF {
+ break
+ } else if err != nil {
+ fmt.Println("Error reading packet: ", err)
+ continue
+ }
+ err = parser.DecodeLayers(data, &decoded)
+ for _, typ := range decoded {
+ decodedlayers++
+ if typ == layers.LayerTypeTCP && assemble {
+ assembled++
+ assembler.AssembleWithTimestamp(ip.NetworkFlow(), &tcp, ci.Timestamp)
+ }
+ }
+ }
+ if assemble {
+ assembler.FlushAll()
+ }
+ duration := time.Since(start)
+ fmt.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))
+}
diff --git a/vendor/github.com/google/gopacket/pcap/pcap.go b/vendor/github.com/google/gopacket/pcap/pcap.go
new file mode 100644
index 0000000..1ecdf03
--- /dev/null
+++ b/vendor/github.com/google/gopacket/pcap/pcap.go
@@ -0,0 +1,1005 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package pcap
+
+/*
+#cgo solaris LDFLAGS: -L /opt/local/lib -lpcap
+#cgo linux LDFLAGS: -lpcap
+#cgo dragonfly LDFLAGS: -lpcap
+#cgo freebsd LDFLAGS: -lpcap
+#cgo openbsd LDFLAGS: -lpcap
+#cgo netbsd LDFLAGS: -lpcap
+#cgo darwin LDFLAGS: -lpcap
+#cgo windows CFLAGS: -I C:/WpdPack/Include
+#cgo windows,386 LDFLAGS: -L C:/WpdPack/Lib -lwpcap
+#cgo windows,amd64 LDFLAGS: -L C:/WpdPack/Lib/x64 -lwpcap
+#include <stdlib.h>
+#include <pcap.h>
+
+// Some old versions of pcap don't define this constant.
+#ifndef PCAP_NETMASK_UNKNOWN
+#define PCAP_NETMASK_UNKNOWN 0xffffffff
+#endif
+
+// libpcap doesn't actually export its version in a #define-guardable way,
+// so we have to use other defined things to differentiate versions.
+// We assume at least libpcap v1.1 at the moment.
+// See http://upstream-tracker.org/versions/libpcap.html
+
+#ifndef PCAP_ERROR_TSTAMP_PRECISION_NOTSUP // < v1.5
+
+int pcap_set_immediate_mode(pcap_t *p, int mode) {
+ return PCAP_ERROR;
+}
+
+#ifndef PCAP_TSTAMP_HOST // < v1.2
+
+int pcap_set_tstamp_type(pcap_t* p, int t) { return -1; }
+int pcap_list_tstamp_types(pcap_t* p, int** t) { return 0; }
+void pcap_free_tstamp_types(int *tstamp_types) {}
+const char* pcap_tstamp_type_val_to_name(int t) {
+ return "pcap timestamp types not supported";
+}
+int pcap_tstamp_type_name_to_val(const char* t) {
+ return PCAP_ERROR;
+}
+
+#endif // < v1.2
+#endif // < v1.5
+
+#ifndef PCAP_ERROR_PROMISC_PERM_DENIED
+#define PCAP_ERROR_PROMISC_PERM_DENIED -11
+#endif
+
+// WinPcap doesn't export a pcap_statustostr, so use the less-specific
+// pcap_strerror. Note that linking against something like cygwin libpcap
+// may result is less-specific error messages.
+#ifdef WIN32
+#define pcap_statustostr pcap_strerror
+
+// WinPcap also doesn't export pcap_can_set_rfmon and pcap_set_rfmon,
+// as those are handled by separate libraries (airpcap).
+// https://www.winpcap.org/docs/docs_412/html/group__wpcapfunc.html
+// Stub out those functions here, returning values that indicate rfmon
+// setting is unavailable/unsuccessful.
+int pcap_can_set_rfmon(pcap_t *p) {
+ return 0;
+}
+
+int pcap_set_rfmon(pcap_t *p, int rfmon) {
+ return PCAP_ERROR;
+}
+#endif
+
+// Windows, Macs, and Linux all use different time types. Joy.
+#ifdef WIN32
+#define gopacket_time_secs_t long
+#define gopacket_time_usecs_t long
+#elif __APPLE__
+#define gopacket_time_secs_t __darwin_time_t
+#define gopacket_time_usecs_t __darwin_suseconds_t
+#elif __GLIBC__
+#define gopacket_time_secs_t __time_t
+#define gopacket_time_usecs_t __suseconds_t
+#else // Some form of linux/bsd/etc...
+#include <sys/param.h>
+#ifdef __OpenBSD__
+#define gopacket_time_secs_t u_int32_t
+#define gopacket_time_usecs_t u_int32_t
+#else
+#define gopacket_time_secs_t time_t
+#define gopacket_time_usecs_t suseconds_t
+#endif
+#endif
+*/
+import "C"
+
+import (
+ "errors"
+ "fmt"
+ "io"
+ "net"
+ "reflect"
+ "runtime"
+ "strconv"
+ "sync"
+ "sync/atomic"
+ "syscall"
+ "time"
+ "unsafe"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+)
+
+const errorBufferSize = 256
+
+// MaxBpfInstructions is the maximum number of BPF instructions supported (BPF_MAXINSNS),
+// taken from Linux kernel: include/uapi/linux/bpf_common.h
+//
+// https://github.com/torvalds/linux/blob/master/include/uapi/linux/bpf_common.h
+const MaxBpfInstructions = 4096
+
+// 8 bytes per instruction, max 4096 instructions
+const bpfInstructionBufferSize = 8 * MaxBpfInstructions
+
+// Handle provides a connection to a pcap handle, allowing users to read packets
+// off the wire (Next), inject packets onto the wire (Inject), and
+// perform a number of other functions to affect and understand packet output.
+//
+// Handles are already pcap_activate'd
+type Handle struct {
+ // cptr is the handle for the actual pcap C object.
+ cptr *C.pcap_t
+ timeout time.Duration
+ device string
+ deviceIndex int
+ mu sync.Mutex
+ closeMu sync.Mutex
+ // stop is set to a non-zero value by Handle.Close to signal to
+ // getNextBufPtrLocked to stop trying to read packets
+ stop uint64
+
+ // Since pointers to these objects are passed into a C function, if
+ // they're declared locally then the Go compiler thinks they may have
+ // escaped into C-land, so it allocates them on the heap. This causes a
+ // huge memory hit, so to handle that we store them here instead.
+ pkthdr *C.struct_pcap_pkthdr
+ bufptr *C.u_char
+}
+
+// Stats contains statistics on how many packets were handled by a pcap handle,
+// and what was done with those packets.
+type Stats struct {
+ PacketsReceived int
+ PacketsDropped int
+ PacketsIfDropped int
+}
+
+// Interface describes a single network interface on a machine.
+type Interface struct {
+ Name string
+ Description string
+ Addresses []InterfaceAddress
+ // TODO: add more elements
+}
+
+// Datalink describes the datalink
+type Datalink struct {
+ Name string
+ Description string
+}
+
+// InterfaceAddress describes an address associated with an Interface.
+// Currently, it's IPv4/6 specific.
+type InterfaceAddress struct {
+ IP net.IP
+ Netmask net.IPMask // Netmask may be nil if we were unable to retrieve it.
+ // TODO: add broadcast + PtP dst ?
+}
+
+// BPF is a compiled filter program, useful for offline packet matching.
+type BPF struct {
+ orig string
+ bpf _Ctype_struct_bpf_program // takes a finalizer, not overriden by outsiders
+}
+
+// BPFInstruction is a byte encoded structure holding a BPF instruction
+type BPFInstruction struct {
+ Code uint16
+ Jt uint8
+ Jf uint8
+ K uint32
+}
+
+// BlockForever causes it to block forever waiting for packets, when passed
+// into SetTimeout or OpenLive, while still returning incoming packets to userland relatively
+// quickly.
+const BlockForever = -time.Millisecond * 10
+
+func timeoutMillis(timeout time.Duration) C.int {
+ // Flip sign if necessary. See package docs on timeout for reasoning behind this.
+ if timeout < 0 {
+ timeout *= -1
+ }
+ // Round up
+ if timeout != 0 && timeout < time.Millisecond {
+ timeout = time.Millisecond
+ }
+ return C.int(timeout / time.Millisecond)
+}
+
+// OpenLive opens a device and returns a *Handle.
+// It takes as arguments the name of the device ("eth0"), the maximum size to
+// read for each packet (snaplen), whether to put the interface in promiscuous
+// mode, and a timeout.
+//
+// See the package documentation for important details regarding 'timeout'.
+func OpenLive(device string, snaplen int32, promisc bool, timeout time.Duration) (handle *Handle, _ error) {
+ buf := (*C.char)(C.calloc(errorBufferSize, 1))
+ defer C.free(unsafe.Pointer(buf))
+
+ var pro C.int
+ if promisc {
+ pro = 1
+ }
+ p := &Handle{timeout: timeout, device: device}
+
+ ifc, err := net.InterfaceByName(device)
+ if err != nil {
+ // The device wasn't found in the OS, but could be "any"
+ // Set index to 0
+ p.deviceIndex = 0
+ } else {
+ p.deviceIndex = ifc.Index
+ }
+
+ dev := C.CString(device)
+ defer C.free(unsafe.Pointer(dev))
+
+ p.cptr = C.pcap_open_live(dev, C.int(snaplen), pro, timeoutMillis(timeout), buf)
+ if p.cptr == nil {
+ return nil, errors.New(C.GoString(buf))
+ }
+
+ if err := p.openLive(); err != nil {
+ C.pcap_close(p.cptr)
+ return nil, err
+ }
+
+ return p, nil
+}
+
+// OpenOffline opens a file and returns its contents as a *Handle.
+func OpenOffline(file string) (handle *Handle, err error) {
+ buf := (*C.char)(C.calloc(errorBufferSize, 1))
+ defer C.free(unsafe.Pointer(buf))
+ cf := C.CString(file)
+ defer C.free(unsafe.Pointer(cf))
+
+ cptr := C.pcap_open_offline(cf, buf)
+ if cptr == nil {
+ return nil, errors.New(C.GoString(buf))
+ }
+ return &Handle{cptr: cptr}, nil
+}
+
+// NextError is the return code from a call to Next.
+type NextError int32
+
+// NextError implements the error interface.
+func (n NextError) Error() string {
+ switch n {
+ case NextErrorOk:
+ return "OK"
+ case NextErrorTimeoutExpired:
+ return "Timeout Expired"
+ case NextErrorReadError:
+ return "Read Error"
+ case NextErrorNoMorePackets:
+ return "No More Packets In File"
+ case NextErrorNotActivated:
+ return "Not Activated"
+ }
+ return strconv.Itoa(int(n))
+}
+
+// NextError values.
+const (
+ NextErrorOk NextError = 1
+ NextErrorTimeoutExpired NextError = 0
+ NextErrorReadError NextError = -1
+ // NextErrorNoMorePackets is returned when reading from a file (OpenOffline) and
+ // EOF is reached. When this happens, Next() returns io.EOF instead of this.
+ NextErrorNoMorePackets NextError = -2
+ NextErrorNotActivated NextError = -3
+)
+
+// ReadPacketData returns the next packet read from the pcap handle, along with an error
+// code associated with that packet. If the packet is read successfully, the
+// returned error is nil.
+func (p *Handle) ReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {
+ p.mu.Lock()
+ err = p.getNextBufPtrLocked(&ci)
+ if err == nil {
+ data = C.GoBytes(unsafe.Pointer(p.bufptr), C.int(ci.CaptureLength))
+ }
+ p.mu.Unlock()
+ if err == NextErrorTimeoutExpired {
+ runtime.Gosched()
+ }
+ return
+}
+
+type activateError C.int
+
+const (
+ aeNoError = 0
+ aeActivated = C.PCAP_ERROR_ACTIVATED
+ aePromisc = C.PCAP_WARNING_PROMISC_NOTSUP
+ aeNoSuchDevice = C.PCAP_ERROR_NO_SUCH_DEVICE
+ aeDenied = C.PCAP_ERROR_PERM_DENIED
+ aeNotUp = C.PCAP_ERROR_IFACE_NOT_UP
+)
+
+func (a activateError) Error() string {
+ switch a {
+ case aeNoError:
+ return "No Error"
+ case aeActivated:
+ return "Already Activated"
+ case aePromisc:
+ return "Cannot set as promisc"
+ case aeNoSuchDevice:
+ return "No Such Device"
+ case aeDenied:
+ return "Permission Denied"
+ case aeNotUp:
+ return "Interface Not Up"
+ default:
+ return fmt.Sprintf("unknown activated error: %d", a)
+ }
+}
+
+// getNextBufPtrLocked is shared code for ReadPacketData and
+// ZeroCopyReadPacketData.
+func (p *Handle) getNextBufPtrLocked(ci *gopacket.CaptureInfo) error {
+ if p.cptr == nil {
+ return io.EOF
+ }
+
+ for atomic.LoadUint64(&p.stop) == 0 {
+ // try to read a packet if one is immediately available
+ result := NextError(C.pcap_next_ex(p.cptr, &p.pkthdr, &p.bufptr))
+
+ switch result {
+ case NextErrorOk:
+ // got a packet, set capture info and return
+ sec := int64(p.pkthdr.ts.tv_sec)
+ // convert micros to nanos
+ nanos := int64(p.pkthdr.ts.tv_usec) * 1000
+
+ ci.Timestamp = time.Unix(sec, nanos)
+ ci.CaptureLength = int(p.pkthdr.caplen)
+ ci.Length = int(p.pkthdr.len)
+ ci.InterfaceIndex = p.deviceIndex
+
+ return nil
+ case NextErrorNoMorePackets:
+ // no more packets, return EOF rather than libpcap-specific error
+ return io.EOF
+ case NextErrorTimeoutExpired:
+ // Negative timeout means to loop forever, instead of actually returning
+ // the timeout error.
+ if p.timeout < 0 {
+ // must have had a timeout... wait before trying again
+ p.waitForPacket()
+ continue
+ }
+ default:
+ return result
+ }
+ }
+
+ // stop must be set
+ return io.EOF
+}
+
+// ZeroCopyReadPacketData reads the next packet off the wire, and returns its data.
+// The slice returned by ZeroCopyReadPacketData points to bytes owned by the
+// the Handle. Each call to ZeroCopyReadPacketData invalidates any data previously
+// returned by ZeroCopyReadPacketData. Care must be taken not to keep pointers
+// to old bytes when using ZeroCopyReadPacketData... if you need to keep data past
+// the next time you call ZeroCopyReadPacketData, use ReadPacketData, which copies
+// the bytes into a new buffer for you.
+// data1, _, _ := handle.ZeroCopyReadPacketData()
+// // do everything you want with data1 here, copying bytes out of it if you'd like to keep them around.
+// data2, _, _ := handle.ZeroCopyReadPacketData() // invalidates bytes in data1
+func (p *Handle) ZeroCopyReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {
+ p.mu.Lock()
+ err = p.getNextBufPtrLocked(&ci)
+ if err == nil {
+ slice := (*reflect.SliceHeader)(unsafe.Pointer(&data))
+ slice.Data = uintptr(unsafe.Pointer(p.bufptr))
+ slice.Len = ci.CaptureLength
+ slice.Cap = ci.CaptureLength
+ }
+ p.mu.Unlock()
+ if err == NextErrorTimeoutExpired {
+ runtime.Gosched()
+ }
+ return
+}
+
+// Close closes the underlying pcap handle.
+func (p *Handle) Close() {
+ p.closeMu.Lock()
+ defer p.closeMu.Unlock()
+
+ if p.cptr == nil {
+ return
+ }
+
+ atomic.StoreUint64(&p.stop, 1)
+
+ // wait for packet reader to stop
+ p.mu.Lock()
+ defer p.mu.Unlock()
+
+ C.pcap_close(p.cptr)
+ p.cptr = nil
+}
+
+// Error returns the current error associated with a pcap handle (pcap_geterr).
+func (p *Handle) Error() error {
+ return errors.New(C.GoString(C.pcap_geterr(p.cptr)))
+}
+
+// Stats returns statistics on the underlying pcap handle.
+func (p *Handle) Stats() (stat *Stats, err error) {
+ var cstats _Ctype_struct_pcap_stat
+ if -1 == C.pcap_stats(p.cptr, &cstats) {
+ return nil, p.Error()
+ }
+ return &Stats{
+ PacketsReceived: int(cstats.ps_recv),
+ PacketsDropped: int(cstats.ps_drop),
+ PacketsIfDropped: int(cstats.ps_ifdrop),
+ }, nil
+}
+
+// ListDataLinks obtains a list of all possible data link types supported for an interface.
+func (p *Handle) ListDataLinks() (datalinks []Datalink, err error) {
+ var dltbuf *C.int
+
+ n := int(C.pcap_list_datalinks(p.cptr, &dltbuf))
+ if -1 == n {
+ return nil, p.Error()
+ }
+
+ defer C.pcap_free_datalinks(dltbuf)
+
+ datalinks = make([]Datalink, n)
+
+ dltArray := (*[100]C.int)(unsafe.Pointer(dltbuf))
+
+ for i := 0; i < n; i++ {
+ expr := C.pcap_datalink_val_to_name((*dltArray)[i])
+ datalinks[i].Name = C.GoString(expr)
+
+ expr = C.pcap_datalink_val_to_description((*dltArray)[i])
+ datalinks[i].Description = C.GoString(expr)
+ }
+
+ return datalinks, nil
+}
+
+// pcap_compile is NOT thread-safe, so protect it.
+var pcapCompileMu sync.Mutex
+
+// compileBPFFilter always returns an allocated _Ctype_struct_bpf_program
+// It is the callers responsibility to free the memory again, e.g.
+//
+// C.pcap_freecode(&bpf)
+//
+func (p *Handle) compileBPFFilter(expr string) (_Ctype_struct_bpf_program, error) {
+ errorBuf := (*C.char)(C.calloc(errorBufferSize, 1))
+ defer C.free(unsafe.Pointer(errorBuf))
+
+ var netp uint32
+ var maskp uint32
+
+ // Only do the lookup on network interfaces.
+ // No device indicates we're handling a pcap file.
+ if len(p.device) > 0 {
+ dev := C.CString(p.device)
+ defer C.free(unsafe.Pointer(dev))
+ if -1 == C.pcap_lookupnet(
+ dev,
+ (*C.bpf_u_int32)(unsafe.Pointer(&netp)),
+ (*C.bpf_u_int32)(unsafe.Pointer(&maskp)),
+ errorBuf,
+ ) {
+ // We can't lookup the network, but that could be because the interface
+ // doesn't have an IPv4.
+ }
+ }
+
+ var bpf _Ctype_struct_bpf_program
+ cexpr := C.CString(expr)
+ defer C.free(unsafe.Pointer(cexpr))
+
+ pcapCompileMu.Lock()
+ defer pcapCompileMu.Unlock()
+ if -1 == C.pcap_compile(p.cptr, &bpf, cexpr, 1, C.bpf_u_int32(maskp)) {
+ return bpf, p.Error()
+ }
+
+ return bpf, nil
+}
+
+// CompileBPFFilter compiles and returns a BPF filter with given a link type and capture length.
+func CompileBPFFilter(linkType layers.LinkType, captureLength int, expr string) ([]BPFInstruction, error) {
+ cptr := C.pcap_open_dead(C.int(linkType), C.int(captureLength))
+ if cptr == nil {
+ return nil, errors.New("error opening dead capture")
+ }
+
+ h := Handle{cptr: cptr}
+ defer h.Close()
+ return h.CompileBPFFilter(expr)
+}
+
+// CompileBPFFilter compiles and returns a BPF filter for the pcap handle.
+func (p *Handle) CompileBPFFilter(expr string) ([]BPFInstruction, error) {
+ bpf, err := p.compileBPFFilter(expr)
+ defer C.pcap_freecode(&bpf)
+ if err != nil {
+ return nil, err
+ }
+
+ bpfInsn := (*[bpfInstructionBufferSize]_Ctype_struct_bpf_insn)(unsafe.Pointer(bpf.bf_insns))[0:bpf.bf_len:bpf.bf_len]
+ bpfInstruction := make([]BPFInstruction, len(bpfInsn), len(bpfInsn))
+
+ for i, v := range bpfInsn {
+ bpfInstruction[i].Code = uint16(v.code)
+ bpfInstruction[i].Jt = uint8(v.jt)
+ bpfInstruction[i].Jf = uint8(v.jf)
+ bpfInstruction[i].K = uint32(v.k)
+ }
+
+ return bpfInstruction, nil
+}
+
+// SetBPFFilter compiles and sets a BPF filter for the pcap handle.
+func (p *Handle) SetBPFFilter(expr string) (err error) {
+ bpf, err := p.compileBPFFilter(expr)
+ defer C.pcap_freecode(&bpf)
+ if err != nil {
+ return err
+ }
+
+ if -1 == C.pcap_setfilter(p.cptr, &bpf) {
+ return p.Error()
+ }
+
+ return nil
+}
+
+// SetBPFInstructionFilter may be used to apply a filter in BPF asm byte code format.
+//
+// Simplest way to generate BPF asm byte code is with tcpdump:
+// tcpdump -dd 'udp'
+//
+// The output may be used directly to add a filter, e.g.:
+// bpfInstructions := []pcap.BpfInstruction{
+// {0x28, 0, 0, 0x0000000c},
+// {0x15, 0, 9, 0x00000800},
+// {0x30, 0, 0, 0x00000017},
+// {0x15, 0, 7, 0x00000006},
+// {0x28, 0, 0, 0x00000014},
+// {0x45, 5, 0, 0x00001fff},
+// {0xb1, 0, 0, 0x0000000e},
+// {0x50, 0, 0, 0x0000001b},
+// {0x54, 0, 0, 0x00000012},
+// {0x15, 0, 1, 0x00000012},
+// {0x6, 0, 0, 0x0000ffff},
+// {0x6, 0, 0, 0x00000000},
+// }
+//
+// An other posibility is to write the bpf code in bpf asm.
+// Documentation: https://www.kernel.org/doc/Documentation/networking/filter.txt
+//
+// To compile the code use bpf_asm from
+// https://github.com/torvalds/linux/tree/master/tools/net
+//
+// The following command may be used to convert bpf_asm output to c/go struct, usable for SetBPFFilterByte:
+// bpf_asm -c tcp.bpf
+func (p *Handle) SetBPFInstructionFilter(bpfInstructions []BPFInstruction) (err error) {
+ bpf, err := bpfInstructionFilter(bpfInstructions)
+ if err != nil {
+ return err
+ }
+
+ if -1 == C.pcap_setfilter(p.cptr, &bpf) {
+ C.pcap_freecode(&bpf)
+ return p.Error()
+ }
+
+ C.pcap_freecode(&bpf)
+
+ return nil
+}
+func bpfInstructionFilter(bpfInstructions []BPFInstruction) (bpf _Ctype_struct_bpf_program, err error) {
+ if len(bpfInstructions) < 1 {
+ return bpf, errors.New("bpfInstructions must not be empty")
+ }
+
+ if len(bpfInstructions) > MaxBpfInstructions {
+ return bpf, fmt.Errorf("bpfInstructions must not be larger than %d", MaxBpfInstructions)
+ }
+
+ bpf.bf_len = C.u_int(len(bpfInstructions))
+ cbpfInsns := C.calloc(C.size_t(len(bpfInstructions)), C.size_t(unsafe.Sizeof(bpfInstructions[0])))
+
+ copy((*[bpfInstructionBufferSize]BPFInstruction)(cbpfInsns)[0:len(bpfInstructions)], bpfInstructions)
+ bpf.bf_insns = (*_Ctype_struct_bpf_insn)(cbpfInsns)
+
+ return
+}
+
+// NewBPF compiles the given string into a new filter program.
+//
+// BPF filters need to be created from activated handles, because they need to
+// know the underlying link type to correctly compile their offsets.
+func (p *Handle) NewBPF(expr string) (*BPF, error) {
+ bpf := &BPF{orig: expr}
+ cexpr := C.CString(expr)
+ defer C.free(unsafe.Pointer(cexpr))
+
+ pcapCompileMu.Lock()
+ defer pcapCompileMu.Unlock()
+ if C.pcap_compile(p.cptr, &bpf.bpf, cexpr /* optimize */, 1, C.PCAP_NETMASK_UNKNOWN) != 0 {
+ return nil, p.Error()
+ }
+
+ runtime.SetFinalizer(bpf, destroyBPF)
+ return bpf, nil
+}
+
+// NewBPFInstructionFilter sets the given BPFInstructions as new filter program.
+//
+// More details see func SetBPFInstructionFilter
+//
+// BPF filters need to be created from activated handles, because they need to
+// know the underlying link type to correctly compile their offsets.
+func (p *Handle) NewBPFInstructionFilter(bpfInstructions []BPFInstruction) (*BPF, error) {
+ var err error
+ bpf := &BPF{orig: "BPF Instruction Filter"}
+
+ bpf.bpf, err = bpfInstructionFilter(bpfInstructions)
+ if err != nil {
+ return nil, err
+ }
+
+ runtime.SetFinalizer(bpf, destroyBPF)
+ return bpf, nil
+}
+func destroyBPF(bpf *BPF) {
+ C.pcap_freecode(&bpf.bpf)
+}
+
+// String returns the original string this BPF filter was compiled from.
+func (b *BPF) String() string {
+ return b.orig
+}
+
+// Matches returns true if the given packet data matches this filter.
+func (b *BPF) Matches(ci gopacket.CaptureInfo, data []byte) bool {
+ var hdr C.struct_pcap_pkthdr
+ hdr.ts.tv_sec = C.gopacket_time_secs_t(ci.Timestamp.Unix())
+ hdr.ts.tv_usec = C.gopacket_time_usecs_t(ci.Timestamp.Nanosecond() / 1000)
+ hdr.caplen = C.bpf_u_int32(len(data)) // Trust actual length over ci.Length.
+ hdr.len = C.bpf_u_int32(ci.Length)
+ dataptr := (*C.u_char)(unsafe.Pointer(&data[0]))
+ return C.pcap_offline_filter(&b.bpf, &hdr, dataptr) != 0
+}
+
+// Version returns pcap_lib_version.
+func Version() string {
+ return C.GoString(C.pcap_lib_version())
+}
+
+// LinkType returns pcap_datalink, as a layers.LinkType.
+func (p *Handle) LinkType() layers.LinkType {
+ return layers.LinkType(C.pcap_datalink(p.cptr))
+}
+
+// SetLinkType calls pcap_set_datalink on the pcap handle.
+func (p *Handle) SetLinkType(dlt layers.LinkType) error {
+ if -1 == C.pcap_set_datalink(p.cptr, C.int(dlt)) {
+ return p.Error()
+ }
+ return nil
+}
+
+// FindAllDevs attempts to enumerate all interfaces on the current machine.
+func FindAllDevs() (ifs []Interface, err error) {
+ var buf *C.char
+ buf = (*C.char)(C.calloc(errorBufferSize, 1))
+ defer C.free(unsafe.Pointer(buf))
+ var alldevsp *C.pcap_if_t
+
+ if -1 == C.pcap_findalldevs((**C.pcap_if_t)(&alldevsp), buf) {
+ return nil, errors.New(C.GoString(buf))
+ }
+ defer C.pcap_freealldevs((*C.pcap_if_t)(alldevsp))
+ dev := alldevsp
+ var i uint32
+ for i = 0; dev != nil; dev = (*C.pcap_if_t)(dev.next) {
+ i++
+ }
+ ifs = make([]Interface, i)
+ dev = alldevsp
+ for j := uint32(0); dev != nil; dev = (*C.pcap_if_t)(dev.next) {
+ var iface Interface
+ iface.Name = C.GoString(dev.name)
+ iface.Description = C.GoString(dev.description)
+ iface.Addresses = findalladdresses(dev.addresses)
+ // TODO: add more elements
+ ifs[j] = iface
+ j++
+ }
+ return
+}
+
+func findalladdresses(addresses *_Ctype_struct_pcap_addr) (retval []InterfaceAddress) {
+ // TODO - make it support more than IPv4 and IPv6?
+ retval = make([]InterfaceAddress, 0, 1)
+ for curaddr := addresses; curaddr != nil; curaddr = (*_Ctype_struct_pcap_addr)(curaddr.next) {
+ // Strangely, it appears that in some cases, we get a pcap address back from
+ // pcap_findalldevs with a nil .addr. It appears that we can skip over
+ // these.
+ if curaddr.addr == nil {
+ continue
+ }
+ var a InterfaceAddress
+ var err error
+ if a.IP, err = sockaddrToIP((*syscall.RawSockaddr)(unsafe.Pointer(curaddr.addr))); err != nil {
+ continue
+ }
+ // To be safe, we'll also check for netmask.
+ if curaddr.netmask == nil {
+ continue
+ }
+ if a.Netmask, err = sockaddrToIP((*syscall.RawSockaddr)(unsafe.Pointer(curaddr.netmask))); err != nil {
+ // If we got an IP address but we can't get a netmask, just return the IP
+ // address.
+ a.Netmask = nil
+ }
+ retval = append(retval, a)
+ }
+ return
+}
+
+func sockaddrToIP(rsa *syscall.RawSockaddr) (IP []byte, err error) {
+ switch rsa.Family {
+ case syscall.AF_INET:
+ pp := (*syscall.RawSockaddrInet4)(unsafe.Pointer(rsa))
+ IP = make([]byte, 4)
+ for i := 0; i < len(IP); i++ {
+ IP[i] = pp.Addr[i]
+ }
+ return
+ case syscall.AF_INET6:
+ pp := (*syscall.RawSockaddrInet6)(unsafe.Pointer(rsa))
+ IP = make([]byte, 16)
+ for i := 0; i < len(IP); i++ {
+ IP[i] = pp.Addr[i]
+ }
+ return
+ }
+ err = errors.New("Unsupported address type")
+ return
+}
+
+// WritePacketData calls pcap_sendpacket, injecting the given data into the pcap handle.
+func (p *Handle) WritePacketData(data []byte) (err error) {
+ if -1 == C.pcap_sendpacket(p.cptr, (*C.u_char)(&data[0]), (C.int)(len(data))) {
+ err = p.Error()
+ }
+ return
+}
+
+// Direction is used by Handle.SetDirection.
+type Direction uint8
+
+// Direction values for Handle.SetDirection.
+const (
+ DirectionIn Direction = C.PCAP_D_IN
+ DirectionOut Direction = C.PCAP_D_OUT
+ DirectionInOut Direction = C.PCAP_D_INOUT
+)
+
+// SetDirection sets the direction for which packets will be captured.
+func (p *Handle) SetDirection(direction Direction) error {
+ if direction != DirectionIn && direction != DirectionOut && direction != DirectionInOut {
+ return fmt.Errorf("Invalid direction: %v", direction)
+ }
+ if status := C.pcap_setdirection(p.cptr, (C.pcap_direction_t)(direction)); status < 0 {
+ return statusError(status)
+ }
+ return nil
+}
+
+// TimestampSource tells PCAP which type of timestamp to use for packets.
+type TimestampSource C.int
+
+// String returns the timestamp type as a human-readable string.
+func (t TimestampSource) String() string {
+ return C.GoString(C.pcap_tstamp_type_val_to_name(C.int(t)))
+}
+
+// TimestampSourceFromString translates a string into a timestamp type, case
+// insensitive.
+func TimestampSourceFromString(s string) (TimestampSource, error) {
+ cs := C.CString(s)
+ defer C.free(unsafe.Pointer(cs))
+ t := C.pcap_tstamp_type_name_to_val(cs)
+ if t < 0 {
+ return 0, statusError(t)
+ }
+ return TimestampSource(t), nil
+}
+
+func statusError(status C.int) error {
+ return errors.New(C.GoString(C.pcap_statustostr(status)))
+}
+
+// InactiveHandle allows you to call pre-pcap_activate functions on your pcap
+// handle to set it up just the way you'd like.
+type InactiveHandle struct {
+ // cptr is the handle for the actual pcap C object.
+ cptr *C.pcap_t
+ device string
+ deviceIndex int
+ timeout time.Duration
+}
+
+// Activate activates the handle. The current InactiveHandle becomes invalid
+// and all future function calls on it will fail.
+func (p *InactiveHandle) Activate() (*Handle, error) {
+ err := activateError(C.pcap_activate(p.cptr))
+ if err != aeNoError {
+ return nil, err
+ }
+ h := &Handle{
+ cptr: p.cptr,
+ timeout: p.timeout,
+ device: p.device,
+ deviceIndex: p.deviceIndex,
+ }
+ p.cptr = nil
+ return h, nil
+}
+
+// CleanUp cleans up any stuff left over from a successful or failed building
+// of a handle.
+func (p *InactiveHandle) CleanUp() {
+ if p.cptr != nil {
+ C.pcap_close(p.cptr)
+ }
+}
+
+// NewInactiveHandle creates a new InactiveHandle, which wraps an un-activated PCAP handle.
+// Callers of NewInactiveHandle should immediately defer 'CleanUp', as in:
+// inactive := NewInactiveHandle("eth0")
+// defer inactive.CleanUp()
+func NewInactiveHandle(device string) (*InactiveHandle, error) {
+ buf := (*C.char)(C.calloc(errorBufferSize, 1))
+ defer C.free(unsafe.Pointer(buf))
+ dev := C.CString(device)
+ defer C.free(unsafe.Pointer(dev))
+
+ // Try to get the interface index, but iy could be something like "any"
+ // in which case use 0, which doesn't exist in nature
+ deviceIndex := 0
+ ifc, err := net.InterfaceByName(device)
+ if err == nil {
+ deviceIndex = ifc.Index
+ }
+
+ // This copies a bunch of the pcap_open_live implementation from pcap.c:
+ cptr := C.pcap_create(dev, buf)
+ if cptr == nil {
+ return nil, errors.New(C.GoString(buf))
+ }
+ return &InactiveHandle{cptr: cptr, device: device, deviceIndex: deviceIndex}, nil
+}
+
+// SetSnapLen sets the snap length (max bytes per packet to capture).
+func (p *InactiveHandle) SetSnapLen(snaplen int) error {
+ if status := C.pcap_set_snaplen(p.cptr, C.int(snaplen)); status < 0 {
+ return statusError(status)
+ }
+ return nil
+}
+
+// SetPromisc sets the handle to either be promiscuous (capture packets
+// unrelated to this host) or not.
+func (p *InactiveHandle) SetPromisc(promisc bool) error {
+ var pro C.int
+ if promisc {
+ pro = 1
+ }
+ if status := C.pcap_set_promisc(p.cptr, pro); status < 0 {
+ return statusError(status)
+ }
+ return nil
+}
+
+// SetTimeout sets the read timeout for the handle.
+//
+// See the package documentation for important details regarding 'timeout'.
+func (p *InactiveHandle) SetTimeout(timeout time.Duration) error {
+ if status := C.pcap_set_timeout(p.cptr, timeoutMillis(timeout)); status < 0 {
+ return statusError(status)
+ }
+ p.timeout = timeout
+ return nil
+}
+
+// SupportedTimestamps returns a list of supported timstamp types for this
+// handle.
+func (p *InactiveHandle) SupportedTimestamps() (out []TimestampSource) {
+ var types *C.int
+ n := int(C.pcap_list_tstamp_types(p.cptr, &types))
+ defer C.pcap_free_tstamp_types(types)
+ typesArray := (*[100]C.int)(unsafe.Pointer(types))
+ for i := 0; i < n; i++ {
+ out = append(out, TimestampSource((*typesArray)[i]))
+ }
+ return
+}
+
+// SetTimestampSource sets the type of timestamp generator PCAP uses when
+// attaching timestamps to packets.
+func (p *InactiveHandle) SetTimestampSource(t TimestampSource) error {
+ if status := C.pcap_set_tstamp_type(p.cptr, C.int(t)); status < 0 {
+ return statusError(status)
+ }
+ return nil
+}
+
+// CannotSetRFMon is returned by SetRFMon if the handle does not allow
+// setting RFMon because pcap_can_set_rfmon returns 0.
+var CannotSetRFMon = errors.New("Cannot set rfmon for this handle")
+
+// SetRFMon turns on radio monitoring mode, similar to promiscuous mode but for
+// wireless networks. If this mode is enabled, the interface will not need to
+// associate with an access point before it can receive traffic.
+func (p *InactiveHandle) SetRFMon(monitor bool) error {
+ var mon C.int
+ if monitor {
+ mon = 1
+ }
+ switch canset := C.pcap_can_set_rfmon(p.cptr); canset {
+ case 0:
+ return CannotSetRFMon
+ case 1:
+ // success
+ default:
+ return statusError(canset)
+ }
+ if status := C.pcap_set_rfmon(p.cptr, mon); status != 0 {
+ return statusError(status)
+ }
+ return nil
+}
+
+// SetBufferSize sets the buffer size (in bytes) of the handle.
+func (p *InactiveHandle) SetBufferSize(bufferSize int) error {
+ if status := C.pcap_set_buffer_size(p.cptr, C.int(bufferSize)); status < 0 {
+ return statusError(status)
+ }
+ return nil
+}
+
+// SetImmediateMode sets (or unsets) the immediate mode of the
+// handle. In immediate mode, packets are delivered to the application
+// as soon as they arrive. In other words, this overrides SetTimeout.
+func (p *InactiveHandle) SetImmediateMode(mode bool) error {
+ var md C.int
+ if mode {
+ md = 1
+ }
+ if status := C.pcap_set_immediate_mode(p.cptr, md); status < 0 {
+ return statusError(status)
+ }
+ return nil
+}
diff --git a/vendor/github.com/google/gopacket/pcap/pcap_test.go b/vendor/github.com/google/gopacket/pcap/pcap_test.go
new file mode 100644
index 0000000..04f1812
--- /dev/null
+++ b/vendor/github.com/google/gopacket/pcap/pcap_test.go
@@ -0,0 +1,308 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package pcap
+
+import (
+ "fmt"
+ "io"
+ "io/ioutil"
+ "log"
+ "os"
+ "testing"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+)
+
+func TestPcapNonexistentFile(t *testing.T) {
+ handle, err := OpenOffline("/path/to/nonexistent/file")
+ if err == nil {
+ t.Error("No error returned for nonexistent file open")
+ } else {
+ t.Logf("Error returned for nonexistent file: %v", err)
+ }
+ if handle != nil {
+ t.Error("Non-nil handle returned for nonexistent file open")
+ }
+}
+
+func TestPcapFileRead(t *testing.T) {
+ invalidData := []byte{
+ 0xAB, 0xAD, 0x1D, 0xEA,
+ }
+
+ invalidPcap, err := ioutil.TempFile("", "invalid.pcap")
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer os.Remove(invalidPcap.Name())
+
+ err = ioutil.WriteFile(invalidPcap.Name(), invalidData, 0644)
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer invalidPcap.Close()
+
+ for _, file := range []struct {
+ filename string
+ num int
+ expectedLayers []gopacket.LayerType
+ err string
+ }{
+ {filename: "test_loopback.pcap",
+ num: 24,
+ expectedLayers: []gopacket.LayerType{
+ layers.LayerTypeLoopback,
+ layers.LayerTypeIPv6,
+ layers.LayerTypeTCP,
+ },
+ },
+ {filename: "test_ethernet.pcap",
+ num: 16,
+ expectedLayers: []gopacket.LayerType{
+ layers.LayerTypeEthernet,
+ layers.LayerTypeIPv4,
+ layers.LayerTypeTCP,
+ },
+ },
+ {filename: "test_dns.pcap",
+ num: 10,
+ expectedLayers: []gopacket.LayerType{
+ layers.LayerTypeEthernet,
+ layers.LayerTypeIPv4,
+ layers.LayerTypeUDP,
+ layers.LayerTypeDNS,
+ },
+ },
+ {filename: invalidPcap.Name(),
+ num: 0,
+ err: "unknown file format",
+ },
+ } {
+ t.Logf("\n\n\n\nProcessing file %s\n\n\n\n", file.filename)
+
+ packets := []gopacket.Packet{}
+ if handle, err := OpenOffline(file.filename); err != nil {
+ if file.err != "" {
+ if err.Error() != file.err {
+ t.Errorf("expected message %q; got %q", file.err, err.Error())
+ }
+ } else {
+ t.Fatal(err)
+ }
+ } else {
+ if file.err != "" {
+ t.Fatalf("Expected error, got none")
+ }
+ packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
+ for packet := range packetSource.Packets() {
+ packets = append(packets, packet)
+ }
+ }
+ if len(packets) != file.num {
+ t.Fatal("Incorrect number of packets, want", file.num, "got", len(packets))
+ }
+ for i, p := range packets {
+ t.Log(p.Dump())
+ for _, layertype := range file.expectedLayers {
+ if p.Layer(layertype) == nil {
+ t.Fatal("Packet", i, "has no layer type\n%s", layertype, p.Dump())
+ }
+ }
+ }
+ }
+}
+
+func TestBPF(t *testing.T) {
+ handle, err := OpenOffline("test_ethernet.pcap")
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ for _, expected := range []struct {
+ expr string
+ Error bool
+ Result bool
+ }{
+ {"foobar", true, false},
+ {"tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)", false, true},
+ {"tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-ack", false, true},
+ {"udp", false, false},
+ } {
+ data, ci, err := handle.ReadPacketData()
+ if err != nil {
+ t.Fatal(err)
+ }
+ t.Log("Testing filter", expected.expr)
+ if bpf, err := handle.NewBPF(expected.expr); err != nil {
+ if !expected.Error {
+ t.Error(err, "while compiling filter was unexpected")
+ }
+ } else if expected.Error {
+ t.Error("expected error but didn't see one")
+ } else if matches := bpf.Matches(ci, data); matches != expected.Result {
+ t.Error("Filter result was", matches, "but should be", expected.Result)
+ }
+ }
+}
+
+func TestBPFInstruction(t *testing.T) {
+ handle, err := OpenOffline("test_ethernet.pcap")
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ cntr := 0
+ oversizedBpfInstructionBuffer := [MaxBpfInstructions + 1]BPFInstruction{}
+
+ for _, expected := range []struct {
+ Filter string
+ BpfInstruction []BPFInstruction
+ Error bool
+ Result bool
+ }{
+ // {"foobar", true, false},
+ {"foobar", []BPFInstruction{}, true, false},
+
+ // tcpdump -dd 'tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)'
+ {"tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)",
+ []BPFInstruction{
+ {0x28, 0, 0, 0x0000000c},
+ {0x15, 0, 9, 0x00000800},
+ {0x30, 0, 0, 0x00000017},
+ {0x15, 0, 7, 0x00000006},
+ {0x28, 0, 0, 0x00000014},
+ {0x45, 5, 0, 0x00001fff},
+ {0xb1, 0, 0, 0x0000000e},
+ {0x50, 0, 0, 0x0000001b},
+ {0x54, 0, 0, 0x00000012},
+ {0x15, 0, 1, 0x00000012},
+ {0x6, 0, 0, 0x0000ffff},
+ {0x6, 0, 0, 0x00000000},
+ }, false, true},
+
+ // tcpdump -dd 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-ack'
+ {"tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-ack",
+ []BPFInstruction{
+ {0x28, 0, 0, 0x0000000c},
+ {0x15, 0, 9, 0x00000800},
+ {0x30, 0, 0, 0x00000017},
+ {0x15, 0, 7, 0x00000006},
+ {0x28, 0, 0, 0x00000014},
+ {0x45, 5, 0, 0x00001fff},
+ {0xb1, 0, 0, 0x0000000e},
+ {0x50, 0, 0, 0x0000001b},
+ {0x54, 0, 0, 0x00000012},
+ {0x15, 0, 1, 0x00000010},
+ {0x6, 0, 0, 0x0000ffff},
+ {0x6, 0, 0, 0x00000000},
+ }, false, true},
+
+ // tcpdump -dd 'udp'
+ {"udp",
+ []BPFInstruction{
+ {0x28, 0, 0, 0x0000000c},
+ {0x15, 0, 5, 0x000086dd},
+ {0x30, 0, 0, 0x00000014},
+ {0x15, 6, 0, 0x00000011},
+ {0x15, 0, 6, 0x0000002c},
+ {0x30, 0, 0, 0x00000036},
+ {0x15, 3, 4, 0x00000011},
+ {0x15, 0, 3, 0x00000800},
+ {0x30, 0, 0, 0x00000017},
+ {0x15, 0, 1, 0x00000011},
+ {0x6, 0, 0, 0x0000ffff},
+ {0x6, 0, 0, 0x00000000},
+ }, false, false},
+
+ {"", oversizedBpfInstructionBuffer[:], true, false},
+ } {
+ cntr++
+ data, ci, err := handle.ReadPacketData()
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ t.Log("Testing BpfInstruction filter", cntr)
+ if bpf, err := handle.NewBPFInstructionFilter(expected.BpfInstruction); err != nil {
+ if !expected.Error {
+ t.Error(err, "while compiling filter was unexpected")
+ }
+ } else if expected.Error {
+ t.Error("expected error but didn't see one")
+ } else if matches := bpf.Matches(ci, data); matches != expected.Result {
+ t.Error("Filter result was", matches, "but should be", expected.Result)
+ }
+
+ if expected.Filter != "" {
+ t.Log("Testing dead bpf filter", cntr)
+ if bpf, err := CompileBPFFilter(layers.LinkTypeEthernet, 65535, expected.Filter); err != nil {
+ if !expected.Error {
+ t.Error(err, "while compiling filter was unexpected")
+ }
+ } else if expected.Error {
+ t.Error("expected error but didn't see one")
+ } else {
+ if len(bpf) != len(expected.BpfInstruction) {
+ t.Errorf("expected %d instructions, got %d", len(expected.BpfInstruction), len(bpf))
+ }
+ for i := 0; i < len(bpf); i++ {
+ if bpf[i] != expected.BpfInstruction[i] {
+ t.Errorf("expected instruction %d = %d, got %d", i, expected.BpfInstruction[i], bpf[i])
+ }
+ }
+ }
+ }
+ }
+}
+
+func ExampleBPF() {
+ handle, err := OpenOffline("test_ethernet.pcap")
+ if err != nil {
+ log.Fatal(err)
+ }
+ synack, err := handle.NewBPF("tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)")
+ if err != nil {
+ log.Fatal(err)
+ }
+ syn, err := handle.NewBPF("tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn")
+ if err != nil {
+ log.Fatal(err)
+ }
+ for {
+ data, ci, err := handle.ReadPacketData()
+ switch {
+ case err == io.EOF:
+ return
+ case err != nil:
+ log.Fatal(err)
+ case synack.Matches(ci, data):
+ fmt.Println("SYN/ACK packet")
+ case syn.Matches(ci, data):
+ fmt.Println("SYN packet")
+ default:
+ fmt.Println("SYN flag not set")
+ }
+ }
+ // Output:
+ // SYN packet
+ // SYN/ACK packet
+ // SYN flag not set
+ // SYN flag not set
+ // SYN flag not set
+ // SYN flag not set
+ // SYN flag not set
+ // SYN flag not set
+ // SYN flag not set
+ // SYN flag not set
+ // SYN flag not set
+ // SYN flag not set
+ // SYN flag not set
+ // SYN flag not set
+ // SYN flag not set
+ // SYN flag not set
+}
diff --git a/vendor/github.com/google/gopacket/pcap/pcap_tester.go b/vendor/github.com/google/gopacket/pcap/pcap_tester.go
new file mode 100644
index 0000000..ee32690
--- /dev/null
+++ b/vendor/github.com/google/gopacket/pcap/pcap_tester.go
@@ -0,0 +1,109 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build ignore
+
+// This binary tests that PCAP packet capture is working correctly by issuing
+// HTTP requests, then making sure we actually capture data off the wire.
+package main
+
+import (
+ "errors"
+ "flag"
+ "fmt"
+ "log"
+ "net"
+ "net/http"
+ "os"
+ "time"
+
+ "github.com/google/gopacket/pcap"
+)
+
+var mode = flag.String("mode", "basic", "One of: basic,filtered,timestamp")
+
+func generatePackets() {
+ if resp, err := http.Get("http://code.google.com"); err != nil {
+ log.Printf("Could not get HTTP: %v", err)
+ } else {
+ resp.Body.Close()
+ }
+}
+
+func main() {
+ flag.Parse()
+ ifaces, err := net.Interfaces()
+ if err != nil {
+ log.Fatal(err)
+ }
+ for _, iface := range ifaces {
+ log.Printf("Trying capture on %q", iface.Name)
+ if err := tryCapture(iface); err != nil {
+ log.Printf("Error capturing on %q: %v", iface.Name, err)
+ } else {
+ log.Printf("Successfully captured on %q", iface.Name)
+ return
+ }
+ }
+ os.Exit(1)
+}
+
+func tryCapture(iface net.Interface) error {
+ if iface.Name[:2] == "lo" {
+ return errors.New("skipping loopback")
+ }
+ var h *pcap.Handle
+ var err error
+ switch *mode {
+ case "basic":
+ h, err = pcap.OpenLive(iface.Name, 65536, false, time.Second*3)
+ if err != nil {
+ return fmt.Errorf("openlive: %v", err)
+ }
+ defer h.Close()
+ case "filtered":
+ h, err = pcap.OpenLive(iface.Name, 65536, false, time.Second*3)
+ if err != nil {
+ return fmt.Errorf("openlive: %v", err)
+ }
+ defer h.Close()
+ if err := h.SetBPFFilter("port 80 or port 443"); err != nil {
+ return fmt.Errorf("setbpf: %v", err)
+ }
+ case "timestamp":
+ u, err := pcap.NewInactiveHandle(iface.Name)
+ if err != nil {
+ return err
+ }
+ defer u.CleanUp()
+ if err = u.SetSnapLen(65536); err != nil {
+ return err
+ } else if err = u.SetPromisc(false); err != nil {
+ return err
+ } else if err = u.SetTimeout(time.Second * 3); err != nil {
+ return err
+ }
+ sources := u.SupportedTimestamps()
+ if len(sources) == 0 {
+ return errors.New("no supported timestamp sources")
+ } else if err := u.SetTimestampSource(sources[0]); err != nil {
+ return fmt.Errorf("settimestampsource(%v): %v", sources[0], err)
+ } else if h, err = u.Activate(); err != nil {
+ return fmt.Errorf("could not activate: %v", err)
+ }
+ defer h.Close()
+ default:
+ panic("Invalid --mode: " + *mode)
+ }
+ go generatePackets()
+ h.ReadPacketData() // Do one dummy read to clear any timeouts.
+ data, ci, err := h.ReadPacketData()
+ if err != nil {
+ return fmt.Errorf("readpacketdata: %v", err)
+ }
+ log.Printf("Read packet, %v bytes, CI: %+v", len(data), ci)
+ return nil
+}
diff --git a/vendor/github.com/google/gopacket/pcap/pcap_unix.go b/vendor/github.com/google/gopacket/pcap/pcap_unix.go
new file mode 100644
index 0000000..b2a6dcd
--- /dev/null
+++ b/vendor/github.com/google/gopacket/pcap/pcap_unix.go
@@ -0,0 +1,71 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+//
+// +build !windows
+
+package pcap
+
+/*
+#include <stdlib.h>
+#include <pcap.h>
+
+// pcap_wait returns when the next packet is available or the timeout expires.
+// Since it uses pcap_get_selectable_fd, it will not work in Windows.
+int pcap_wait(pcap_t *p, int usec) {
+ fd_set fds;
+ int fd;
+ struct timeval tv;
+
+ fd = pcap_get_selectable_fd(p);
+ if(fd < 0) {
+ return fd;
+ }
+
+ FD_ZERO(&fds);
+ FD_SET(fd, &fds);
+
+ tv.tv_sec = 0;
+ tv.tv_usec = usec;
+
+ if(usec != 0) {
+ return select(fd+1, &fds, NULL, NULL, &tv);
+ }
+
+ // block indefinitely if no timeout provided
+ return select(fd+1, &fds, NULL, NULL, NULL);
+}
+*/
+import "C"
+
+import (
+ "errors"
+ "unsafe"
+)
+
+func (p *Handle) openLive() error {
+ buf := (*C.char)(C.calloc(errorBufferSize, 1))
+ defer C.free(unsafe.Pointer(buf))
+
+ // Change the device to non-blocking, we'll use pcap_wait to wait until the
+ // handle is ready to read.
+ if v := C.pcap_setnonblock(p.cptr, 1, buf); v == -1 {
+ return errors.New(C.GoString(buf))
+ }
+
+ return nil
+}
+
+// waitForPacket waits for a packet or for the timeout to expire.
+func (p *Handle) waitForPacket() {
+ // need to wait less than the read timeout according to pcap documentation.
+ // timeoutMillis rounds up to at least one millisecond so we can safely
+ // subtract up to a millisecond.
+ usec := timeoutMillis(p.timeout) * 1000
+ usec -= 100
+
+ C.pcap_wait(p.cptr, usec)
+}
diff --git a/vendor/github.com/google/gopacket/pcap/pcap_windows.go b/vendor/github.com/google/gopacket/pcap/pcap_windows.go
new file mode 100644
index 0000000..e3df123
--- /dev/null
+++ b/vendor/github.com/google/gopacket/pcap/pcap_windows.go
@@ -0,0 +1,23 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package pcap
+
+import (
+ "runtime"
+)
+
+func (p *Handle) openLive() error {
+ // do nothing
+ return nil
+}
+
+// waitForPacket waits for a packet or for the timeout to expire.
+func (p *Handle) waitForPacket() {
+ // can't use select() so instead just switch goroutines
+ runtime.Gosched()
+}
diff --git a/vendor/github.com/google/gopacket/pcap/pcapgo_test.go b/vendor/github.com/google/gopacket/pcap/pcapgo_test.go
new file mode 100644
index 0000000..4de018a
--- /dev/null
+++ b/vendor/github.com/google/gopacket/pcap/pcapgo_test.go
@@ -0,0 +1,56 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package pcap
+
+import (
+ "bytes"
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+ "github.com/google/gopacket/pcapgo"
+ "io/ioutil"
+ "reflect"
+ "testing"
+ "time"
+)
+
+func TestPCAPGoWrite(t *testing.T) {
+ f, err := ioutil.TempFile("", "pcapgo")
+ if err != nil {
+ t.Fatal(err)
+ }
+ data := []byte{0xab, 0xcd, 0xef, 0x01, 0x02, 0x03, 0x04}
+ ci := gopacket.CaptureInfo{
+ Timestamp: time.Unix(12345667, 1234567000),
+ Length: 700,
+ CaptureLength: len(data),
+ }
+ func() {
+ defer f.Close()
+ w := pcapgo.NewWriter(f)
+ if err := w.WriteFileHeader(65536, layers.LinkTypeEthernet); err != nil {
+ t.Fatal(err)
+ }
+ if err := w.WritePacket(ci, data); err != nil {
+ t.Fatal(err)
+ }
+ }()
+ h, err := OpenOffline(f.Name())
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer h.Close()
+ gotData, gotCI, err := h.ReadPacketData()
+ if err != nil {
+ t.Fatal("could not read first packet:", err)
+ }
+ if !bytes.Equal(gotData, data) {
+ t.Errorf("byte mismatch:\nwant: %v\n got: %v", data, gotData)
+ }
+ if !reflect.DeepEqual(ci, gotCI) {
+ t.Errorf("CI mismatch:\nwant: %v\n got: %v", ci, gotCI)
+ }
+}
diff --git a/vendor/github.com/google/gopacket/pcap/test_dns.pcap b/vendor/github.com/google/gopacket/pcap/test_dns.pcap
new file mode 100644
index 0000000..3a79f92
--- /dev/null
+++ b/vendor/github.com/google/gopacket/pcap/test_dns.pcap
Binary files differ
diff --git a/vendor/github.com/google/gopacket/pcap/test_ethernet.pcap b/vendor/github.com/google/gopacket/pcap/test_ethernet.pcap
new file mode 100644
index 0000000..1f8a87c
--- /dev/null
+++ b/vendor/github.com/google/gopacket/pcap/test_ethernet.pcap
Binary files differ
diff --git a/vendor/github.com/google/gopacket/pcap/test_loopback.pcap b/vendor/github.com/google/gopacket/pcap/test_loopback.pcap
new file mode 100644
index 0000000..ddeb82c
--- /dev/null
+++ b/vendor/github.com/google/gopacket/pcap/test_loopback.pcap
Binary files differ
diff --git a/vendor/github.com/google/gopacket/pcapgo/read.go b/vendor/github.com/google/gopacket/pcapgo/read.go
new file mode 100644
index 0000000..5acd06f
--- /dev/null
+++ b/vendor/github.com/google/gopacket/pcapgo/read.go
@@ -0,0 +1,155 @@
+// Copyright 2014 Damjan Cvetko. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package pcapgo
+
+import (
+ "encoding/binary"
+ "errors"
+ "fmt"
+ "io"
+ "time"
+
+ "bufio"
+ "compress/gzip"
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+)
+
+// Reader wraps an underlying io.Reader to read packet data in PCAP
+// format. See http://wiki.wireshark.org/Development/LibpcapFileFormat
+// for information on the file format.
+//
+// We currenty read v2.4 file format with nanosecond and microsecdond
+// timestamp resolution in little-endian and big-endian encoding.
+//
+// If the PCAP data is gzip compressed it is transparently uncompressed
+// by wrapping the given io.Reader with a gzip.Reader.
+type Reader struct {
+ r io.Reader
+ byteOrder binary.ByteOrder
+ nanoSecsFactor uint32
+ versionMajor uint16
+ versionMinor uint16
+ // timezone
+ // sigfigs
+ snaplen uint32
+ linkType layers.LinkType
+ // reusable buffer
+ buf [16]byte
+}
+
+const magicNanoseconds = 0xA1B23C4D
+const magicMicrosecondsBigendian = 0xD4C3B2A1
+const magicNanosecondsBigendian = 0x4D3CB2A1
+
+const magicGzip1 = 0x1f
+const magicGzip2 = 0x8b
+
+// NewReader returns a new reader object, for reading packet data from
+// the given reader. The reader must be open and header data is
+// read from it at this point.
+// If the file format is not supported an error is returned
+//
+// // Create new reader:
+// f, _ := os.Open("/tmp/file.pcap")
+// defer f.Close()
+// r, err := NewReader(f)
+// data, ci, err := r.ReadPacketData()
+func NewReader(r io.Reader) (*Reader, error) {
+ ret := Reader{r: r}
+ if err := ret.readHeader(); err != nil {
+ return nil, err
+ }
+ return &ret, nil
+}
+
+func (r *Reader) readHeader() error {
+ br := bufio.NewReader(r.r)
+ gzipMagic, err := br.Peek(2)
+ if err != nil {
+ return err
+ }
+
+ if gzipMagic[0] == magicGzip1 && gzipMagic[1] == magicGzip2 {
+ if r.r, err = gzip.NewReader(br); err != nil {
+ return err
+ }
+ } else {
+ r.r = br
+ }
+
+ buf := make([]byte, 24)
+ if n, err := io.ReadFull(r.r, buf); err != nil {
+ return err
+ } else if n < 24 {
+ return errors.New("Not enough data for read")
+ }
+ if magic := binary.LittleEndian.Uint32(buf[0:4]); magic == magicNanoseconds {
+ r.byteOrder = binary.LittleEndian
+ r.nanoSecsFactor = 1
+ } else if magic == magicNanosecondsBigendian {
+ r.byteOrder = binary.BigEndian
+ r.nanoSecsFactor = 1
+ } else if magic == magicMicroseconds {
+ r.byteOrder = binary.LittleEndian
+ r.nanoSecsFactor = 1000
+ } else if magic == magicMicrosecondsBigendian {
+ r.byteOrder = binary.BigEndian
+ r.nanoSecsFactor = 1000
+ } else {
+ return fmt.Errorf("Unknown magic %x", magic)
+ }
+ if r.versionMajor = r.byteOrder.Uint16(buf[4:6]); r.versionMajor != versionMajor {
+ return fmt.Errorf("Unknown major version %d", r.versionMajor)
+ }
+ if r.versionMinor = r.byteOrder.Uint16(buf[6:8]); r.versionMinor != versionMinor {
+ return fmt.Errorf("Unknown minor version %d", r.versionMinor)
+ }
+ // ignore timezone 8:12 and sigfigs 12:16
+ r.snaplen = r.byteOrder.Uint32(buf[16:20])
+ r.linkType = layers.LinkType(r.byteOrder.Uint32(buf[20:24]))
+ return nil
+}
+
+// ReadPacketData reads next packet from file.
+func (r *Reader) ReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {
+ if ci, err = r.readPacketHeader(); err != nil {
+ return
+ }
+ if ci.CaptureLength > int(r.snaplen) {
+ err = fmt.Errorf("capture length exceeds snap length: %d > %d", 16+ci.CaptureLength, r.snaplen)
+ return
+ }
+ data = make([]byte, ci.CaptureLength)
+ _, err = io.ReadFull(r.r, data)
+ return data, ci, err
+}
+
+func (r *Reader) readPacketHeader() (ci gopacket.CaptureInfo, err error) {
+ if _, err = io.ReadFull(r.r, r.buf[:]); err != nil {
+ return
+ }
+ ci.Timestamp = time.Unix(int64(r.byteOrder.Uint32(r.buf[0:4])), int64(r.byteOrder.Uint32(r.buf[4:8])*r.nanoSecsFactor)).UTC()
+ ci.CaptureLength = int(r.byteOrder.Uint32(r.buf[8:12]))
+ ci.Length = int(r.byteOrder.Uint32(r.buf[12:16]))
+ return
+}
+
+// LinkType returns network, as a layers.LinkType.
+func (r *Reader) LinkType() layers.LinkType {
+ return r.linkType
+}
+
+// Snaplen returns the snapshot length of the capture file.
+func (r *Reader) Snaplen() uint32 {
+ return r.snaplen
+}
+
+// Reader formater
+func (r *Reader) String() string {
+ return fmt.Sprintf("PcapFile maj: %x min: %x snaplen: %d linktype: %s", r.versionMajor, r.versionMinor, r.snaplen, r.linkType)
+}
diff --git a/vendor/github.com/google/gopacket/pcapgo/read_test.go b/vendor/github.com/google/gopacket/pcapgo/read_test.go
new file mode 100644
index 0000000..87bf7ab
--- /dev/null
+++ b/vendor/github.com/google/gopacket/pcapgo/read_test.go
@@ -0,0 +1,203 @@
+// Copyright 2014 Damjan Cvetko. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+package pcapgo
+
+import (
+ "bytes"
+ "testing"
+ "time"
+)
+
+// test header read
+func TestCreatePcapReader(t *testing.T) {
+ test := []byte{
+ 0xd4, 0xc3, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ }
+ buf := bytes.NewBuffer(test)
+ _, err := NewReader(buf)
+ if err != nil {
+ t.Error(err)
+ t.FailNow()
+ }
+}
+
+// test big endian file read
+func TestCreatePcapReaderBigEndian(t *testing.T) {
+ test := []byte{
+ 0xa1, 0xb2, 0xc3, 0xd4, 0x00, 0x02, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01,
+ }
+ buf := bytes.NewBuffer(test)
+ _, err := NewReader(buf)
+ if err != nil {
+ t.Error(err)
+ t.FailNow()
+ }
+}
+
+// test opening invalid data
+func TestCreatePcapReaderFail(t *testing.T) {
+ test := []byte{
+ 0xd0, 0xc3, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ }
+ buf := bytes.NewBuffer(test)
+ _, err := NewReader(buf)
+ if err == nil {
+ t.Error("Should fail but did not")
+ t.FailNow()
+ }
+}
+
+func TestPacket(t *testing.T) {
+ test := []byte{
+ 0xd4, 0xc3, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00, // magic, maj, min
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // tz, sigfigs
+ 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // snaplen, linkType
+ 0x5A, 0xCC, 0x1A, 0x54, 0x01, 0x00, 0x00, 0x00, // sec, usec
+ 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // cap len, full len
+ 0x01, 0x02, 0x03, 0x04, // data
+ }
+
+ buf := bytes.NewBuffer(test)
+ r, err := NewReader(buf)
+
+ data, ci, err := r.ReadPacketData()
+ if err != nil {
+ t.Error(err)
+ t.FailNow()
+ }
+ if !ci.Timestamp.Equal(time.Date(2014, 9, 18, 12, 13, 14, 1000, time.UTC)) {
+ t.Error("Invalid time read")
+ t.FailNow()
+ }
+ if ci.CaptureLength != 4 || ci.Length != 8 {
+ t.Error("Invalid CapLen or Len")
+ }
+ want := []byte{1, 2, 3, 4}
+ if !bytes.Equal(data, want) {
+ t.Errorf("buf mismatch:\nwant: %+v\ngot: %+v", want, data)
+ }
+}
+
+func TestPacketNano(t *testing.T) {
+ test := []byte{
+ 0x4d, 0x3c, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00, // magic, maj, min
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // tz, sigfigs
+ 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // snaplen, linkType
+ 0x5A, 0xCC, 0x1A, 0x54, 0x01, 0x00, 0x00, 0x00, // sec, usec
+ 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // cap len, full len
+ 0x01, 0x02, 0x03, 0x04, // data
+ }
+
+ buf := bytes.NewBuffer(test)
+ r, err := NewReader(buf)
+
+ data, ci, err := r.ReadPacketData()
+ if err != nil {
+ t.Error(err)
+ t.FailNow()
+ }
+ if !ci.Timestamp.Equal(time.Date(2014, 9, 18, 12, 13, 14, 1, time.UTC)) {
+ t.Error("Invalid time read")
+ t.FailNow()
+ }
+ if ci.CaptureLength != 4 || ci.Length != 8 {
+ t.Error("Invalid CapLen or Len")
+ }
+ want := []byte{1, 2, 3, 4}
+ if !bytes.Equal(data, want) {
+ t.Errorf("buf mismatch:\nwant: %+v\ngot: %+v", want, data)
+ }
+}
+
+func TestGzipPacket(t *testing.T) {
+ test := []byte{
+ 0x1f, 0x8b, 0x08, 0x08, 0x92, 0x4d, 0x81, 0x57,
+ 0x00, 0x03, 0x74, 0x65, 0x73, 0x74, 0x00, 0xbb,
+ 0x72, 0x78, 0xd3, 0x42, 0x26, 0x06, 0x16, 0x06,
+ 0x18, 0xf8, 0xff, 0x9f, 0x81, 0x81, 0x11, 0x48,
+ 0x47, 0x9d, 0x91, 0x0a, 0x01, 0xd1, 0x20, 0x19,
+ 0x0e, 0x20, 0x66, 0x64, 0x62, 0x66, 0x01, 0x00,
+ 0xe4, 0x76, 0x9b, 0x75, 0x2c, 0x00, 0x00, 0x00,
+ }
+ buf := bytes.NewBuffer(test)
+ r, err := NewReader(buf)
+ if err != nil {
+ t.Error("Unexpected error returned:", err)
+ t.FailNow()
+ }
+
+ data, ci, err := r.ReadPacketData()
+ if err != nil {
+ t.Error(err)
+ t.FailNow()
+ }
+ if !ci.Timestamp.Equal(time.Date(2014, 9, 18, 12, 13, 14, 1000, time.UTC)) {
+ t.Error("Invalid time read")
+ t.FailNow()
+ }
+ if ci.CaptureLength != 4 || ci.Length != 8 {
+ t.Error("Invalid CapLen or Len")
+ }
+ want := []byte{1, 2, 3, 4}
+ if !bytes.Equal(data, want) {
+ t.Errorf("buf mismatch:\nwant: %+v\ngot: %+v", want, data)
+ }
+}
+
+func TestTruncatedGzipPacket(t *testing.T) {
+ test := []byte{
+ 0x1f, 0x8b, 0x08,
+ }
+ buf := bytes.NewBuffer(test)
+ _, err := NewReader(buf)
+ if err == nil {
+ t.Error("Should fail but did not")
+ t.FailNow()
+ }
+}
+
+func TestPacketBufferReuse(t *testing.T) {
+ test := []byte{
+ 0xd4, 0xc3, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00, // magic, maj, min
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // tz, sigfigs
+ 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // snaplen, linkType
+ 0x5A, 0xCC, 0x1A, 0x54, 0x01, 0x00, 0x00, 0x00, // sec, usec
+ 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // cap len, full len
+ 0x01, 0x02, 0x03, 0x04, // data
+ 0x5A, 0xCC, 0x1A, 0x54, 0x01, 0x00, 0x00, 0x00, // sec, usec
+ 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // cap len, full len
+ 0x01, 0x02, 0x03, 0x04, // data
+ }
+
+ buf := bytes.NewBuffer(test)
+ r, err := NewReader(buf)
+
+ data1, _, err := r.ReadPacketData()
+ if err != nil {
+ t.Error(err)
+ t.FailNow()
+ }
+ if want := []byte{1, 2, 3, 4}; !bytes.Equal(data1, want) {
+ t.Errorf("buf mismatch:\nwant: %+v\ngot: %+v", want, data1)
+ }
+ data2, _, err := r.ReadPacketData()
+ if err != nil {
+ t.Error(err)
+ t.FailNow()
+ }
+ for i := range data1 {
+ data1[i] = 0xff // modify data1 after getting data2, make sure we don't overlap buffers.
+ }
+ if want := []byte{1, 2, 3, 4}; !bytes.Equal(data2, want) {
+ t.Errorf("buf mismatch:\nwant: %+v\ngot: %+v", want, data2)
+ }
+}
diff --git a/vendor/github.com/google/gopacket/pcapgo/write.go b/vendor/github.com/google/gopacket/pcapgo/write.go
new file mode 100644
index 0000000..bfc312f
--- /dev/null
+++ b/vendor/github.com/google/gopacket/pcapgo/write.go
@@ -0,0 +1,103 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// Package pcapgo provides some native PCAP support, not requiring
+// C libpcap to be installed.
+package pcapgo
+
+import (
+ "encoding/binary"
+ "fmt"
+ "io"
+ "time"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+)
+
+// Writer wraps an underlying io.Writer to write packet data in PCAP
+// format. See http://wiki.wireshark.org/Development/LibpcapFileFormat
+// for information on the file format.
+//
+// For those that care, we currently write v2.4 files with nanosecond
+// timestamp resolution and little-endian encoding.
+type Writer struct {
+ w io.Writer
+}
+
+const magicMicroseconds = 0xA1B2C3D4
+const versionMajor = 2
+const versionMinor = 4
+
+// NewWriter returns a new writer object, for writing packet data out
+// to the given writer. If this is a new empty writer (as opposed to
+// an append), you must call WriteFileHeader before WritePacket.
+//
+// // Write a new file:
+// f, _ := os.Create("/tmp/file.pcap")
+// w := pcapgo.NewWriter(f)
+// w.WriteFileHeader(65536, layers.LinkTypeEthernet) // new file, must do this.
+// w.WritePacket(gopacket.CaptureInfo{...}, data1)
+// f.Close()
+// // Append to existing file (must have same snaplen and linktype)
+// f2, _ := os.OpenFile("/tmp/file.pcap", os.O_APPEND, 0700)
+// w2 := pcapgo.NewWriter(f2)
+// // no need for file header, it's already written.
+// w2.WritePacket(gopacket.CaptureInfo{...}, data2)
+// f2.Close()
+func NewWriter(w io.Writer) *Writer {
+ return &Writer{w: w}
+}
+
+// WriteFileHeader writes a file header out to the writer.
+// This must be called exactly once per output.
+func (w *Writer) WriteFileHeader(snaplen uint32, linktype layers.LinkType) error {
+ var buf [24]byte
+ binary.LittleEndian.PutUint32(buf[0:4], magicMicroseconds)
+ binary.LittleEndian.PutUint16(buf[4:6], versionMajor)
+ binary.LittleEndian.PutUint16(buf[6:8], versionMinor)
+ // bytes 8:12 stay 0 (timezone = UTC)
+ // bytes 12:16 stay 0 (sigfigs is always set to zero, according to
+ // http://wiki.wireshark.org/Development/LibpcapFileFormat
+ binary.LittleEndian.PutUint32(buf[16:20], snaplen)
+ binary.LittleEndian.PutUint32(buf[20:24], uint32(linktype))
+ _, err := w.w.Write(buf[:])
+ return err
+}
+
+const nanosPerMicro = 1000
+
+func (w *Writer) writePacketHeader(ci gopacket.CaptureInfo) error {
+ var buf [16]byte
+
+ t := ci.Timestamp
+ if t.IsZero() {
+ t = time.Now()
+ }
+ secs := t.Unix()
+ usecs := t.Nanosecond() / nanosPerMicro
+ binary.LittleEndian.PutUint32(buf[0:4], uint32(secs))
+ binary.LittleEndian.PutUint32(buf[4:8], uint32(usecs))
+ binary.LittleEndian.PutUint32(buf[8:12], uint32(ci.CaptureLength))
+ binary.LittleEndian.PutUint32(buf[12:16], uint32(ci.Length))
+ _, err := w.w.Write(buf[:])
+ return err
+}
+
+// WritePacket writes the given packet data out to the file.
+func (w *Writer) WritePacket(ci gopacket.CaptureInfo, data []byte) error {
+ if ci.CaptureLength != len(data) {
+ return fmt.Errorf("capture length %d does not match data length %d", ci.CaptureLength, len(data))
+ }
+ if ci.CaptureLength > ci.Length {
+ return fmt.Errorf("invalid capture info %+v: capture length > length", ci)
+ }
+ if err := w.writePacketHeader(ci); err != nil {
+ return fmt.Errorf("error writing packet header: %v", err)
+ }
+ _, err := w.w.Write(data)
+ return err
+}
diff --git a/vendor/github.com/google/gopacket/pcapgo/write_test.go b/vendor/github.com/google/gopacket/pcapgo/write_test.go
new file mode 100644
index 0000000..5b87d6a
--- /dev/null
+++ b/vendor/github.com/google/gopacket/pcapgo/write_test.go
@@ -0,0 +1,71 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package pcapgo
+
+import (
+ "bytes"
+ "github.com/google/gopacket"
+ "testing"
+ "time"
+)
+
+func TestWriteHeader(t *testing.T) {
+ var buf bytes.Buffer
+ w := NewWriter(&buf)
+ w.WriteFileHeader(0x1234, 0x56)
+ want := []byte{
+ 0xd4, 0xc3, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x34, 0x12, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00,
+ }
+ if got := buf.Bytes(); !bytes.Equal(got, want) {
+ t.Errorf("buf mismatch:\nwant: %+v\ngot: %+v", want, got)
+ }
+}
+
+func TestWritePacket(t *testing.T) {
+ ci := gopacket.CaptureInfo{
+ Timestamp: time.Unix(0x01020304, 0xAA*1000),
+ Length: 0xABCD,
+ CaptureLength: 10,
+ }
+ data := []byte{9, 8, 7, 6, 5, 4, 3, 2, 1, 0}
+ var buf bytes.Buffer
+ w := NewWriter(&buf)
+ w.WritePacket(ci, data)
+ want := []byte{
+ 0x04, 0x03, 0x02, 0x01, 0xAA, 0x00, 0x00, 0x00,
+ 0x0A, 0x00, 0x00, 0x00, 0xCD, 0xAB, 0x00, 0x00,
+ 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ }
+ if got := buf.Bytes(); !bytes.Equal(got, want) {
+ t.Errorf("buf mismatch:\nwant: %+v\ngot: %+v", want, got)
+ }
+}
+
+func TestCaptureInfoErrors(t *testing.T) {
+ data := []byte{1, 2, 3, 4}
+ ts := time.Unix(0, 0)
+ for _, test := range []gopacket.CaptureInfo{
+ gopacket.CaptureInfo{
+ Timestamp: ts,
+ Length: 5,
+ CaptureLength: 5,
+ },
+ gopacket.CaptureInfo{
+ Timestamp: ts,
+ Length: 3,
+ CaptureLength: 4,
+ },
+ } {
+ var buf bytes.Buffer
+ w := NewWriter(&buf)
+ if err := w.WritePacket(test, data); err == nil {
+ t.Errorf("CaptureInfo %+v should have error", test)
+ }
+ }
+}
diff --git a/vendor/github.com/google/gopacket/pfring/doc.go b/vendor/github.com/google/gopacket/pfring/doc.go
new file mode 100644
index 0000000..32baaf6
--- /dev/null
+++ b/vendor/github.com/google/gopacket/pfring/doc.go
@@ -0,0 +1,58 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+/*Package pfring wraps the PF_RING C library for Go.
+
+PF_RING is a high-performance packet capture library written by ntop.org (see
+http://www.ntop.org/products/pf_ring/). This library allows you to utilize the
+PF_RING library with gopacket to read packet data and decode it.
+
+This package is meant to be used with its parent,
+http://github.com/google/gopacket, although it can also be used independently
+if you just want to get packet data from the wire.
+
+Simple Example
+
+This is probably the simplest code you can use to start getting packets through
+pfring:
+
+ if ring, err := pfring.NewRing("eth0", 65536, pfring.FlagPromisc); err != nil {
+ panic(err)
+ } else if err := ring.SetBPFFilter("tcp and port 80"); err != nil { // optional
+ panic(err)
+ } else if err := ring.Enable(); err != nil { // Must do this!, or you get no packets!
+ panic(err)
+ } else {
+ packetSource := gopacket.NewPacketSource(ring, layers.LinkTypeEthernet)
+ for packet := range packetSource.Packets() {
+ handlePacket(packet) // Do something with a packet here.
+ }
+ }
+
+Pfring Tweaks
+
+PF_RING has a ton of optimizations and tweaks to make sure you get just the
+packets you want. For example, if you're only using pfring to read packets,
+consider running:
+
+ ring.SetSocketMode(pfring.ReadOnly)
+
+If you only care about packets received on your interface (not those transmitted
+by the interface), you can run:
+
+ ring.SetDirection(pfring.ReceiveOnly)
+
+Pfring Clusters
+
+PF_RING has an idea of 'clusters', where multiple applications can all read from
+the same cluster, and PF_RING will multiplex packets over that cluster such that
+only one application receives each packet. We won't discuss this mechanism in
+too much more detail (see the ntop.org docs for more info), but here's how to
+utilize this with the pfring go library:
+
+ ring.SetCluster(1, pfring.ClusterPerFlow5Tuple)
+*/
+package pfring
diff --git a/vendor/github.com/google/gopacket/pfring/pfring.go b/vendor/github.com/google/gopacket/pfring/pfring.go
new file mode 100644
index 0000000..1d2fa68
--- /dev/null
+++ b/vendor/github.com/google/gopacket/pfring/pfring.go
@@ -0,0 +1,343 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package pfring
+
+/*
+#cgo LDFLAGS: -lpfring -lpcap
+#include <stdlib.h>
+#include <pfring.h>
+#include <linux/pf_ring.h>
+
+int pfring_readpacketdatato_wrapper(
+ pfring* ring,
+ u_char* buffer,
+ u_int buffer_len,
+ struct pfring_pkthdr* hdr) {
+ // We can't pass a Go pointer to a Go pointer which means we can't pass
+ // buffer as a uchar**, like pfring_recv wants, for ReadPacketDataTo. So,
+ // this wrapper does the pointer conversion in C code. Since this isn't
+ // zero-copy, it turns out that the pointer-to-pointer part of things isn't
+ // actually used anyway.
+ return pfring_recv(ring, &buffer, buffer_len, hdr, 1);
+}
+*/
+import "C"
+
+// NOTE: If you install PF_RING with non-standard options, you may also need
+// to use LDFLAGS -lnuma and/or -lrt. Both have been reported necessary if
+// PF_RING is configured with --disable-bpf.
+
+import (
+ "fmt"
+ "net"
+ "os"
+ "strconv"
+ "sync"
+ "time"
+ "unsafe"
+
+ "github.com/google/gopacket"
+)
+
+const errorBufferSize = 256
+
+// Ring provides a handle to a pf_ring.
+type Ring struct {
+ // cptr is the handle for the actual pcap C object.
+ cptr *C.pfring
+ snaplen int
+ useExtendedPacketHeader bool
+ interfaceIndex int
+ mu sync.Mutex
+ // Since pointers to these objects are passed into a C function, if
+ // they're declared locally then the Go compiler thinks they may have
+ // escaped into C-land, so it allocates them on the heap. This causes a
+ // huge memory hit, so to handle that we store them here instead.
+ pkthdr C.struct_pfring_pkthdr
+ bufPtr *C.u_char
+}
+
+// Flag provides a set of boolean flags to use when creating a new ring.
+type Flag uint32
+
+// Set of flags that can be passed (OR'd together) to NewRing.
+const (
+ FlagReentrant Flag = C.PF_RING_REENTRANT
+ FlagLongHeader Flag = C.PF_RING_LONG_HEADER
+ FlagPromisc Flag = C.PF_RING_PROMISC
+ FlagDNASymmetricRSS Flag = C.PF_RING_DNA_SYMMETRIC_RSS
+ FlagTimestamp Flag = C.PF_RING_TIMESTAMP
+ FlagHWTimestamp Flag = C.PF_RING_HW_TIMESTAMP
+)
+
+// NewRing creates a new PFRing. Note that when the ring is initially created,
+// it is disabled. The caller must call Enable to start receiving packets.
+// The caller should call Close on the given ring when finished with it.
+func NewRing(device string, snaplen uint32, flags Flag) (ring *Ring, _ error) {
+ dev := C.CString(device)
+ defer C.free(unsafe.Pointer(dev))
+
+ cptr, err := C.pfring_open(dev, C.u_int32_t(snaplen), C.u_int32_t(flags))
+ if cptr == nil || err != nil {
+ return nil, fmt.Errorf("pfring NewRing error: %v", err)
+ }
+ ring = &Ring{cptr: cptr, snaplen: int(snaplen)}
+
+ if flags&FlagLongHeader == FlagLongHeader {
+ ring.useExtendedPacketHeader = true
+ } else {
+ ifc, err := net.InterfaceByName(device)
+ if err == nil {
+ ring.interfaceIndex = ifc.Index
+ }
+ }
+ ring.SetApplicationName(os.Args[0])
+ return
+}
+
+// Close closes the given Ring. After this call, the Ring should no longer be
+// used.
+func (r *Ring) Close() {
+ C.pfring_close(r.cptr)
+}
+
+// NextResult is the return code from a call to Next.
+type NextResult int32
+
+// Set of results that could be returned from a call to get another packet.
+const (
+ NextNoPacketNonblocking NextResult = 0
+ NextError NextResult = -1
+ NextOk NextResult = 1
+ NextNotEnabled NextResult = -7
+)
+
+// NextResult implements the error interface.
+func (n NextResult) Error() string {
+ switch n {
+ case NextNoPacketNonblocking:
+ return "No packet available, nonblocking socket"
+ case NextError:
+ return "Generic error"
+ case NextOk:
+ return "Success (not an error)"
+ case NextNotEnabled:
+ return "Ring not enabled"
+ }
+ return strconv.Itoa(int(n))
+}
+
+// ReadPacketDataTo reads packet data into a user-supplied buffer.
+// This function ignores snaplen and instead reads up to the length of the
+// passed-in slice.
+// The number of bytes read into data will be returned in ci.CaptureLength.
+func (r *Ring) ReadPacketDataTo(data []byte) (ci gopacket.CaptureInfo, err error) {
+ // This tricky bufPtr points to the start of our slice data, so pfring_recv
+ // will actually write directly into our Go slice. Nice!
+ r.mu.Lock()
+ r.bufPtr = (*C.u_char)(unsafe.Pointer(&data[0]))
+ result := NextResult(C.pfring_readpacketdatato_wrapper(r.cptr, r.bufPtr, C.u_int(len(data)), &r.pkthdr))
+ if result != NextOk {
+ err = result
+ r.mu.Unlock()
+ return
+ }
+ ci.Timestamp = time.Unix(int64(r.pkthdr.ts.tv_sec),
+ int64(r.pkthdr.ts.tv_usec)*1000) // convert micros to nanos
+ ci.CaptureLength = int(r.pkthdr.caplen)
+ ci.Length = int(r.pkthdr.len)
+ if r.useExtendedPacketHeader {
+ ci.InterfaceIndex = int(r.pkthdr.extended_hdr.if_index)
+ } else {
+ ci.InterfaceIndex = r.interfaceIndex
+ }
+ r.mu.Unlock()
+ return
+}
+
+// ReadPacketData returns the next packet read from the pcap handle, along with an error
+// code associated with that packet. If the packet is read successfully, the
+// returned error is nil.
+func (r *Ring) ReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {
+ data = make([]byte, r.snaplen)
+ ci, err = r.ReadPacketDataTo(data)
+ if err != nil {
+ data = nil
+ return
+ }
+ data = data[:ci.CaptureLength]
+ return
+}
+
+// ClusterType is a type of clustering used when balancing across multiple
+// rings.
+type ClusterType C.cluster_type
+
+const (
+ // ClusterPerFlow clusters by <src ip, src port, dst ip, dst port, proto,
+ // vlan>
+ ClusterPerFlow ClusterType = C.cluster_per_flow
+ // ClusterRoundRobin round-robins packets between applications, ignoring
+ // packet information.
+ ClusterRoundRobin ClusterType = C.cluster_round_robin
+ // ClusterPerFlow2Tuple clusters by <src ip, dst ip>
+ ClusterPerFlow2Tuple ClusterType = C.cluster_per_flow_2_tuple
+ // ClusterPerFlow4Tuple clusters by <src ip, src port, dst ip, dst port>
+ ClusterPerFlow4Tuple ClusterType = C.cluster_per_flow_4_tuple
+ // ClusterPerFlow5Tuple clusters by <src ip, src port, dst ip, dst port,
+ // proto>
+ ClusterPerFlow5Tuple ClusterType = C.cluster_per_flow_5_tuple
+ // ClusterPerFlowTCP5Tuple acts like ClusterPerFlow5Tuple for TCP packets and
+ // like ClusterPerFlow2Tuple for all other packets.
+ ClusterPerFlowTCP5Tuple ClusterType = C.cluster_per_flow_tcp_5_tuple
+)
+
+// SetCluster sets which cluster the ring should be part of, and the cluster
+// type to use.
+func (r *Ring) SetCluster(cluster int, typ ClusterType) error {
+ if rv := C.pfring_set_cluster(r.cptr, C.u_int(cluster), C.cluster_type(typ)); rv != 0 {
+ return fmt.Errorf("Unable to set cluster, got error code %d", rv)
+ }
+ return nil
+}
+
+// RemoveFromCluster removes the ring from the cluster it was put in with
+// SetCluster.
+func (r *Ring) RemoveFromCluster() error {
+ if rv := C.pfring_remove_from_cluster(r.cptr); rv != 0 {
+ return fmt.Errorf("Unable to remove from cluster, got error code %d", rv)
+ }
+ return nil
+}
+
+// SetSamplingRate sets the sampling rate to 1/<rate>.
+func (r *Ring) SetSamplingRate(rate int) error {
+ if rv := C.pfring_set_sampling_rate(r.cptr, C.u_int32_t(rate)); rv != 0 {
+ return fmt.Errorf("Unable to set sampling rate, got error code %d", rv)
+ }
+ return nil
+}
+
+// SetBPFFilter sets the BPF filter for the ring.
+func (r *Ring) SetBPFFilter(bpfFilter string) error {
+ filter := C.CString(bpfFilter)
+ defer C.free(unsafe.Pointer(filter))
+ if rv := C.pfring_set_bpf_filter(r.cptr, filter); rv != 0 {
+ return fmt.Errorf("Unable to set BPF filter, got error code %d", rv)
+ }
+ return nil
+}
+
+// RemoveBPFFilter removes the BPF filter from the ring.
+func (r *Ring) RemoveBPFFilter() error {
+ if rv := C.pfring_remove_bpf_filter(r.cptr); rv != 0 {
+ return fmt.Errorf("Unable to remove BPF filter, got error code %d", rv)
+ }
+ return nil
+}
+
+// WritePacketData uses the ring to send raw packet data to the interface.
+func (r *Ring) WritePacketData(data []byte) error {
+ buf := (*C.char)(unsafe.Pointer(&data[0]))
+ if rv := C.pfring_send(r.cptr, buf, C.u_int(len(data)), 1); rv < 0 {
+ return fmt.Errorf("Unable to send packet data, got error code %d", rv)
+ }
+ return nil
+}
+
+// Enable enables the given ring. This function MUST be called on each new
+// ring after it has been set up, or that ring will NOT receive packets.
+func (r *Ring) Enable() error {
+ if rv := C.pfring_enable_ring(r.cptr); rv != 0 {
+ return fmt.Errorf("Unable to enable ring, got error code %d", rv)
+ }
+ return nil
+}
+
+// Disable disables the given ring. After this call, it will no longer receive
+// packets.
+func (r *Ring) Disable() error {
+ if rv := C.pfring_disable_ring(r.cptr); rv != 0 {
+ return fmt.Errorf("Unable to disable ring, got error code %d", rv)
+ }
+ return nil
+}
+
+// Stats provides simple statistics on a ring.
+type Stats struct {
+ Received, Dropped uint64
+}
+
+// Stats returns statistsics for the ring.
+func (r *Ring) Stats() (s Stats, err error) {
+ var stats C.pfring_stat
+ if rv := C.pfring_stats(r.cptr, &stats); rv != 0 {
+ err = fmt.Errorf("Unable to get ring stats, got error code %d", rv)
+ return
+ }
+ s.Received = uint64(stats.recv)
+ s.Dropped = uint64(stats.drop)
+ return
+}
+
+// Direction is a simple enum to set which packets (TX, RX, or both) a ring
+// captures.
+type Direction C.packet_direction
+
+const (
+ // TransmitOnly will only capture packets transmitted by the ring's
+ // interface(s).
+ TransmitOnly Direction = C.tx_only_direction
+ // ReceiveOnly will only capture packets received by the ring's
+ // interface(s).
+ ReceiveOnly Direction = C.rx_only_direction
+ // ReceiveAndTransmit will capture both received and transmitted packets on
+ // the ring's interface(s).
+ ReceiveAndTransmit Direction = C.rx_and_tx_direction
+)
+
+// SetDirection sets which packets should be captured by the ring.
+func (r *Ring) SetDirection(d Direction) error {
+ if rv := C.pfring_set_direction(r.cptr, C.packet_direction(d)); rv != 0 {
+ return fmt.Errorf("Unable to set ring direction, got error code %d", rv)
+ }
+ return nil
+}
+
+// SocketMode is an enum for setting whether a ring should read, write, or both.
+type SocketMode C.socket_mode
+
+const (
+ // WriteOnly sets up the ring to only send packets (Inject), not read them.
+ WriteOnly SocketMode = C.send_only_mode
+ // ReadOnly sets up the ring to only receive packets (ReadPacketData), not
+ // send them.
+ ReadOnly SocketMode = C.recv_only_mode
+ // WriteAndRead sets up the ring to both send and receive packets.
+ WriteAndRead SocketMode = C.send_and_recv_mode
+)
+
+// SetSocketMode sets the mode of the ring socket to send, receive, or both.
+func (r *Ring) SetSocketMode(s SocketMode) error {
+ if rv := C.pfring_set_socket_mode(r.cptr, C.socket_mode(s)); rv != 0 {
+ return fmt.Errorf("Unable to set socket mode, got error code %d", rv)
+ }
+ return nil
+}
+
+// SetApplicationName sets a string name to the ring. This name is available in
+// /proc stats for pf_ring. By default, NewRing automatically calls this with
+// argv[0].
+func (r *Ring) SetApplicationName(name string) error {
+ buf := C.CString(name)
+ defer C.free(unsafe.Pointer(buf))
+ if rv := C.pfring_set_application_name(r.cptr, buf); rv != 0 {
+ return fmt.Errorf("Unable to set ring application name, got error code %d", rv)
+ }
+ return nil
+}
diff --git a/vendor/github.com/google/gopacket/reassembly/cap2test.go b/vendor/github.com/google/gopacket/reassembly/cap2test.go
new file mode 100644
index 0000000..1d43f1d
--- /dev/null
+++ b/vendor/github.com/google/gopacket/reassembly/cap2test.go
@@ -0,0 +1,105 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build ignore
+
+package main
+
+import (
+ "bytes"
+ "flag"
+ "fmt"
+ "log"
+ "os"
+ "strings"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+ "github.com/google/gopacket/pcap"
+)
+
+var input = flag.String("i", "", "Input filename")
+
+func main() {
+ var handler *pcap.Handle
+ var err error
+ flag.Parse()
+ if *input == "" {
+ log.Fatalf("Please specify input filename")
+ }
+ if handler, err = pcap.OpenOffline(*input); err != nil {
+ log.Fatalf("Failed to open: %s: %s", *input, err)
+ }
+ args := flag.Args()
+ if len(args) > 0 {
+ filter := strings.Join(args, " ")
+ if err := handler.SetBPFFilter(filter); err != nil {
+ log.Fatalf("Failed to set BPF filter \"%s\": %s", filter, err)
+ }
+ handler.Stats()
+ }
+ var decoder gopacket.Decoder
+ var ok bool
+ linkType := fmt.Sprintf("%s", handler.LinkType())
+ if decoder, ok = gopacket.DecodersByLayerName[linkType]; !ok {
+ log.Fatalf("Failed to find decoder to pcap's linktype %s", linkType)
+ }
+ source := gopacket.NewPacketSource(handler, decoder)
+ count := uint64(0)
+ pktNonTcp := uint64(0)
+ pktTcp := uint64(0)
+ fmt.Println("test([]testSequence{")
+ for packet := range source.Packets() {
+ count++
+ tcp := packet.Layer(layers.LayerTypeTCP)
+ if tcp == nil {
+ pktNonTcp++
+ continue
+ } else {
+ pktTcp++
+ tcp := tcp.(*layers.TCP)
+ //fmt.Printf("packet: %s\n", tcp)
+ var b bytes.Buffer
+ b.WriteString("{\n")
+ // TCP
+ b.WriteString("tcp: layers.TCP{\n")
+ if tcp.SYN {
+ b.WriteString(" SYN: true,\n")
+ }
+ if tcp.ACK {
+ b.WriteString(" ACK: true,\n")
+ }
+ if tcp.RST {
+ b.WriteString(" RST: true,\n")
+ }
+ if tcp.FIN {
+ b.WriteString(" FIN: true,\n")
+ }
+ b.WriteString(fmt.Sprintf(" SrcPort: %d,\n", tcp.SrcPort))
+ b.WriteString(fmt.Sprintf(" DstPort: %d,\n", tcp.DstPort))
+ b.WriteString(fmt.Sprintf(" Seq: %d,\n", tcp.Seq))
+ b.WriteString(fmt.Sprintf(" Ack: %d,\n", tcp.Ack))
+ b.WriteString(" BaseLayer: layers.BaseLayer{Payload: []byte{")
+ for _, p := range tcp.Payload {
+ b.WriteString(fmt.Sprintf("%d,", p))
+ }
+ b.WriteString("}},\n")
+ b.WriteString("},\n")
+ // CaptureInfo
+ b.WriteString("ci: gopacket.CaptureInfo{\n")
+ ts := packet.Metadata().CaptureInfo.Timestamp
+ b.WriteString(fmt.Sprintf(" Timestamp: time.Unix(%d,%d),\n", ts.Unix(), ts.Nanosecond()))
+ b.WriteString("},\n")
+ // Struct
+ b.WriteString("},\n")
+ fmt.Print(b.String())
+ }
+
+ }
+ fmt.Println("})")
+
+ fmt.Fprintf(os.Stderr, "Total: %d, TCP: %d, non-TCP: %d\n", count, pktTcp, pktNonTcp)
+}
diff --git a/vendor/github.com/google/gopacket/reassembly/memory.go b/vendor/github.com/google/gopacket/reassembly/memory.go
new file mode 100644
index 0000000..c1b2ae7
--- /dev/null
+++ b/vendor/github.com/google/gopacket/reassembly/memory.go
@@ -0,0 +1,254 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package reassembly
+
+import (
+ "flag"
+ "log"
+ "sync"
+ "time"
+
+ "github.com/google/gopacket/layers"
+)
+
+var 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.")
+
+/*
+ * pageCache
+ */
+// pageCache is a concurrency-unsafe store of page objects we use to avoid
+// memory allocation as much as we can.
+type pageCache struct {
+ free []*page
+ pcSize int
+ size, used int
+ pageRequests int64
+ ops int
+ nextShrink int
+}
+
+const initialAllocSize = 1024
+
+func newPageCache() *pageCache {
+ pc := &pageCache{
+ free: make([]*page, 0, initialAllocSize),
+ pcSize: initialAllocSize,
+ }
+ pc.grow()
+ return pc
+}
+
+// grow exponentially increases the size of our page cache as much as necessary.
+func (c *pageCache) grow() {
+ pages := make([]page, c.pcSize)
+ c.size += c.pcSize
+ for i := range pages {
+ c.free = append(c.free, &pages[i])
+ }
+ if *memLog {
+ log.Println("PageCache: created", c.pcSize, "new pages, size:", c.size, "cap:", cap(c.free), "len:", len(c.free))
+ }
+ // control next shrink attempt
+ c.nextShrink = c.pcSize
+ c.ops = 0
+ // prepare for next alloc
+ c.pcSize *= 2
+}
+
+// Remove references to unused pages to let GC collect them
+// Note: memory used by c.free itself it not collected.
+func (c *pageCache) tryShrink() {
+ var min = c.pcSize / 2
+ if min < initialAllocSize {
+ min = initialAllocSize
+ }
+ if len(c.free) <= min {
+ return
+ }
+ for i := range c.free[min:] {
+ c.free[min+i] = nil
+ }
+ c.size -= len(c.free) - min
+ c.free = c.free[:min]
+ c.pcSize = min
+}
+
+// next returns a clean, ready-to-use page object.
+func (c *pageCache) next(ts time.Time) (p *page) {
+ if *memLog {
+ c.pageRequests++
+ if c.pageRequests&0xFFFF == 0 {
+ log.Println("PageCache:", c.pageRequests, "requested,", c.used, "used,", len(c.free), "free")
+ }
+ }
+ if len(c.free) == 0 {
+ c.grow()
+ }
+ i := len(c.free) - 1
+ p, c.free = c.free[i], c.free[:i]
+ p.seen = ts
+ p.bytes = p.buf[:0]
+ c.used++
+ if *memLog {
+ log.Printf("allocator returns %s\n", p)
+ }
+ c.ops++
+ if c.ops > c.nextShrink {
+ c.ops = 0
+ c.tryShrink()
+ }
+
+ return p
+}
+
+// replace replaces a page into the pageCache.
+func (c *pageCache) replace(p *page) {
+ c.used--
+ if *memLog {
+ log.Printf("replacing %s\n", p)
+ }
+ p.prev = nil
+ p.next = nil
+ c.free = append(c.free, p)
+}
+
+/*
+ * StreamPool
+ */
+
+// StreamPool stores all streams created by Assemblers, allowing multiple
+// assemblers to work together on stream processing while enforcing the fact
+// that a single stream receives its data serially. It is safe
+// for concurrency, usable by multiple Assemblers at once.
+//
+// StreamPool handles the creation and storage of Stream objects used by one or
+// more Assembler objects. When a new TCP stream is found by an Assembler, it
+// creates an associated Stream by calling its StreamFactory's New method.
+// Thereafter (until the stream is closed), that Stream object will receive
+// assembled TCP data via Assembler's calls to the stream's Reassembled
+// function.
+//
+// Like the Assembler, StreamPool attempts to minimize allocation. Unlike the
+// Assembler, though, it does have to do some locking to make sure that the
+// connection objects it stores are accessible to multiple Assemblers.
+type StreamPool struct {
+ conns map[key]*connection
+ users int
+ mu sync.RWMutex
+ factory StreamFactory
+ free []*connection
+ all [][]connection
+ nextAlloc int
+ newConnectionCount int64
+}
+
+func (p *StreamPool) grow() {
+ conns := make([]connection, p.nextAlloc)
+ p.all = append(p.all, conns)
+ for i := range conns {
+ p.free = append(p.free, &conns[i])
+ }
+ if *memLog {
+ log.Println("StreamPool: created", p.nextAlloc, "new connections")
+ }
+ p.nextAlloc *= 2
+}
+
+// Dump logs all connections
+func (p *StreamPool) Dump() {
+ p.mu.Lock()
+ defer p.mu.Unlock()
+ log.Printf("Remaining %d connections: ", len(p.conns))
+ for _, conn := range p.conns {
+ log.Printf("%v %s", conn.key, conn)
+ }
+}
+
+func (p *StreamPool) remove(conn *connection) {
+ p.mu.Lock()
+ if _, ok := p.conns[conn.key]; ok {
+ delete(p.conns, conn.key)
+ p.free = append(p.free, conn)
+ }
+ p.mu.Unlock()
+}
+
+// NewStreamPool creates a new connection pool. Streams will
+// be created as necessary using the passed-in StreamFactory.
+func NewStreamPool(factory StreamFactory) *StreamPool {
+ return &StreamPool{
+ conns: make(map[key]*connection, initialAllocSize),
+ free: make([]*connection, 0, initialAllocSize),
+ factory: factory,
+ nextAlloc: initialAllocSize,
+ }
+}
+
+func (p *StreamPool) connections() []*connection {
+ p.mu.RLock()
+ conns := make([]*connection, 0, len(p.conns))
+ for _, conn := range p.conns {
+ conns = append(conns, conn)
+ }
+ p.mu.RUnlock()
+ return conns
+}
+
+func (p *StreamPool) newConnection(k key, s Stream, ts time.Time) (c *connection, h *halfconnection, r *halfconnection) {
+ if *memLog {
+ p.newConnectionCount++
+ if p.newConnectionCount&0x7FFF == 0 {
+ log.Println("StreamPool:", p.newConnectionCount, "requests,", len(p.conns), "used,", len(p.free), "free")
+ }
+ }
+ if len(p.free) == 0 {
+ p.grow()
+ }
+ index := len(p.free) - 1
+ c, p.free = p.free[index], p.free[:index]
+ c.reset(k, s, ts)
+ return c, &c.c2s, &c.s2c
+}
+
+func (p *StreamPool) getHalf(k key) (*connection, *halfconnection, *halfconnection) {
+ conn := p.conns[k]
+ if conn != nil {
+ return conn, &conn.c2s, &conn.s2c
+ }
+ rk := k.Reverse()
+ conn = p.conns[rk]
+ if conn != nil {
+ return conn, &conn.s2c, &conn.c2s
+ }
+ return nil, nil, nil
+}
+
+// getConnection returns a connection. If end is true and a connection
+// does not already exist, returns nil. This allows us to check for a
+// connection without actually creating one if it doesn't already exist.
+func (p *StreamPool) getConnection(k key, end bool, ts time.Time, tcp *layers.TCP, ac AssemblerContext) (*connection, *halfconnection, *halfconnection) {
+ p.mu.RLock()
+ conn, half, rev := p.getHalf(k)
+ p.mu.RUnlock()
+ if end || conn != nil {
+ return conn, half, rev
+ }
+ s := p.factory.New(k[0], k[1], tcp, ac)
+ p.mu.Lock()
+ defer p.mu.Unlock()
+ conn, half, rev = p.newConnection(k, s, ts)
+ conn2, half2, rev2 := p.getHalf(k)
+ if conn2 != nil {
+ if conn2.key != k {
+ panic("FIXME: other dir added in the meantime...")
+ }
+ // FIXME: delete s ?
+ return conn2, half2, rev2
+ }
+ p.conns[k] = conn
+ return conn, half, rev
+}
diff --git a/vendor/github.com/google/gopacket/reassembly/tcpassembly.go b/vendor/github.com/google/gopacket/reassembly/tcpassembly.go
new file mode 100644
index 0000000..bdf0deb
--- /dev/null
+++ b/vendor/github.com/google/gopacket/reassembly/tcpassembly.go
@@ -0,0 +1,1311 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// Package reassembly provides TCP stream re-assembly.
+//
+// The reassembly package implements uni-directional TCP reassembly, for use in
+// packet-sniffing applications. The caller reads packets off the wire, then
+// presents them to an Assembler in the form of gopacket layers.TCP packets
+// (github.com/google/gopacket, github.com/google/gopacket/layers).
+//
+// The Assembler uses a user-supplied
+// StreamFactory to create a user-defined Stream interface, then passes packet
+// data in stream order to that object. A concurrency-safe StreamPool keeps
+// track of all current Streams being reassembled, so multiple Assemblers may
+// run at once to assemble packets while taking advantage of multiple cores.
+//
+// TODO: Add simplest example
+package reassembly
+
+import (
+ "encoding/hex"
+ "flag"
+ "fmt"
+ "log"
+ "sync"
+ "time"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+)
+
+// TODO:
+// - push to Stream on Ack
+// - implement chunked (cheap) reads and Reader() interface
+// - better organize file: split files: 'mem', 'misc' (seq + flow)
+
+var defaultDebug = false
+
+var 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)")
+
+const invalidSequence = -1
+const uint32Max = 0xFFFFFFFF
+
+// Sequence is a TCP sequence number. It provides a few convenience functions
+// for handling TCP wrap-around. The sequence should always be in the range
+// [0,0xFFFFFFFF]... its other bits are simply used in wrap-around calculations
+// and should never be set.
+type Sequence int64
+
+// Difference defines an ordering for comparing TCP sequences that's safe for
+// roll-overs. It returns:
+// > 0 : if t comes after s
+// < 0 : if t comes before s
+// 0 : if t == s
+// The number returned is the sequence difference, so 4.Difference(8) will
+// return 4.
+//
+// It handles rollovers by considering any sequence in the first quarter of the
+// uint32 space to be after any sequence in the last quarter of that space, thus
+// wrapping the uint32 space.
+func (s Sequence) Difference(t Sequence) int {
+ if s > uint32Max-uint32Max/4 && t < uint32Max/4 {
+ t += uint32Max
+ } else if t > uint32Max-uint32Max/4 && s < uint32Max/4 {
+ s += uint32Max
+ }
+ return int(t - s)
+}
+
+// Add adds an integer to a sequence and returns the resulting sequence.
+func (s Sequence) Add(t int) Sequence {
+ return (s + Sequence(t)) & uint32Max
+}
+
+// TCPAssemblyStats provides some figures for a ScatterGather
+type TCPAssemblyStats struct {
+ // For this ScatterGather
+ Chunks int
+ Packets int
+ // For the half connection, since last call to ReassembledSG()
+ QueuedBytes int
+ QueuedPackets int
+ OverlapBytes int
+ OverlapPackets int
+}
+
+// ScatterGather is used to pass reassembled data and metadata of reassembled
+// packets to a Stream via ReassembledSG
+type ScatterGather interface {
+ // Returns the length of available bytes and saved bytes
+ Lengths() (int, int)
+ // Returns the bytes up to length (shall be <= available bytes)
+ Fetch(length int) []byte
+ // Tell to keep from offset
+ KeepFrom(offset int)
+ // Return CaptureInfo of packet corresponding to given offset
+ CaptureInfo(offset int) gopacket.CaptureInfo
+ // Return some info about the reassembled chunks
+ Info() (direction TCPFlowDirection, start bool, end bool, skip int)
+ // Return some stats regarding the state of the stream
+ Stats() TCPAssemblyStats
+}
+
+// byteContainer is either a page or a livePacket
+type byteContainer interface {
+ getBytes() []byte
+ length() int
+ convertToPages(*pageCache, int, AssemblerContext) (*page, *page, int)
+ captureInfo() gopacket.CaptureInfo
+ assemblerContext() AssemblerContext
+ release(*pageCache) int
+ isStart() bool
+ isEnd() bool
+ getSeq() Sequence
+ isPacket() bool
+}
+
+// Implements a ScatterGather
+type reassemblyObject struct {
+ all []byteContainer
+ Skip int
+ Direction TCPFlowDirection
+ saved int
+ toKeep int
+ // stats
+ queuedBytes int
+ queuedPackets int
+ overlapBytes int
+ overlapPackets int
+}
+
+func (rl *reassemblyObject) Lengths() (int, int) {
+ l := 0
+ for _, r := range rl.all {
+ l += r.length()
+ }
+ return l, rl.saved
+}
+
+func (rl *reassemblyObject) Fetch(l int) []byte {
+ if l <= rl.all[0].length() {
+ return rl.all[0].getBytes()[:l]
+ }
+ bytes := make([]byte, 0, l)
+ for _, bc := range rl.all {
+ bytes = append(bytes, bc.getBytes()...)
+ }
+ return bytes[:l]
+}
+
+func (rl *reassemblyObject) KeepFrom(offset int) {
+ rl.toKeep = offset
+}
+
+func (rl *reassemblyObject) CaptureInfo(offset int) gopacket.CaptureInfo {
+ current := 0
+ for _, r := range rl.all {
+ if current >= offset {
+ return r.captureInfo()
+ }
+ current += r.length()
+ }
+ // Invalid offset
+ return gopacket.CaptureInfo{}
+}
+
+func (rl *reassemblyObject) Info() (TCPFlowDirection, bool, bool, int) {
+ return rl.Direction, rl.all[0].isStart(), rl.all[len(rl.all)-1].isEnd(), rl.Skip
+}
+
+func (rl *reassemblyObject) Stats() TCPAssemblyStats {
+ packets := int(0)
+ for _, r := range rl.all {
+ if r.isPacket() {
+ packets++
+ }
+ }
+ return TCPAssemblyStats{
+ Chunks: len(rl.all),
+ Packets: packets,
+ QueuedBytes: rl.queuedBytes,
+ QueuedPackets: rl.queuedPackets,
+ OverlapBytes: rl.overlapBytes,
+ OverlapPackets: rl.overlapPackets,
+ }
+}
+
+const pageBytes = 1900
+
+// TCPFlowDirection distinguish the two half-connections directions.
+//
+// TCPDirClientToServer is assigned to half-connection for the first received
+// packet, hence might be wrong if packets are not received in order.
+// It's up to the caller (e.g. in Accept()) to decide if the direction should
+// be interpretted differently.
+type TCPFlowDirection bool
+
+// Value are not really useful
+const (
+ TCPDirClientToServer TCPFlowDirection = false
+ TCPDirServerToClient TCPFlowDirection = true
+)
+
+func (dir TCPFlowDirection) String() string {
+ switch dir {
+ case TCPDirClientToServer:
+ return "client->server"
+ case TCPDirServerToClient:
+ return "server->client"
+ }
+ return ""
+}
+
+// Reverse returns the reversed direction
+func (dir TCPFlowDirection) Reverse() TCPFlowDirection {
+ return !dir
+}
+
+/* page: implements a byteContainer */
+
+// page is used to store TCP data we're not ready for yet (out-of-order
+// packets). Unused pages are stored in and returned from a pageCache, which
+// avoids memory allocation. Used pages are stored in a doubly-linked list in
+// a connection.
+type page struct {
+ bytes []byte
+ seq Sequence
+ prev, next *page
+ buf [pageBytes]byte
+ ac AssemblerContext // only set for the first page of a packet
+ seen time.Time
+ start, end bool
+}
+
+func (p *page) getBytes() []byte {
+ return p.bytes
+}
+func (p *page) captureInfo() gopacket.CaptureInfo {
+ return p.ac.GetCaptureInfo()
+}
+func (p *page) assemblerContext() AssemblerContext {
+ return p.ac
+}
+func (p *page) convertToPages(pc *pageCache, skip int, ac AssemblerContext) (*page, *page, int) {
+ if skip != 0 {
+ p.bytes = p.bytes[skip:]
+ p.seq = p.seq.Add(skip)
+ }
+ p.prev, p.next = nil, nil
+ return p, p, 1
+}
+func (p *page) length() int {
+ return len(p.bytes)
+}
+func (p *page) release(pc *pageCache) int {
+ pc.replace(p)
+ return 1
+}
+func (p *page) isStart() bool {
+ return p.start
+}
+func (p *page) isEnd() bool {
+ return p.end
+}
+func (p *page) getSeq() Sequence {
+ return p.seq
+}
+func (p *page) isPacket() bool {
+ return p.ac != nil
+}
+func (p *page) String() string {
+ return 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)
+}
+
+/* livePacket: implements a byteContainer */
+type livePacket struct {
+ bytes []byte
+ start bool
+ end bool
+ ci gopacket.CaptureInfo
+ ac AssemblerContext
+ seq Sequence
+}
+
+func (lp *livePacket) getBytes() []byte {
+ return lp.bytes
+}
+func (lp *livePacket) captureInfo() gopacket.CaptureInfo {
+ return lp.ci
+}
+func (lp *livePacket) assemblerContext() AssemblerContext {
+ return lp.ac
+}
+func (lp *livePacket) length() int {
+ return len(lp.bytes)
+}
+func (lp *livePacket) isStart() bool {
+ return lp.start
+}
+func (lp *livePacket) isEnd() bool {
+ return lp.end
+}
+func (lp *livePacket) getSeq() Sequence {
+ return lp.seq
+}
+func (lp *livePacket) isPacket() bool {
+ return true
+}
+
+// Creates a page (or set of pages) from a TCP packet: returns the first and last
+// page in its doubly-linked list of new pages.
+func (lp *livePacket) convertToPages(pc *pageCache, skip int, ac AssemblerContext) (*page, *page, int) {
+ ts := lp.ci.Timestamp
+ first := pc.next(ts)
+ current := first
+ current.prev = nil
+ first.ac = ac
+ numPages := 1
+ seq, bytes := lp.seq.Add(skip), lp.bytes[skip:]
+ for {
+ length := min(len(bytes), pageBytes)
+ current.bytes = current.buf[:length]
+ copy(current.bytes, bytes)
+ current.seq = seq
+ bytes = bytes[length:]
+ if len(bytes) == 0 {
+ current.end = lp.isEnd()
+ current.next = nil
+ break
+ }
+ seq = seq.Add(length)
+ current.next = pc.next(ts)
+ current.next.prev = current
+ current = current.next
+ current.ac = nil
+ numPages++
+ }
+ return first, current, numPages
+}
+func (lp *livePacket) estimateNumberOfPages() int {
+ return (len(lp.bytes) + pageBytes + 1) / pageBytes
+}
+
+func (lp *livePacket) release(*pageCache) int {
+ return 0
+}
+
+// Stream is implemented by the caller to handle incoming reassembled
+// TCP data. Callers create a StreamFactory, then StreamPool uses
+// it to create a new Stream for every TCP stream.
+//
+// assembly will, in order:
+// 1) Create the stream via StreamFactory.New
+// 2) Call ReassembledSG 0 or more times, passing in reassembled TCP data in order
+// 3) Call ReassemblyComplete one time, after which the stream is dereferenced by assembly.
+type Stream interface {
+ // Tell whether the TCP packet should be accepted, start could be modified to force a start even if no SYN have been seen
+ Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, ackSeq Sequence, start *bool, ac AssemblerContext) bool
+
+ // ReassembledSG is called zero or more times.
+ // ScatterGather is reused after each Reassembled call,
+ // so it's important to copy anything you need out of it,
+ // especially bytes (or use KeepFrom())
+ ReassembledSG(sg ScatterGather, ac AssemblerContext)
+
+ // ReassemblyComplete is called when assembly decides there is
+ // no more data for this Stream, either because a FIN or RST packet
+ // was seen, or because the stream has timed out without any new
+ // packet data (due to a call to FlushCloseOlderThan).
+ // It should return true if the connection should be removed from the pool
+ // It can return false if it want to see subsequent packets with Accept(), e.g. to
+ // see FIN-ACK, for deeper state-machine analysis.
+ ReassemblyComplete(ac AssemblerContext) bool
+}
+
+// StreamFactory is used by assembly to create a new stream for each
+// new TCP session.
+type StreamFactory interface {
+ // New should return a new stream for the given TCP key.
+ New(netFlow, tcpFlow gopacket.Flow, tcp *layers.TCP, ac AssemblerContext) Stream
+}
+
+type key [2]gopacket.Flow
+
+func (k *key) String() string {
+ return fmt.Sprintf("%s:%s", k[0], k[1])
+}
+
+func (k *key) Reverse() key {
+ return key{
+ k[0].Reverse(),
+ k[1].Reverse(),
+ }
+}
+
+const assemblerReturnValueInitialSize = 16
+
+/* one-way connection, i.e. halfconnection */
+type halfconnection struct {
+ dir TCPFlowDirection
+ pages int // Number of pages used (both in first/last and saved)
+ saved *page // Doubly-linked list of in-order pages (seq < nextSeq) already given to Stream who told us to keep
+ first, last *page // Doubly-linked list of out-of-order pages (seq > nextSeq)
+ nextSeq Sequence // sequence number of in-order received bytes
+ ackSeq Sequence
+ created, lastSeen time.Time
+ stream Stream
+ closed bool
+ // for stats
+ queuedBytes int
+ queuedPackets int
+ overlapBytes int
+ overlapPackets int
+}
+
+func (half *halfconnection) String() string {
+ closed := ""
+ if half.closed {
+ closed = "closed "
+ }
+ return fmt.Sprintf("%screated:%v, last:%v", closed, half.created, half.lastSeen)
+}
+
+// Dump returns a string (crypticly) describing the halfconnction
+func (half *halfconnection) Dump() string {
+ s := fmt.Sprintf("pages: %d\n"+
+ "nextSeq: %d\n"+
+ "ackSeq: %d\n"+
+ "Seen : %s\n"+
+ "dir: %s\n", half.pages, half.nextSeq, half.ackSeq, half.lastSeen, half.dir)
+ nb := 0
+ for p := half.first; p != nil; p = p.next {
+ s += fmt.Sprintf(" Page[%d] %s len: %d\n", nb, p, len(p.bytes))
+ nb++
+ }
+ return s
+}
+
+/* Bi-directionnal connection */
+
+type connection struct {
+ key key // client->server
+ c2s, s2c halfconnection
+ mu sync.Mutex
+}
+
+func (c *connection) reset(k key, s Stream, ts time.Time) {
+ c.key = k
+ base := halfconnection{
+ nextSeq: invalidSequence,
+ ackSeq: invalidSequence,
+ created: ts,
+ lastSeen: ts,
+ stream: s,
+ }
+ c.c2s, c.s2c = base, base
+ c.c2s.dir, c.s2c.dir = TCPDirClientToServer, TCPDirServerToClient
+}
+
+func (c *connection) String() string {
+ return fmt.Sprintf("c2s: %s, s2c: %s", &c.c2s, &c.s2c)
+}
+
+/*
+ * Assembler
+ */
+
+// DefaultAssemblerOptions provides default options for an assembler.
+// These options are used by default when calling NewAssembler, so if
+// modified before a NewAssembler call they'll affect the resulting Assembler.
+//
+// Note that the default options can result in ever-increasing memory usage
+// unless one of the Flush* methods is called on a regular basis.
+var DefaultAssemblerOptions = AssemblerOptions{
+ MaxBufferedPagesPerConnection: 0, // unlimited
+ MaxBufferedPagesTotal: 0, // unlimited
+}
+
+// AssemblerOptions controls the behavior of each assembler. Modify the
+// options of each assembler you create to change their behavior.
+type AssemblerOptions struct {
+ // MaxBufferedPagesTotal is an upper limit on the total number of pages to
+ // buffer while waiting for out-of-order packets. Once this limit is
+ // reached, the assembler will degrade to flushing every connection it
+ // gets a packet for. If <= 0, this is ignored.
+ MaxBufferedPagesTotal int
+ // MaxBufferedPagesPerConnection is an upper limit on the number of pages
+ // buffered for a single connection. Should this limit be reached for a
+ // particular connection, the smallest sequence number will be flushed, along
+ // with any contiguous data. If <= 0, this is ignored.
+ MaxBufferedPagesPerConnection int
+}
+
+// Assembler handles reassembling TCP streams. It is not safe for
+// concurrency... after passing a packet in via the Assemble call, the caller
+// must wait for that call to return before calling Assemble again. Callers can
+// get around this by creating multiple assemblers that share a StreamPool. In
+// that case, each individual stream will still be handled serially (each stream
+// has an individual mutex associated with it), however multiple assemblers can
+// assemble different connections concurrently.
+//
+// The Assembler provides (hopefully) fast TCP stream re-assembly for sniffing
+// applications written in Go. The Assembler uses the following methods to be
+// as fast as possible, to keep packet processing speedy:
+//
+// Avoids Lock Contention
+//
+// Assemblers locks connections, but each connection has an individual lock, and
+// rarely will two Assemblers be looking at the same connection. Assemblers
+// lock the StreamPool when looking up connections, but they use Reader
+// locks initially, and only force a write lock if they need to create a new
+// connection or close one down. These happen much less frequently than
+// individual packet handling.
+//
+// Each assembler runs in its own goroutine, and the only state shared between
+// goroutines is through the StreamPool. Thus all internal Assembler state
+// can be handled without any locking.
+//
+// NOTE: If you can guarantee that packets going to a set of Assemblers will
+// contain information on different connections per Assembler (for example,
+// they're already hashed by PF_RING hashing or some other hashing mechanism),
+// then we recommend you use a seperate StreamPool per Assembler, thus
+// avoiding all lock contention. Only when different Assemblers could receive
+// packets for the same Stream should a StreamPool be shared between them.
+//
+// Avoids Memory Copying
+//
+// In the common case, handling of a single TCP packet should result in zero
+// memory allocations. The Assembler will look up the connection, figure out
+// that the packet has arrived in order, and immediately pass that packet on to
+// the appropriate connection's handling code. Only if a packet arrives out of
+// order is its contents copied and stored in memory for later.
+//
+// Avoids Memory Allocation
+//
+// Assemblers try very hard to not use memory allocation unless absolutely
+// necessary. Packet data for sequential packets is passed directly to streams
+// with no copying or allocation. Packet data for out-of-order packets is
+// copied into reusable pages, and new pages are only allocated rarely when the
+// page cache runs out. Page caches are Assembler-specific, thus not used
+// concurrently and requiring no locking.
+//
+// Internal representations for connection objects are also reused over time.
+// Because of this, the most common memory allocation done by the Assembler is
+// generally what's done by the caller in StreamFactory.New. If no allocation
+// is done there, then very little allocation is done ever, mostly to handle
+// large increases in bandwidth or numbers of connections.
+//
+// TODO: The page caches used by an Assembler will grow to the size necessary
+// to handle a workload, and currently will never shrink. This means that
+// traffic spikes can result in large memory usage which isn't garbage
+// collected when typical traffic levels return.
+type Assembler struct {
+ AssemblerOptions
+ ret []byteContainer
+ pc *pageCache
+ connPool *StreamPool
+ cacheLP livePacket
+ cacheSG reassemblyObject
+ start bool
+}
+
+// NewAssembler creates a new assembler. Pass in the StreamPool
+// to use, may be shared across assemblers.
+//
+// This sets some sane defaults for the assembler options,
+// see DefaultAssemblerOptions for details.
+func NewAssembler(pool *StreamPool) *Assembler {
+ pool.mu.Lock()
+ pool.users++
+ pool.mu.Unlock()
+ return &Assembler{
+ ret: make([]byteContainer, assemblerReturnValueInitialSize),
+ pc: newPageCache(),
+ connPool: pool,
+ AssemblerOptions: DefaultAssemblerOptions,
+ }
+}
+
+// Dump returns a short string describing the page usage of the Assembler
+func (a *Assembler) Dump() string {
+ s := ""
+ s += fmt.Sprintf("pageCache: used: %d, size: %d, free: %d", a.pc.used, a.pc.size, len(a.pc.free))
+ return s
+}
+
+// AssemblerContext provides method to get metadata
+type AssemblerContext interface {
+ GetCaptureInfo() gopacket.CaptureInfo
+}
+
+// Implements AssemblerContext for Assemble()
+type assemblerSimpleContext gopacket.CaptureInfo
+
+func (asc *assemblerSimpleContext) GetCaptureInfo() gopacket.CaptureInfo {
+ return gopacket.CaptureInfo(*asc)
+}
+
+// Assemble calls AssembleWithContext with the current timestamp, useful for
+// packets being read directly off the wire.
+func (a *Assembler) Assemble(netFlow gopacket.Flow, t *layers.TCP) {
+ ctx := assemblerSimpleContext(gopacket.CaptureInfo{Timestamp: time.Now()})
+ a.AssembleWithContext(netFlow, t, &ctx)
+}
+
+type assemblerAction struct {
+ nextSeq Sequence
+ queue bool
+}
+
+// AssembleWithContext reassembles the given TCP packet into its appropriate
+// stream.
+//
+// The timestamp passed in must be the timestamp the packet was seen.
+// For packets read off the wire, time.Now() should be fine. For packets read
+// from PCAP files, CaptureInfo.Timestamp should be passed in. This timestamp
+// will affect which streams are flushed by a call to FlushCloseOlderThan.
+//
+// Each AssembleWithContext call results in, in order:
+//
+// zero or one call to StreamFactory.New, creating a stream
+// zero or one call to ReassembledSG on a single stream
+// zero or one call to ReassemblyComplete on the same stream
+func (a *Assembler) AssembleWithContext(netFlow gopacket.Flow, t *layers.TCP, ac AssemblerContext) {
+ var conn *connection
+ var half *halfconnection
+ var rev *halfconnection
+
+ a.ret = a.ret[:0]
+ key := key{netFlow, t.TransportFlow()}
+ ci := ac.GetCaptureInfo()
+ timestamp := ci.Timestamp
+
+ conn, half, rev = a.connPool.getConnection(key, false, timestamp, t, ac)
+ if conn == nil {
+ if *debugLog {
+ log.Printf("%v got empty packet on otherwise empty connection", key)
+ }
+ return
+ }
+ conn.mu.Lock()
+ defer conn.mu.Unlock()
+ if half.lastSeen.Before(timestamp) {
+ half.lastSeen = timestamp
+ }
+ a.start = half.nextSeq == invalidSequence && t.SYN
+ if !half.stream.Accept(t, ci, half.dir, rev.ackSeq, &a.start, ac) {
+ if *debugLog {
+ log.Printf("Ignoring packet")
+ }
+ return
+ }
+ if half.closed {
+ // this way is closed
+ return
+ }
+
+ seq, ack, bytes := Sequence(t.Seq), Sequence(t.Ack), t.Payload
+ if t.ACK {
+ half.ackSeq = ack
+ }
+ // TODO: push when Ack is seen ??
+ action := assemblerAction{
+ nextSeq: Sequence(invalidSequence),
+ queue: true,
+ }
+ a.dump("AssembleWithContext()", half)
+ if half.nextSeq == invalidSequence {
+ if t.SYN {
+ if *debugLog {
+ log.Printf("%v saw first SYN packet, returning immediately, seq=%v", key, seq)
+ }
+ seq = seq.Add(1)
+ half.nextSeq = seq
+ action.queue = false
+ } else if a.start {
+ if *debugLog {
+ log.Printf("%v start forced", key)
+ }
+ half.nextSeq = seq
+ action.queue = false
+ } else {
+ if *debugLog {
+ log.Printf("%v waiting for start, storing into connection", key)
+ }
+ }
+ } else {
+ diff := half.nextSeq.Difference(seq)
+ if diff > 0 {
+ if *debugLog {
+ log.Printf("%v gap in sequence numbers (%v, %v) diff %v, storing into connection", key, half.nextSeq, seq, diff)
+ }
+ } else {
+ if *debugLog {
+ log.Printf("%v found contiguous data (%v, %v), returning immediately: len:%d", key, seq, half.nextSeq, len(bytes))
+ }
+ action.queue = false
+ }
+ }
+
+ action = a.handleBytes(bytes, seq, half, ci, t.SYN, t.RST || t.FIN, action, ac)
+ if len(a.ret) > 0 {
+ action.nextSeq = a.sendToConnection(conn, half, ac)
+ }
+ if action.nextSeq != invalidSequence {
+ half.nextSeq = action.nextSeq
+ if t.FIN {
+ half.nextSeq = half.nextSeq.Add(1)
+ }
+ }
+ if *debugLog {
+ log.Printf("%v nextSeq:%d", key, half.nextSeq)
+ }
+}
+
+// Overlap strategies:
+// - new packet overlaps with sent packets:
+// 1) discard new overlapping part
+// 2) overwrite old overlapped (TODO)
+// - new packet overlaps existing queued packets:
+// a) consider "age" by timestamp (TODO)
+// b) consider "age" by being present
+// Then
+// 1) discard new overlapping part
+// 2) overwrite queued part
+
+func (a *Assembler) checkOverlap(half *halfconnection, queue bool, ac AssemblerContext) {
+ var next *page
+ cur := half.last
+ bytes := a.cacheLP.bytes
+ start := a.cacheLP.seq
+ end := start.Add(len(bytes))
+
+ a.dump("before checkOverlap", half)
+
+ // [s6 : e6]
+ // [s1:e1][s2:e2] -- [s3:e3] -- [s4:e4][s5:e5]
+ // [s <--ds-- : --de--> e]
+ for cur != nil {
+
+ if *debugLog {
+ log.Printf("cur = %p (%s)\n", cur, cur)
+ }
+
+ // end < cur.start: continue (5)
+ if end.Difference(cur.seq) > 0 {
+ if *debugLog {
+ log.Printf("case 5\n")
+ }
+ next = cur
+ cur = cur.prev
+ continue
+ }
+
+ curEnd := cur.seq.Add(len(cur.bytes))
+ // start > cur.end: stop (1)
+ if start.Difference(curEnd) <= 0 {
+ if *debugLog {
+ log.Printf("case 1\n")
+ }
+ break
+ }
+
+ diffStart := start.Difference(cur.seq)
+ diffEnd := end.Difference(curEnd)
+
+ // end > cur.end && start < cur.start: drop (3)
+ if diffEnd <= 0 && diffStart >= 0 {
+ if *debugLog {
+ log.Printf("case 3\n")
+ }
+ if cur.isPacket() {
+ half.overlapPackets++
+ }
+ half.overlapBytes += len(cur.bytes)
+ // update links
+ if cur.prev != nil {
+ cur.prev.next = cur.next
+ } else {
+ half.first = cur.next
+ }
+ if cur.next != nil {
+ cur.next.prev = cur.prev
+ } else {
+ half.last = cur.prev
+ }
+ tmp := cur.prev
+ half.pages -= cur.release(a.pc)
+ cur = tmp
+ continue
+ }
+
+ // end > cur.end && start < cur.end: drop cur's end (2)
+ if diffEnd < 0 && start.Difference(curEnd) > 0 {
+ if *debugLog {
+ log.Printf("case 2\n")
+ }
+ cur.bytes = cur.bytes[:-start.Difference(cur.seq)]
+ break
+ } else
+
+ // start < cur.start && end > cur.start: drop cur's start (4)
+ if diffStart > 0 && end.Difference(cur.seq) < 0 {
+ if *debugLog {
+ log.Printf("case 4\n")
+ }
+ cur.bytes = cur.bytes[-end.Difference(cur.seq):]
+ cur.seq = cur.seq.Add(-end.Difference(cur.seq))
+ next = cur
+ } else
+
+ // end < cur.end && start > cur.start: replace bytes inside cur (6)
+ if diffEnd > 0 && diffStart < 0 {
+ if *debugLog {
+ log.Printf("case 6\n")
+ }
+ copy(cur.bytes[-diffStart:-diffStart+len(bytes)], bytes)
+ bytes = bytes[:0]
+ } else {
+ if *debugLog {
+ log.Printf("no overlap\n")
+ }
+ next = cur
+ }
+ cur = cur.prev
+ }
+
+ // Split bytes into pages, and insert in queue
+ a.cacheLP.bytes = bytes
+ a.cacheLP.seq = start
+ if len(bytes) > 0 && queue {
+ p, p2, numPages := a.cacheLP.convertToPages(a.pc, 0, ac)
+ half.queuedPackets++
+ half.queuedBytes += len(bytes)
+ half.pages += numPages
+ if cur != nil {
+ if *debugLog {
+ log.Printf("adding %s after %s", p, cur)
+ }
+ cur.next = p
+ p.prev = cur
+ } else {
+ if *debugLog {
+ log.Printf("adding %s as first", p)
+ }
+ half.first = p
+ }
+ if next != nil {
+ if *debugLog {
+ log.Printf("setting %s as next of new %s", next, p2)
+ }
+ p2.next = next
+ next.prev = p2
+ } else {
+ if *debugLog {
+ log.Printf("setting %s as last", p2)
+ }
+ half.last = p2
+ }
+ }
+ a.dump("After checkOverlap", half)
+}
+
+// Warning: this is a low-level dumper, i.e. a.ret or a.cacheSG might
+// be strange, but it could be ok.
+func (a *Assembler) dump(text string, half *halfconnection) {
+ if !*debugLog {
+ return
+ }
+ log.Printf("%s: dump\n", text)
+ if half != nil {
+ p := half.first
+ if p == nil {
+ log.Printf(" * half.first = %p, no chunks queued\n", p)
+ } else {
+ s := 0
+ nb := 0
+ log.Printf(" * half.first = %p, queued chunks:", p)
+ for p != nil {
+ log.Printf("\t%s bytes:%s\n", p, hex.EncodeToString(p.bytes))
+ s += len(p.bytes)
+ nb++
+ p = p.next
+ }
+ log.Printf("\t%d chunks for %d bytes", nb, s)
+ }
+ log.Printf(" * half.last = %p\n", half.last)
+ log.Printf(" * half.saved = %p\n", half.saved)
+ p = half.saved
+ for p != nil {
+ log.Printf("\tseq:%d %s bytes:%s\n", p.getSeq(), p, hex.EncodeToString(p.bytes))
+ p = p.next
+ }
+ }
+ log.Printf(" * a.ret\n")
+ for i, r := range a.ret {
+ log.Printf("\t%d: %s b:%s\n", i, r.captureInfo(), hex.EncodeToString(r.getBytes()))
+ }
+ log.Printf(" * a.cacheSG.all\n")
+ for i, r := range a.cacheSG.all {
+ log.Printf("\t%d: %s b:%s\n", i, r.captureInfo(), hex.EncodeToString(r.getBytes()))
+ }
+}
+
+func (a *Assembler) overlapExisting(half *halfconnection, start, end Sequence, bytes []byte) ([]byte, Sequence) {
+ if half.nextSeq == invalidSequence {
+ // no start yet
+ return bytes, start
+ }
+ diff := start.Difference(half.nextSeq)
+ if diff == 0 {
+ return bytes, start
+ }
+ s := 0
+ e := len(bytes)
+ // TODO: depending on strategy, we might want to shrink half.saved if possible
+ if e != 0 {
+ if *debugLog {
+ log.Printf("Overlap detected: ignoring current packet's first %d bytes", diff)
+ }
+ half.overlapPackets++
+ half.overlapBytes += diff
+ }
+ start = start.Add(diff)
+ s += diff
+ if s >= e {
+ // Completely included in sent
+ s = e
+ }
+ bytes = bytes[s:]
+ e -= diff
+ return bytes, start
+}
+
+// Prepare send or queue
+func (a *Assembler) handleBytes(bytes []byte, seq Sequence, half *halfconnection, ci gopacket.CaptureInfo, start bool, end bool, action assemblerAction, ac AssemblerContext) assemblerAction {
+ a.cacheLP.bytes = bytes
+ a.cacheLP.start = start
+ a.cacheLP.end = end
+ a.cacheLP.seq = seq
+ a.cacheLP.ci = ci
+ a.cacheLP.ac = ac
+
+ if action.queue {
+ a.checkOverlap(half, true, ac)
+ if (a.MaxBufferedPagesPerConnection > 0 && half.pages >= a.MaxBufferedPagesPerConnection) ||
+ (a.MaxBufferedPagesTotal > 0 && a.pc.used >= a.MaxBufferedPagesTotal) {
+ if *debugLog {
+ log.Printf("hit max buffer size: %+v, %v, %v", a.AssemblerOptions, half.pages, a.pc.used)
+ }
+ action.queue = false
+ a.addNextFromConn(half)
+ }
+ a.dump("handleBytes after queue", half)
+ } else {
+ a.cacheLP.bytes, a.cacheLP.seq = a.overlapExisting(half, seq, seq.Add(len(bytes)), a.cacheLP.bytes)
+ a.checkOverlap(half, false, ac)
+ if len(a.cacheLP.bytes) != 0 || end || start {
+ a.ret = append(a.ret, &a.cacheLP)
+ }
+ a.dump("handleBytes after no queue", half)
+ }
+ return action
+}
+
+func (a *Assembler) setStatsToSG(half *halfconnection) {
+ a.cacheSG.queuedBytes = half.queuedBytes
+ half.queuedBytes = 0
+ a.cacheSG.queuedPackets = half.queuedPackets
+ half.queuedPackets = 0
+ a.cacheSG.overlapBytes = half.overlapBytes
+ half.overlapBytes = 0
+ a.cacheSG.overlapPackets = half.overlapPackets
+ half.overlapPackets = 0
+}
+
+// Build the ScatterGather object, i.e. prepend saved bytes and
+// append continuous bytes.
+func (a *Assembler) buildSG(half *halfconnection) (bool, Sequence) {
+ // find if there are skipped bytes
+ skip := -1
+ if half.nextSeq != invalidSequence {
+ skip = half.nextSeq.Difference(a.ret[0].getSeq())
+ }
+ last := a.ret[0].getSeq().Add(a.ret[0].length())
+ // Prepend saved bytes
+ saved := a.addPending(half, a.ret[0].getSeq())
+ // Append continuous bytes
+ nextSeq := a.addContiguous(half, last)
+ a.cacheSG.all = a.ret
+ a.cacheSG.Direction = half.dir
+ a.cacheSG.Skip = skip
+ a.cacheSG.saved = saved
+ a.cacheSG.toKeep = -1
+ a.setStatsToSG(half)
+ a.dump("after buildSG", half)
+ return a.ret[len(a.ret)-1].isEnd(), nextSeq
+}
+
+func (a *Assembler) cleanSG(half *halfconnection, ac AssemblerContext) {
+ cur := 0
+ ndx := 0
+ skip := 0
+
+ a.dump("cleanSG(start)", half)
+
+ var r byteContainer
+ // Find first page to keep
+ if a.cacheSG.toKeep < 0 {
+ ndx = len(a.cacheSG.all)
+ } else {
+ skip = a.cacheSG.toKeep
+ found := false
+ for ndx, r = range a.cacheSG.all {
+ if a.cacheSG.toKeep < cur+r.length() {
+ found = true
+ break
+ }
+ cur += r.length()
+ if skip >= r.length() {
+ skip -= r.length()
+ }
+ }
+ if !found {
+ ndx++
+ }
+ }
+ // Release consumed pages
+ for _, r := range a.cacheSG.all[:ndx] {
+ if r == half.saved {
+ if half.saved.next != nil {
+ half.saved.next.prev = nil
+ }
+ half.saved = half.saved.next
+ } else if r == half.first {
+ if half.first.next != nil {
+ half.first.next.prev = nil
+ }
+ if half.first == half.last {
+ half.first, half.last = nil, nil
+ } else {
+ half.first = half.first.next
+ }
+ }
+ half.pages -= r.release(a.pc)
+ }
+ a.dump("after consumed release", half)
+ // Keep un-consumed pages
+ nbKept := 0
+ half.saved = nil
+ var saved *page
+ for _, r := range a.cacheSG.all[ndx:] {
+ first, last, nb := r.convertToPages(a.pc, skip, ac)
+ if half.saved == nil {
+ half.saved = first
+ } else {
+ saved.next = first
+ first.prev = saved
+ }
+ saved = last
+ nbKept += nb
+ }
+ if *debugLog {
+ log.Printf("Remaining %d chunks in SG\n", nbKept)
+ log.Printf("%s\n", a.Dump())
+ a.dump("after cleanSG()", half)
+ }
+}
+
+// sendToConnection sends the current values in a.ret to the connection, closing
+// the connection if the last thing sent had End set.
+func (a *Assembler) sendToConnection(conn *connection, half *halfconnection, ac AssemblerContext) Sequence {
+ if *debugLog {
+ log.Printf("sendToConnection\n")
+ }
+ end, nextSeq := a.buildSG(half)
+ half.stream.ReassembledSG(&a.cacheSG, ac)
+ a.cleanSG(half, ac)
+ if end {
+ a.closeHalfConnection(conn, half)
+ }
+ if *debugLog {
+ log.Printf("after sendToConnection: nextSeq: %d\n", nextSeq)
+ }
+ return nextSeq
+}
+
+//
+func (a *Assembler) addPending(half *halfconnection, firstSeq Sequence) int {
+ if half.saved == nil {
+ return 0
+ }
+ s := 0
+ ret := []byteContainer{}
+ for p := half.saved; p != nil; p = p.next {
+ if *debugLog {
+ log.Printf("adding pending @%p %s (%s)\n", p, p, hex.EncodeToString(p.bytes))
+ }
+ ret = append(ret, p)
+ s += len(p.bytes)
+ }
+ if half.saved.seq.Add(s) != firstSeq {
+ // non-continuous saved: drop them
+ var next *page
+ for p := half.saved; p != nil; p = next {
+ next = p.next
+ p.release(a.pc)
+ }
+ half.saved = nil
+ ret = []byteContainer{}
+ s = 0
+ }
+
+ a.ret = append(ret, a.ret...)
+ return s
+}
+
+// addContiguous adds contiguous byte-sets to a connection.
+func (a *Assembler) addContiguous(half *halfconnection, lastSeq Sequence) Sequence {
+ page := half.first
+ if page == nil {
+ if *debugLog {
+ log.Printf("addContiguous(%d): no pages\n", lastSeq)
+ }
+ return lastSeq
+ }
+ if lastSeq == invalidSequence {
+ lastSeq = page.seq
+ }
+ for page != nil && lastSeq.Difference(page.seq) == 0 {
+ if *debugLog {
+ log.Printf("addContiguous: lastSeq: %d, first.seq=%d, page.seq=%d\n", half.nextSeq, half.first.seq, page.seq)
+ }
+ lastSeq = lastSeq.Add(len(page.bytes))
+ a.ret = append(a.ret, page)
+ half.first = page.next
+ if half.first == nil {
+ half.last = nil
+ }
+ if page.next != nil {
+ page.next.prev = nil
+ }
+ page = page.next
+ }
+ return lastSeq
+}
+
+// skipFlush skips the first set of bytes we're waiting for and returns the
+// first set of bytes we have. If we have no bytes saved, it closes the
+// connection.
+func (a *Assembler) skipFlush(conn *connection, half *halfconnection) {
+ if *debugLog {
+ log.Printf("skipFlush %v\n", half.nextSeq)
+ }
+ // Well, it's embarassing it there is still something in half.saved
+ // FIXME: change API to give back saved + new/no packets
+ if half.first == nil {
+ a.closeHalfConnection(conn, half)
+ return
+ }
+ a.ret = a.ret[:0]
+ a.addNextFromConn(half)
+ nextSeq := a.sendToConnection(conn, half, a.ret[0].assemblerContext())
+ if nextSeq != invalidSequence {
+ half.nextSeq = nextSeq
+ }
+}
+
+func (a *Assembler) closeHalfConnection(conn *connection, half *halfconnection) {
+ if *debugLog {
+ log.Printf("%v closing", conn)
+ }
+ half.closed = true
+ for p := half.first; p != nil; p = p.next {
+ // FIXME: it should be already empty
+ a.pc.replace(p)
+ half.pages--
+ }
+ if conn.s2c.closed && conn.c2s.closed {
+ if half.stream.ReassemblyComplete(nil) { //FIXME: which context to pass ?
+ a.connPool.remove(conn)
+ }
+ }
+}
+
+// addNextFromConn pops the first page from a connection off and adds it to the
+// return array.
+func (a *Assembler) addNextFromConn(conn *halfconnection) {
+ if conn.first == nil {
+ return
+ }
+ if *debugLog {
+ log.Printf(" adding from conn (%v, %v) %v (%d)\n", conn.first.seq, conn.nextSeq, conn.nextSeq-conn.first.seq, len(conn.first.bytes))
+ }
+ a.ret = append(a.ret, conn.first)
+ conn.first = conn.first.next
+ if conn.first != nil {
+ conn.first.prev = nil
+ } else {
+ conn.last = nil
+ }
+}
+
+// FlushOptions provide options for flushing connections.
+type FlushOptions struct {
+ T time.Time // If nonzero, only connections with data older than T are flushed
+ TC time.Time // If nonzero, only connections with data older than TC are closed (if no FIN/RST received)
+}
+
+// FlushWithOptions finds any streams waiting for packets older than
+// the given time T, and pushes through the data they have (IE: tells
+// them to stop waiting and skip the data they're waiting for).
+//
+// It also closes streams older than TC (that can be set to zero, to keep
+// long-lived stream alive, but to flush data anyway).
+//
+// Each Stream maintains a list of zero or more sets of bytes it has received
+// out-of-order. For example, if it has processed up through sequence number
+// 10, it might have bytes [15-20), [20-25), [30,50) in its list. Each set of
+// bytes also has the timestamp it was originally viewed. A flush call will
+// look at the smallest subsequent set of bytes, in this case [15-20), and if
+// its timestamp is older than the passed-in time, it will push it and all
+// contiguous byte-sets out to the Stream's Reassembled function. In this case,
+// it will push [15-20), but also [20-25), since that's contiguous. It will
+// only push [30-50) if its timestamp is also older than the passed-in time,
+// otherwise it will wait until the next FlushCloseOlderThan to see if bytes
+// [25-30) come in.
+//
+// Returns the number of connections flushed, and of those, the number closed
+// because of the flush.
+func (a *Assembler) FlushWithOptions(opt FlushOptions) (flushed, closed int) {
+ conns := a.connPool.connections()
+ closes := 0
+ flushes := 0
+ for _, conn := range conns {
+ remove := false
+ conn.mu.Lock()
+ for _, half := range []*halfconnection{&conn.s2c, &conn.c2s} {
+ flushed, closed := a.flushClose(conn, half, opt.T, opt.TC)
+ if flushed {
+ flushes++
+ }
+ if closed {
+ closes++
+ }
+ }
+ if conn.s2c.closed && conn.c2s.closed && conn.s2c.lastSeen.Before(opt.TC) && conn.c2s.lastSeen.Before(opt.TC) {
+ remove = true
+ }
+ conn.mu.Unlock()
+ if remove {
+ a.connPool.remove(conn)
+ }
+ }
+ return flushes, closes
+}
+
+// FlushCloseOlderThan flushes and closes streams older than given time
+func (a *Assembler) FlushCloseOlderThan(t time.Time) (flushed, closed int) {
+ return a.FlushWithOptions(FlushOptions{T: t, TC: t})
+}
+
+func (a *Assembler) flushClose(conn *connection, half *halfconnection, t time.Time, tc time.Time) (bool, bool) {
+ flushed, closed := false, false
+ if half.closed {
+ return flushed, closed
+ }
+ for half.first != nil && half.first.seen.Before(t) {
+ flushed = true
+ a.skipFlush(conn, half)
+ if half.closed {
+ closed = true
+ }
+ }
+ if !half.closed && half.first == nil && half.lastSeen.Before(tc) {
+ a.closeHalfConnection(conn, half)
+ closed = true
+ }
+ return flushed, closed
+}
+
+// FlushAll flushes all remaining data into all remaining connections and closes
+// those connections. It returns the total number of connections flushed/closed
+// by the call.
+func (a *Assembler) FlushAll() (closed int) {
+ conns := a.connPool.connections()
+ closed = len(conns)
+ for _, conn := range conns {
+ conn.mu.Lock()
+ for _, half := range []*halfconnection{&conn.s2c, &conn.c2s} {
+ for !half.closed {
+ a.skipFlush(conn, half)
+ }
+ if !half.closed {
+ a.closeHalfConnection(conn, half)
+ }
+ }
+ conn.mu.Unlock()
+ }
+ return
+}
+
+func min(a, b int) int {
+ if a < b {
+ return a
+ }
+ return b
+}
diff --git a/vendor/github.com/google/gopacket/reassembly/tcpassembly_test.go b/vendor/github.com/google/gopacket/reassembly/tcpassembly_test.go
new file mode 100644
index 0000000..b29cf2f
--- /dev/null
+++ b/vendor/github.com/google/gopacket/reassembly/tcpassembly_test.go
@@ -0,0 +1,1660 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package reassembly
+
+import (
+ "encoding/hex"
+ "fmt"
+ "net"
+ "reflect"
+ "runtime"
+ "testing"
+ "time"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+)
+
+var netFlow gopacket.Flow
+
+var testDebug = false
+
+func init() {
+ netFlow, _ = gopacket.FlowFromEndpoints(
+ layers.NewIPEndpoint(net.IP{1, 2, 3, 4}),
+ layers.NewIPEndpoint(net.IP{5, 6, 7, 8}))
+}
+
+type Reassembly struct {
+ Bytes []byte
+ Start bool
+ End bool
+ Skip int
+}
+
+type testSequence struct {
+ in layers.TCP
+ want []Reassembly
+}
+
+/* For benchmark: do nothing */
+type testFactoryBench struct {
+}
+
+func (t *testFactoryBench) New(a, b gopacket.Flow, tcp *layers.TCP, ac AssemblerContext) Stream {
+ return t
+}
+func (t *testFactoryBench) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, seq Sequence, start *bool, ac AssemblerContext) bool {
+ return true
+}
+func (t *testFactoryBench) ReassembledSG(sg ScatterGather, ac AssemblerContext) {
+}
+func (t *testFactoryBench) ReassemblyComplete(ac AssemblerContext) bool {
+ return true
+}
+
+/* For tests: append bytes */
+type testFactory struct {
+ reassembly []Reassembly
+}
+
+func (t *testFactory) New(a, b gopacket.Flow, tcp *layers.TCP, ac AssemblerContext) Stream {
+ return t
+}
+func (t *testFactory) Reassembled(r []Reassembly) {
+ t.reassembly = r
+ for i := 0; i < len(r); i++ {
+ //t.reassembly[i].Seen = time.Time{}
+ }
+}
+func (t *testFactory) ReassembledSG(sg ScatterGather, ac AssemblerContext) {
+ _, start, end, skip := sg.Info()
+ l, _ := sg.Lengths()
+ t.reassembly = append(t.reassembly, Reassembly{
+ Bytes: sg.Fetch(l),
+ Skip: skip,
+ Start: start,
+ End: end,
+ })
+}
+
+func (t *testFactory) ReassemblyComplete(ac AssemblerContext) bool {
+ return true
+}
+
+func (t *testFactory) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, seq Sequence, start *bool, ac AssemblerContext) bool {
+ return true
+}
+
+/* For memory checks: counts bytes */
+type testMemoryFactory struct {
+ bytes int
+}
+
+func (tf *testMemoryFactory) New(a, b gopacket.Flow, tcp *layers.TCP, ac AssemblerContext) Stream {
+ return tf
+}
+func (tf *testMemoryFactory) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, seq Sequence, start *bool, ac AssemblerContext) bool {
+ return true
+}
+func (tf *testMemoryFactory) ReassembledSG(sg ScatterGather, ac AssemblerContext) {
+ bytes, _ := sg.Lengths()
+ tf.bytes += bytes
+}
+func (tf *testMemoryFactory) ReassemblyComplete(ac AssemblerContext) bool {
+ return true
+}
+
+/*
+ * Tests
+ */
+
+func test(t *testing.T, s []testSequence) {
+ fact := &testFactory{}
+ p := NewStreamPool(fact)
+ a := NewAssembler(p)
+ a.MaxBufferedPagesPerConnection = 4
+ for i, test := range s {
+ fact.reassembly = []Reassembly{}
+ if testDebug {
+ fmt.Printf("#### test: #%d: sending:%s\n", i, hex.EncodeToString(test.in.BaseLayer.Payload))
+ }
+ a.Assemble(netFlow, &test.in)
+ final := []Reassembly{}
+ if len(test.want) > 0 {
+ final = append(final, Reassembly{})
+ for _, w := range test.want {
+ final[0].Bytes = append(final[0].Bytes, w.Bytes...)
+ if w.End {
+ final[0].End = true
+ }
+ if w.Start {
+ final[0].Start = true
+ }
+ if w.Skip != 0 {
+ final[0].Skip = w.Skip
+ }
+ }
+ }
+ if !reflect.DeepEqual(fact.reassembly, final) {
+ t.Fatalf("test %v:\nwant: %v\n got: %v\n", i, final, fact.reassembly)
+ }
+ if testDebug {
+ fmt.Printf("test %v passing...(%s)\n", i, final)
+ }
+ }
+}
+
+func TestReorder(t *testing.T) {
+ test(t, []testSequence{
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1001,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1004,
+ BaseLayer: layers.BaseLayer{Payload: []byte{4, 5, 6}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1010,
+ BaseLayer: layers.BaseLayer{Payload: []byte{10, 11, 12}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1007,
+ BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Skip: -1,
+ Bytes: []byte{1, 2, 3},
+ },
+ Reassembly{
+ Bytes: []byte{4, 5, 6},
+ },
+ Reassembly{
+ Bytes: []byte{7, 8, 9},
+ },
+ Reassembly{
+ Bytes: []byte{10, 11, 12},
+ },
+ },
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1016,
+ BaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1019,
+ BaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1013,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Bytes: []byte{1, 2, 3},
+ },
+ Reassembly{
+ Bytes: []byte{2, 2, 3},
+ },
+ Reassembly{
+ Bytes: []byte{3, 2, 3},
+ },
+ },
+ },
+ })
+}
+
+func TestMaxPerSkip(t *testing.T) {
+ test(t, []testSequence{
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1000,
+ SYN: true,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Start: true,
+ Bytes: []byte{1, 2, 3},
+ },
+ },
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1007,
+ BaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1010,
+ BaseLayer: layers.BaseLayer{Payload: []byte{4, 2, 3}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1013,
+ BaseLayer: layers.BaseLayer{Payload: []byte{5, 2, 3}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1016,
+ BaseLayer: layers.BaseLayer{Payload: []byte{6, 2, 3}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Skip: 3,
+ Bytes: []byte{3, 2, 3},
+ },
+ Reassembly{
+ Bytes: []byte{4, 2, 3},
+ },
+ Reassembly{
+ Bytes: []byte{5, 2, 3},
+ },
+ Reassembly{
+ Bytes: []byte{6, 2, 3},
+ },
+ },
+ },
+ })
+}
+
+func TestReorderFast(t *testing.T) {
+ test(t, []testSequence{
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ SYN: true,
+ Seq: 1000,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Start: true,
+ Bytes: []byte{1, 2, 3},
+ },
+ },
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1007,
+ BaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1004,
+ BaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Bytes: []byte{2, 2, 3},
+ },
+ Reassembly{
+ Bytes: []byte{3, 2, 3},
+ },
+ },
+ },
+ })
+}
+
+func TestOverlap(t *testing.T) {
+ test(t, []testSequence{
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ SYN: true,
+ Seq: 1000,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Start: true,
+ Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
+ },
+ },
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1007,
+ BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Bytes: []byte{1, 2, 3, 4, 5},
+ },
+ },
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1010,
+ BaseLayer: layers.BaseLayer{Payload: []byte{0, 1, 2, 3, 4, 5, 6, 7}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Bytes: []byte{6, 7},
+ },
+ },
+ },
+ })
+}
+
+func TestBufferedOverlap1(t *testing.T) {
+ test(t, []testSequence{
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1007,
+ BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1010,
+ BaseLayer: layers.BaseLayer{Payload: []byte{0, 1, 2, 3, 4, 5, 6, 7}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ SYN: true,
+ Seq: 1000,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Start: true,
+ Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
+ },
+ Reassembly{
+ Bytes: []byte{1, 2, 3, 4, 5},
+ },
+ Reassembly{
+ Bytes: []byte{6, 7},
+ },
+ },
+ },
+ })
+}
+
+func TestBufferedOverlapCase6(t *testing.T) {
+ test(t, []testSequence{
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1007,
+ BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1010,
+ BaseLayer: layers.BaseLayer{Payload: []byte{10, 11, 12, 13, 14}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ SYN: true,
+ Seq: 1000,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Start: true,
+ Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
+ },
+ Reassembly{
+ Bytes: []byte{11, 12, 13, 14, 5},
+ },
+ },
+ },
+ })
+}
+
+func TestBufferedOverlapExisting(t *testing.T) {
+ test(t, []testSequence{
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1000,
+ SYN: true,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Start: true,
+ Bytes: []byte{1, 2, 3, 4, 5, 6, 7},
+ },
+ },
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1005,
+ BaseLayer: layers.BaseLayer{Payload: []byte{5, 6, 7, 8, 9, 10}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Bytes: []byte{8, 9, 10},
+ },
+ },
+ },
+ })
+}
+
+func TestBufferedOverlapReemit(t *testing.T) {
+ test(t, []testSequence{
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1000,
+ SYN: true,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Start: true,
+ Bytes: []byte{1, 2, 3, 4, 5, 6, 7},
+ },
+ },
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1003,
+ BaseLayer: layers.BaseLayer{Payload: []byte{3, 4, 5}},
+ },
+ want: []Reassembly{},
+ },
+ })
+}
+
+func TestReorderRetransmission2(t *testing.T) {
+ test(t, []testSequence{
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1001,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1007,
+ BaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1007,
+ BaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1010,
+ BaseLayer: layers.BaseLayer{Payload: []byte{10, 11}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1004,
+ BaseLayer: layers.BaseLayer{Payload: []byte{6, 6, 6, 2, 2}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Skip: -1,
+ Bytes: []byte{1, 2, 3},
+ },
+ Reassembly{
+ Bytes: []byte{6, 6, 6},
+ },
+ Reassembly{
+ Bytes: []byte{2, 2, 3},
+ },
+ Reassembly{
+ Bytes: []byte{10, 11},
+ },
+ },
+ },
+ })
+}
+
+func TestOverrun1(t *testing.T) {
+ test(t, []testSequence{
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ SYN: true,
+ Seq: 0xFFFFFFFF,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Start: true,
+ Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
+ },
+ },
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 10,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Bytes: []byte{1, 2, 3, 4},
+ },
+ },
+ },
+ })
+}
+
+func TestOverrun2(t *testing.T) {
+ test(t, []testSequence{
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 10,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ SYN: true,
+ Seq: 0xFFFFFFFF,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Start: true,
+ Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
+ },
+ Reassembly{
+ Bytes: []byte{1, 2, 3, 4},
+ },
+ },
+ },
+ })
+}
+
+func TestCacheLargePacket(t *testing.T) {
+ data := make([]byte, pageBytes*3)
+ test(t, []testSequence{
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1001,
+ BaseLayer: layers.BaseLayer{Payload: data},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1000,
+ SYN: true,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Start: true,
+ Bytes: []byte{},
+ },
+ Reassembly{
+ Bytes: data[:pageBytes],
+ },
+ Reassembly{
+ Bytes: data[pageBytes : pageBytes*2],
+ },
+ Reassembly{
+ Bytes: data[pageBytes*2 : pageBytes*3],
+ },
+ },
+ },
+ })
+}
+
+/*
+ * Keep
+ */
+type testKeepFactory struct {
+ keep int
+ bytes []byte
+ skipped int
+ t *testing.T
+}
+
+func (tkf *testKeepFactory) New(a, b gopacket.Flow, tcp *layers.TCP, ac AssemblerContext) Stream {
+ return tkf
+}
+func (tkf *testKeepFactory) ReassembledSG(sg ScatterGather, ac AssemblerContext) {
+ l, _ := sg.Lengths()
+ _, _, _, tkf.skipped = sg.Info()
+ tkf.bytes = sg.Fetch(l)
+ sg.KeepFrom(tkf.keep)
+}
+func (tkf *testKeepFactory) ReassemblyComplete(ac AssemblerContext) bool {
+ return true
+}
+
+func (tkf *testKeepFactory) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, seq Sequence, start *bool, ac AssemblerContext) bool {
+ return true
+}
+
+type testKeepSequence struct {
+ tcp layers.TCP
+ keep int
+ want []byte
+ skipped int
+}
+
+func testKeep(t *testing.T, s []testKeepSequence) {
+ fact := &testKeepFactory{t: t}
+ p := NewStreamPool(fact)
+ a := NewAssembler(p)
+ a.MaxBufferedPagesPerConnection = 4
+ port := layers.TCPPort(0)
+ for i, test := range s {
+ // Fake some values according to ports
+ flow := netFlow
+ dir := TCPDirClientToServer
+ if port == 0 {
+ port = test.tcp.SrcPort
+ }
+ if port != test.tcp.SrcPort {
+ dir = dir.Reverse()
+ flow = flow.Reverse()
+ }
+ test.tcp.SetInternalPortsForTesting()
+ fact.keep = test.keep
+ fact.bytes = []byte{}
+ if testDebug {
+ fmt.Printf("#### testKeep: #%d: sending:%s\n", i, hex.EncodeToString(test.tcp.BaseLayer.Payload))
+ }
+ a.Assemble(flow, &test.tcp)
+ if !reflect.DeepEqual(fact.bytes, test.want) {
+ t.Fatalf("#%d: invalid bytes: got %v, expected %v", i, fact.bytes, test.want)
+ }
+ if fact.skipped != test.skipped {
+ t.Fatalf("#%d: expecting %d skipped bytes, got %d", i, test.skipped, fact.skipped)
+ }
+ if testDebug {
+ fmt.Printf("#### testKeep: #%d: bytes: %s\n", i, hex.EncodeToString(fact.bytes))
+ }
+ }
+}
+
+func TestKeepSimpleOnBoundary(t *testing.T) {
+ testKeep(t, []testKeepSequence{
+ {
+ tcp: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ SYN: true,
+ Seq: 1000,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+ },
+ keep: 0,
+ want: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
+ },
+ {
+ tcp: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1007,
+ BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}},
+ },
+ want: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5},
+ },
+ })
+}
+
+func TestKeepSimpleNotBoundaryLive(t *testing.T) {
+ testKeep(t, []testKeepSequence{
+ {
+ tcp: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ SYN: true,
+ Seq: 1000,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+ },
+ keep: 1,
+ want: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
+ },
+ {
+ tcp: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1007,
+ BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}},
+ },
+ want: []byte{2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5},
+ },
+ })
+}
+
+func TestKeepSimpleNotBoundaryAlreadyKept(t *testing.T) {
+ testKeep(t, []testKeepSequence{
+ {
+ tcp: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ SYN: true,
+ Seq: 1000,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0x10}},
+ },
+ keep: 0, // 1→10
+ want: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0x10},
+ },
+ {
+ tcp: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1007,
+ BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15}},
+ },
+ keep: 11, // 12→15
+ want: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15},
+ },
+ {
+ tcp: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1016,
+ BaseLayer: layers.BaseLayer{Payload: []byte{0x16, 0x17, 0x18}},
+ },
+ want: []byte{0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18},
+ },
+ })
+}
+
+func TestKeepLonger(t *testing.T) {
+ testKeep(t, []testKeepSequence{
+ {
+ tcp: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ SYN: true,
+ Seq: 1000,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}},
+ },
+ keep: 0,
+ want: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
+ },
+ {
+ tcp: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1007,
+ BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 10, 11, 12, 13, 14, 15}},
+ },
+ keep: 0,
+ want: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
+ },
+ {
+ tcp: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1010,
+ BaseLayer: layers.BaseLayer{Payload: []byte{10, 11, 12, 13, 14, 15, 16, 17}},
+ },
+ want: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17},
+ },
+ })
+}
+
+func TestKeepWithFlush(t *testing.T) {
+ testKeep(t, []testKeepSequence{
+ {
+ tcp: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ SYN: true,
+ Seq: 1000,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1}},
+ },
+ keep: 1,
+ want: []byte{1},
+ },
+ {
+ tcp: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1003,
+ BaseLayer: layers.BaseLayer{Payload: []byte{3}},
+ },
+ keep: 0,
+ want: []byte{},
+ },
+ {
+ tcp: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1004,
+ BaseLayer: layers.BaseLayer{Payload: []byte{4}},
+ },
+ keep: 0,
+ want: []byte{},
+ },
+ {
+ tcp: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1006,
+ BaseLayer: layers.BaseLayer{Payload: []byte{6}},
+ },
+ keep: 0,
+ want: []byte{},
+ },
+ // Exceeding 4 pages: flushing first continuous pages
+ {
+ tcp: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1008,
+ BaseLayer: layers.BaseLayer{Payload: []byte{8}},
+ },
+ keep: 0,
+ skipped: 1,
+ want: []byte{3, 4},
+ },
+ {
+ tcp: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1010,
+ BaseLayer: layers.BaseLayer{Payload: []byte{10}},
+ },
+ keep: 0,
+ skipped: 1,
+ want: []byte{6},
+ },
+ {
+ tcp: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1012,
+ BaseLayer: layers.BaseLayer{Payload: []byte{12}},
+ },
+ keep: 0,
+ skipped: 1,
+ want: []byte{8},
+ },
+ })
+}
+
+/*
+ * FSM tests
+ */
+/* For FSM: bump nb on accepted packet */
+type testFSMFactory struct {
+ nb int
+ fsm TCPSimpleFSM
+}
+
+func (t *testFSMFactory) New(a, b gopacket.Flow, tcp *layers.TCP, ac AssemblerContext) Stream {
+ return t
+}
+func (t *testFSMFactory) ReassembledSG(sg ScatterGather, ac AssemblerContext) {
+}
+func (t *testFSMFactory) ReassemblyComplete(ac AssemblerContext) bool {
+ return false
+}
+
+func (t *testFSMFactory) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, seq Sequence, start *bool, ac AssemblerContext) bool {
+ ok := t.fsm.CheckState(tcp, dir)
+ if ok {
+ t.nb++
+ }
+ return ok
+}
+
+type testFSMSequence struct {
+ tcp layers.TCP
+ ci gopacket.CaptureInfo
+ nb int
+}
+
+func (seq *testFSMSequence) GetCaptureInfo() gopacket.CaptureInfo {
+ return seq.ci
+}
+
+func testFSM(t *testing.T, s []testFSMSequence) {
+ fact := &testFSMFactory{}
+ p := NewStreamPool(fact)
+ a := NewAssembler(p)
+ //a.MaxBufferedPagesPerConnection = 4
+ fact.nb = 0
+ port := layers.TCPPort(0)
+ for i, test := range s {
+ // Fake some values according to ports
+ flow := netFlow
+ dir := TCPDirClientToServer
+ if port == 0 {
+ port = test.tcp.SrcPort
+ }
+ if port != test.tcp.SrcPort {
+ dir = dir.Reverse()
+ flow = flow.Reverse()
+ }
+ test.tcp.SetInternalPortsForTesting()
+ a.AssembleWithContext(flow, &test.tcp, &test)
+ if fact.nb != test.nb {
+ t.Fatalf("#%d: packet rejected: got %d, expected %d", i, fact.nb, test.nb)
+ }
+ }
+}
+
+func TestFSMnormalFlow(t *testing.T) {
+ testFSM(t, []testFSMSequence{
+ {
+ tcp: layers.TCP{
+ SYN: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511116,
+ Ack: 0,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 566690000),
+ },
+ nb: 1,
+ },
+ {
+ tcp: layers.TCP{
+ SYN: true,
+ ACK: true,
+ SrcPort: 53,
+ DstPort: 54842,
+ Seq: 3465787765,
+ Ack: 374511117,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590332000),
+ },
+ nb: 2,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511117,
+ Ack: 3465787766,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590346000),
+ },
+ nb: 3,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511117,
+ Ack: 3465787766,
+ BaseLayer: 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}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590387000),
+ },
+ nb: 4,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 53,
+ DstPort: 54842,
+ Seq: 3465787766,
+ Ack: 374511150,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 613687000),
+ },
+ nb: 5,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 53,
+ DstPort: 54842,
+ Seq: 3465787766,
+ Ack: 374511150,
+ BaseLayer: 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}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 621198000),
+ },
+ nb: 6,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511150,
+ Ack: 3465789226,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 621220000),
+ },
+ nb: 7,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 53,
+ DstPort: 54842,
+ Seq: 3465789226,
+ Ack: 374511150,
+ BaseLayer: 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}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 622508000),
+ },
+ nb: 8,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511150,
+ Ack: 3465789949,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 622531000),
+ },
+ nb: 9,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ FIN: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511150,
+ Ack: 3465789949,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 622907000),
+ },
+ nb: 10,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ FIN: true,
+ SrcPort: 53,
+ DstPort: 54842,
+ Seq: 3465789949,
+ Ack: 374511151,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 652784000),
+ },
+ nb: 11,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511151,
+ Ack: 3465789950,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 652809000),
+ },
+ nb: 12,
+ },
+ })
+}
+
+func TestFSMearlyRST(t *testing.T) {
+ testFSM(t, []testFSMSequence{
+ {
+ tcp: layers.TCP{
+ SYN: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511116,
+ Ack: 0,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 566690000),
+ },
+ nb: 1,
+ },
+ {
+ tcp: layers.TCP{
+ SYN: true,
+ ACK: true,
+ SrcPort: 53,
+ DstPort: 54842,
+ Seq: 3465787765,
+ Ack: 374511117,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590332000),
+ },
+ nb: 2,
+ },
+ {
+ tcp: layers.TCP{
+ RST: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511117,
+ Ack: 3465787766,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590346000),
+ },
+ nb: 3,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511117,
+ Ack: 3465787766,
+ BaseLayer: 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}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590387000),
+ },
+ nb: 3,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 53,
+ DstPort: 54842,
+ Seq: 3465787766,
+ Ack: 374511150,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 613687000),
+ },
+ nb: 3,
+ },
+ })
+}
+
+func TestFSMestablishedThenRST(t *testing.T) {
+ testFSM(t, []testFSMSequence{
+ {
+ tcp: layers.TCP{
+ SYN: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511116,
+ Ack: 0,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 566690000),
+ },
+ nb: 1,
+ },
+ {
+ tcp: layers.TCP{
+ SYN: true,
+ ACK: true,
+ SrcPort: 53,
+ DstPort: 54842,
+ Seq: 3465787765,
+ Ack: 374511117,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590332000),
+ },
+ nb: 2,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511117,
+ Ack: 3465787766,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590346000),
+ },
+ nb: 3,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511117,
+ Ack: 3465787766,
+ BaseLayer: 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}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590387000),
+ },
+ nb: 4,
+ },
+ {
+ tcp: layers.TCP{
+ RST: true,
+ SrcPort: 53,
+ DstPort: 54842,
+ Seq: 3465787766,
+ Ack: 374511150,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 613687000),
+ },
+ nb: 5,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 53,
+ DstPort: 54842,
+ Seq: 3465787766,
+ Ack: 374511150,
+ BaseLayer: 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}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 621198000),
+ },
+ nb: 5,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511150,
+ Ack: 3465789226,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 621220000),
+ },
+ nb: 5,
+ },
+ })
+}
+
+func TestFSMmissingSYNACK(t *testing.T) {
+ testFSM(t, []testFSMSequence{
+ {
+ tcp: layers.TCP{
+ SYN: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511116,
+ Ack: 0,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 566690000),
+ },
+ nb: 1,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511117,
+ Ack: 3465787766,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590346000),
+ },
+ nb: 1,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511117,
+ Ack: 3465787766,
+ BaseLayer: 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}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590387000),
+ },
+ nb: 1,
+ },
+ })
+}
+
+/*
+ * Memory test
+ */
+func TestMemoryShrink(t *testing.T) {
+ tcp := layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ SYN: true,
+ Seq: 999,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+ }
+ a := NewAssembler(NewStreamPool(&testFactoryBench{}))
+ var before runtime.MemStats
+ runtime.GC()
+ runtime.ReadMemStats(&before)
+ run := 1050
+ // Allocate > initial
+ for i := 0; i < run; i++ {
+ a.Assemble(netFlow, &tcp)
+ if tcp.SYN {
+ tcp.SYN = false
+ tcp.Seq += 1 + 1
+ }
+ tcp.Seq += 10
+ }
+ var after runtime.MemStats
+ a.FlushAll()
+ runtime.GC()
+ runtime.ReadMemStats(&after)
+ if after.HeapAlloc < before.HeapAlloc {
+ t.Fatalf("Nothing allocated for %d run: before: %d, after: %d", run, before.HeapAlloc, after.HeapAlloc)
+ }
+ before = after
+ // Do ~ initial allocs+free()
+ run *= 2
+ for i := 0; i < run; i++ {
+ a.Assemble(netFlow, &tcp)
+ if i%50 == 0 {
+ a.FlushAll()
+ }
+ tcp.Seq += 10
+ }
+ runtime.GC()
+ runtime.ReadMemStats(&after)
+ if after.HeapAlloc >= before.HeapAlloc {
+ t.Fatalf("Nothing freed for %d run: before: %d, after: %d", run, before.HeapAlloc, after.HeapAlloc)
+ }
+}
+
+/*
+ * Benchmark tests
+ */
+func BenchmarkSingleStreamNo(b *testing.B) {
+ t := layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ SYN: true,
+ Seq: 1000,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+ }
+ a := NewAssembler(NewStreamPool(&testFactoryBench{}))
+ for i := 0; i < b.N; i++ {
+ a.Assemble(netFlow, &t)
+ if t.SYN {
+ t.SYN = false
+ t.Seq++
+ }
+ t.Seq += 10
+ }
+}
+
+func BenchmarkSingleStreamSkips(b *testing.B) {
+ t := layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ SYN: true,
+ Seq: 1000,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+ }
+ a := NewAssembler(NewStreamPool(&testFactoryBench{}))
+ skipped := false
+ for i := 0; i < b.N; i++ {
+ if i%10 == 9 {
+ t.Seq += 10
+ skipped = true
+ } else if skipped {
+ t.Seq -= 20
+ }
+ a.Assemble(netFlow, &t)
+ if t.SYN {
+ t.SYN = false
+ t.Seq++
+ }
+ t.Seq += 10
+ if skipped {
+ t.Seq += 10
+ skipped = false
+ }
+ }
+}
+
+func BenchmarkSingleStreamLoss(b *testing.B) {
+ t := layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ SYN: true,
+ Seq: 1000,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+ }
+ a := NewAssembler(NewStreamPool(&testFactoryBench{}))
+ for i := 0; i < b.N; i++ {
+ a.Assemble(netFlow, &t)
+ t.SYN = false
+ t.Seq += 11
+ }
+}
+
+func BenchmarkMultiStreamGrow(b *testing.B) {
+ t := layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 0,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+ }
+ a := NewAssembler(NewStreamPool(&testFactoryBench{}))
+ for i := 0; i < b.N; i++ {
+ t.SrcPort = layers.TCPPort(i)
+ a.Assemble(netFlow, &t)
+ t.Seq += 10
+ }
+}
+
+func BenchmarkMultiStreamConn(b *testing.B) {
+ t := layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 0,
+ SYN: true,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+ }
+ a := NewAssembler(NewStreamPool(&testFactoryBench{}))
+ for i := 0; i < b.N; i++ {
+ t.SrcPort = layers.TCPPort(i)
+ a.Assemble(netFlow, &t)
+ if i%65536 == 65535 {
+ if t.SYN {
+ t.SYN = false
+ t.Seq++
+ }
+ t.Seq += 10
+ }
+ }
+}
+
+type testMemoryContext struct{}
+
+func (t *testMemoryContext) GetCaptureInfo() gopacket.CaptureInfo {
+ return gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590387000),
+ }
+}
+
+func TestFullyOrderedAndCompleteStreamDoesNotAlloc(t *testing.T) {
+ c2s := layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 0,
+ SYN: true,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+ }
+ s2c := layers.TCP{
+ SrcPort: c2s.DstPort,
+ DstPort: c2s.SrcPort,
+ Seq: 0,
+ SYN: true,
+ ACK: true,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+ }
+ tf := testMemoryFactory{}
+ a := NewAssembler(NewStreamPool(&tf))
+
+ ctx := &testMemoryContext{}
+ // First packet
+ a.AssembleWithContext(netFlow, &c2s, ctx)
+ a.AssembleWithContext(netFlow.Reverse(), &s2c, ctx)
+ c2s.SYN, s2c.SYN = false, false
+ c2s.ACK = true
+ c2s.Seq++
+ s2c.Seq++
+ N := 1000
+ if n := testing.AllocsPerRun(N, func() {
+ c2s.Seq += 10
+ s2c.Seq += 10
+ c2s.Ack += 10
+ s2c.Ack += 10
+ a.AssembleWithContext(netFlow, &c2s, ctx)
+ a.AssembleWithContext(netFlow.Reverse(), &s2c, ctx)
+ }); n > 0 {
+ t.Error(n, "mallocs for normal TCP stream")
+ }
+ // Ensure all bytes have been through the stream
+ // +1 for first packet and +1 because AllocsPerRun seems to run fun N+1 times.
+ if tf.bytes != 10*2*(N+1+1) {
+ t.Error(tf.bytes, "bytes handled, expected", 10*2*(N+1+1))
+ }
+}
diff --git a/vendor/github.com/google/gopacket/reassembly/tcpcheck.go b/vendor/github.com/google/gopacket/reassembly/tcpcheck.go
new file mode 100644
index 0000000..4b52aba
--- /dev/null
+++ b/vendor/github.com/google/gopacket/reassembly/tcpcheck.go
@@ -0,0 +1,246 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package reassembly
+
+import (
+ "encoding/binary"
+ "fmt"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+)
+
+/*
+ * Check TCP packet against options (window, MSS)
+ */
+
+type tcpStreamOptions struct {
+ mss int
+ scale int
+ receiveWindow uint
+}
+
+// TCPOptionCheck contains options for the two directions
+type TCPOptionCheck struct {
+ options [2]tcpStreamOptions
+}
+
+func (t *TCPOptionCheck) getOptions(dir TCPFlowDirection) *tcpStreamOptions {
+ if dir == TCPDirClientToServer {
+ return &t.options[0]
+ }
+ return &t.options[1]
+}
+
+// NewTCPOptionCheck creates default options
+func NewTCPOptionCheck() TCPOptionCheck {
+ return TCPOptionCheck{
+ options: [2]tcpStreamOptions{
+ tcpStreamOptions{
+ mss: 0,
+ scale: -1,
+ receiveWindow: 0,
+ }, tcpStreamOptions{
+ mss: 0,
+ scale: -1,
+ receiveWindow: 0,
+ },
+ },
+ }
+}
+
+// Accept checks whether the packet should be accepted by checking TCP options
+func (t *TCPOptionCheck) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, acked Sequence, start *bool) error {
+ options := t.getOptions(dir)
+ if tcp.SYN {
+ mss := -1
+ scale := -1
+ for _, o := range tcp.Options {
+ // MSS
+ if o.OptionType == 2 {
+ if len(o.OptionData) != 2 {
+ return fmt.Errorf("MSS option data length expected 2, got %d", len(o.OptionData))
+ }
+ mss = int(binary.BigEndian.Uint16(o.OptionData[:2]))
+ }
+ // Window scaling
+ if o.OptionType == 3 {
+ if len(o.OptionData) != 1 {
+ return fmt.Errorf("Window scaling length expected: 1, got %d", len(o.OptionData))
+ }
+ scale = int(o.OptionData[0])
+ }
+ }
+ options.mss = mss
+ options.scale = scale
+ } else {
+ if acked != invalidSequence {
+ revOptions := t.getOptions(dir.Reverse())
+ length := len(tcp.Payload)
+
+ // Check packet is in the correct window
+ diff := acked.Difference(Sequence(tcp.Seq))
+ if diff == -1 && (length == 1 || length == 0) {
+ // This is probably a Keep-alive
+ // TODO: check byte is ok
+ } else if diff < 0 {
+ return fmt.Errorf("Re-emitted packet (diff:%d,seq:%d,rev-ack:%d)", diff,
+ tcp.Seq, acked)
+ } else if revOptions.mss > 0 && length > revOptions.mss {
+ return fmt.Errorf("%d > mss (%d)", length, revOptions.mss)
+ } else if revOptions.receiveWindow != 0 && revOptions.scale < 0 && diff > int(revOptions.receiveWindow) {
+ return fmt.Errorf("%d > receiveWindow(%d)", diff, revOptions.receiveWindow)
+ }
+ }
+ }
+ // Compute receiveWindow
+ options.receiveWindow = uint(tcp.Window)
+ if options.scale > 0 {
+ options.receiveWindow = options.receiveWindow << (uint(options.scale))
+ }
+ return nil
+}
+
+// TCPSimpleFSM implements a very simple TCP state machine
+//
+// Usage:
+// When implementing a Stream interface and to avoid to consider packets that
+// would be rejected due to client/server's TCP stack, the Accept() can call
+// TCPSimpleFSM.CheckState().
+//
+// Limitations:
+// - packet should be received in-order.
+// - no check on sequence number is performed
+// - no RST
+type TCPSimpleFSM struct {
+ dir TCPFlowDirection
+ state int
+ options TCPSimpleFSMOptions
+}
+
+// TCPSimpleFSMOptions holds options for TCPSimpleFSM
+type TCPSimpleFSMOptions struct {
+ SupportMissingEstablishment bool // Allow missing SYN, SYN+ACK, ACK
+}
+
+// Internal values of state machine
+const (
+ TCPStateClosed = 0
+ TCPStateSynSent = 1
+ TCPStateEstablished = 2
+ TCPStateCloseWait = 3
+ TCPStateLastAck = 4
+ TCPStateReset = 5
+)
+
+// NewTCPSimpleFSM creates a new TCPSimpleFSM
+func NewTCPSimpleFSM(options TCPSimpleFSMOptions) *TCPSimpleFSM {
+ return &TCPSimpleFSM{
+ state: TCPStateClosed,
+ options: options,
+ }
+}
+
+func (t *TCPSimpleFSM) String() string {
+ switch t.state {
+ case TCPStateClosed:
+ return "Closed"
+ case TCPStateSynSent:
+ return "SynSent"
+ case TCPStateEstablished:
+ return "Established"
+ case TCPStateCloseWait:
+ return "CloseWait"
+ case TCPStateLastAck:
+ return "LastAck"
+ case TCPStateReset:
+ return "Reset"
+ }
+ return "?"
+}
+
+// CheckState returns false if tcp is invalid wrt current state or update the state machine's state
+func (t *TCPSimpleFSM) CheckState(tcp *layers.TCP, dir TCPFlowDirection) bool {
+ if t.state == TCPStateClosed && t.options.SupportMissingEstablishment && !(tcp.SYN && !tcp.ACK) {
+ /* try to figure out state */
+ switch true {
+ case tcp.SYN && tcp.ACK:
+ t.state = TCPStateSynSent
+ t.dir = dir.Reverse()
+ case tcp.FIN && !tcp.ACK:
+ t.state = TCPStateEstablished
+ case tcp.FIN && tcp.ACK:
+ t.state = TCPStateCloseWait
+ t.dir = dir.Reverse()
+ default:
+ t.state = TCPStateEstablished
+ }
+ }
+
+ switch t.state {
+ /* openning connection */
+ case TCPStateClosed:
+ if tcp.SYN && !tcp.ACK {
+ t.dir = dir
+ t.state = TCPStateSynSent
+ return true
+ }
+ case TCPStateSynSent:
+ if tcp.RST {
+ t.state = TCPStateReset
+ return true
+ }
+
+ if tcp.SYN && tcp.ACK && dir == t.dir.Reverse() {
+ t.state = TCPStateEstablished
+ return true
+ }
+ if tcp.SYN && !tcp.ACK && dir == t.dir {
+ // re-transmission
+ return true
+ }
+ /* established */
+ case TCPStateEstablished:
+ if tcp.RST {
+ t.state = TCPStateReset
+ return true
+ }
+
+ if tcp.FIN {
+ t.state = TCPStateCloseWait
+ t.dir = dir
+ return true
+ }
+ // accept any packet
+ return true
+ /* closing connection */
+ case TCPStateCloseWait:
+ if tcp.RST {
+ t.state = TCPStateReset
+ return true
+ }
+
+ if tcp.FIN && tcp.ACK && dir == t.dir.Reverse() {
+ t.state = TCPStateLastAck
+ return true
+ }
+ if tcp.ACK {
+ return true
+ }
+ case TCPStateLastAck:
+ if tcp.RST {
+ t.state = TCPStateReset
+ return true
+ }
+
+ if tcp.ACK && t.dir == dir {
+ t.state = TCPStateClosed
+ return true
+ }
+ }
+ return false
+}
diff --git a/vendor/github.com/google/gopacket/reassembly/tcpcheck_test.go b/vendor/github.com/google/gopacket/reassembly/tcpcheck_test.go
new file mode 100644
index 0000000..4c2391d
--- /dev/null
+++ b/vendor/github.com/google/gopacket/reassembly/tcpcheck_test.go
@@ -0,0 +1,249 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package reassembly
+
+import (
+ "testing"
+ "time"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+)
+
+// netFlow declared in tcpassembly_test
+
+/*
+ * FSM tests
+ */
+
+type testCheckFSMSequence struct {
+ tcp layers.TCP
+ ci gopacket.CaptureInfo
+ expected bool
+}
+
+func testCheckFSM(t *testing.T, options TCPSimpleFSMOptions, s []testCheckFSMSequence) {
+ fsm := NewTCPSimpleFSM(options)
+ port := layers.TCPPort(0)
+ for i, test := range s {
+ // Fake some values according to ports
+ flow := netFlow
+ dir := TCPDirClientToServer
+ if port == 0 {
+ port = test.tcp.SrcPort
+ }
+ if port != test.tcp.SrcPort {
+ dir = dir.Reverse()
+ flow = flow.Reverse()
+ }
+ res := fsm.CheckState(&test.tcp, dir)
+ if res != test.expected {
+ t.Fatalf("#%d: packet rejected (%s): got %s, expected %s. State:%s", i, gopacket.LayerDump(&test.tcp), res, test.expected, fsm.String())
+ }
+ }
+}
+
+func TestCheckFSM(t *testing.T) {
+ testCheckFSM(t, TCPSimpleFSMOptions{}, []testCheckFSMSequence{
+ {
+ tcp: layers.TCP{
+ SYN: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511116,
+ Ack: 0,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 566690000),
+ },
+ expected: true,
+ },
+ {
+ tcp: layers.TCP{
+ SYN: true,
+ ACK: true,
+ SrcPort: 53,
+ DstPort: 54842,
+ Seq: 3465787765,
+ Ack: 374511117,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590332000),
+ },
+ expected: true,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511117,
+ Ack: 3465787766,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590346000),
+ },
+ expected: true,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511117,
+ Ack: 3465787766,
+ BaseLayer: 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}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590387000),
+ },
+ expected: true,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 53,
+ DstPort: 54842,
+ Seq: 3465787766,
+ Ack: 374511150,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 613687000),
+ },
+ expected: true,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 53,
+ DstPort: 54842,
+ Seq: 3465787766,
+ Ack: 374511150,
+ BaseLayer: 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}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 621198000),
+ },
+ expected: true,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511150,
+ Ack: 3465789226,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 621220000),
+ },
+ expected: true,
+ },
+ })
+}
+
+func TestCheckFSMmissingSYNACK(t *testing.T) {
+ testCheckFSM(t, TCPSimpleFSMOptions{}, []testCheckFSMSequence{
+ {
+ tcp: layers.TCP{
+ SYN: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511116,
+ Ack: 0,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 566690000),
+ },
+ expected: true,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511117,
+ Ack: 3465787766,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590346000),
+ },
+ expected: false,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511117,
+ Ack: 3465787766,
+ BaseLayer: 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}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590387000),
+ },
+ expected: false,
+ },
+ })
+}
+
+// Support packets w/o SYN (+SYN+ACK) depending on option
+func TestCheckFSMmissingSYN(t *testing.T) {
+ for _, val := range []bool{false, true} {
+ testCheckFSM(t, TCPSimpleFSMOptions{SupportMissingEstablishment: val}, []testCheckFSMSequence{
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 12,
+ Ack: 1012,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 566690000),
+ },
+ expected: val,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 53,
+ DstPort: 54842,
+ Seq: 1012,
+ Ack: 13,
+ BaseLayer: layers.BaseLayer{Payload: []byte{2}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590346000),
+ },
+ expected: val,
+ },
+ {
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 53,
+ DstPort: 54842,
+ Seq: 1013,
+ Ack: 13,
+ BaseLayer: layers.BaseLayer{Payload: []byte{3}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590387000),
+ },
+ expected: val,
+ },
+ })
+ }
+}
diff --git a/vendor/github.com/google/gopacket/routing/common.go b/vendor/github.com/google/gopacket/routing/common.go
new file mode 100644
index 0000000..a6746d4
--- /dev/null
+++ b/vendor/github.com/google/gopacket/routing/common.go
@@ -0,0 +1,36 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package routing
+
+import (
+ "net"
+)
+
+// Router implements simple IPv4/IPv6 routing based on the kernel's routing
+// table. This routing library has very few features and may actually route
+// incorrectly in some cases, but it should work the majority of the time.
+type Router interface {
+ // Route returns where to route a packet based on the packet's source
+ // and destination IP address.
+ //
+ // Callers may pass in nil for src, in which case the src is treated as
+ // either 0.0.0.0 or ::, depending on whether dst is a v4 or v6 address.
+ //
+ // It returns the interface on which to send the packet, the gateway IP
+ // to send the packet to (if necessary), the preferred src IP to use (if
+ // available). If the preferred src address is not given in the routing
+ // table, the first IP address of the interface is provided.
+ //
+ // If an error is encountered, iface, geteway, and
+ // preferredSrc will be nil, and err will be set.
+ Route(dst net.IP) (iface *net.Interface, gateway, preferredSrc net.IP, err error)
+
+ // RouteWithSrc routes based on source information as well as destination
+ // information. Either or both of input/src can be nil. If both are, this
+ // should behave exactly like Route(dst)
+ RouteWithSrc(input net.HardwareAddr, src, dst net.IP) (iface *net.Interface, gateway, preferredSrc net.IP, err error)
+}
diff --git a/vendor/github.com/google/gopacket/routing/other.go b/vendor/github.com/google/gopacket/routing/other.go
new file mode 100644
index 0000000..b53fea9
--- /dev/null
+++ b/vendor/github.com/google/gopacket/routing/other.go
@@ -0,0 +1,15 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build !linux
+
+// Package routing is currently only supported in Linux, but the build system requires a valid go file for all architectures.
+
+package routing
+
+func New() (Router, error) {
+ panic("router only implemented in linux")
+}
diff --git a/vendor/github.com/google/gopacket/routing/routing.go b/vendor/github.com/google/gopacket/routing/routing.go
new file mode 100644
index 0000000..cbbeb6e
--- /dev/null
+++ b/vendor/github.com/google/gopacket/routing/routing.go
@@ -0,0 +1,241 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build linux
+
+// Package routing provides a very basic but mostly functional implementation of
+// a routing table for IPv4/IPv6 addresses. It uses a routing table pulled from
+// the kernel via netlink to find the correct interface, gateway, and preferred
+// source IP address for packets destined to a particular location.
+//
+// The routing package is meant to be used with applications that are sending
+// raw packet data, which don't have the benefit of having the kernel route
+// packets for them.
+package routing
+
+import (
+ "bytes"
+ "errors"
+ "fmt"
+ "net"
+ "sort"
+ "strings"
+ "syscall"
+ "unsafe"
+)
+
+// Pulled from http://man7.org/linux/man-pages/man7/rtnetlink.7.html
+// See the section on RTM_NEWROUTE, specifically 'struct rtmsg'.
+type routeInfoInMemory struct {
+ Family byte
+ DstLen byte
+ SrcLen byte
+ TOS byte
+
+ Table byte
+ Protocol byte
+ Scope byte
+ Type byte
+
+ Flags uint32
+}
+
+// rtInfo contains information on a single route.
+type rtInfo struct {
+ Src, Dst *net.IPNet
+ Gateway, PrefSrc net.IP
+ // We currently ignore the InputIface.
+ InputIface, OutputIface uint32
+ Priority uint32
+}
+
+// routeSlice implements sort.Interface to sort routes by Priority.
+type routeSlice []*rtInfo
+
+func (r routeSlice) Len() int {
+ return len(r)
+}
+func (r routeSlice) Less(i, j int) bool {
+ return r[i].Priority < r[j].Priority
+}
+func (r routeSlice) Swap(i, j int) {
+ r[i], r[j] = r[j], r[i]
+}
+
+type router struct {
+ ifaces []net.Interface
+ addrs []ipAddrs
+ v4, v6 routeSlice
+}
+
+func (r *router) String() string {
+ strs := []string{"ROUTER", "--- V4 ---"}
+ for _, route := range r.v4 {
+ strs = append(strs, fmt.Sprintf("%+v", *route))
+ }
+ strs = append(strs, "--- V6 ---")
+ for _, route := range r.v6 {
+ strs = append(strs, fmt.Sprintf("%+v", *route))
+ }
+ return strings.Join(strs, "\n")
+}
+
+type ipAddrs struct {
+ v4, v6 net.IP
+}
+
+func (r *router) Route(dst net.IP) (iface *net.Interface, gateway, preferredSrc net.IP, err error) {
+ return r.RouteWithSrc(nil, nil, dst)
+}
+
+func (r *router) RouteWithSrc(input net.HardwareAddr, src, dst net.IP) (iface *net.Interface, gateway, preferredSrc net.IP, err error) {
+ var ifaceIndex int
+ switch {
+ case dst.To4() != nil:
+ ifaceIndex, gateway, preferredSrc, err = r.route(r.v4, input, src, dst)
+ case dst.To16() != nil:
+ ifaceIndex, gateway, preferredSrc, err = r.route(r.v6, input, src, dst)
+ default:
+ err = errors.New("IP is not valid as IPv4 or IPv6")
+ return
+ }
+
+ // Interfaces are 1-indexed, but we store them in a 0-indexed array.
+ ifaceIndex--
+
+ iface = &r.ifaces[ifaceIndex]
+ if preferredSrc == nil {
+ switch {
+ case dst.To4() != nil:
+ preferredSrc = r.addrs[ifaceIndex].v4
+ case dst.To16() != nil:
+ preferredSrc = r.addrs[ifaceIndex].v6
+ }
+ }
+ return
+}
+
+func (r *router) route(routes routeSlice, input net.HardwareAddr, src, dst net.IP) (iface int, gateway, preferredSrc net.IP, err error) {
+ var inputIndex uint32
+ if input != nil {
+ for i, iface := range r.ifaces {
+ if bytes.Equal(input, iface.HardwareAddr) {
+ // Convert from zero- to one-indexed.
+ inputIndex = uint32(i + 1)
+ break
+ }
+ }
+ }
+ for _, rt := range routes {
+ if rt.InputIface != 0 && rt.InputIface != inputIndex {
+ continue
+ }
+ if rt.Src != nil && !rt.Src.Contains(src) {
+ continue
+ }
+ if rt.Dst != nil && !rt.Dst.Contains(dst) {
+ continue
+ }
+ return int(rt.OutputIface), rt.Gateway, rt.PrefSrc, nil
+ }
+ err = fmt.Errorf("no route found for %v", dst)
+ return
+}
+
+// New creates a new router object. The router returned by New currently does
+// not update its routes after construction... care should be taken for
+// long-running programs to call New() regularly to take into account any
+// changes to the routing table which have occurred since the last New() call.
+func New() (Router, error) {
+ rtr := &router{}
+ tab, err := syscall.NetlinkRIB(syscall.RTM_GETROUTE, syscall.AF_UNSPEC)
+ if err != nil {
+ return nil, err
+ }
+ msgs, err := syscall.ParseNetlinkMessage(tab)
+ if err != nil {
+ return nil, err
+ }
+loop:
+ for _, m := range msgs {
+ switch m.Header.Type {
+ case syscall.NLMSG_DONE:
+ break loop
+ case syscall.RTM_NEWROUTE:
+ rt := (*routeInfoInMemory)(unsafe.Pointer(&m.Data[0]))
+ routeInfo := rtInfo{}
+ attrs, err := syscall.ParseNetlinkRouteAttr(&m)
+ if err != nil {
+ return nil, err
+ }
+ switch rt.Family {
+ case syscall.AF_INET:
+ rtr.v4 = append(rtr.v4, &routeInfo)
+ case syscall.AF_INET6:
+ rtr.v6 = append(rtr.v6, &routeInfo)
+ default:
+ continue loop
+ }
+ for _, attr := range attrs {
+ switch attr.Attr.Type {
+ case syscall.RTA_DST:
+ routeInfo.Dst = &net.IPNet{
+ IP: net.IP(attr.Value),
+ Mask: net.CIDRMask(int(rt.DstLen), len(attr.Value)*8),
+ }
+ case syscall.RTA_SRC:
+ routeInfo.Src = &net.IPNet{
+ IP: net.IP(attr.Value),
+ Mask: net.CIDRMask(int(rt.SrcLen), len(attr.Value)*8),
+ }
+ case syscall.RTA_GATEWAY:
+ routeInfo.Gateway = net.IP(attr.Value)
+ case syscall.RTA_PREFSRC:
+ routeInfo.PrefSrc = net.IP(attr.Value)
+ case syscall.RTA_IIF:
+ routeInfo.InputIface = *(*uint32)(unsafe.Pointer(&attr.Value[0]))
+ case syscall.RTA_OIF:
+ routeInfo.OutputIface = *(*uint32)(unsafe.Pointer(&attr.Value[0]))
+ case syscall.RTA_PRIORITY:
+ routeInfo.Priority = *(*uint32)(unsafe.Pointer(&attr.Value[0]))
+ }
+ }
+ }
+ }
+ sort.Sort(rtr.v4)
+ sort.Sort(rtr.v6)
+ ifaces, err := net.Interfaces()
+ if err != nil {
+ return nil, err
+ }
+ for i, iface := range ifaces {
+ if i != iface.Index-1 {
+ return nil, fmt.Errorf("out of order iface %d = %v", i, iface)
+ }
+ rtr.ifaces = append(rtr.ifaces, iface)
+ var addrs ipAddrs
+ ifaceAddrs, err := iface.Addrs()
+ if err != nil {
+ return nil, err
+ }
+ for _, addr := range ifaceAddrs {
+ if inet, ok := addr.(*net.IPNet); ok {
+ // Go has a nasty habit of giving you IPv4s as ::ffff:1.2.3.4 instead of 1.2.3.4.
+ // We want to use mapped v4 addresses as v4 preferred addresses, never as v6
+ // preferred addresses.
+ if v4 := inet.IP.To4(); v4 != nil {
+ if addrs.v4 == nil {
+ addrs.v4 = v4
+ }
+ } else if addrs.v6 == nil {
+ addrs.v6 = inet.IP
+ }
+ }
+ }
+ rtr.addrs = append(rtr.addrs, addrs)
+ }
+ return rtr, nil
+}
diff --git a/vendor/github.com/google/gopacket/tcpassembly/assembly.go b/vendor/github.com/google/gopacket/tcpassembly/assembly.go
new file mode 100644
index 0000000..50f6487
--- /dev/null
+++ b/vendor/github.com/google/gopacket/tcpassembly/assembly.go
@@ -0,0 +1,788 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// Package tcpassembly provides TCP stream re-assembly.
+//
+// The tcpassembly package implements uni-directional TCP reassembly, for use in
+// packet-sniffing applications. The caller reads packets off the wire, then
+// presents them to an Assembler in the form of gopacket layers.TCP packets
+// (github.com/google/gopacket, github.com/google/gopacket/layers).
+//
+// The Assembler uses a user-supplied
+// StreamFactory to create a user-defined Stream interface, then passes packet
+// data in stream order to that object. A concurrency-safe StreamPool keeps
+// track of all current Streams being reassembled, so multiple Assemblers may
+// run at once to assemble packets while taking advantage of multiple cores.
+package tcpassembly
+
+import (
+ "flag"
+ "fmt"
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+ "log"
+ "sync"
+ "time"
+)
+
+var 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.")
+var 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)")
+
+const invalidSequence = -1
+const uint32Max = 0xFFFFFFFF
+
+// Sequence is a TCP sequence number. It provides a few convenience functions
+// for handling TCP wrap-around. The sequence should always be in the range
+// [0,0xFFFFFFFF]... its other bits are simply used in wrap-around calculations
+// and should never be set.
+type Sequence int64
+
+// Difference defines an ordering for comparing TCP sequences that's safe for
+// roll-overs. It returns:
+// > 0 : if t comes after s
+// < 0 : if t comes before s
+// 0 : if t == s
+// The number returned is the sequence difference, so 4.Difference(8) will
+// return 4.
+//
+// It handles rollovers by considering any sequence in the first quarter of the
+// uint32 space to be after any sequence in the last quarter of that space, thus
+// wrapping the uint32 space.
+func (s Sequence) Difference(t Sequence) int {
+ if s > uint32Max-uint32Max/4 && t < uint32Max/4 {
+ t += uint32Max
+ } else if t > uint32Max-uint32Max/4 && s < uint32Max/4 {
+ s += uint32Max
+ }
+ return int(t - s)
+}
+
+// Add adds an integer to a sequence and returns the resulting sequence.
+func (s Sequence) Add(t int) Sequence {
+ return (s + Sequence(t)) & uint32Max
+}
+
+// Reassembly objects are passed by an Assembler into Streams using the
+// Reassembled call. Callers should not need to create these structs themselves
+// except for testing.
+type Reassembly struct {
+ // Bytes is the next set of bytes in the stream. May be empty.
+ Bytes []byte
+ // Skip is set to non-zero if bytes were skipped between this and the
+ // last Reassembly. If this is the first packet in a connection and we
+ // didn't see the start, we have no idea how many bytes we skipped, so
+ // we set it to -1. Otherwise, it's set to the number of bytes skipped.
+ Skip int
+ // Start is set if this set of bytes has a TCP SYN accompanying it.
+ Start bool
+ // End is set if this set of bytes has a TCP FIN or RST accompanying it.
+ End bool
+ // Seen is the timestamp this set of bytes was pulled off the wire.
+ Seen time.Time
+}
+
+const pageBytes = 1900
+
+// page is used to store TCP data we're not ready for yet (out-of-order
+// packets). Unused pages are stored in and returned from a pageCache, which
+// avoids memory allocation. Used pages are stored in a doubly-linked list in
+// a connection.
+type page struct {
+ Reassembly
+ seq Sequence
+ index int
+ prev, next *page
+ buf [pageBytes]byte
+}
+
+// pageCache is a concurrency-unsafe store of page objects we use to avoid
+// memory allocation as much as we can. It grows but never shrinks.
+type pageCache struct {
+ free []*page
+ pcSize int
+ size, used int
+ pages [][]page
+ pageRequests int64
+}
+
+const initialAllocSize = 1024
+
+func newPageCache() *pageCache {
+ pc := &pageCache{
+ free: make([]*page, 0, initialAllocSize),
+ pcSize: initialAllocSize,
+ }
+ pc.grow()
+ return pc
+}
+
+// grow exponentially increases the size of our page cache as much as necessary.
+func (c *pageCache) grow() {
+ pages := make([]page, c.pcSize)
+ c.pages = append(c.pages, pages)
+ c.size += c.pcSize
+ for i := range pages {
+ c.free = append(c.free, &pages[i])
+ }
+ if *memLog {
+ log.Println("PageCache: created", c.pcSize, "new pages")
+ }
+ c.pcSize *= 2
+}
+
+// next returns a clean, ready-to-use page object.
+func (c *pageCache) next(ts time.Time) (p *page) {
+ if *memLog {
+ c.pageRequests++
+ if c.pageRequests&0xFFFF == 0 {
+ log.Println("PageCache:", c.pageRequests, "requested,", c.used, "used,", len(c.free), "free")
+ }
+ }
+ if len(c.free) == 0 {
+ c.grow()
+ }
+ i := len(c.free) - 1
+ p, c.free = c.free[i], c.free[:i]
+ p.prev = nil
+ p.next = nil
+ p.Seen = ts
+ p.Bytes = p.buf[:0]
+ c.used++
+ return p
+}
+
+// replace replaces a page into the pageCache.
+func (c *pageCache) replace(p *page) {
+ c.used--
+ c.free = append(c.free, p)
+}
+
+// Stream is implemented by the caller to handle incoming reassembled
+// TCP data. Callers create a StreamFactory, then StreamPool uses
+// it to create a new Stream for every TCP stream.
+//
+// assembly will, in order:
+// 1) Create the stream via StreamFactory.New
+// 2) Call Reassembled 0 or more times, passing in reassembled TCP data in order
+// 3) Call ReassemblyComplete one time, after which the stream is dereferenced by assembly.
+type Stream interface {
+ // Reassembled is called zero or more times. assembly guarantees
+ // that the set of all Reassembly objects passed in during all
+ // calls are presented in the order they appear in the TCP stream.
+ // Reassembly objects are reused after each Reassembled call,
+ // so it's important to copy anything you need out of them
+ // (specifically out of Reassembly.Bytes) that you need to stay
+ // around after you return from the Reassembled call.
+ Reassembled([]Reassembly)
+ // ReassemblyComplete is called when assembly decides there is
+ // no more data for this Stream, either because a FIN or RST packet
+ // was seen, or because the stream has timed out without any new
+ // packet data (due to a call to FlushOlderThan).
+ ReassemblyComplete()
+}
+
+// StreamFactory is used by assembly to create a new stream for each
+// new TCP session.
+type StreamFactory interface {
+ // New should return a new stream for the given TCP key.
+ New(netFlow, tcpFlow gopacket.Flow) Stream
+}
+
+func (p *StreamPool) connections() []*connection {
+ p.mu.RLock()
+ conns := make([]*connection, 0, len(p.conns))
+ for _, conn := range p.conns {
+ conns = append(conns, conn)
+ }
+ p.mu.RUnlock()
+ return conns
+}
+
+// FlushOptions provide options for flushing connections.
+type FlushOptions struct {
+ T time.Time // If nonzero, only connections with data older than T are flushed
+ CloseAll bool // If true, ALL connections are closed post flush, not just those that correctly see FIN/RST.
+}
+
+// FlushWithOptions finds any streams waiting for packets older than
+// the given time, and pushes through the data they have (IE: tells
+// them to stop waiting and skip the data they're waiting for).
+//
+// Each Stream maintains a list of zero or more sets of bytes it has received
+// out-of-order. For example, if it has processed up through sequence number
+// 10, it might have bytes [15-20), [20-25), [30,50) in its list. Each set of
+// bytes also has the timestamp it was originally viewed. A flush call will
+// look at the smallest subsequent set of bytes, in this case [15-20), and if
+// its timestamp is older than the passed-in time, it will push it and all
+// contiguous byte-sets out to the Stream's Reassembled function. In this case,
+// it will push [15-20), but also [20-25), since that's contiguous. It will
+// only push [30-50) if its timestamp is also older than the passed-in time,
+// otherwise it will wait until the next FlushOlderThan to see if bytes [25-30)
+// come in.
+//
+// If it pushes all bytes (or there were no sets of bytes to begin with)
+// AND the connection has not received any bytes since the passed-in time,
+// the connection will be closed.
+//
+// If CloseAll is set, it will close out connections that have been drained.
+// Regardless of the CloseAll setting, connections stale for the specified
+// time will be closed.
+//
+// Returns the number of connections flushed, and of those, the number closed
+// because of the flush.
+func (a *Assembler) FlushWithOptions(opt FlushOptions) (flushed, closed int) {
+ conns := a.connPool.connections()
+ closes := 0
+ flushes := 0
+ for _, conn := range conns {
+ flushed := false
+ conn.mu.Lock()
+ if conn.closed {
+ // Already closed connection, nothing to do here.
+ conn.mu.Unlock()
+ continue
+ }
+ for conn.first != nil && conn.first.Seen.Before(opt.T) {
+ a.skipFlush(conn)
+ flushed = true
+ if conn.closed {
+ closes++
+ break
+ }
+ }
+ if opt.CloseAll && !conn.closed && conn.first == nil && conn.lastSeen.Before(opt.T) {
+ flushed = true
+ a.closeConnection(conn)
+ closes++
+ }
+ if flushed {
+ flushes++
+ }
+ conn.mu.Unlock()
+ }
+ return flushes, closes
+}
+
+// FlushOlderThan calls FlushWithOptions with the CloseAll option set to true.
+func (a *Assembler) FlushOlderThan(t time.Time) (flushed, closed int) {
+ return a.FlushWithOptions(FlushOptions{CloseAll: true, T: t})
+}
+
+// FlushAll flushes all remaining data into all remaining connections, closing
+// those connections. It returns the total number of connections flushed/closed
+// by the call.
+func (a *Assembler) FlushAll() (closed int) {
+ conns := a.connPool.connections()
+ closed = len(conns)
+ for _, conn := range conns {
+ conn.mu.Lock()
+ for !conn.closed {
+ a.skipFlush(conn)
+ }
+ conn.mu.Unlock()
+ }
+ return
+}
+
+type key [2]gopacket.Flow
+
+func (k *key) String() string {
+ return fmt.Sprintf("%s:%s", k[0], k[1])
+}
+
+// StreamPool stores all streams created by Assemblers, allowing multiple
+// assemblers to work together on stream processing while enforcing the fact
+// that a single stream receives its data serially. It is safe
+// for concurrency, usable by multiple Assemblers at once.
+//
+// StreamPool handles the creation and storage of Stream objects used by one or
+// more Assembler objects. When a new TCP stream is found by an Assembler, it
+// creates an associated Stream by calling its StreamFactory's New method.
+// Thereafter (until the stream is closed), that Stream object will receive
+// assembled TCP data via Assembler's calls to the stream's Reassembled
+// function.
+//
+// Like the Assembler, StreamPool attempts to minimize allocation. Unlike the
+// Assembler, though, it does have to do some locking to make sure that the
+// connection objects it stores are accessible to multiple Assemblers.
+type StreamPool struct {
+ conns map[key]*connection
+ users int
+ mu sync.RWMutex
+ factory StreamFactory
+ free []*connection
+ all [][]connection
+ nextAlloc int
+ newConnectionCount int64
+}
+
+func (p *StreamPool) grow() {
+ conns := make([]connection, p.nextAlloc)
+ p.all = append(p.all, conns)
+ for i := range conns {
+ p.free = append(p.free, &conns[i])
+ }
+ if *memLog {
+ log.Println("StreamPool: created", p.nextAlloc, "new connections")
+ }
+ p.nextAlloc *= 2
+}
+
+// NewStreamPool creates a new connection pool. Streams will
+// be created as necessary using the passed-in StreamFactory.
+func NewStreamPool(factory StreamFactory) *StreamPool {
+ return &StreamPool{
+ conns: make(map[key]*connection, initialAllocSize),
+ free: make([]*connection, 0, initialAllocSize),
+ factory: factory,
+ nextAlloc: initialAllocSize,
+ }
+}
+
+const assemblerReturnValueInitialSize = 16
+
+// NewAssembler creates a new assembler. Pass in the StreamPool
+// to use, may be shared across assemblers.
+//
+// This sets some sane defaults for the assembler options,
+// see DefaultAssemblerOptions for details.
+func NewAssembler(pool *StreamPool) *Assembler {
+ pool.mu.Lock()
+ pool.users++
+ pool.mu.Unlock()
+ return &Assembler{
+ ret: make([]Reassembly, assemblerReturnValueInitialSize),
+ pc: newPageCache(),
+ connPool: pool,
+ AssemblerOptions: DefaultAssemblerOptions,
+ }
+}
+
+// DefaultAssemblerOptions provides default options for an assembler.
+// These options are used by default when calling NewAssembler, so if
+// modified before a NewAssembler call they'll affect the resulting Assembler.
+//
+// Note that the default options can result in ever-increasing memory usage
+// unless one of the Flush* methods is called on a regular basis.
+var DefaultAssemblerOptions = AssemblerOptions{
+ MaxBufferedPagesPerConnection: 0, // unlimited
+ MaxBufferedPagesTotal: 0, // unlimited
+}
+
+type connection struct {
+ key key
+ pages int
+ first, last *page
+ nextSeq Sequence
+ created, lastSeen time.Time
+ stream Stream
+ closed bool
+ mu sync.Mutex
+}
+
+func (c *connection) reset(k key, s Stream, ts time.Time) {
+ c.key = k
+ c.pages = 0
+ c.first, c.last = nil, nil
+ c.nextSeq = invalidSequence
+ c.created = ts
+ c.stream = s
+ c.closed = false
+}
+
+// AssemblerOptions controls the behavior of each assembler. Modify the
+// options of each assembler you create to change their behavior.
+type AssemblerOptions struct {
+ // MaxBufferedPagesTotal is an upper limit on the total number of pages to
+ // buffer while waiting for out-of-order packets. Once this limit is
+ // reached, the assembler will degrade to flushing every connection it
+ // gets a packet for. If <= 0, this is ignored.
+ MaxBufferedPagesTotal int
+ // MaxBufferedPagesPerConnection is an upper limit on the number of pages
+ // buffered for a single connection. Should this limit be reached for a
+ // particular connection, the smallest sequence number will be flushed, along
+ // with any contiguous data. If <= 0, this is ignored.
+ MaxBufferedPagesPerConnection int
+}
+
+// Assembler handles reassembling TCP streams. It is not safe for
+// concurrency... after passing a packet in via the Assemble call, the caller
+// must wait for that call to return before calling Assemble again. Callers can
+// get around this by creating multiple assemblers that share a StreamPool. In
+// that case, each individual stream will still be handled serially (each stream
+// has an individual mutex associated with it), however multiple assemblers can
+// assemble different connections concurrently.
+//
+// The Assembler provides (hopefully) fast TCP stream re-assembly for sniffing
+// applications written in Go. The Assembler uses the following methods to be
+// as fast as possible, to keep packet processing speedy:
+//
+// Avoids Lock Contention
+//
+// Assemblers locks connections, but each connection has an individual lock, and
+// rarely will two Assemblers be looking at the same connection. Assemblers
+// lock the StreamPool when looking up connections, but they use Reader
+// locks initially, and only force a write lock if they need to create a new
+// connection or close one down. These happen much less frequently than
+// individual packet handling.
+//
+// Each assembler runs in its own goroutine, and the only state shared between
+// goroutines is through the StreamPool. Thus all internal Assembler state
+// can be handled without any locking.
+//
+// NOTE: If you can guarantee that packets going to a set of Assemblers will
+// contain information on different connections per Assembler (for example,
+// they're already hashed by PF_RING hashing or some other hashing mechanism),
+// then we recommend you use a seperate StreamPool per Assembler, thus
+// avoiding all lock contention. Only when different Assemblers could receive
+// packets for the same Stream should a StreamPool be shared between them.
+//
+// Avoids Memory Copying
+//
+// In the common case, handling of a single TCP packet should result in zero
+// memory allocations. The Assembler will look up the connection, figure out
+// that the packet has arrived in order, and immediately pass that packet on to
+// the appropriate connection's handling code. Only if a packet arrives out of
+// order is its contents copied and stored in memory for later.
+//
+// Avoids Memory Allocation
+//
+// Assemblers try very hard to not use memory allocation unless absolutely
+// necessary. Packet data for sequential packets is passed directly to streams
+// with no copying or allocation. Packet data for out-of-order packets is
+// copied into reusable pages, and new pages are only allocated rarely when the
+// page cache runs out. Page caches are Assembler-specific, thus not used
+// concurrently and requiring no locking.
+//
+// Internal representations for connection objects are also reused over time.
+// Because of this, the most common memory allocation done by the Assembler is
+// generally what's done by the caller in StreamFactory.New. If no allocation
+// is done there, then very little allocation is done ever, mostly to handle
+// large increases in bandwidth or numbers of connections.
+//
+// TODO: The page caches used by an Assembler will grow to the size necessary
+// to handle a workload, and currently will never shrink. This means that
+// traffic spikes can result in large memory usage which isn't garbage
+// collected when typical traffic levels return.
+type Assembler struct {
+ AssemblerOptions
+ ret []Reassembly
+ pc *pageCache
+ connPool *StreamPool
+}
+
+func (p *StreamPool) newConnection(k key, s Stream, ts time.Time) (c *connection) {
+ if *memLog {
+ p.newConnectionCount++
+ if p.newConnectionCount&0x7FFF == 0 {
+ log.Println("StreamPool:", p.newConnectionCount, "requests,", len(p.conns), "used,", len(p.free), "free")
+ }
+ }
+ if len(p.free) == 0 {
+ p.grow()
+ }
+ index := len(p.free) - 1
+ c, p.free = p.free[index], p.free[:index]
+ c.reset(k, s, ts)
+ return c
+}
+
+// getConnection returns a connection. If end is true and a connection
+// does not already exist, returns nil. This allows us to check for a
+// connection without actually creating one if it doesn't already exist.
+func (p *StreamPool) getConnection(k key, end bool, ts time.Time) *connection {
+ p.mu.RLock()
+ conn := p.conns[k]
+ p.mu.RUnlock()
+ if end || conn != nil {
+ return conn
+ }
+ s := p.factory.New(k[0], k[1])
+ p.mu.Lock()
+ conn = p.newConnection(k, s, ts)
+ if conn2 := p.conns[k]; conn2 != nil {
+ p.mu.Unlock()
+ return conn2
+ }
+ p.conns[k] = conn
+ p.mu.Unlock()
+ return conn
+}
+
+// Assemble calls AssembleWithTimestamp with the current timestamp, useful for
+// packets being read directly off the wire.
+func (a *Assembler) Assemble(netFlow gopacket.Flow, t *layers.TCP) {
+ a.AssembleWithTimestamp(netFlow, t, time.Now())
+}
+
+// AssembleWithTimestamp reassembles the given TCP packet into its appropriate
+// stream.
+//
+// The timestamp passed in must be the timestamp the packet was seen.
+// For packets read off the wire, time.Now() should be fine. For packets read
+// from PCAP files, CaptureInfo.Timestamp should be passed in. This timestamp
+// will affect which streams are flushed by a call to FlushOlderThan.
+//
+// Each Assemble call results in, in order:
+//
+// zero or one calls to StreamFactory.New, creating a stream
+// zero or one calls to Reassembled on a single stream
+// zero or one calls to ReassemblyComplete on the same stream
+func (a *Assembler) AssembleWithTimestamp(netFlow gopacket.Flow, t *layers.TCP, timestamp time.Time) {
+ // Ignore empty TCP packets
+ if !t.SYN && !t.FIN && !t.RST && len(t.LayerPayload()) == 0 {
+ if *debugLog {
+ log.Println("ignoring useless packet")
+ }
+ return
+ }
+
+ a.ret = a.ret[:0]
+ key := key{netFlow, t.TransportFlow()}
+ var conn *connection
+ // This for loop handles a race condition where a connection will close, lock
+ // the connection pool, and remove itself, but before it locked the connection
+ // pool it's returned to another Assemble statement. This should loop 0-1
+ // times for the VAST majority of cases.
+ for {
+ conn = a.connPool.getConnection(
+ key, !t.SYN && len(t.LayerPayload()) == 0, timestamp)
+ if conn == nil {
+ if *debugLog {
+ log.Printf("%v got empty packet on otherwise empty connection", key)
+ }
+ return
+ }
+ conn.mu.Lock()
+ if !conn.closed {
+ break
+ }
+ conn.mu.Unlock()
+ }
+ if conn.lastSeen.Before(timestamp) {
+ conn.lastSeen = timestamp
+ }
+ seq, bytes := Sequence(t.Seq), t.Payload
+ if conn.nextSeq == invalidSequence {
+ if t.SYN {
+ if *debugLog {
+ log.Printf("%v saw first SYN packet, returning immediately, seq=%v", key, seq)
+ }
+ a.ret = append(a.ret, Reassembly{
+ Bytes: bytes,
+ Skip: 0,
+ Start: true,
+ Seen: timestamp,
+ })
+ conn.nextSeq = seq.Add(len(bytes) + 1)
+ } else {
+ if *debugLog {
+ log.Printf("%v waiting for start, storing into connection", key)
+ }
+ a.insertIntoConn(t, conn, timestamp)
+ }
+ } else if diff := conn.nextSeq.Difference(seq); diff > 0 {
+ if *debugLog {
+ log.Printf("%v gap in sequence numbers (%v, %v) diff %v, storing into connection", key, conn.nextSeq, seq, diff)
+ }
+ a.insertIntoConn(t, conn, timestamp)
+ } else {
+ bytes, conn.nextSeq = byteSpan(conn.nextSeq, seq, bytes)
+ if *debugLog {
+ log.Printf("%v found contiguous data (%v, %v), returning immediately", key, seq, conn.nextSeq)
+ }
+ a.ret = append(a.ret, Reassembly{
+ Bytes: bytes,
+ Skip: 0,
+ End: t.RST || t.FIN,
+ Seen: timestamp,
+ })
+ }
+ if len(a.ret) > 0 {
+ a.sendToConnection(conn)
+ }
+ conn.mu.Unlock()
+}
+
+func byteSpan(expected, received Sequence, bytes []byte) (toSend []byte, next Sequence) {
+ if expected == invalidSequence {
+ return bytes, received.Add(len(bytes))
+ }
+ span := int(received.Difference(expected))
+ if span <= 0 {
+ return bytes, received.Add(len(bytes))
+ } else if len(bytes) < span {
+ return nil, expected
+ }
+ return bytes[span:], expected.Add(len(bytes) - span)
+}
+
+// sendToConnection sends the current values in a.ret to the connection, closing
+// the connection if the last thing sent had End set.
+func (a *Assembler) sendToConnection(conn *connection) {
+ a.addContiguous(conn)
+ if conn.stream == nil {
+ panic("why?")
+ }
+ conn.stream.Reassembled(a.ret)
+ if a.ret[len(a.ret)-1].End {
+ a.closeConnection(conn)
+ }
+}
+
+// addContiguous adds contiguous byte-sets to a connection.
+func (a *Assembler) addContiguous(conn *connection) {
+ for conn.first != nil && conn.nextSeq.Difference(conn.first.seq) <= 0 {
+ a.addNextFromConn(conn)
+ }
+}
+
+// skipFlush skips the first set of bytes we're waiting for and returns the
+// first set of bytes we have. If we have no bytes pending, it closes the
+// connection.
+func (a *Assembler) skipFlush(conn *connection) {
+ if *debugLog {
+ log.Printf("%v skipFlush %v", conn.key, conn.nextSeq)
+ }
+ if conn.first == nil {
+ a.closeConnection(conn)
+ return
+ }
+ a.ret = a.ret[:0]
+ a.addNextFromConn(conn)
+ a.addContiguous(conn)
+ a.sendToConnection(conn)
+}
+
+func (p *StreamPool) remove(conn *connection) {
+ p.mu.Lock()
+ delete(p.conns, conn.key)
+ p.free = append(p.free, conn)
+ p.mu.Unlock()
+}
+
+func (a *Assembler) closeConnection(conn *connection) {
+ if *debugLog {
+ log.Printf("%v closing", conn.key)
+ }
+ conn.stream.ReassemblyComplete()
+ conn.closed = true
+ a.connPool.remove(conn)
+ for p := conn.first; p != nil; p = p.next {
+ a.pc.replace(p)
+ }
+}
+
+// traverseConn traverses our doubly-linked list of pages for the correct
+// position to put the given sequence number. Note that it traverses backwards,
+// starting at the highest sequence number and going down, since we assume the
+// common case is that TCP packets for a stream will appear in-order, with
+// minimal loss or packet reordering.
+func (c *connection) traverseConn(seq Sequence) (prev, current *page) {
+ prev = c.last
+ for prev != nil && prev.seq.Difference(seq) < 0 {
+ current = prev
+ prev = current.prev
+ }
+ return
+}
+
+// pushBetween inserts the doubly-linked list first-...-last in between the
+// nodes prev-next in another doubly-linked list. If prev is nil, makes first
+// the new first page in the connection's list. If next is nil, makes last the
+// new last page in the list. first/last may point to the same page.
+func (c *connection) pushBetween(prev, next, first, last *page) {
+ // Maintain our doubly linked list
+ if next == nil || c.last == nil {
+ c.last = last
+ } else {
+ last.next = next
+ next.prev = last
+ }
+ if prev == nil || c.first == nil {
+ c.first = first
+ } else {
+ first.prev = prev
+ prev.next = first
+ }
+}
+
+func (a *Assembler) insertIntoConn(t *layers.TCP, conn *connection, ts time.Time) {
+ if conn.first != nil && conn.first.seq == conn.nextSeq {
+ panic("wtf")
+ }
+ p, p2, numPages := a.pagesFromTCP(t, ts)
+ prev, current := conn.traverseConn(Sequence(t.Seq))
+ conn.pushBetween(prev, current, p, p2)
+ conn.pages += numPages
+ if (a.MaxBufferedPagesPerConnection > 0 && conn.pages >= a.MaxBufferedPagesPerConnection) ||
+ (a.MaxBufferedPagesTotal > 0 && a.pc.used >= a.MaxBufferedPagesTotal) {
+ if *debugLog {
+ log.Printf("%v hit max buffer size: %+v, %v, %v", conn.key, a.AssemblerOptions, conn.pages, a.pc.used)
+ }
+ a.addNextFromConn(conn)
+ }
+}
+
+// pagesFromTCP creates a page (or set of pages) from a TCP packet. Note that
+// it should NEVER receive a SYN packet, as it doesn't handle sequences
+// correctly.
+//
+// It returns the first and last page in its doubly-linked list of new pages.
+func (a *Assembler) pagesFromTCP(t *layers.TCP, ts time.Time) (p, p2 *page, numPages int) {
+ first := a.pc.next(ts)
+ current := first
+ numPages++
+ seq, bytes := Sequence(t.Seq), t.Payload
+ for {
+ length := min(len(bytes), pageBytes)
+ current.Bytes = current.buf[:length]
+ copy(current.Bytes, bytes)
+ current.seq = seq
+ bytes = bytes[length:]
+ if len(bytes) == 0 {
+ break
+ }
+ seq = seq.Add(length)
+ current.next = a.pc.next(ts)
+ current.next.prev = current
+ current = current.next
+ numPages++
+ }
+ current.End = t.RST || t.FIN
+ return first, current, numPages
+}
+
+// addNextFromConn pops the first page from a connection off and adds it to the
+// return array.
+func (a *Assembler) addNextFromConn(conn *connection) {
+ if conn.nextSeq == invalidSequence {
+ conn.first.Skip = -1
+ } else if diff := conn.nextSeq.Difference(conn.first.seq); diff > 0 {
+ conn.first.Skip = int(diff)
+ }
+ conn.first.Bytes, conn.nextSeq = byteSpan(conn.nextSeq, conn.first.seq, conn.first.Bytes)
+ if *debugLog {
+ log.Printf("%v adding from conn (%v, %v)", conn.key, conn.first.seq, conn.nextSeq)
+ }
+ a.ret = append(a.ret, conn.first.Reassembly)
+ a.pc.replace(conn.first)
+ if conn.first == conn.last {
+ conn.first = nil
+ conn.last = nil
+ } else {
+ conn.first = conn.first.next
+ conn.first.prev = nil
+ }
+ conn.pages--
+}
+
+func min(a, b int) int {
+ if a < b {
+ return a
+ }
+ return b
+}
diff --git a/vendor/github.com/google/gopacket/tcpassembly/assembly_test.go b/vendor/github.com/google/gopacket/tcpassembly/assembly_test.go
new file mode 100644
index 0000000..1bd2842
--- /dev/null
+++ b/vendor/github.com/google/gopacket/tcpassembly/assembly_test.go
@@ -0,0 +1,562 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package tcpassembly
+
+import (
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+ "net"
+ "reflect"
+ "testing"
+ "time"
+)
+
+var netFlow gopacket.Flow
+
+func init() {
+ netFlow, _ = gopacket.FlowFromEndpoints(
+ layers.NewIPEndpoint(net.IP{1, 2, 3, 4}),
+ layers.NewIPEndpoint(net.IP{5, 6, 7, 8}))
+}
+
+type testSequence struct {
+ in layers.TCP
+ want []Reassembly
+}
+
+type testFactory struct {
+ reassembly []Reassembly
+}
+
+func (t *testFactory) New(a, b gopacket.Flow) Stream {
+ return t
+}
+func (t *testFactory) Reassembled(r []Reassembly) {
+ t.reassembly = r
+ for i := 0; i < len(r); i++ {
+ t.reassembly[i].Seen = time.Time{}
+ }
+}
+func (t *testFactory) ReassemblyComplete() {
+}
+
+func test(t *testing.T, s []testSequence) {
+ fact := &testFactory{}
+ p := NewStreamPool(fact)
+ a := NewAssembler(p)
+ a.MaxBufferedPagesPerConnection = 4
+ for i, test := range s {
+ fact.reassembly = []Reassembly{}
+ a.Assemble(netFlow, &test.in)
+ if !reflect.DeepEqual(fact.reassembly, test.want) {
+ t.Fatalf("test %v:\nwant: %v\n got: %v\n", i, test.want, fact.reassembly)
+ }
+ }
+}
+
+func TestReorder(t *testing.T) {
+ test(t, []testSequence{
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1001,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1004,
+ BaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1010,
+ BaseLayer: layers.BaseLayer{Payload: []byte{4, 2, 3}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1007,
+ BaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Skip: -1,
+ Bytes: []byte{1, 2, 3},
+ },
+ Reassembly{
+ Bytes: []byte{2, 2, 3},
+ },
+ Reassembly{
+ Bytes: []byte{3, 2, 3},
+ },
+ Reassembly{
+ Bytes: []byte{4, 2, 3},
+ },
+ },
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1016,
+ BaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1019,
+ BaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1013,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Bytes: []byte{1, 2, 3},
+ },
+ Reassembly{
+ Bytes: []byte{2, 2, 3},
+ },
+ Reassembly{
+ Bytes: []byte{3, 2, 3},
+ },
+ },
+ },
+ })
+}
+
+func TestMaxPerSkip(t *testing.T) {
+ test(t, []testSequence{
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1000,
+ SYN: true,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Start: true,
+ Bytes: []byte{1, 2, 3},
+ },
+ },
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1007,
+ BaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1010,
+ BaseLayer: layers.BaseLayer{Payload: []byte{4, 2, 3}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1013,
+ BaseLayer: layers.BaseLayer{Payload: []byte{5, 2, 3}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1016,
+ BaseLayer: layers.BaseLayer{Payload: []byte{6, 2, 3}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Skip: 3,
+ Bytes: []byte{3, 2, 3},
+ },
+ Reassembly{
+ Bytes: []byte{4, 2, 3},
+ },
+ Reassembly{
+ Bytes: []byte{5, 2, 3},
+ },
+ Reassembly{
+ Bytes: []byte{6, 2, 3},
+ },
+ },
+ },
+ })
+}
+
+func TestReorderFast(t *testing.T) {
+ test(t, []testSequence{
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ SYN: true,
+ Seq: 1000,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Start: true,
+ Bytes: []byte{1, 2, 3},
+ },
+ },
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1007,
+ BaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1004,
+ BaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Bytes: []byte{2, 2, 3},
+ },
+ Reassembly{
+ Bytes: []byte{3, 2, 3},
+ },
+ },
+ },
+ })
+}
+
+func TestOverlap(t *testing.T) {
+ test(t, []testSequence{
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ SYN: true,
+ Seq: 1000,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Start: true,
+ Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
+ },
+ },
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1007,
+ BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Bytes: []byte{1, 2, 3, 4, 5},
+ },
+ },
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1010,
+ BaseLayer: layers.BaseLayer{Payload: []byte{0, 1, 2, 3, 4, 5, 6, 7}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Bytes: []byte{6, 7},
+ },
+ },
+ },
+ })
+}
+
+func TestBufferedOverlap(t *testing.T) {
+ test(t, []testSequence{
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1007,
+ BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1010,
+ BaseLayer: layers.BaseLayer{Payload: []byte{0, 1, 2, 3, 4, 5, 6, 7}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ SYN: true,
+ Seq: 1000,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Start: true,
+ Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
+ },
+ Reassembly{
+ Bytes: []byte{1, 2, 3, 4, 5},
+ },
+ Reassembly{
+ Bytes: []byte{6, 7},
+ },
+ },
+ },
+ })
+}
+
+func TestOverrun1(t *testing.T) {
+ test(t, []testSequence{
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ SYN: true,
+ Seq: 0xFFFFFFFF,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Start: true,
+ Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
+ },
+ },
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 10,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Bytes: []byte{1, 2, 3, 4},
+ },
+ },
+ },
+ })
+}
+
+func TestOverrun2(t *testing.T) {
+ test(t, []testSequence{
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 10,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ SYN: true,
+ Seq: 0xFFFFFFFF,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Start: true,
+ Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
+ },
+ Reassembly{
+ Bytes: []byte{1, 2, 3, 4},
+ },
+ },
+ },
+ })
+}
+
+func TestCacheLargePacket(t *testing.T) {
+ data := make([]byte, pageBytes*3)
+ test(t, []testSequence{
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1001,
+ BaseLayer: layers.BaseLayer{Payload: data},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1000,
+ SYN: true,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ Start: true,
+ Bytes: []byte{},
+ },
+ Reassembly{
+ Bytes: data[:pageBytes],
+ },
+ Reassembly{
+ Bytes: data[pageBytes : pageBytes*2],
+ },
+ Reassembly{
+ Bytes: data[pageBytes*2 : pageBytes*3],
+ },
+ },
+ },
+ })
+}
+
+func BenchmarkSingleStream(b *testing.B) {
+ t := layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ SYN: true,
+ Seq: 1000,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+ }
+ a := NewAssembler(NewStreamPool(&testFactory{}))
+ for i := 0; i < b.N; i++ {
+ a.Assemble(netFlow, &t)
+ if t.SYN {
+ t.SYN = false
+ t.Seq++
+ }
+ t.Seq += 10
+ }
+}
+
+func BenchmarkSingleStreamSkips(b *testing.B) {
+ t := layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ SYN: true,
+ Seq: 1000,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+ }
+ a := NewAssembler(NewStreamPool(&testFactory{}))
+ skipped := false
+ for i := 0; i < b.N; i++ {
+ if i%10 == 9 {
+ t.Seq += 10
+ skipped = true
+ } else if skipped {
+ t.Seq -= 20
+ }
+ a.Assemble(netFlow, &t)
+ if t.SYN {
+ t.SYN = false
+ t.Seq++
+ }
+ t.Seq += 10
+ if skipped {
+ t.Seq += 10
+ skipped = false
+ }
+ }
+}
+
+func BenchmarkSingleStreamLoss(b *testing.B) {
+ t := layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ SYN: true,
+ Seq: 1000,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+ }
+ a := NewAssembler(NewStreamPool(&testFactory{}))
+ for i := 0; i < b.N; i++ {
+ a.Assemble(netFlow, &t)
+ t.SYN = false
+ t.Seq += 11
+ }
+}
+
+func BenchmarkMultiStreamGrow(b *testing.B) {
+ t := layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 0,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+ }
+ a := NewAssembler(NewStreamPool(&testFactory{}))
+ for i := 0; i < b.N; i++ {
+ t.SrcPort = layers.TCPPort(i)
+ a.Assemble(netFlow, &t)
+ t.Seq += 10
+ }
+}
+
+func BenchmarkMultiStreamConn(b *testing.B) {
+ t := layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 0,
+ SYN: true,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+ }
+ a := NewAssembler(NewStreamPool(&testFactory{}))
+ for i := 0; i < b.N; i++ {
+ t.SrcPort = layers.TCPPort(i)
+ a.Assemble(netFlow, &t)
+ if i%65536 == 65535 {
+ if t.SYN {
+ t.SYN = false
+ t.Seq++
+ }
+ t.Seq += 10
+ }
+ }
+}
diff --git a/vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader.go b/vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader.go
new file mode 100644
index 0000000..092b811
--- /dev/null
+++ b/vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader.go
@@ -0,0 +1,210 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// Package tcpreader provides an implementation for tcpassembly.Stream which presents
+// the caller with an io.Reader for easy processing.
+//
+// The assembly package handles packet data reordering, but its output is
+// library-specific, thus not usable by the majority of external Go libraries.
+// The io.Reader interface, on the other hand, is used throughout much of Go
+// code as an easy mechanism for reading in data streams and decoding them. For
+// example, the net/http package provides the ReadRequest function, which can
+// parase an HTTP request from a live data stream, just what we'd want when
+// sniffing HTTP traffic. Using ReaderStream, this is relatively easy to set
+// up:
+//
+// // Create our StreamFactory
+// type httpStreamFactory struct {}
+// func (f *httpStreamFactory) New(a, b gopacket.Flow) {
+// r := tcpreader.NewReaderStream(false)
+// go printRequests(r)
+// return &r
+// }
+// func printRequests(r io.Reader) {
+// // Convert to bufio, since that's what ReadRequest wants.
+// buf := bufio.NewReader(r)
+// for {
+// if req, err := http.ReadRequest(buf); err == io.EOF {
+// return
+// } else if err != nil {
+// log.Println("Error parsing HTTP requests:", err)
+// } else {
+// fmt.Println("HTTP REQUEST:", req)
+// fmt.Println("Body contains", tcpreader.DiscardBytesToEOF(req.Body), "bytes")
+// }
+// }
+// }
+//
+// Using just this code, we're able to reference a powerful, built-in library
+// for HTTP request parsing to do all the dirty-work of parsing requests from
+// the wire in real-time. Pass this stream factory to an tcpassembly.StreamPool,
+// start up an tcpassembly.Assembler, and you're good to go!
+package tcpreader
+
+import (
+ "errors"
+ "github.com/google/gopacket/tcpassembly"
+ "io"
+)
+
+var discardBuffer = make([]byte, 4096)
+
+// DiscardBytesToFirstError will read in all bytes up to the first error
+// reported by the given reader, then return the number of bytes discarded
+// and the error encountered.
+func DiscardBytesToFirstError(r io.Reader) (discarded int, err error) {
+ for {
+ n, e := r.Read(discardBuffer)
+ discarded += n
+ if e != nil {
+ return discarded, e
+ }
+ }
+}
+
+// DiscardBytesToEOF will read in all bytes from a Reader until it
+// encounters an io.EOF, then return the number of bytes. Be careful
+// of this... if used on a Reader that returns a non-io.EOF error
+// consistently, this will loop forever discarding that error while
+// it waits for an EOF.
+func DiscardBytesToEOF(r io.Reader) (discarded int) {
+ for {
+ n, e := DiscardBytesToFirstError(r)
+ discarded += n
+ if e == io.EOF {
+ return
+ }
+ }
+}
+
+// ReaderStream implements both tcpassembly.Stream and io.Reader. You can use it
+// as a building block to make simple, easy stream handlers.
+//
+// IMPORTANT: If you use a ReaderStream, you MUST read ALL BYTES from it,
+// quickly. Not reading available bytes will block TCP stream reassembly. It's
+// a common pattern to do this by starting a goroutine in the factory's New
+// method:
+//
+// type myStreamHandler struct {
+// r ReaderStream
+// }
+// func (m *myStreamHandler) run() {
+// // Do something here that reads all of the ReaderStream, or your assembly
+// // will block.
+// fmt.Println(tcpreader.DiscardBytesToEOF(&m.r))
+// }
+// func (f *myStreamFactory) New(a, b gopacket.Flow) tcpassembly.Stream {
+// s := &myStreamHandler{}
+// go s.run()
+// // Return the ReaderStream as the stream that assembly should populate.
+// return &s.r
+// }
+type ReaderStream struct {
+ ReaderStreamOptions
+ reassembled chan []tcpassembly.Reassembly
+ done chan bool
+ current []tcpassembly.Reassembly
+ closed bool
+ lossReported bool
+ first bool
+ initiated bool
+}
+
+// ReaderStreamOptions provides user-resettable options for a ReaderStream.
+type ReaderStreamOptions struct {
+ // LossErrors determines whether this stream will return
+ // ReaderStreamDataLoss errors from its Read function whenever it
+ // determines data has been lost.
+ LossErrors bool
+}
+
+// NewReaderStream returns a new ReaderStream object.
+func NewReaderStream() ReaderStream {
+ r := ReaderStream{
+ reassembled: make(chan []tcpassembly.Reassembly),
+ done: make(chan bool),
+ first: true,
+ initiated: true,
+ }
+ return r
+}
+
+// Reassembled implements tcpassembly.Stream's Reassembled function.
+func (r *ReaderStream) Reassembled(reassembly []tcpassembly.Reassembly) {
+ if !r.initiated {
+ panic("ReaderStream not created via NewReaderStream")
+ }
+ r.reassembled <- reassembly
+ <-r.done
+}
+
+// ReassemblyComplete implements tcpassembly.Stream's ReassemblyComplete function.
+func (r *ReaderStream) ReassemblyComplete() {
+ close(r.reassembled)
+ close(r.done)
+}
+
+// stripEmpty strips empty reassembly slices off the front of its current set of
+// slices.
+func (r *ReaderStream) stripEmpty() {
+ for len(r.current) > 0 && len(r.current[0].Bytes) == 0 {
+ r.current = r.current[1:]
+ r.lossReported = false
+ }
+}
+
+// DataLost is returned by the ReaderStream's Read function when it encounters
+// a Reassembly with Skip != 0.
+var DataLost = errors.New("lost data")
+
+// Read implements io.Reader's Read function.
+// Given a byte slice, it will either copy a non-zero number of bytes into
+// that slice and return the number of bytes and a nil error, or it will
+// leave slice p as is and return 0, io.EOF.
+func (r *ReaderStream) Read(p []byte) (int, error) {
+ if !r.initiated {
+ panic("ReaderStream not created via NewReaderStream")
+ }
+ var ok bool
+ r.stripEmpty()
+ for !r.closed && len(r.current) == 0 {
+ if r.first {
+ r.first = false
+ } else {
+ r.done <- true
+ }
+ if r.current, ok = <-r.reassembled; ok {
+ r.stripEmpty()
+ } else {
+ r.closed = true
+ }
+ }
+ if len(r.current) > 0 {
+ current := &r.current[0]
+ if r.LossErrors && !r.lossReported && current.Skip != 0 {
+ r.lossReported = true
+ return 0, DataLost
+ }
+ length := copy(p, current.Bytes)
+ current.Bytes = current.Bytes[length:]
+ return length, nil
+ }
+ return 0, io.EOF
+}
+
+// Close implements io.Closer's Close function, making ReaderStream a
+// io.ReadCloser. It discards all remaining bytes in the reassembly in a
+// manner that's safe for the assembler (IE: it doesn't block).
+func (r *ReaderStream) Close() error {
+ r.current = nil
+ r.closed = true
+ for {
+ if _, ok := <-r.reassembled; !ok {
+ return nil
+ }
+ r.done <- true
+ }
+}
diff --git a/vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader_test.go b/vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader_test.go
new file mode 100644
index 0000000..7da9fd9
--- /dev/null
+++ b/vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader_test.go
@@ -0,0 +1,129 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package tcpreader
+
+import (
+ "bytes"
+ "fmt"
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+ "github.com/google/gopacket/tcpassembly"
+ "io"
+ "net"
+ "testing"
+)
+
+var netFlow gopacket.Flow
+
+func init() {
+ netFlow, _ = gopacket.FlowFromEndpoints(
+ layers.NewIPEndpoint(net.IP{1, 2, 3, 4}),
+ layers.NewIPEndpoint(net.IP{5, 6, 7, 8}))
+}
+
+type readReturn struct {
+ data []byte
+ err error
+}
+type readSequence struct {
+ in []layers.TCP
+ want []readReturn
+}
+type testReaderFactory struct {
+ lossErrors bool
+ readSize int
+ ReaderStream
+ output chan []byte
+}
+
+func (t *testReaderFactory) New(a, b gopacket.Flow) tcpassembly.Stream {
+ return &t.ReaderStream
+}
+
+func testReadSequence(t *testing.T, lossErrors bool, readSize int, seq readSequence) {
+ f := &testReaderFactory{ReaderStream: NewReaderStream()}
+ f.ReaderStream.LossErrors = lossErrors
+ p := tcpassembly.NewStreamPool(f)
+ a := tcpassembly.NewAssembler(p)
+ buf := make([]byte, readSize)
+ go func() {
+ for i, test := range seq.in {
+ fmt.Println("Assembling", i)
+ a.Assemble(netFlow, &test)
+ fmt.Println("Assembly done")
+ }
+ }()
+ for i, test := range seq.want {
+ fmt.Println("Waiting for read", i)
+ n, err := f.Read(buf[:])
+ fmt.Println("Got read")
+ if n != len(test.data) {
+ t.Errorf("test %d want %d bytes, got %d bytes", i, len(test.data), n)
+ } else if err != test.err {
+ t.Errorf("test %d want err %v, got err %v", i, test.err, err)
+ } else if !bytes.Equal(buf[:n], test.data) {
+ t.Errorf("test %d\nwant: %v\n got: %v\n", i, test.data, buf[:n])
+ }
+ }
+ fmt.Println("All done reads")
+}
+
+func TestRead(t *testing.T) {
+ testReadSequence(t, false, 10, readSequence{
+ in: []layers.TCP{
+ {
+ SYN: true,
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1000,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+ },
+ {
+ FIN: true,
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1004,
+ },
+ },
+ want: []readReturn{
+ {data: []byte{1, 2, 3}},
+ {err: io.EOF},
+ },
+ })
+}
+
+func TestReadSmallChunks(t *testing.T) {
+ testReadSequence(t, false, 2, readSequence{
+ in: []layers.TCP{
+ {
+ SYN: true,
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1000,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+ },
+ {
+ FIN: true,
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1004,
+ },
+ },
+ want: []readReturn{
+ {data: []byte{1, 2}},
+ {data: []byte{3}},
+ {err: io.EOF},
+ },
+ })
+}
+
+func ExampleDiscardBytesToEOF() {
+ b := bytes.NewBuffer([]byte{1, 2, 3, 4, 5})
+ fmt.Println(DiscardBytesToEOF(b))
+ // Output:
+ // 5
+}
diff --git a/vendor/github.com/google/gopacket/writer.go b/vendor/github.com/google/gopacket/writer.go
new file mode 100644
index 0000000..9e85a92
--- /dev/null
+++ b/vendor/github.com/google/gopacket/writer.go
@@ -0,0 +1,213 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package gopacket
+
+import (
+ "fmt"
+)
+
+// SerializableLayer allows its implementations to be written out as a set of bytes,
+// so those bytes may be sent on the wire or otherwise used by the caller.
+// SerializableLayer is implemented by certain Layer types, and can be encoded to
+// bytes using the LayerWriter object.
+type SerializableLayer interface {
+ // SerializeTo writes this layer to a slice, growing that slice if necessary
+ // to make it fit the layer's data.
+ // Args:
+ // b: SerializeBuffer to write this layer on to. When called, b.Bytes()
+ // is the payload this layer should wrap, if any. Note that this
+ // layer can either prepend itself (common), append itself
+ // (uncommon), or both (sometimes padding or footers are required at
+ // the end of packet data). It's also possible (though probably very
+ // rarely needed) to overwrite any bytes in the current payload.
+ // After this call, b.Bytes() should return the byte encoding of
+ // this layer wrapping the original b.Bytes() payload.
+ // opts: options to use while writing out data.
+ // Returns:
+ // error if a problem was encountered during encoding. If an error is
+ // returned, the bytes in data should be considered invalidated, and
+ // not used.
+ //
+ // SerializeTo calls SHOULD entirely ignore LayerContents and
+ // LayerPayload. It just serializes based on struct fields, neither
+ // modifying nor using contents/payload.
+ SerializeTo(b SerializeBuffer, opts SerializeOptions) error
+}
+
+// SerializeOptions provides options for behaviors that SerializableLayers may want to
+// implement.
+type SerializeOptions struct {
+ // FixLengths determines whether, during serialization, layers should fix
+ // the values for any length field that depends on the payload.
+ FixLengths bool
+ // ComputeChecksums determines whether, during serialization, layers
+ // should recompute checksums based on their payloads.
+ ComputeChecksums bool
+}
+
+// SerializeBuffer is a helper used by gopacket for writing out packet layers.
+// SerializeBuffer starts off as an empty []byte. Subsequent calls to PrependBytes
+// return byte slices before the current Bytes(), AppendBytes returns byte
+// slices after.
+//
+// Byte slices returned by PrependBytes/AppendBytes are NOT zero'd out, so if
+// you want to make sure they're all zeros, set them as such.
+//
+// SerializeBuffer is specifically designed to handle packet writing, where unlike
+// with normal writes it's easier to start writing at the inner-most layer and
+// work out, meaning that we often need to prepend bytes. This runs counter to
+// typical writes to byte slices using append(), where we only write at the end
+// of the buffer.
+//
+// It can be reused via Clear. Note, however, that a Clear call will invalidate the
+// byte slices returned by any previous Bytes() call (the same buffer is
+// reused).
+//
+// 1) Reusing a write buffer is generally much faster than creating a new one,
+// and with the default implementation it avoids additional memory allocations.
+// 2) If a byte slice from a previous Bytes() call will continue to be used,
+// it's better to create a new SerializeBuffer.
+//
+// The Clear method is specifically designed to minimize memory allocations for
+// similar later workloads on the SerializeBuffer. IE: if you make a set of
+// Prepend/Append calls, then clear, then make the same calls with the same
+// sizes, the second round (and all future similar rounds) shouldn't allocate
+// any new memory.
+type SerializeBuffer interface {
+ // Bytes returns the contiguous set of bytes collected so far by Prepend/Append
+ // calls. The slice returned by Bytes will be modified by future Clear calls,
+ // so if you're planning on clearing this SerializeBuffer, you may want to copy
+ // Bytes somewhere safe first.
+ Bytes() []byte
+ // PrependBytes returns a set of bytes which prepends the current bytes in this
+ // buffer. These bytes start in an indeterminate state, so they should be
+ // overwritten by the caller. The caller must only call PrependBytes if they
+ // know they're going to immediately overwrite all bytes returned.
+ PrependBytes(num int) ([]byte, error)
+ // AppendBytes returns a set of bytes which appends the current bytes in this
+ // buffer. These bytes start in an indeterminate state, so they should be
+ // overwritten by the caller. The caller must only call AppendBytes if they
+ // know they're going to immediately overwrite all bytes returned.
+ AppendBytes(num int) ([]byte, error)
+ // Clear resets the SerializeBuffer to a new, empty buffer. After a call to clear,
+ // the byte slice returned by any previous call to Bytes() for this buffer
+ // should be considered invalidated.
+ Clear() error
+}
+
+type serializeBuffer struct {
+ data []byte
+ start int
+ prepended, appended int
+}
+
+// NewSerializeBuffer creates a new instance of the default implementation of
+// the SerializeBuffer interface.
+func NewSerializeBuffer() SerializeBuffer {
+ return &serializeBuffer{}
+}
+
+// NewSerializeBufferExpectedSize creates a new buffer for serialization, optimized for an
+// expected number of bytes prepended/appended. This tends to decrease the
+// number of memory allocations made by the buffer during writes.
+func NewSerializeBufferExpectedSize(expectedPrependLength, expectedAppendLength int) SerializeBuffer {
+ return &serializeBuffer{
+ data: make([]byte, expectedPrependLength, expectedPrependLength+expectedAppendLength),
+ start: expectedPrependLength,
+ prepended: expectedPrependLength,
+ appended: expectedAppendLength,
+ }
+}
+
+func (w *serializeBuffer) Bytes() []byte {
+ return w.data[w.start:]
+}
+
+func (w *serializeBuffer) PrependBytes(num int) ([]byte, error) {
+ if num < 0 {
+ panic("num < 0")
+ }
+ if w.start < num {
+ toPrepend := w.prepended
+ if toPrepend < num {
+ toPrepend = num
+ }
+ w.prepended += toPrepend
+ length := cap(w.data) + toPrepend
+ newData := make([]byte, length)
+ newStart := w.start + toPrepend
+ copy(newData[newStart:], w.data[w.start:])
+ w.start = newStart
+ w.data = newData[:toPrepend+len(w.data)]
+ }
+ w.start -= num
+ return w.data[w.start : w.start+num], nil
+}
+
+func (w *serializeBuffer) AppendBytes(num int) ([]byte, error) {
+ if num < 0 {
+ panic("num < 0")
+ }
+ initialLength := len(w.data)
+ if cap(w.data)-initialLength < num {
+ toAppend := w.appended
+ if toAppend < num {
+ toAppend = num
+ }
+ w.appended += toAppend
+ newData := make([]byte, cap(w.data)+toAppend)
+ copy(newData[w.start:], w.data[w.start:])
+ w.data = newData[:initialLength]
+ }
+ // Grow the buffer. We know it'll be under capacity given above.
+ w.data = w.data[:initialLength+num]
+ return w.data[initialLength:], nil
+}
+
+func (w *serializeBuffer) Clear() error {
+ w.start = w.prepended
+ w.data = w.data[:w.start]
+ return nil
+}
+
+// SerializeLayers clears the given write buffer, then writes all layers into it so
+// they correctly wrap each other. Note that by clearing the buffer, it
+// invalidates all slices previously returned by w.Bytes()
+//
+// Example:
+// buf := gopacket.NewSerializeBuffer()
+// opts := gopacket.SerializeOptions{}
+// gopacket.SerializeLayers(buf, opts, a, b, c)
+// firstPayload := buf.Bytes() // contains byte representation of a(b(c))
+// gopacket.SerializeLayers(buf, opts, d, e, f)
+// secondPayload := buf.Bytes() // contains byte representation of d(e(f)). firstPayload is now invalidated, since the SerializeLayers call Clears buf.
+func SerializeLayers(w SerializeBuffer, opts SerializeOptions, layers ...SerializableLayer) error {
+ w.Clear()
+ for i := len(layers) - 1; i >= 0; i-- {
+ layer := layers[i]
+ err := layer.SerializeTo(w, opts)
+ if err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+// SerializePacket is a convenience function that calls SerializeLayers
+// on packet's Layers().
+// It returns an error if one of the packet layers is not a SerializebleLayer.
+func SerializePacket(buf SerializeBuffer, opts SerializeOptions, packet Packet) error {
+ sls := []SerializableLayer{}
+ for _, layer := range packet.Layers() {
+ sl, ok := layer.(SerializableLayer)
+ if !ok {
+ return fmt.Errorf("layer %s is not serializable", layer.LayerType().String())
+ }
+ sls = append(sls, sl)
+ }
+ return SerializeLayers(buf, opts, sls...)
+}
diff --git a/vendor/github.com/google/gopacket/writer_test.go b/vendor/github.com/google/gopacket/writer_test.go
new file mode 100644
index 0000000..e19069b
--- /dev/null
+++ b/vendor/github.com/google/gopacket/writer_test.go
@@ -0,0 +1,94 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package gopacket
+
+import (
+ "fmt"
+ "testing"
+)
+
+func TestExponentialSizeIncreasePrepend(t *testing.T) {
+ var b serializeBuffer
+ for i, test := range []struct {
+ prepend, size int
+ }{
+ {2, 2},
+ {2, 4},
+ {2, 8},
+ {2, 8},
+ {2, 16},
+ {2, 16},
+ {2, 16},
+ {2, 16},
+ {2, 32},
+ } {
+ b.PrependBytes(test.prepend)
+ if test.size != cap(b.data) {
+ t.Error(i, "size want", test.size, "got", cap(b.data))
+ }
+ }
+ b.Clear()
+ if b.start != 32 {
+ t.Error(b.start)
+ }
+}
+
+func TestExponentialSizeIncreaseAppend(t *testing.T) {
+ var b serializeBuffer
+ for i, test := range []struct {
+ appnd, size int
+ }{
+ {2, 2},
+ {2, 4},
+ {2, 8},
+ {2, 8},
+ {2, 16},
+ {2, 16},
+ {2, 16},
+ {2, 16},
+ {2, 32},
+ } {
+ b.AppendBytes(test.appnd)
+ if test.size != cap(b.data) {
+ t.Error(i, "size want", test.size, "got", cap(b.data))
+ }
+ }
+ b.Clear()
+ if b.start != 0 {
+ t.Error(b.start)
+ }
+}
+
+func ExampleSerializeBuffer() {
+ b := NewSerializeBuffer()
+ fmt.Println("1:", b.Bytes())
+ bytes, _ := b.PrependBytes(3)
+ copy(bytes, []byte{1, 2, 3})
+ fmt.Println("2:", b.Bytes())
+ bytes, _ = b.AppendBytes(2)
+ copy(bytes, []byte{4, 5})
+ fmt.Println("3:", b.Bytes())
+ bytes, _ = b.PrependBytes(1)
+ copy(bytes, []byte{0})
+ fmt.Println("4:", b.Bytes())
+ bytes, _ = b.AppendBytes(3)
+ copy(bytes, []byte{6, 7, 8})
+ fmt.Println("5:", b.Bytes())
+ b.Clear()
+ fmt.Println("6:", b.Bytes())
+ bytes, _ = b.PrependBytes(2)
+ copy(bytes, []byte{9, 9})
+ fmt.Println("7:", b.Bytes())
+ // Output:
+ // 1: []
+ // 2: [1 2 3]
+ // 3: [1 2 3 4 5]
+ // 4: [0 1 2 3 4 5]
+ // 5: [0 1 2 3 4 5 6 7 8]
+ // 6: []
+ // 7: [9 9]
+}