-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRAManalyzer.pl
111 lines (105 loc) · 4 KB
/
RAManalyzer.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#Para el análisis de los archivos obtenidos del volcado de memoria:
#Formato de los archivo "Proceso_PID.txt"
use strict;
use warnings;
use Data::Dumper;
use JSON;
sub main(){
my $formato ="Proceso_*.txt";
my @ls = glob($formato);
my %urls;
my $file;
foreach $file (@ls) {
if (-f $file){
# Obtenemos los sitios visitados
my $ip = "";
print "Analizando $file...\n";
# Abrimos el archivo para lectura
open(FILE, $file) or die "No se pudo abrir $file: $!";
#Obtenemos los strings que tengan htt
while (<FILE>) {
if (/\bhttp*\b/i){
my $line = $_;
if (index($line, "http://") != -1){
my $tmp = (split /http:/, $line, 2)[1];
# Limpiamos más las URLs (quitamos lo que esté después de ", > y ,)
$tmp =~ s/ />/;
$tmp =~ s/"/>/;
$tmp =~ s/,/>/;
my $url = (split />/, $tmp)[0];
#Revisamos si hay una newline
if ($url eq "\n"){
last;
}else{
$url = "http:".$url;
#print "$url\n";
# Como necesitamos resolver el nombre de dominio, se hace nslookup a las urls:
$ip = Nslookup($url);
}
my $rep = 1;
# Si existe e el hash, incrementamos la repetición
if((exists $urls{$ip})){
$rep = $urls{$ip};
$rep += 1;
$urls{$ip} = $rep;
}else{
# Si no existe, se añade al hash $url{$repeticiones}
$urls{$ip} = $rep;
}
}elsif (index($line, "https://") != -1){
my $tmp = (split /https:/, $line, 2)[1];
# Limpiamos más las URLs (quitamos lo que esté después de ", > y ,)
$tmp =~ s/ />/;
$tmp =~ s/"/>/;
$tmp =~ s/,/>/;
my $url = (split />/, $tmp)[0];
#Revisamos si hay una newline
if ($url eq "\n"){
last;
}else{
$url = "https:".$url;
#print "$url\n";
# Como necesitamos resolver el nombre de dominio, se hace nslookup a las urls:
$ip = Nslookup($url);
}
my $rep = 1;
# Si existe e el hash, incrementamos la repetición
if((exists $urls{$ip})){
$rep = $urls{$ip};
$rep += 1;
$urls{$ip} = $rep;
}else{
# Si no existe, se añade al hash $url{$repeticiones}
$urls{$ip} = $rep;
}
}
};
}
}
my $json = encode_json \%urls;
open OUTFILE, "> IPs_$file" or die $1;
print OUTFILE $json;
close OUTFILE;
}
}
sub Nslookup(){
my ($full) = @_;
# Obtenemos solo el dominio
my @tmp = split('//', $full);
if ($tmp[1] eq "")
{
last;
}
my $dom = $tmp[1];
@tmp = split('/', $dom);
my $url = $tmp[0];
#print $url,$tmp[0],$dom,$full;
my @nslookup = split '\n', `nslookup $url > nul`; #Obtiene las líneas de salida del comando netstat
foreach (@nslookup) {
if($_ =~ /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/)
{
return $1;
}
}
}
main();