# Paquetes necesarios #pkg <- c("dplyr","ggplot2", "scales", "maptools", "sp", "maps", "grid", #"Group4","mapproj","leaflet","rworldmap","choroplethr") pkg <- c("dplyr","ggplot2", "scales", "maptools", "sp", "maps", "grid", "Group4","mapproj","leaflet","rworldmap") # Instalar paquetes que no esten instalados new.pkg <- pkg[!(pkg %in% installed.packages())] if (length(new.pkg)) { install.packages(new.pkg) } require(ggplot2) require(scales) require(maptools) require(sp) require(maps) require(grid) require(Group4) require(mapproj) require(dplyr) require(leaflet) #require(choroplethr)
knitr::opts_chunk$set(echo = TRUE)
En este Markdown se intenta representar el número de botnets activas. El dataset utilizado se actualiza cada 5 minutos.
La fuente de los datos utilizados es accesible desde el siguiente enlace https://feodotracker.abuse.ch/.
# Cargamos el dataset con las coordenadas de Lat/Long df.feo<-maxmindg4.df()
str(df.feo)
Mapa con la ubicación de las botnets.
world <- map_data("world") # Quitamos el continete Antarctico ya que no aporta informaci?n # No es nada personal con los pinguinos... world <- subset(world, world$region!="Antarctica") gg <- ggplot(data=world, aes(x=long, y=lat)) gg <- gg + geom_path(aes(group=group), colour="gray70") # La definici?n de la proyeccion representa la "curvatura" del mapa gg <- gg + coord_map("mercator", xlim=c(-200, 200)) # A?adimos una capa al mapa con la informaci?n de Zero Access gg <- gg + geom_point(data=df.feo, aes(longitude, latitude), colour="red", alpha=1/40, size=5) # Eliminamos texto y le damos un poco de color gg <- gg + theme(text=element_blank(), axis.ticks=element_blank(), panel.grid=element_blank(), panel.background=element_rect(color="gray50", fill="white")) print(gg)
library(maps) library(dplyr) library(leaflet) library(Group4) library(ggplot2) library(RcmdrMisc) if(!file.exists("df.feo")) df.feo<-maxmindg4.df() #Mapa basico worldleafmap<-map("world",fill=TRUE,plot=FALSE,wrap=c(-180,180,NA)) worldmap<-leaflet(worldleafmap) %>% addTiles() %>% addPolygons(fillColor = topo.colors(10,alpha=NULL),stroke=FALSE) worldmap %>% addCircles(lng=df.feo$longitude,lat=df.feo$latitude,radius = 50, color = '#ff0000') #Distribución por tipo de Botnet barplot(height = table(df.feo$Malware),col = "red",main = "Botnet type distribution") #Grafico de la última fecha en la que se detecto y estuvo activo #hist(x = df.feo$DetectedDate, breaks = 10, col = "green",main = "detected date distribution") qplot(x = df.feo$DetectedDate,geom = "density",colour = I("green")) #hist(x = df.feo$LastOnlineDate, breaks = 10, col = "blue",main = "Last online by date") qplot(x = df.feo$LastOnlineDate,geom = "density",colour = I("blue")) #Dias de la semana en la que se detectaron los ataques barplot(height = table(factor(df.feo$DetectedWeekday,levels=c("lunes", "martes", "miércoles", "jueves", "viernes", "sábado", "domingo"))),col = "orange",main = "Botnet type distribution") #Dia de la semana y continente g <- ggplot(df.feo, aes(factor(df.feo$DetectedWeekday,levels=c("lunes", "martes", "miércoles", "jueves", "viernes", "sábado", "domingo")), df.feo$continent_name, color = df.feo$Malware)) g + geom_count() + labs(title="complete continent & weekday data") + xlab("weekday") + ylab("Continent Name") #attempting a K-means trying to find clusters showing relations of factors #only numeric/factor fields df.feo3<-df.feo[,c("DstIP","latitude","longitude")] df.feo3<-RcmdrMisc::KMeans(df.feo3,centers=4,iter.max = 40,num.seeds = 5) df.feo2<-cbind(df.feo,df.feo3$cluster) df.feocluster1<-df.feo[df.feo2$cluster==1,] df.feocluster2<-df.feo[df.feo2$cluster==2,] df.feocluster3<-df.feo[df.feo2$cluster==3,] df.feocluster4<-df.feo[df.feo2$cluster==4,] #Results yet to be analyzed
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.