[package] add mac-to-devinfo (#5373)
git-svn-id: svn://svn.openwrt.org/openwrt/packages@16712 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
b387ad1fdf
commit
1ecb72b961
87
net/mac-to-devinfo/Makefile
Normal file
87
net/mac-to-devinfo/Makefile
Normal file
@ -0,0 +1,87 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=mac-to-devinfo
|
||||
PKG_VERSION:=1.0.0
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/mac-to-devinfo
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
TITLE:=MAC Address to Device Information
|
||||
endef
|
||||
|
||||
define Package/mac-to-devinfo/description
|
||||
Scripts to take a mac address (or ip if the ip is in the arp cache)
|
||||
and translate it into device information (mostly OUI owner, from the
|
||||
IEEE data files, but more information may be available for specific
|
||||
devices/vendors).
|
||||
endef
|
||||
|
||||
define Package/smap-to-devinfo
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
DEPENDS:=mac-to-devinfo +smap +httping
|
||||
TITLE:=SIP Device Information from Scan
|
||||
endef
|
||||
|
||||
define Package/smap-to-devinfo/description
|
||||
A script to use smap to discover all SIP devices on the networks
|
||||
(provided ICMP and SIP are allowed to the network from the host) and
|
||||
translate (through the ip then mac) into the device information.
|
||||
endef
|
||||
|
||||
define Package/netdiscover-to-devinfo
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
DEPENDS:=mac-to-devinfo +netdiscover
|
||||
TITLE:=Device Information from Scan for MAC addresses
|
||||
endef
|
||||
|
||||
define Package/netdiscover-to-devinfo/description
|
||||
A script to use netdiscover to discover all devices on the specified
|
||||
arp-able networks and translate into the device information.
|
||||
endef
|
||||
|
||||
define Build/Prepare
|
||||
endef
|
||||
|
||||
define Build/Configure
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
endef
|
||||
|
||||
define Package/mac-to-devinfo/conffiles
|
||||
/etc/config/mactodevinfo
|
||||
endef
|
||||
|
||||
define Package/mac-to-devinfo/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) ./files/mac-to-devinfo $(1)/usr/bin
|
||||
$(INSTALL_BIN) ./files/ip-to-devinfo $(1)/usr/bin
|
||||
$(INSTALL_BIN) ./files/prep-devinfo $(1)/usr/bin
|
||||
$(INSTALL_DIR) $(1)/usr/lib/mac-to-devinfo
|
||||
$(INSTALL_BIN) ./files/devinfo-functions.sh $(1)/usr/lib/mac-to-devinfo
|
||||
$(INSTALL_DIR) $(1)/usr/share/mac-to-devinfo
|
||||
$(CP) ./files/macdevdb $(1)/usr/share/mac-to-devinfo
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(CP) ./files/mactodevinfo $(1)/etc/config
|
||||
endef
|
||||
|
||||
define Package/smap-to-devinfo/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) ./files/smap-to-devinfo $(1)/usr/bin
|
||||
endef
|
||||
|
||||
define Package/netdiscover-to-devinfo/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) ./files/netdiscover-to-devinfo $(1)/usr/bin
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,mac-to-devinfo))
|
||||
$(eval $(call BuildPackage,smap-to-devinfo))
|
||||
$(eval $(call BuildPackage,netdiscover-to-devinfo))
|
122
net/mac-to-devinfo/files/devinfo-functions.sh
Normal file
122
net/mac-to-devinfo/files/devinfo-functions.sh
Normal file
@ -0,0 +1,122 @@
|
||||
#!/bin/sh
|
||||
# Shell script compatibility wrappers for /sbin/uci
|
||||
#
|
||||
# Copyright (C) 2008 Felix Fietkau <nbd@openwrt.org>
|
||||
# Copyright (C) 2009 Daniel Dickinson <crazycshore@gmail.com>
|
||||
#
|
||||
# This program 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 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program 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 this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
# $UCI and $UCISTATE must be set
|
||||
|
||||
CONFIG_APPEND=
|
||||
_C=0
|
||||
LOAD_STATE=1
|
||||
LIST_SEP=" "
|
||||
|
||||
config_load() {
|
||||
local PACKAGE="$1"
|
||||
local DATA
|
||||
local RET
|
||||
|
||||
_C=0
|
||||
|
||||
if [ -z "$CONFIG_APPEND" ]; then
|
||||
CONFIG_SECTIONS=
|
||||
CONFIG_NUM_SECTIONS=0
|
||||
CONFIG_SECTION=
|
||||
fi
|
||||
export NO_EXPORT=
|
||||
DATA="$($UCI -P $UCISTATE -S -n export "$PACKAGE" 2>/dev/null)"
|
||||
RET="$?"
|
||||
[ "$RET" != 0 -o -z "$DATA" ] || eval "$DATA"
|
||||
unset DATA
|
||||
|
||||
${CONFIG_SECTION:+config_cb}
|
||||
return "$RET"
|
||||
}
|
||||
|
||||
reset_cb() {
|
||||
config_cb() { return 0; }
|
||||
option_cb() { return 0; }
|
||||
list_cb() { return 0; }
|
||||
}
|
||||
reset_cb
|
||||
config () {
|
||||
local cfgtype="$1"
|
||||
local name="$2"
|
||||
|
||||
CONFIG_NUM_SECTIONS=$(($CONFIG_NUM_SECTIONS + 1))
|
||||
name="${name:-cfg$CONFIG_NUM_SECTIONS}"
|
||||
append CONFIG_SECTIONS "$name"
|
||||
[ -n "$NO_CALLBACK" ] || config_cb "$cfgtype" "$name"
|
||||
CONFIG_SECTION="$name"
|
||||
eval "CONFIG_${CONFIG_SECTION}_TYPE=\"$cfgtype\""
|
||||
}
|
||||
|
||||
option () {
|
||||
local varname="$1"; shift
|
||||
local value="$*"
|
||||
|
||||
eval "CONFIG_${CONFIG_SECTION}_${varname}=\"$value\""
|
||||
[ -n "$NO_CALLBACK" ] || option_cb "$varname" "$*"
|
||||
}
|
||||
|
||||
list() {
|
||||
local varname="$1"; shift
|
||||
local value="$*"
|
||||
local len
|
||||
|
||||
config_get len "$CONFIG_SECTION" "${varname}_LENGTH"
|
||||
len="$((${len:-0} + 1))"
|
||||
config_set "$CONFIG_SECTION" "${varname}_ITEM$len" "$value"
|
||||
config_set "$CONFIG_SECTION" "${varname}_LENGTH" "$len"
|
||||
append "CONFIG_${CONFIG_SECTION}_${varname}" "$value" "$LIST_SEP"
|
||||
list_cb "$varname" "$*"
|
||||
}
|
||||
|
||||
config_get() {
|
||||
case "$3" in
|
||||
"") eval "echo \"\${CONFIG_${1}_${2}}\"";;
|
||||
*) eval "$1=\${CONFIG_${2}_${3}}";;
|
||||
esac
|
||||
}
|
||||
|
||||
config_foreach() {
|
||||
local function="$1"
|
||||
[ "$#" -ge 1 ] && shift
|
||||
local type="$1"
|
||||
[ "$#" -ge 1 ] && shift
|
||||
local section cfgtype
|
||||
|
||||
[ -z "$CONFIG_SECTIONS" ] && return 0
|
||||
for section in ${CONFIG_SECTIONS}; do
|
||||
config_get cfgtype "$section" TYPE
|
||||
[ -n "$type" -a "x$cfgtype" != "x$type" ] && continue
|
||||
$function "$section" "$@"
|
||||
done
|
||||
}
|
||||
|
||||
package() {
|
||||
return 0
|
||||
}
|
||||
|
||||
append() {
|
||||
local var="$1"
|
||||
local value="$2"
|
||||
local sep="${3:- }"
|
||||
|
||||
eval "$var=\${$var:+\${$var}\${value:+\$sep}}\$value"
|
||||
}
|
||||
|
29
net/mac-to-devinfo/files/ip-to-devinfo
Normal file
29
net/mac-to-devinfo/files/ip-to-devinfo
Normal file
@ -0,0 +1,29 @@
|
||||
#!/bin/sh
|
||||
|
||||
ARP=arp
|
||||
MACTODEV=mac-to-devinfo
|
||||
|
||||
IP=$1
|
||||
|
||||
if [ -z "$IP" ]; then
|
||||
echo "Must specify IP address"
|
||||
fi
|
||||
|
||||
if [ ! -x "$(which $ARP)" ]; then
|
||||
do_arp() {
|
||||
cat /proc/net/arp
|
||||
}
|
||||
ARPMACFIELD=4
|
||||
else
|
||||
do_arp() {
|
||||
$ARP -n
|
||||
}
|
||||
ARPMACFIELD=3
|
||||
fi
|
||||
|
||||
ping -q -c 2 $IP >/dev/null
|
||||
MAC=$(do_arp|grep "$IP "|tr -s \ | cut -f$ARPMACFIELD -d\ )
|
||||
|
||||
$MACTODEV $MAC
|
||||
|
||||
|
155
net/mac-to-devinfo/files/mac-to-devinfo
Normal file
155
net/mac-to-devinfo/files/mac-to-devinfo
Normal file
@ -0,0 +1,155 @@
|
||||
#!/bin/sh
|
||||
|
||||
UCIBIN=uci
|
||||
UCIFUNC=/usr/lib/mac-to-devinfo/devinfo-functions.sh
|
||||
OVERRIDETABLE=mactodevinfo
|
||||
DEVDB=macdevdb
|
||||
UCICONFIG=/etc/config
|
||||
|
||||
OUIURL=http://standards.ieee.org/regauth/oui/oui.txt
|
||||
IABURL=http://standards.ieee.org/regauth/oui/iab.txt
|
||||
|
||||
OUIDIR=/var/cache/mac-to-devinfo
|
||||
|
||||
OUIFILE=$OUIDIR/oui.txt
|
||||
IABFILE=$OUIDIR/iab.txt
|
||||
|
||||
UCIDEVDB=/usr/share/mac-to-devinfo
|
||||
UCISTATE="$(mktemp -t)"
|
||||
|
||||
. $UCIFUNC
|
||||
|
||||
MAC=$1
|
||||
|
||||
if [ -z "$MAC" ]; then
|
||||
echo "Must specify MAC address"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
parse_override() {
|
||||
local cfg="$1"
|
||||
config_get name "$cfg" name
|
||||
config_get maclow "$cfg" maclow
|
||||
config_get machigh "$cfg" machigh
|
||||
config_get vendor "$cfg" vendor
|
||||
config_get devtype "$cfg" devtype
|
||||
config_get model "$cfg" model
|
||||
config_get ouiowneroverride "$cfg" ouiowner
|
||||
LOW=$(echo $maclow | sed -e 's/://g')
|
||||
HIGH=$(echo $machigh | sed -e 's/://g')
|
||||
if [ -z "$LOW" ] || [ -z "$HIGH" ] || [ -n "$(echo $LOW | grep -E -v '^[0-9A-Fa-f]{12}$')" ] || [ -n "$(echo $HIGH | grep -E -v '^[0-9A-Fa-f]{12}$')" ]; then
|
||||
echo "Invalid mac range for $name: $ouiowneroverride $vendor $devtype $model : $LOW-$HIGH" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
LOWMSB=$(expr substr "$LOW" 1 6)
|
||||
LOWLSB=$(expr substr "$LOW" 7 6)
|
||||
HIGHMSB=$(expr substr "$HIGH" 1 6)
|
||||
HIGHLSB=$(expr substr "$HIGH" 7 6)
|
||||
|
||||
if [ -z "$LOWMSB" ] || [ -z "$LOWLSB" ] || [ -z "$HIGHMSB" ] || [ -z "$HIGHLSB" ]; then
|
||||
echo "Error splitting database address strings"
|
||||
return 1
|
||||
fi
|
||||
|
||||
MACMSB=$(expr substr "$MACNUM" 1 6)
|
||||
MACLSB=$(expr substr "$MACNUM" 7 6)
|
||||
|
||||
if [ -z "$MACMSB" ] || [ -z "$MACLSB" ]; then
|
||||
echo "Error spliiting mac address string"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ -n "$ouiowneroverride" ]; then
|
||||
OUIOWNER="$ouiowneroverride"
|
||||
fi
|
||||
if [ $((0x$MACMSB)) -ge $((0x$LOWMSB)) ] && [ $((0x$MACMSB)) -le $((0x$HIGHMSB)) ]; then
|
||||
if [ $((0x$MACLSB)) -ge $((0x$LOWLSB)) ] && [ $((0x$MACLSB)) -le $((0x$HIGHLSB)) ]; then
|
||||
if [ -n "$OUTSTRING" ]; then
|
||||
echo "ERROR: We already have found information '$OUTSTRING'" >&2
|
||||
echo -n "and now we have: " >&2
|
||||
echo "$MAC | $OUIOWNER | $vendor | $devtype | $model" >&2
|
||||
return 1
|
||||
else
|
||||
echo "$MAC | $OUIOWNER | $vendor | $devtype | $model"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
if [ ! -r "$OUIFILE" ] || [ ! -r "$IABFILE" ]; then
|
||||
echo "Missing IEEE Registration Authority Database. Please run prep-devinfo"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
OUI="$(echo $MAC | cut -f1-3 -d: | sed -e 's/:/-/g' | tr abcdef ABCDEF )"
|
||||
|
||||
OUIOWNER="$(cat $OUIFILE | grep $OUI | tr -s '\t' | cut -f2- -d"$(printf '\t')" )"
|
||||
|
||||
if [ -z "$OUIOWNER" ] || [ "$OUIOWNER" = "IEEE REGISTRATION AUTHORITY" ]; then
|
||||
if [ -n "$(cat $IABFILE | grep $OUI)" ]; then
|
||||
LOWRANGE="$(echo $MAC | cut -f4-6 -d: | sed -e 's/://g' | tr abcdef ABCDEF )"
|
||||
for range in $(cat $IABFILE |grep -E '[0-9A-F]{6}\-[0-9A-F]{6}' |cut -f1 -d"$(printf '\t')" ); do
|
||||
LOW="$(echo $range | cut -f1 -d- )"
|
||||
HIGH="$(echo $range | cut -f2 -d- )"
|
||||
if [ -z "$LOW" ] || [ -z "$HIGH" ]; then
|
||||
echo "Error parsing IAB table"
|
||||
exit 1
|
||||
|
||||
fi
|
||||
LOWMSB=$(expr substr "$LOW" 1 6)
|
||||
LOWLSB=$(expr substr "$LOW" 7 6)
|
||||
HIGHMSB=$(expr substr "$HIGH" 1 6)
|
||||
HIGHLSB=$(expr substr "$HIGH" 7 6)
|
||||
|
||||
if [ -z "$LOWMSB" ] || [ -z "$LOWLSB" ] || [ -z "$HIGHMSB" ] || [ -z "$HIGHLSB" ]; then
|
||||
echo "Error splitting registration authority IAB address strings"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
MACMSB=$(expr substr "$LOWRANGE" 1 6)
|
||||
MACLSB=$(expr substr "$LOWRANGE" 7 6)
|
||||
|
||||
if [ -z "$MACMSB" ] || [ -z "$MACLSB" ]; then
|
||||
echo "Error splitting mac address string"
|
||||
exit 1
|
||||
fi
|
||||
if [ $((0x$MACMSB)) -ge $((0x$LOWMSB)) ] && [ $((0x$MACMSB)) -le $((0x$HIGHMSB)) ]; then
|
||||
if [ $((0x$MACLSB)) -ge $((0x$LOWLSB)) ] && [ $((0x$MACLSB)) -le $((0x$HIGHLSB)) ]; then
|
||||
OUIOWNER="$(cat $IABFILE | grep "$LOW-$HIGH" | tr -s '\t' | cut -f3- -d"$(printf '\t')" )"
|
||||
break;
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$OUIOWNER" ]; then
|
||||
OUIOWNER="Unknown Organization"
|
||||
fi
|
||||
|
||||
MACNUM="$(echo $MAC |sed -e 's/://g' | tr ABCDEF abcdef )"
|
||||
|
||||
UCI="$UCIBIN -c $UCIDEVDB"
|
||||
config_load $DEVDB
|
||||
DEVSTRING=$(config_foreach parse_override mactodevinfo)
|
||||
|
||||
SAVEDEVSTRING="$DEVSTRING"
|
||||
|
||||
UCI="$UCIBIN -c $UCICONFIG"
|
||||
config_load $OVERRIDETABLE
|
||||
DEVSTRING=$(config_foreach parse_override mactodevinfo)
|
||||
|
||||
if [ -z "$DEVSTRING" ]; then
|
||||
if [ -z "$SAVEDEVSTRING" ]; then
|
||||
echo "$MAC | $OUIOWNER | unknown | unknown | unknown"
|
||||
else
|
||||
echo "$SAVEDEVSTRING"
|
||||
fi
|
||||
else
|
||||
echo "$DEVSTRING"
|
||||
fi
|
||||
|
||||
rm -f $UCISTATE
|
19
net/mac-to-devinfo/files/macdevdb
Normal file
19
net/mac-to-devinfo/files/macdevdb
Normal file
@ -0,0 +1,19 @@
|
||||
|
||||
config 'mactodevinfo'
|
||||
option 'name' 'Tecom Phones'
|
||||
option 'maclow' '00:19:15:00:00:00'
|
||||
option 'machigh' '00:19:15:ff:ff:ff'
|
||||
option 'vendor' 'Vertical Communications'
|
||||
option 'devtype' 'SIP devices and various'
|
||||
option 'model' 'varies'
|
||||
|
||||
config 'mactodevinfo'
|
||||
option 'name' 'Comtrend Routers'
|
||||
option 'maclow' '00:30:da:47:b0:00'
|
||||
option 'machigh' '00:30:da:47:dd:ff'
|
||||
option 'vendor' 'Comtrend Co.'
|
||||
option 'devtype' 'Networking Equipment'
|
||||
option 'model' 'varies'
|
||||
option 'ouiowner' 'Comtrend Co.'
|
||||
|
||||
|
2
net/mac-to-devinfo/files/mactodevinfo
Normal file
2
net/mac-to-devinfo/files/mactodevinfo
Normal file
@ -0,0 +1,2 @@
|
||||
package mactodevinfo
|
||||
|
26
net/mac-to-devinfo/files/netdiscover-to-devinfo
Normal file
26
net/mac-to-devinfo/files/netdiscover-to-devinfo
Normal file
@ -0,0 +1,26 @@
|
||||
#!/bin/sh
|
||||
|
||||
MACTODEV=mac-to-devinfo
|
||||
NETDISCOVER=netdiscover
|
||||
|
||||
if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ]; then
|
||||
echo "Usage: netdiscover-to-devinfo IP-range Interface Timeout"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
prep-devinfo
|
||||
OLDIFS=$IFS
|
||||
IFS='
|
||||
'
|
||||
for line in $($NETDISCOVER -t $3 -k -m -i $2 -r $1); do
|
||||
IFS=$OLDIFS
|
||||
IP=$(echo $line | tr -s \ | cut -f1 -d\ )
|
||||
MAC=$(echo $line | tr -s \ | cut -f2 -d\ )
|
||||
echo "$IP"" | ""$($MACTODEV $MAC)"
|
||||
OLDIFS=$IFS
|
||||
IFS='
|
||||
'
|
||||
done
|
||||
|
||||
IFS=$OLDIFS
|
||||
|
15
net/mac-to-devinfo/files/prep-devinfo
Normal file
15
net/mac-to-devinfo/files/prep-devinfo
Normal file
@ -0,0 +1,15 @@
|
||||
#!/bin/sh
|
||||
|
||||
OUIURL=http://standards.ieee.org/regauth/oui/oui.txt
|
||||
IABURL=http://standards.ieee.org/regauth/oui/iab.txt
|
||||
|
||||
OUIDIR=/var/cache/mac-to-devinfo
|
||||
|
||||
OUIFILE=$OUIDIR/oui.txt
|
||||
IABFILE=$OUIDIR/iab.txt
|
||||
|
||||
[ -d $OUIDIR ] || mkdir -p $OUIDIR
|
||||
|
||||
wget -q -O $OUIFILE $OUIURL
|
||||
wget -q -O $IABFILE $IABURL
|
||||
|
37
net/mac-to-devinfo/files/smap-to-devinfo
Normal file
37
net/mac-to-devinfo/files/smap-to-devinfo
Normal file
@ -0,0 +1,37 @@
|
||||
#!/bin/sh
|
||||
|
||||
IPTODEV=ip-to-devinfo
|
||||
SMAP=smap
|
||||
|
||||
if [ "$1" == "-h" ] || [ "$2" == "-h" ] || [ -z "$1" ]; then
|
||||
echo "Usage: $0 IP-Range [port,port,...]"
|
||||
fi
|
||||
|
||||
if [ -n "$2" ]; then
|
||||
FIELD=1
|
||||
curport="$(echo $2 | cut -f$FIELD -d, )"
|
||||
while [ "$curport" != "" ]; do
|
||||
PORTS="$curport $PORTS"
|
||||
FIELD=$(($FIELD + 1))
|
||||
curport="$(echo $2 | cut -f$FIELD -d, )"
|
||||
done
|
||||
fi
|
||||
|
||||
prep-devinfo
|
||||
|
||||
if [ -z "$PORTS" ]; then
|
||||
PORTS=5060
|
||||
fi
|
||||
|
||||
for port in $PORTS; do
|
||||
for sip_device in $($SMAP -p $port $1 | grep -E -v 'host.? scanned' | grep 'SIP enabled' | cut -f1 -d: ); do
|
||||
if [ -x "$(which httping)" ]; then
|
||||
if httping -G -q -o 401,200 -c 2 -h $sip_device; then
|
||||
echo "$sip_device"" | ""$($IPTODEV $sip_device)"" | ""http://$sip_device/"
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
echo "$sip_device"" | ""$(IPTODEV $sip_device)"" | "" - "
|
||||
done
|
||||
done
|
||||
|
Loading…
x
Reference in New Issue
Block a user