hello world

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
....

 这样我们就能得到需要的对象值了,最后我们可以通过一系列手段进行文本字符串处理,得到最终想要的数据即可。

posted @ 2022-01-09 15:13  浩天四哥  阅读(495)  评论(0)    收藏  举报