python 统计网卡流量并使用udp发送

3 篇文章 0 订阅

server:

from socket import *
from time import ctime

HOST = ''
PORT = 8888
BUFSIZ = 1024
ADDRESS = (HOST, PORT)

udpServerSocket = socket(AF_INET, SOCK_DGRAM)
udpServerSocket.bind(ADDRESS)     

print("waiting for message...")
while True:
    data, addr = udpServerSocket.recvfrom(BUFSIZ)
    #print("Recv data:", data.decode('utf-8'))
    print(data.decode('utf-8'))

    content = '[%s] %s' % (bytes(ctime(), 'utf-8'), data.decode('utf-8'))
    udpServerSocket.sendto(content.encode('utf-8'), addr)
    #print('...received from and returned to:', addr)

udpServerSocket.close()

client:

#/usr/bin/env/python
#coding=utf-8

import sys,re,time,os

from socket import *

HOST = '127.0.0.1'
PORT = 8888
BUFSIZ = 1024
INTERVAL_TIME = 3

ADDRESS = (HOST, PORT)
udpClientSocket = socket(AF_INET, SOCK_DGRAM)

netcard = '/proc/net/dev'

def checkfile(filename):
  if os.path.isfile(filename):
    pass
  else:
    f = open(filename, 'w')
    f.write('0')
    f.close()

def get_net_data():
  nc = netcard or '/proc/net/dev'
  fd = open(nc, "r")
  netcardstatus = False
  for line in fd.readlines():
    if line.find("eth1") > 0:
      netcardstatus = True
      field = line.split()
      #print(field)
      recv = field[0].split(":")[1]
      if(len(recv) == 0):
          recv = field[1]
          send = field[9]
      else:
          send = field[8]
  if not netcardstatus:
    fd.close()
    print('Please setup your netcard')
    sys.exit()
  fd.close()
  return (float(recv), float(send))

def monfirst(filename):
  nowtime = time.strftime('%m-%d %H:%M',time.localtime(time.time()))
  sec = time.localtime().tm_sec
  if nowtime == '01-01 00:00':
    if sec < 10:
      f = open(filename, 'w')
      f.write('0')
      f.close()      

def net_loop():
  (recv, send) = get_net_data()
  while True:
    time.sleep(INTERVAL_TIME)
    (new_recv, new_send) = get_net_data()
    recvdata = (new_recv - recv) / 1024 / INTERVAL_TIME
    senddata = (new_send - send) / 1024 / INTERVAL_TIME
    #totaltrans += int(recvdata)
    #totaltrans += int(senddata)
    data = ("rxkB/s: %f, txkB/s: %f"%(recvdata, senddata))
    udpClientSocket.sendto(data.encode('utf-8'), ADDRESS)
    #udpClientSocket.sendto("aaaaa".encode('utf-8'), ADDRESS)
    #print("rx: %f"%(recvdata))
    #print("tx: %f"%(senddata))
    recv = new_recv
    send = new_send

if __name__ == "__main__":
  net_loop()

使用方法:

服务端:
python3 udp_server.py

客户端:
python3 udp_client.py

客户端配置:
HOST = ‘127.0.0.1’ # 目的ip
PORT = 8888 # 目的端口
BUFSIZ = 1024 # 可发送的最大buff
INTERVAL_TIME = 3 # 间隔时间(秒)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高晓伟_Steven

相逢即是有缘,动力源于金钱。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值