mirror of
https://github.com/weaveworks/scope.git
synced 2026-03-27 13:57:09 +00:00
79 lines
2.0 KiB
Go
79 lines
2.0 KiB
Go
// 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"
|
|
"encoding/hex"
|
|
"flag"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"os"
|
|
"regexp"
|
|
"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 map[[3]byte]string= 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")
|
|
|
|
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+(.*)`)
|
|
fmt.Fprintln(os.Stderr, "Starting write to standard output")
|
|
fmt.Printf(header, time.Now(), *url)
|
|
for {
|
|
line, err := buffered.ReadString('\n')
|
|
if err == io.EOF {
|
|
break
|
|
} else if err != nil {
|
|
panic(err)
|
|
}
|
|
if matches := finder.FindStringSubmatch(line); matches != nil {
|
|
bytes := make([]byte, 3)
|
|
hex.Decode(bytes, []byte(matches[1]))
|
|
company := matches[2]
|
|
if company == "" {
|
|
company = "PRIVATE"
|
|
}
|
|
fmt.Printf("\t[3]byte{%d, %d, %d}: %q,\n", bytes[0], bytes[1], bytes[2], company)
|
|
}
|
|
}
|
|
fmt.Println("}")
|
|
}
|