我想从交换机获取 ARP 表到 syslog 服务器(Ubuntu 12.04 LTS)。我对如何做到这一点做了一些研究,并决定使用 SNMP。我做了一些研究,我知道我的服务器将充当管理器,而交换机将充当代理。我的问题是,我不太清楚获取 arp 表并将它们定向到我的服务器中的 mysql 数据库的过程。
答案1
有许多软件解决方案可以通过 SNMP 轮询网络设备并将其 MAC 地址表存储在 SQL 数据库中。通常,它们的功能远远超出您在问题中要求的内容。
在服务器上安装软件之前,请务必注意,您应该具有网络设备的管理访问权限,或者至少具有查询相关设备的权限。您或您的 IT 支持人员需要配置交换机以允许 SNMP 字符串,并允许来自其所在的服务器 IP/子网的 SNMP 查询。这些设备的配置方式取决于供应商,超出了您的问题的明显范围。
Ubuntu 上可用的此类工具的一个例子是网络迪斯科。
根据他们的网站,Netdisco 是一个维护“网络设备的配置信息和连接数据 [即] ... 通过 SNMP 检索。数据使用 SQL 数据库存储,以实现可扩展性和速度。第 2 层拓扑协议(例如 CDP 和 LLDP)可自动发现网络拓扑。”
虽然 Ubuntu 存储库中有一个可供安装的软件包(请参阅netdiso-common
、netdisco-backend
和netdisco-frontend
),但它有些过时了。可以从源代码安装较新的版本他们的网站。
另一个例子计划专注于 IP 地址管理 (IPAM)、DNS 和电路管理。IPPLAN 通过 ucd-snmp 包和 NMAP 进行轮询,并可以在各种 SQL 数据库中将 IP 地址映射到 MAC 地址。
另外,你可能想看看切换图。
虽然它不会将数据存储在 SQL 中,但它会创建 CSV 文件,然后可以根据需要将其放入 SQL 数据库中。
还有许多其他解决方案(既有商业解决方案也有免费解决方案)。我之所以只提及这些解决方案,是因为我有安装、配置和管理这些软件包的直接经验。
答案2
MAC 地址存储在 MIB 中.1.3.6.1.2.1.17.4.3.1.2
因此,你可以做这样的事情:
snmpwalk -v2c -c <community> <SwitchIP> .1.3.6.1.2.1.17.4.3.1.2
您将获得一个转储,其中包含这些数字,后面是整数形式的 MAC 地址的六个字。因此,您需要获取最后 6 个整数,将它们转换为十六进制,最后将它们存储在数据库中。
响应还会告诉您交换机在哪个端口“看到” MAC 地址。例如:
iso.3.6.1.2.1.17.4.3.1.2.208.39.136.84.36.11 = INTEGER: 25
意味着可以通过该交换机的端口 25 访问 MAC 地址 208.39.136.84.36.11(如果需要,可以将其转换为十六进制)。
答案3
我们使用一种叫做网络数据库在 Ubuntu 上,它会抓取我们所有的路由器和交换机的数据,并将它们放入 MySQL 数据库中。它在 12.04 LTS 上运行 find: