python读取网口数据_如何在python中检查网络接口上的数据传输?

小编典典

轮询以太网接口统计信息的最佳方法是通过SNMP …

看起来您正在使用linux …如果是,请在 / etc / defaults / snmpd中*snmpd安装后snmpd,使用以下选项加载您的Linux (确保其中的行如下所示):*SNMPDOPTS

SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I

-smux,usmConf,iquery,dlmod,diskio,lmSensors,hr_network,snmpEngine,system_mib,at,interface,ifTable,ipAddressTable,ifXTable,ip,cpu,tcpTable,udpTable,ipSystemStatsTable,ip,snmp_mib,tcp,icmp,udp,proc,memory,snmpNotifyTable,inetNetToMediaTable,ipSystemStatsTable,disk

-Lsd -p /var/run/snmpd.pid'

您可能还需要将ro社区更改为public See Note 1并设置您的侦听接口/etc/snmp/snmpd.conf(如果不在环回上)…

假设您现在具有功能snmpd,则可以使用此方法轮询ifHCInBytes并ifHCOutBytes 查看有问题的接口的注释2。

poll_bytes.py :

from SNMP import v2Manager

import time

def poll_eth0(manager=None):

# NOTE: 2nd arg to get_index should be a valid ifName value

in_bytes = manager.get_index('ifHCInOctets', 'eth0')

out_bytes = manager.get_index('ifHCOutOctets', 'eth0')

return (time.time(), int(in_bytes), int(out_bytes))

# Prep an SNMP manager object...

mgr = v2Manager('localhost')

mgr.index('ifName')

stats = list()

# Insert condition below, instead of True...

while True:

stats.append(poll_eth0(mgr))

print poll_eth0(mgr)

time.sleep(5)

SNMP.py :

from subprocess import Popen, PIPE

import re

class v2Manager(object):

def __init__(self, addr='127.0.0.1', community='public'):

self.addr = addr

self.community = community

self._index = dict()

def bulkwalk(self, oid='ifName'):

cmd = 'snmpbulkwalk -v 2c -Osq -c %s %s %s' % (self.community,

self.addr, oid)

po = Popen(cmd, shell=True, stdout=PIPE, executable='/bin/bash')

output = po.communicate()[0]

result = dict()

for line in re.split(r'\r*\n', output):

if line.strip()=="":

continue

idx, value = re.split(r'\s+', line, 1)

idx = idx.replace(oid+".", '')

result[idx] = value

return result

def bulkwalk_index(self, oid='ifOutOctets'):

result = dict()

if not (self._index==dict()):

vals = self.bulkwalk(oid=oid)

for key, val in vals.items():

idx = self._index.get(key, None)

if not (idx is None):

result[idx] = val

else:

raise ValueError, "Could not find '%s' in the index (%s)" % self.index

else:

raise ValueError, "Call the index() method before calling bulkwalk_index()"

return result

def get_index(self, oid='ifOutOctets', index=''):

# This method is horribly inefficient... improvement left as exercise for the reader...

if index:

return self.bulkwalk_index().get(index, "")

else:

raise ValueError, "Please include an index to get"

def index(self, oid='ifName'):

self._index = self.bulkwalk(oid=oid)

结束说明:

SNMP v2c使用明文身份验证。如果您担心安全性/有人在嗅探您的流量,请更改您的社区,并通过源IP地址将查询限制在您的linux计算机上。完美的世界是将SNMP.py上述内容修改为使用SNMPv3(用于加密敏感数据);大多数人只是使用非公共社区,并通过源IP限制snmp查询。

ifHCInOctets并ifHCOutOctets提供通过接口传输的字节数的瞬时值。如果您正在寻找数据传输速率,那么当然会涉及一些额外的数学运算。

2020-06-07

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值