Graph of a denial of service attack in Python

3

Friends,

I generated the following chart:

Thecodeusedwasasfollows:

importmatplotlib.pyplotaspltimportmatplotlib.datesasdatesfromdatetimeimportdatetime,timedeltax=[]y=[]dataset=open("./datasetDdos10Abril2017_unixtime_slowloris.csv","r")
##separacao no csv eh por virgulas

for line in dataset:
    line = line.strip() #23,24\n -> 23,24 retira a quebra de linha
    X,Y = line.split(",") #separador eh a virgula
    x.append( float(X))
    y.append(float (Y))

dataset.close()

x1 = [datetime.fromtimestamp(int(d)) for d in x]

plt.gca().xaxis.set_major_formatter(dates.DateFormatter('%m/%d/%Y %H:%M:%S'))

y1 = []
v = 0
for i in sorted(y):
    if(abs(i-v > 50)):
        y1.append(i)
        v = i

plt.plot(x1, y, 'ro')

plt.title("Número de Conexões por segundo: Ataque Sockstress")
plt.ylabel("Número de Conexões por segundo")
plt.xlabel('Tempo')
plt.xticks(x1)
plt.yticks(y1)

#plt.gca().set_ylim([0, 29800])
plt.gcf().autofmt_xdate()
plt.show()

While showing the chart to a teacher, the teacher said the chart was not very clear and suggested doing it as a bar chart.

Any suggestions on how to present the data better?

How to make a bar chart using Python, like the data below?

The data file (CSV) is available at: link

    
asked by anonymous 21.08.2017 / 18:18

1 answer

2

You can do the following:

import matplotlib.pyplot as plt
import matplotlib.dates as dates
from datetime import datetime, timedelta

x = []
y = []
with open("./datasetDdos10Abril2017_unixtime_slowloris.csv") as f:
    for l in f:
        X,Y = l.split(",") #separador eh a virgula
        x.append(float(X))
        y.append(float (Y))

x1 = [datetime.fromtimestamp(int(d)) for d in x]
y_pos = [idx for idx, i in enumerate(y)]

plt.gca().xaxis.set_major_formatter(dates.DateFormatter('%m/%d/%Y %H:%M:%S'))

y1 = []
v = 0
y_sorted = sorted(y)
for i in y_sorted:
    if(abs(i-v > 50)):
        y1.append(i)
        v = i

plt.bar(y_pos, y, align='edge', color="blue", alpha=0.5, width=0.5) # <--- EDICAO PRINCIPAL

plt.title("Número de Conexões por segundo: Ataque Sockstress")
plt.ylabel("Número de Conexões por segundo")
plt.xlabel('Tempo')
plt.xticks(y_pos, x1, size='small',rotation=35, ha="right")
plt.yticks(y1)
plt.ylim(ymin=y_sorted[0]-200) # valor minimo do eixo y

plt.show()
    
21.08.2017 / 18:48