是否有人熟悉使用 SNMP 在特定交换机上生成子网列表的方法(让我们选择一个更流行的 - Cisco)?VLAN列表怎么样?如果是这样,您能否指出所涉及的 MIB/OID?(这里是网络新手)
使用 SNMP 在交换机上生成子网列表?
接口/IP 寻址:
如果您要轮询设备的 IP 地址、子网掩码和相应的接口,您可以使用IP-MIB和IF-MIB MIB 中的以下 OID :
.1.3.6.1.2.1.4.20.1.1
- 可以在此 OID 中找到 IP 地址~]$ snmptranslate .1.3.6.1.2.1.4.20.1.1 IP-MIB::ipAdEntAddr ~]$ snmpwalk -v2c -c cisco 10.30.46.1 .1.3.6.1.2.1.4.20.1.1 IP-MIB::ipAdEntAddr.10.30.46.1 = IpAddress: 10.30.46.1 IP-MIB::ipAdEntAddr.25.255.25.254 = IpAddress: 25.255.25.254 IP-MIB::ipAdEntAddr.55.44.33.22 = IpAddress: 55.44.33.22 IP-MIB::ipAdEntAddr.172.31.10.10 = IpAddress: 172.31.10.10
.1.3.6.1.2.1.4.20.1.3
- 子网掩码可以在这个 OID 中找到~]$ snmptranslate .1.3.6.1.2.1.4.20.1.3 IP-MIB::ipAdEntNetMask ~]$ snmpwalk -v2c -c cisco 10.30.46.1 .1.3.6.1.2.1.4.20.1.3 IP-MIB::ipAdEntNetMask.10.30.46.1 = IpAddress: 255.255.255.0 IP-MIB::ipAdEntNetMask.25.255.25.254 = IpAddress: 255.255.255.0 IP-MIB::ipAdEntNetMask.55.44.33.22 = IpAddress: 255.255.255.0 IP-MIB::ipAdEntNetMask.172.31.10.10 = IpAddress: 255.255.255.0
.1.3.6.1.2.1.4.20.1.2
- 接口索引 ( ifTable Indexes ) 是每个接口的唯一整数。~]$ snmptranslate .1.3.6.1.2.1.4.20.1.2 IP-MIB::ipAdEntIfIndex ~]$ snmpwalk -v2c -c cisco 10.30.46.1 .1.3.6.1.2.1.4.20.1.2 IP-MIB::ipAdEntIfIndex.10.30.46.1 = INTEGER: 1 IP-MIB::ipAdEntIfIndex.25.255.25.254 = INTEGER: 5 IP-MIB::ipAdEntIfIndex.55.44.33.22 = INTEGER: 6 IP-MIB::ipAdEntIfIndex.172.31.10.10 = INTEGER: 7
.1.3.6.1.2.1.2.2.1.2
- 可以在此 OID 中找到接口友好名称,并...2.1.2.[INDEX]
为每个接口附加 ifTable 索引(例如)。~]$ snmptranslate .1.3.6.1.2.1.2.2.1.2 IF-MIB::ifDescr ~]$ snmpwalk -v2c -c cisco 10.30.46.1 .1.3.6.1.2.1.2.2.1.2 IF-MIB::ifDescr.1 = STRING: FastEthernet0/0 IF-MIB::ifDescr.2 = STRING: FastEthernet0/1 IF-MIB::ifDescr.4 = STRING: Null0 IF-MIB::ifDescr.5 = STRING: Loopback0 IF-MIB::ifDescr.6 = STRING: Tunnel10 IF-MIB::ifDescr.7 = STRING: Dialer1 IF-MIB::ifDescr.8 = STRING: Virtual-Access1
您可以手动遍历这些 OID,用您选择的语言编写一些脚本,或者使用类似于 Tim Peck 的答案中提到的更智能的程序/脚本。
这是一个快速(和肮脏)的 shell 示例:
#!/bin/bash
# duct taped by one.time
# Basic interface information collector
##
# Set usage var and getoptions
usage="Usage: interface-info.sh -H <IP Address> -C <snmp community string>
OPTIONS:
-H Hostname set IP address or hostname
-h Help prints usage options
SNMPv2 OPTIONS:
-C Community set SNMPv2 community string
"
while getopts H:C:h option;
do
case $option in
H) ipaddress=$OPTARG;;
C) community=$OPTARG;;
h) echo "$usage"
exit $invalid_result;;
esac
done
##
# Prevent blank argvars
if [[ -z $ipaddress || -z $community ]]; then
echo "$usage"
exit 0
fi
##
# Set field separator to new line
IFS=$'\n'
##
# Store our IP-MIB info in arrays
ipAdEntAddr=( $(snmpbulkwalk -v2c -c $community $ipaddress .1.3.6.1.2.1.4.20.1.1 | awk -F ": " '{print $2}') )
ipAdEntNetMask=( $(snmpbulkwalk -v2c -c $community $ipaddress .1.3.6.1.2.1.4.20.1.3 | awk -F ": " '{print $2}') )
ipAdEntIfIndex=( $(snmpbulkwalk -v2c -c $community $ipaddress .1.3.6.1.2.1.4.20.1.2 | awk -F ": " '{print $2}') )
for ((i=0; i<${#ipAdEntAddr[@]}; i++)); do
ifDescr[$i]=$(snmpwalk -v2c -c $community $ipaddress .1.3.6.1.2.1.2.2.1.2.${ipAdEntIfIndex[$i]} | awk -F ": " '{print $2}')
echo "${ifDescr[$i]}: ${ipAdEntAddr[$i]} ${ipAdEntNetMask[$i]}"
done
例子:
~]$ ./interface-info.sh -H 10.30.46.1 -C cisco
FastEthernet0/0: 10.30.46.1 255.255.255.0
Loopback0: 25.255.25.254 255.255.255.0
Tunnel10: 55.44.33.22 255.255.255.0
Dialer1: 172.31.10.10 255.255.255.0
VLAN:
如果您正在寻找 VLAN ID 和 VLAN 名称,您可以使用以下 OID:
.1.3.6.1.4.1.9.9.46.1.3.1.1.4.1
的vtpVlanName可以发现(思科设备)在此OID和VLAN-ID可以发现所附,例如:...1.4.1.[VLAN-ID]
(类似的ifIndex和ifDescr上面的例子)。~]$ snmptranslate .1.3.6.1.4.1.9.9.46.1.3.1.1.4.1 SNMPv2-SMI::enterprises.9.9.46.1.3.1.1.4.1 ~]$ snmpwalk -v2c -c cisco 192.168.0.8 SNMPv2-SMI::enterprises.9.9.46.1.3.1.1.4.1 SNMPv2-SMI::enterprises.9.9.46.1.3.1.1.4.1.1 = STRING: "default" SNMPv2-SMI::enterprises.9.9.46.1.3.1.1.4.1.10 = STRING: "VLAN0010" SNMPv2-SMI::enterprises.9.9.46.1.3.1.1.4.1.21 = STRING: "VLAN0021" SNMPv2-SMI::enterprises.9.9.46.1.3.1.1.4.1.100 = STRING: "VLAN0100" SNMPv2-SMI::enterprises.9.9.46.1.3.1.1.4.1.344 = STRING: "VLAN0344" SNMPv2-SMI::enterprises.9.9.46.1.3.1.1.4.1.456 = STRING: "iSCSI-TRAFFIC" SNMPv2-SMI::enterprises.9.9.46.1.3.1.1.4.1.1002 = STRING: "fddi-default" SNMPv2-SMI::enterprises.9.9.46.1.3.1.1.4.1.1003 = STRING: "token-ring-default" SNMPv2-SMI::enterprises.9.9.46.1.3.1.1.4.1.1004 = STRING: "fddinet-default" SNMPv2-SMI::enterprises.9.9.46.1.3.1.1.4.1.1005 = STRING: "trnet-default"
抓取 VLAN ID 的手动示例:
~]$ snmpbulkwalk -v2c -c cisco 192.168.0.8 1.3.6.1.4.1.9.9.46.1.3.1.1.4 | sed -e 's/.*4.1.\(.*\) =.*/\1/'
1
10
21
100
344
456
1002
1003
1004
1005
如果您想以类似于主机文件的格式从交换机/路由器获取有关接口 IP 的信息,您可以使用我的 bash 脚本。我想获得有关我们网络中网络设备的所有 IP 地址的实际信息。所有设备都可以通过 SNMP 访问。我找不到可以执行此操作的工具或脚本,因此我决定自己编写。输出可以简单地添加到主机文件中。接口描述或前缀作为注释写入,因此它将显示在例如 traceroute 输出中,同时您可以在主机文件中搜索接口描述。
输出格式如下:
ABCD Device_hostname-Interface_name #/Prefix #Interface 描述
10.1.1.1 路由器_R01-Gi1/0/2 #28
10.5.1.22 Beijing-router01-WAN-Tu611 #24 # 到internet的端口
192.168.24.254 firewall2-eth5 #24
Switchmap 将为您完成所有这些工作。