#coding:utf-8 import csv import networkx as nx import matplotlib.pyplot as plt import numpy as np def csv_dataset(addr,ip): slow_body1=csv.reader(open('D:\\学习\\mesa\\DDoS图\\数据集1\\%s.csv' %addr,'r')) slow_body1_DoS={} slow_body1_normal={} #norm=0 #DDoS=0 m=0 counter=0 counter1=0 for row in slow_body1: if(row[5]=='Length'): continue tmp_one_packet=[] if(row[1]==ip): if((row[3]) not in slow_body1_DoS): #slow_body1_DoS[(row[3]+":"+row[7])]=[] counter=0 slow_body1_DoS[(row[3])]=[] if((counter==0) and (row[4]!='TCP')): tmp_one_packet.append(120)#包大小 #int(row[5]) tmp_one_packet.append(float(row[2]))#时间 tmp_one_packet.append(row[4])#协议 #slow_body1_DoS[row[3]+':'+row[7]].append(tmp_one_packet) slow_body1_DoS[row[3]].append(tmp_one_packet) counter=counter+1 elif(row[4]=='TCP'): tmp_one_packet.append(int(row[5]))#包大小 tmp_one_packet.append(float(row[2]))#时间 tmp_one_packet.append(row[4])#协议 #slow_body1_DoS[row[3]+':'+row[7]].append(tmp_one_packet) slow_body1_DoS[row[3]].append(tmp_one_packet) counter=0 #DDoS=DDoS+1 #if((row[3]+":"+row[7]) not in slow_body1_DoS): elif(row[3]==ip): #DDoS=DDoS+1 #if((row[1]+":"+row[6]) not in slow_body1_DoS): counter=0 if((row[1]) not in slow_body1_DoS): slow_body1_DoS[(row[1])]=[] #low_body1_DoS[(row[1]+":"+row[6])]=[] tmp_one_packet.append(int(row[5])*(-1))#包大小 tmp_one_packet.append(float(row[2]))#时间 tmp_one_packet.append(row[4])#协议 #slow_body1_DoS[row[1]+':'+row[6]].append(tmp_one_packet) slow_body1_DoS[row[1]].append(tmp_one_packet) elif(m<50000): m+=1 #norm=norm+1 '''if(row[1]0):#构造图的边 if(all_traffic[traffic][0]*all_traffic[traffic-1][0]>0): y_pos+=1 #print(1) g.add_edge(z-1, z,weight=all_traffic[traffic][1]-all_traffic[traffic-1][1]) #nx.draw(g,with_labels=True,pos=nx.circular_layout(g)) #plt.show() else: y_axis.append(y_pos) y_pos=1 x_axis+=1 #print(2) g.add_edge(z,node_first,weight=all_traffic[traffic][1]-all_traffic[traffic-node_first][1]) #nx.draw(g,with_labels=True,edge_color='r',pos=nx.circular_layout(g)) a=a+1 #plt.show() if(a>=2): g.add_edge(node_last,z-1,weight=all_traffic[traffic-1][1]-all_traffic[traffic-node_last][1]) #nx.draw(g,with_labels=True,edge_color='b',pos=nx.circular_layout(g)) node_first=z node_last=z-1 g.add_edge(z,node_last,weight=all_traffic[traffic][1]-all_traffic[traffic-node_last][1]) y_axis.append(y_pos) #print(x_axis,y_axis) y_all=0.5*max(y_axis) m=0 pos={} labels={} colors=[] for pos_x in range(x_axis): for pos_y in range(y_axis[pos_x]): labels[m]=str(node_tags1[m])+"\n"+str(node_features[m]) if(node_features[m]>0): colors.append('#c56822') else: colors.append('#1e76a6') pos[m]=(pos_x,-y_all/(y_axis[pos_x]+1)*(pos_y+1)) m=m+1 if(tags=='slowread'): #plt.title('normal') #else: plt.figure(figsize=(50,45)) plt.title(tags) plt.xlim=(0,x_axis) plt.ylim=(-y_all,0) '''if node_features != []: node_features = np.stack(node_features) node_feature_flag = True else: node_features = None node_feature_flag = False g_list.append(S2VGraph(g, tag, node_tags))''' nx.draw(g, labels=labels, #这个选项让节点有名称 edge_color='black', # b stands for blue! pos=pos, # 这个是选项选择点的排列方式,具体可以用 help(nx.drawing.layout) 查看 # 主要有spring_layout (default), random_layout, circle_layout, shell_layout # 这里是环形排布,还有随机排列等其他方式 node_color=colors, # r = red node_size=1500, # 节点大小 width=1, # 边的宽度 font_color='white' ) plt.show() if __name__ == '__main__': main()