python监控进程网络流量
rt,各位大哥,python2.7+有没有高效监控进程级网络IO的方法?不用pcap
我只需要知道固定时间间隔中,客户端软件与服务器有没有交互就可以了;
或者给我讲解一下,下面这个代码
importsocket
importstruct
importthread
importthreading
importtime
importos
net_data={}
d_net_info={}
lock=threading.Lock()
defprint_data():
whileTrue:
lock.acquire()
forkeyinnet_data:
print"%s%s\n"%(key,net_data[key])
lock.release()
time.sleep(5);
defget_net_info():
net_info=os.popen('netstat-nbo').readlines()
forlinnet_info[4:]:
s=l.split()
iflen(s)>2:
key="%s%s"%(s[1],s[2])
key2="%s%s"%(s[2],s[1])
else:
ifnotd_net_info.has_key(key):
d_net_info[key]=s[0]
d_net_info[key2]=s[0]
defget_packet():
HOST=socket.gethostbyname(socket.gethostname())
s=socket.socket(socket.AF_INET,socket.SOCK_RAW,socket.IPPROTO_IP)
s.bind((HOST,0))
s.setsockopt(socket.IPPROTO_IP,socket.IP_HDRINCL,1)
s.ioctl(socket.SIO_RCVALL,socket.RCVALL_ON)
net_data["unknow"]=0
whileTrue:
buf=s.recvfrom(65565)
port=struct.unpack('HH',buf[0][20:24])
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])
src_port=socket.htons(port[0])
dest_port=socket.htons(port[1])
data_len=len(buf[0])
key="%s:%d%s:%d"%(src_ip,src_port,dest_ip,dest_port)
ifnotd_net_info.has_key(key):
get_net_info()
ifd_net_info.has_key(key):
key2="%s%s"%(key,d_net_info[key])
ifnet_data.has_key(key2):