87 lines
2.5 KiB
Plaintext
87 lines
2.5 KiB
Plaintext
|
#!/usr/bin/env ruby
|
||
|
|
||
|
=begin
|
||
|
Script: vpn.vdom
|
||
|
Version: 1.0
|
||
|
Author: Jean-Jacques Martrès (jjmartres |at| gmail |dot| com)
|
||
|
Description: This script show asssociated VDOM for a VPN tunnel using SNMP on Fortinet device.
|
||
|
License: GPL2
|
||
|
|
||
|
This script is intended for use with Zabbix > 2.0
|
||
|
|
||
|
USAGE:
|
||
|
if.vdom [options]
|
||
|
|
||
|
OPTIONS
|
||
|
-h, --help Display this help message
|
||
|
-d, --device IP_ADDRESS Device IP address discovered by Zabbix
|
||
|
-c, --community SNMP_COMMUNITY SNMP community used for the device
|
||
|
-s, --snmpindex SNMP_INDEX SNMP index
|
||
|
=end
|
||
|
require 'rubygems'
|
||
|
require 'optparse'
|
||
|
require 'snmp'
|
||
|
|
||
|
version="0.0.1"
|
||
|
|
||
|
# Howto use it..quiet simple
|
||
|
OPTIONS = {}
|
||
|
mandatory_options=[:deviceip, :community, :snmpindex]
|
||
|
optparse = OptionParser.new do |opts|
|
||
|
opts.banner = "Usage: #{$0} [options]"
|
||
|
opts.separator ""
|
||
|
opts.separator "Options"
|
||
|
opts.on("-h", "--help", "Display this help message") do
|
||
|
puts opts
|
||
|
exit(-1)
|
||
|
end
|
||
|
opts.on('-d', '--device IP_ADDRESS', String, 'Device IP address discovered by Zabbix') { |v| OPTIONS[:deviceip] = v }
|
||
|
opts.on('-c', '--community SNMP_COMMUNITY',String, 'SNMP community used for the device') { |v| OPTIONS[:community] = v }
|
||
|
opts.on('-s', '--snmpindex SNMP_INDEX', Integer, 'SNMP index') { |v| OPTIONS[:snmpindex] = v }
|
||
|
opts.separator ""
|
||
|
end
|
||
|
|
||
|
# Show usage when no args pass
|
||
|
if ARGV.empty?
|
||
|
puts optparse
|
||
|
exit(-1)
|
||
|
end
|
||
|
|
||
|
# Validate that mandatory parameters are specified
|
||
|
begin
|
||
|
optparse.parse!(ARGV)
|
||
|
missing = mandatory_options.select{|p| OPTIONS[p].nil? }
|
||
|
if not missing.empty?
|
||
|
puts "Missing options: #{missing.join(', ')}"
|
||
|
puts optparse
|
||
|
exit(-1)
|
||
|
end
|
||
|
rescue OptionParser::ParseError,OptionParser::InvalidArgument,OptionParser::InvalidOption
|
||
|
puts $!.to_s
|
||
|
exit(-1)
|
||
|
end
|
||
|
|
||
|
# Query SNMP OID ifSpeed and ifHighSpeed
|
||
|
if_vdom = Array.new
|
||
|
|
||
|
SNMP::Manager.open(:host => OPTIONS[:deviceip], :community => OPTIONS[:community], :version => :SNMPv2c) do |manager|
|
||
|
response = manager.get(["1.3.6.1.4.1.12356.101.12.2.2.1.21.#{OPTIONS[:snmpindex]}"])
|
||
|
response.each_varbind do |vb|
|
||
|
if_vdom.push(vb.value.to_s)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if if_vdom.any?
|
||
|
ifIndex = if_vdom[0].to_i
|
||
|
SNMP::Manager.open(:host => OPTIONS[:deviceip], :community => OPTIONS[:community], :version => :SNMPv2c) do |manager|
|
||
|
response = manager.get(["1.3.6.1.4.1.12356.101.3.2.1.1.2.#{ifIndex}"])
|
||
|
response.each_varbind do |vb|
|
||
|
puts vb.value.to_s
|
||
|
end
|
||
|
end
|
||
|
exit(-1)
|
||
|
else
|
||
|
puts "-- ERROR -- : No response receive from #{OPTIONS[:deviceip]} !"
|
||
|
exit(-1)
|
||
|
end
|