python puresnmp读取arp表
这里引用了第三方库puresnmp,但还算比较好用的,没有额外依赖。
先安装这个库
pip install puresnmp==1.11.0.post1
下面的操作演示均在交互式上演示:
>>> import puresnmp
>>> oid = '1.3.6.1.2.1.4.22.1.2'
>>> data=puresnmp.walk('192.168.200.1', '*****', oid)
这里的data实际上就是一个生成器,我们遍历这个生成器就能得到最终要的数据,现在我们来看看data的结构是怎样的
>>> a=list(data) >>> a [VarBind(ObjectIdentifier((1, 3, 6, 1, 2, 1, 4, 22, 1, 2, 2, 192, 168, 200, 1)), b'\x9c\xaf\xcap\xd3\x93'),
VarBind(ObjectIdentifier((1, 3, 6, 1, 2, 1, 4, 22, 1, 2, 2, 192, 168, 200, 2)), b'\x00\x0c)\xfc\xd1t'),
VarBind(ObjectIdentifier((1, 3, 6, 1, 2, 1, 4, 22, 1, 2, 2, 192, 168, 200, 3)), b'x+\xcb\x11\x7f\x12'),
....]
因为数据有点多,我后面就用省略号表示了,不全部列出来了,从这里看到,这个生成器的每一个元素内有2个对象,第一个是OID,第二个是二进制bytes类型的mac地址。因此我们需要用2个变量去遍历这个生成器,并且将bytes类型的mac地址进行hex转换
>>> data=puresnmp.walk('192.168.200.1', '*****', oid)
>>> type(data)
<class 'generator'>
>>>
>>>
>>> for OID,MAC in data:
... print(OID, MAC.hex())
...
1.3.6.1.2.1.4.22.1.2.2.192.168.200.1 9cafca70d393
1.3.6.1.2.1.4.22.1.2.2.192.168.200.2 000c29fcd174
1.3.6.1.2.1.4.22.1.2.2.192.168.200.3 782bcb117f12
1.3.6.1.2.1.4.22.1.2.2.192.168.200.4 000c29fc7e0a
1.3.6.1.2.1.4.22.1.2.2.192.168.200.6 000c292ebc81
....
这样我们就能得到需要的对象值了,最后我们可以通过一系列手段进行文本字符串处理,得到最终想要的数据即可。

浙公网安备 33010602011771号