import socket import struct import _thread import threading import time import os import sys import json netcard=sys.argv[1] host_ip=sys.argv[2] collectTime=float(sys.argv[3]) net_data = {} d_net_info = {} cancel=True def net_data_normalize(): for key in net_data: net_data[key]="%s"%round(net_data[key]/collectTime,2) def init_net_data(): for port in sys.argv[4:]: net_data["in_"+port]=0 net_data["out_"+port]=0 def get_packet(): s = socket.socket(socket.PF_PACKET, socket.SOCK_DGRAM,socket.htons(0x0003)) s.bind((netcard,0)); while cancel: buf = s.recvfrom(40) iphead_version=(struct.unpack("B",buf[0][0:1])[0]&0xf0)/16 if iphead_version != 4 and iphead_version != 6 : continue iphead_len =(struct.unpack("B",buf[0][0:1])[0]&0x0f)*4 src_ip = "%d.%d.%d.%d"%struct.unpack('BBBB', buf[0][12:16]) dest_ip ="%d.%d.%d.%d"%struct.unpack('BBBB', buf[0][16:20]) port = struct.unpack('HH', buf[0][iphead_len:4+iphead_len]) if src_ip == host_ip: src_port = socket.htons(port[0]) key = "out_%d"%src_port if key in net_data: data_len =socket.htons(struct.unpack("H",buf[0][2:4])[0]) net_data[key]=net_data[key]+data_len elif dest_ip == host_ip: dest_port = socket.htons(port[1]) key = "in_%d"%dest_port if key in net_data: data_len =socket.htons(struct.unpack("H",buf[0][2:4])[0]) net_data[key]=net_data[key]+data_len init_net_data() _thread.start_new_thread(get_packet,()) time.sleep(collectTime/1000) cancel=False time.sleep(0.5) net_data_normalize() result=json.dumps(net_data) print(result)