/usr/bin/get-oui is in arp-scan 1.8.1-2ubuntu1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | #!/usr/bin/env perl
#
# Copyright 2006-2011 Roy Hills
#
# This file is part of arp-scan.
#
# arp-scan is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# arp-scan is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with arp-scan. If not, see <http://www.gnu.org/licenses/>.
#
# $Id: get-oui 18078 2011-01-09 10:37:07Z rsh $
#
# get-oui -- Fetch the OUI file from the IEEE website
#
# Author: Roy Hills
# Date: 16 March 2006
#
# This script downloads the Ethernet OUI file from the IEEE website, and
# converts it to the format needed by arp-scan.
#
use warnings;
use strict;
use Getopt::Std;
use LWP::Simple;
#
my $default_url = 'http://standards.ieee.org/regauth/oui/oui.txt';
my $default_filename='ieee-oui.txt';
#
my $usage =
qq/Usage: get-oui [options]
Fetch the Ethernet OUI file from the IEEE website, and save it in the format
used by arp-scan.
'options' is one or more of:
-h Display this usage message.
-f FILE Specify the output OUI file. Default=$default_filename
-u URL Specify the URL to fetch the OUI data from.
Default=$default_url
-v Give verbose progress messages.
/;
my %opts;
my $verbose;
my $filename;
my $url;
my $lineno = 0;
#
# Process options
#
die "$usage\n" unless getopts('hf:v',\%opts);
if ($opts{h}) {
print "$usage\n";
exit(0);
}
if (defined $opts{f}) {
$filename=$opts{f};
} else {
$filename=$default_filename;
}
if (defined $opts{u}) {
$url=$opts{u};
} else {
$url=$default_url;
}
$verbose=$opts{v} ? 1 : 0;
#
# If the output filename already exists, rename it to filename.bak before
# we create the new output file.
#
if (-f $filename) {
print "Renaming $filename to $filename.bak\n" if $verbose;
rename $filename, "$filename.bak" || die "Could not rename $filename to $filename.bak\n";
}
#
# Fetch the content from the URL
#
print "Fetching OUI data from $url\n" if $verbose;
my $content = get $url;
die "Could not get OUI data from $url\n" unless defined $content;
my $content_length = length($content);
die "Zero-sized response from from $url\n" unless ($content_length > 0);
print "Fetched $content_length bytes\n" if $verbose;
#
# Open the output file for writing.
#
print "Opening output file $filename\n" if $verbose;
open OUTPUT, ">$filename" || die "Could not open $filename for writing";
#
# Write the header comments to the output file.
#
my ($sec,$min,$hour,$mday,$mon,$year,undef,undef,undef) = localtime();
$year += 1900;
$mon++;
my $date_string = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $year, $mon, $mday,
$hour, $min, $sec);
my $header_comments =
qq/# ieee-oui.txt -- Ethernet vendor OUI file for arp-scan
#
# This file contains the Ethernet vendor OUIs for arp-scan. These are used
# to determine the vendor for a give Ethernet interface given the MAC address.
#
# Each line of this file contains an OUI-vendor mapping in the form:
#
# <OUI><TAB><Vendor>
#
# Where <OUI> is the first three bytes of the MAC address in hex, and <Vendor>
# is the name of the vendor.
#
# Blank lines and lines beginning with "#" are ignored.
#
# This file was automatically generated by get-oui at $date_string
# using data from $url
#
# Do not edit this file. If you want to add additional MAC-Vendor mappings,
# edit the file mac-vendor.txt instead.
#
/;
print OUTPUT $header_comments;
#
# Parse the content received from the URL, and write the OUI entries to the
# output file. Match lines that look like this:
# 00-00-00 (hex) XEROX CORPORATION
# and write them to the output file looking like this:
# 000000 XEROX CORPORATION
#
while ($content =~ m/^(\w+)-(\w+)-(\w+)\s+\(hex\)\s+(.*)$/gm) {
print OUTPUT "$1$2$3\t$4\n";
$lineno++;
}
#
# All done. Close the output file and print OUI entry count
#
close OUTPUT || die "Error closing output file\n";
print "$lineno OUI entries written to file $filename\n" if $verbose;
|