ç§ãåããŠããçµç¹ã¯ãè€æ°ã®å»ºç©ã«åæ£ãããããªã倿°ã®ç®¡çã¹ã€ããã䜿çšããŠããŸãã ããŒãäžã®MACã¢ãã¬ã¹ããtelnetãŸãã¯sshã ãã§ãªããZabbixç£èŠã·ã¹ãã ã®Webã€ã³ã¿ãŒãã§ãŒã¹ã§çŽæ¥ç¢ºèªãããã£ãã®ã§ãã
æ
å ±åéãšçè«
ãããè¡ãæ¹æ³ã«é¢ããæ
å ±ãæ±ããŠãGoogleã«å°ããããçãæ€çŽ¢ã®åŸãç®çã®ã¢ãã¬ã¹ãååŸãããããã衚瀺ãããããŒããæ±ºå®ããããã®ã¢ã«ãŽãªãºã ã説æããçŽ æŽããã
ããã¥ã¡ã³ããCiscoã«ãã£ãŠèè
ãšããŠçºèŠãããŸããã
3Com 4200Gã¹ã€ããããã®snmpwalkã®çµè«ãç°¡åã«èª¿ã¹ããšãããç§ã®å Žåã¯vlanãæ±ºå®ããå¿
èŠãããªããããŒãããšã«MACã¢ãã¬ã¹ã決å®ããããã®3ã€ã®ã¹ããããããããŸããã§ããã
ããã¥ã¡ã³ãããçè§£ã§ããããã«ãå¿
èŠãªãã®ã¯æ¬¡ã®ãšããã§ãã
1ïŒäœæãªã¹ããååŸãã
$snmpwalk -c public -v 2c hostname .1.3.6.1.2.1.17.4.3.1.1
17.4.3.1.1.0.0.12.7.172.8 = Hex: 00 00 0C 07 AC 08
17.4.3.1.1.0.1.2.27.80.145 = Hex: 00 01 02 1B 50 91
17.4.3.1.1.0.1.3.72.77.90 = Hex: 00 01 03 48 4D 5A
17.4.3.1.1.0.1.3.72.221.191 = Hex: 00 01 03 48 DD BF
...
2ïŒã³ãã³ãã§ããŒãã®ãªã¹ããååŸãã
$snmpwalk -c public -v 2c hostname .1.3.6.1.2.1.17.4.3.1.2
17.4.3.1.2.0.0.12.7.172.8 = 13
17.4.3.1.2.0.1.2.27.80.128 = 13
17.4.3.1.2.0.1.2.27.80.145 = 13
17.4.3.1.2.0.1.2.163.145.225 = 13
...
åçŽãªã¹ã€ããã«åãåãããŠããå Žåããã®çŽ æŽãããæ°ïŒãã®äŸã§ã¯13ïŒã¯ã¹ã€ããã®ããŒãã§ãã
3ïŒOIDçªå·éã®å¯Ÿå¿ãèŠã€ããããšã ããæ®ã£ãŠããã
12.7.172.8ã§çµããOIDã¯ããã®
MACã
ãã³ã°ãã
MACãšããŒãçªå·ã
æäŸããããšãããããŸãã
çè«ããå®è·µãž
ãã®ãã¹ãŠãèªååããããã«ãçç ã®ç°¡åãªã¹ã¯ãªãããã¹ã±ããããŸããïŒ
UPDATE0ïŒgescheitã®ã¢ããã€ã¹ã§ã³ãŒããæŽæ°ãããŸãã;
UPDATE1ïŒ FreeLSDã®ã¢ããã€ã¹ã§ã³ãŒããåã³æŽæ°ãããŸããïŒ
ïŒïŒ / usr / bin / perl
ïŒ================================================= =====================
ïŒ
ïŒéžæããããŒãããã®3COMã¹ã€ããããã®MACã¢ãã¬ã¹ã®ã¯ãšãª
ïŒ================================================= =====================
峿 Œãªäœ¿çš;
Net :: SNMP qw ïŒ snmp_dispatcher oid_lex_sort ïŒã䜿çšããŸãã
ç§ã®$ show_vendor = 1 ;
ç§ã®$ script = "/usr/share/zabbix/scripts/mac.sh -s" ;
ç§ã®$ debug = 0 ;
my $ file_name = "/ tmp / $ ARGV [0] -getmac.tmp" ;
ç§ã®$ interval = 90 ; ïŒãªãã¬ãã·ã¥ã¬ãŒã
ç§ã®$ new = 0 ;
ç§ã®@ãªã¹ã;
ç§ã®$ write_secs = ïŒ stat ïŒ $ file_name ïŒ ïŒïŒ [ 9 ] ;
if ïŒ $ debug == 1 ïŒ {
print "file $ file_name updated at" ãã¹ã«ã©ãŒïŒ localtime ïŒ $ write_secs ïŒ ïŒ ã " \ n " ;
} ;
if ïŒ $ write_secs + $ interval < time ïŒ { ïŒãã¡ã€ã«ã®æŽæ°ééã$ intervalç§å
if ïŒ $ debug == 1 ïŒ { print "æ°ããMacããŒãã«ã®çæ\ n " ; }
$ new = 1 ;
FHãéãã "> $ file_name "ãŸãã¯die "ca n't open '' $ file_name 'ïŒ$ïŒ" ;
} else {
if ïŒ $ debug == 1 ïŒ { print "å€ãmacããŒãã«ã䜿çš\ n " ; }
FRãéãã ã< $ file_name ããŸãã¯die ãéããŸãã ' $ file_name 'ïŒ$ïŒã ;
while ïŒ my $ line = < FR > ïŒ {
ã ã·ã£ã ã·ã£ïŒ $ã©ã€ã³ ïŒ ;
my ïŒ $ p ã $ m ïŒ = split / ; / ã $è¡ ;
@ list [ $ p ] = "@list [ $ p ] $ m ã" ;
}
}
ïŒ======================================
ç§ã®$ã»ãã·ã§ã³ ;
ç§ã®$ãšã©ãŒ ;
ç§ã®$ port = $ ARGV [ 1 ] ;
if ïŒ $ new == 1 ïŒ {
ïŒ===ãªã¢ãŒããã¹ããžã®ã»ãã·ã§ã³ã®ã»ããã¢ãã===
ïŒ $ session ã $ error ïŒ = Net :: SNMP- >ã»ãã·ã§ã³ïŒ
-hostname = > $ ARGV [ 0 ] || 'localhost' ã
-community = > 'public' ã
-version = > '2c' ã
-translate = > [ -octetstring = > 0 ] ã
-port = > 161
ïŒ ;
ïŒ===ã»ãã·ã§ã³ã¯äœæãããŸãããïŒ ===
if ïŒ ïŒ defined ïŒ $ session ïŒ ïŒ {
printf ïŒ "ERRORïŒïŒ
s \ n " ã $ error ïŒ ;
åºå£ 1 ;
}
} ;
ïŒ==================================
ïŒ===æ
å ±ãååŸããããã«ã¯ãšãªãããOID ====
ç§ã®$ TpFdbAddress = '1.3.6.1.2.1.17.4.3.1.1' ;
ç§ã®$ TpFdbPort = '1.3.6.1.2.1.17.4.3.1.2' ;
ïŒ=============================================
ç§ã®$çµæ ;
ç§ã®@ tmp;
ç§ã®$ x ;
if ïŒ $ new == 1 ïŒ {
if ïŒ defined ïŒ $ result = $ session- > get_table ïŒ $ TpFdbAddress ïŒ ïŒ ïŒïŒ {
foreach ïŒ oid_lex_sort ïŒ keys ïŒ ïŒ
{ $ result } ïŒ ïŒ ïŒïŒ {
$ x = unpack ïŒ 'H *' ã $ result- > { $ _ } ïŒ ;
$ x =ãs / ïŒ .. ïŒ ïŒ ïŒ \ Z ïŒ ïŒ / \ 1 ïŒ / g;
push ïŒ @ tmpã $ x ïŒ ;
}
} else {
if ïŒ $ debug == 1 ïŒ {
printf ïŒ "ERRORïŒïŒ
s \ n \ n " ã $ session- > error ïŒ ïŒ ïŒ ;
}
}
ïŒ===========================================
ïŒ===è¿ãããMACããŒããåºå===
$ result ;
if ïŒ defined ïŒ $ result = $ session- > get_table ïŒ -baseoid = > $ TpFdbPort ïŒ ïŒ ïŒïŒ {
ç§ã®$ i = 0 ;
ç§ã®$ out = "" ;
ç§ã®$ res = 0 ;
ç§ã®$ tmp_port ;
ç§ã®$ tmp_mac_list = "" ;
foreach ïŒ oid_lex_sort ïŒ keys ïŒ ïŒ
{ $ result } ïŒ ïŒ ïŒïŒ {
if ïŒ $ result- > { $ _ } == $ port ïŒ {
$ res = 1 ;
if ïŒ $ show_vendor == 1 ïŒ {
$ out = ` $ script $ tmp [ $ i ] ` ;
printf ïŒ "ïŒ
sïŒïŒ
sïŒ" ã $ tmp [ $ i ] ã $ out ïŒ ;
} else {
printf ïŒ "ïŒ
s" ã $ tmp [ $ i ] ïŒ ;
} ;
print "ã" ;
} ;
if ïŒ $ show_vendor == 1 ïŒ {
$ out = ` $ script $ tmp [ $ i ] ` ;
printf FH ïŒ "ïŒ
s;ïŒ
sïŒïŒ
sïŒ \ n " ã $ result- > { $ _ } ã $ tmp [ $ i ] ã $ out ïŒ ;
} else {
printf FH ïŒ "ïŒ
s;ïŒ
s \ n " ã $ result- > { $ _ } ã $ tmp [ $ i ] ïŒ ;
} ;
$ i ++;
}
if ïŒ $ res == 0 ïŒ {
ãnullããå°å·ããŸã ã
} ;
} else {
if ïŒ $ debug == 1 ïŒ {
printf ïŒ "ERRORïŒïŒ
s \ n \ n " ã $ session- > error ïŒ ïŒ ïŒ ;
} else {
ãnullããå°å·ããŸã ã
} ;
}
} else {
if ïŒ @ list [ $ port ] ïŒ {
print "@list [ $ port ]" ;
} else {
ãnullããå°å·ããŸã ã
} ;
}
print " \ n " ;
ïŒ=============================================
ïŒ===ã»ãã·ã§ã³ãéããŠããã°ã©ã ãçµäºããŸã===
if ïŒ $ new == 1 ïŒ {
$ã»ãã·ã§ã³ - >éãã;
FHãéããŸãã
} else {
FRãéããŸãã
}
exit 0 ;
ã³ãŒãã¯éåžžã«æŽç·ŽãããŠããŸãããOIDãæ¢ã«åä¿¡ãããŠãããã¡ã€ã«ããªãå Žåã¯ãMACã¢ãã¬ã¹ãæã€OIDãååŸããã¢ã¬ã€ã«æžã蟌ã¿ãŸãã æ¬¡ã«ãåãã·ãŒã±ã³ã¹ã§ããŒãä»ãã®OIDãååŸããŸããããã«ãããé
åå
ã®nçªç®ã®å€ãšãåä¿¡ããOIDã®nçªç®ã®å€ãšããŒãçªå·ãšã®å¯Ÿå¿ãåŸãããŸãã æ¬¡ã«ãåä¿¡ããããŒã¿ããã¡ã€ã«ã«ããããããŸãã
ãã¡ã€ã«ãã¹ã¯ãªããã®éå§æã«æ¢ã«ååšãã$ intervalïŒç§ã®å Žåã¯90ç§ïŒãããå€ããã®ã§ã¯ãªãå Žåããã®ãã¡ã€ã«ããããŒã¿ãååŸããŸãã ããã«ãããã¹ã€ããããšã«2ã€ã®SNMPèŠæ±ã®ã¿ã䜿çšã§ããŸããã
ã¹ã¯ãªããã¯å
¥åã«2ã€ã®ãã©ã¡ãŒã¿ãŒãåããŸããæåã®ãã©ã¡ãŒã¿ãŒã¯ããã€ã¹ã¢ãã¬ã¹ã§ãïŒããã¯zabbixã®ä»æ§ã§ããå€éšã¹ã¯ãªããã®å Žåããã¹ãã®ã¢ãã¬ã¹ã¯åžžã«æåã®ãã©ã¡ãŒã¿ãŒã§ãïŒãç§ãã¡ã«ãšã£ãŠéèŠãªããŒãçªå·ã¯2çªç®ã®ãã©ã¡ãŒã¿ãŒã§ãã ãã®ããŒãã«ã¢ãã¬ã¹ããªãå Žåãã¹ã¯ãªããã¯ããã¹ããnullããå«ãæååãè¿ããŸãã æ°ããããŒãžã§ã³ã§ã¯ãmac-addressã§ããã€ã¹ã®è£œé å
ã確èªã§ããŸãã ãã®æ©èœãæå¹ã«ããã«ã¯ãå€ã1ã®$ show_vendor倿°ããããŸããã¹ã¯ãªããã¯ãã¹ã¯ãªãã倿°ã§æå®ãããå¥ã®ã¹ã¯ãªããããã¡ãŒã«ãŒã«é¢ããæ
å ±ãååŸããããšããŸãã ãã®ã¹ã¯ãªããã«ã¯ãããã€ã¹ã®MACã¢ãã¬ã¹ãæž¡ãããŸãã ç§èªèº«ã®ããã«ãããªãã·ã³ãã«ãªshã¹ã¯ãªãããå®è£
ããŸããããã®å
šäœã®ãã€ã³ãã¯ã1è¡å®è¡ããããšã§ãã
awk --assign IGNORECASE = 1 '/ hex / && /' $ mac '/ {forïŒx = 3; x <= NF; x ++ïŒ{printfïŒ "ïŒ
s"ã$ xïŒ}}' $ filename
倿°$ filenameã®äžã«é ããŠããç¥ç§çãªãã¡ã€ã«ã¯
referenceã«ãã£ãŠååŸãããieeeã«ãã£ãŠæ
éã«éžæãããå¿
èŠãªãã¹ãŠã®ããŒã¿ãå«ãŸããŠããŸãã
ãã®1è¡ãå°ã倿ŽãããæŽæ°ãã¢ãŒãã远å ããŠãã¡ãŒã«ãŒã®ãªã¹ãã®ææ°ããŒãžã§ã³ãåçž®ãããŸããã çµæã¯æ¬¡ã®ãšããã§ãã
ïŒïŒ/ bin / sh
ïŒmac-addressãããã³ããŒãååŸ
if [ -z "$ 1" ] ; ãããã
echo "åŒæ°ãæå®ãããŠããŸãããçµäºããŸãïŒ$ 0 [-option] macã䜿çšããŸã"
echo "[-option]ã«ã¯-uïŒããŒã¿ããŒã¹ãæŽæ°ããŠçµäºïŒãŸãã¯-sïŒãµã€ã¬ã³ãã¢ãŒãããã³ããŒã®ã¿è¡šç€ºïŒãæå®ã§ããŸãã"
1 çªåºå£
fi
ïŒã¹ã¯ãªãããå®è¡ãããšãã«Zabbixã$ PATHãèšå®ããªãããšãå¿ããªãã§ãã ãã
ãã¡ã€ã«å = / usr / share / zabbix / scripts / oui.txt
tmpfile = / tmp / oui.txt
link = httpïŒ // standard.ieee.org / development / regauth / oui / oui.txt
sed = / bin / sed
awk = / bin / awk
ã±ãŒã¹ $ 1 in
-s ïŒ
ãµã€ã¬ã³ã = 1
mac = 2ãã«
if [ -z "$ 2" ] ; ãããã
echo "macãæå®ãããŠããŸãããçµäºããŸãïŒ"
1 çªåºå£
fi
;;
-u ïŒ
wget $ link -O $ tmpfile
if [ $ïŒ -gt 0 ] ; ãããã
echo "ããŠã³ããŒããšã©ãŒãçµäº"
1 çªåºå£
ä»ã«
echo "OKãããŠã³ããŒãïŒ"
echo " $ tmpfileã$ filenameã«ç§»å..."
mv -f $ tmpfile $ filename
if [ $ïŒ -gt 0 ] ; ãããã
echo "ãšã©ãŒïŒ"
ä»ã«
echo "æåïŒ"
fi
åºå£ 0
fi
;;
* ïŒ
mac = $ 1
;;
ãšãµãã¯
ãã [ ïŒ -f $ filename ] ; ãããã
if [ -z $ silent ] ; ãããã
echo "macãªã¹ããã¡ã€ã«ã¯ãããŸãããããŠã³ããŒãããŸããïŒ[y / n]"
ä»ã«
1 çªåºå£
fi
ãªãã ïŒ
ãã
INPUT_STRINGãèªã
ã±ãŒã¹ $ INPUT_STRING
y ïŒ
echo " $ãªã³ã¯ããããŠã³ããŒãããããšããŠããŸã"
wget $ link -O $ filename
if [ $ïŒ -gt 0 ] ; ãããã
echo "ããŠã³ããŒããšã©ãŒãçµäº"
1 çªåºå£
ä»ã«
echo "OKãããŠã³ããŒãïŒ"
fi
ç Žã
;;
n ïŒ
echo "exitingïŒ"
åºå£ 0
;;
* ïŒ
echo "ééã£ãå
¥åã[y / n]ã䜿çš"
;;
ãšãµãã¯
ãã£ã
fi
if [ $ { ïŒmac } -lt 8 ] ; ãããã
mac = ` echo " $ mac " | $ sed 's / ^ \ïŒ.. \ïŒ\ïŒ.. \ïŒ\ïŒ.. \ïŒ/ \ 1- \ 2- \ 3 /' '
ä»ã«
mac = ` echo " $ mac " | $ sed -e 's /ïŒ/-/ g' '
fi
mac = $ {macïŒ0ïŒ8}
if [ -z $ silent ] ; ãããã
echo " $ macãæ€çŽ¢ããŠããŸã..."
fi
result = ` $ awk --assign IGNORECASE = 1 '/ hex / && /' $ mac '/ {forïŒx = 3; x <= NF; x ++ïŒ{printfïŒ"ïŒ
s "ã$ xïŒ}}' $ãã¡ã€ã«å `
if [ -z " $ result " ] ; ãããã
çµæ = ãæ
å ±ãªãã
fi
echo -n $çµæ
ã¡ãŒã«ãŒã«ããã©ãŒãã³ã¹ããã¹ãããã¹ã¯ãªãããå®è¡ããŸãã
$./mac.sh "000000"
no mac list file, dowload it? [y/n]
y
Trying to download from standards.ieee.org/develop/regauth/oui/oui.txt
--2011-10-06 14:20:16-- standards.ieee.org/develop/regauth/oui/oui.txt
proxy.organization.ltd... 192.168.0.1
proxy.organization.ltd|192.168.0.1|:3128... .
Proxy , ... 200 OK
: 2493060 (2,4M) [text/plain]
Saving to: «oui.txt»
100%[==========================================================================================================================================================================>] 2 493 060 784K/s 3,1s
2011-10-06 14:20:26 (784 KB/s) - «oui.txt» saved [2493060/2493060]
Download ok!
Searching for 00-00-00...
XEROX CORPORATION
ãã¹ãŠãæ©èœããå Žåã¯ã次ã«é²ã¿ãŸãã
次ã«ãzabbixa configã§ã¹ã¯ãªããã®å®è¡æéãèšå®ããå¿
èŠãªå€ã«å¢ãããŸãã éžæããã¿ã€ã ã¢ãŠãå€ãååã§ãªãå Žåãmacã¢ãã¬ã¹ãåæ ããããŒã¿èŠçŽ ããã¹ã¯ãªããå®è¡ã¿ã€ã ã¢ãŠãããªã©ã®ãšã©ãŒèª¬æãšãšãã«ããµããŒããããŠããªããã«ããŽãªã«1ã€ãã€ç§»åãããããããã«ãããçè§£ã§ããŸãã
æ§æãç·šéããŸãã
#vim /etc/zabbix/zabbix-server.conf
ç§ãã¡ã¯ããã«ãã®ãããªè¡ãæ¢ããŠããŸã
### Option: Timeout
# Specifies how long we wait for agent, SNMP device or external check (in seconds).
# Range: 1-30
ã³ã¡ã³ããå€ããç®çã®å€ã«å€æŽããŸã
Timeout=5
ãããèŠãŠ
### Option: ExternalScripts
# Location of external scripts
ExternalScripts=/usr/share/zabbix/scripts/
å¿
èŠã«å¿ããŠãã¹ã¯ãªãããžã®æ£ãããã¹ã«å€æŽããŸãã
ãã®ãã¹ã«æ²¿ã£ãŠãçç ã®äžã«ã¹ã¯ãªãããé
眮ããŸãã ç§ã¯ãããå·§åŠã«åŒã³åºããŸãã-get_mac.pl
次ã«ãZabbixã§ãã¹ã€ããã®ãã³ãã¬ãŒãã«å¿
èŠãªããŒã¿åãèšå®ããŸãã

ãããŠããã¹ãŠã®ããŒãã«ã
ãã®åŸãzabbixã§ã¹ã€ããã®ããŒãã®ã¢ãã¬ã¹æ
å ±ãçŽæ¥åä¿¡ã§ããŸãã
ç§ã«ã¯ãã®ããã«èŠããŸãïŒæŽæ°ãããã¹ã¯ãªãŒã³ã·ã§ãããã¡ãŒã«ãŒã®ååã§æçš¿ããããšã¯ã§ããŸãããhabrastorageã¯ãã©ãã·ã¥ãªãã§ã¯æ©èœãããGoogle Chromeã®ãã©ãã·ã¥ã§ãæ©èœããªãããã§ãïŒã

ããŒã16ãèŠãŠãããšãã«å¿é
ããªãã§ãã ãã-ããã¯ã¢ãããªã³ã¯ã§ãã
ãã®ææ³ã¯ãã¹ããããŠããã3Comãã©ã³ãã®9ã€ã®ã¹ã€ããïŒ4200Gã4210ã2916ã2924ïŒã§1ãæéæ£åžžã«åäœããŠããŸããZabbixããŒãžã§ã³1.8.5ãæè¿1.8.7ã«æŽæ°ãããŸããã ã·ã¹ã³ã®ããã¥ã¡ã³ãã«åŸã£ãŠããããã¹ãŠãäœæããããšãèãããšãã·ã¹ã³ã¹ã€ããã«åé¡ã¯ãªãã¯ãã§ãã
PSç§ã¯ã¹ã¯ãªããã宿ãããŠåŠçã§ãããšä¿¡ããŠããŸãããç§ã¯perlãåŸæã§ã¯ãªãã®ã§ããã®é«è²Žãªä»äºã«å©ããæ±ããŠhabrasocietyã«é Œã¿ãZabbixã®ãããªçŽ æŽããããããžã§ã¯ãã䟡å€ããé«å質ã®ãœãªã¥ãŒã·ã§ã³ãšããŠå
¥ããŸãã ãŸããã¹ã€ãã3Com 4200Gã4210ã2924ã®ãã³ãã¬ãŒããæ¹è¯ãããã¹ã¯ãªãããšäžç·ã«é
眮ããäºå®ã§ãã
gescheitã«ãã£ãп޿°ããã
UPD0ã¹ã¯ãªããã³ãŒã
FreeLSDã®ã¢ããã€ã¹ã«
åºã¥ããŠæŽæ°ããã
UPD1ã®èšäºãšã³ãŒã