|
soul^keeper |
 |
Administrateur 
Déconnecté
Niveau : 5 N° de Membre :
1
Ancienneté : 100%
Participation : 19%
Inscription: 22 Feb 2002
Localisation: La Défense
Age: 48
Messages: 16623
Sujets Lancés : 2412
|
[LINUX] Script PERL pour lister les connexions NAT
Un petit script bien sympa pour lister toutes les connexions NAT de votre passerelle linux :)
Créez un fichier "lsnat" avec les droits d'execution, et collez le code suivant :
code: #!/usr/bin/perl
use Net::DNS;
use Getopt::Std;
getopts("n");
$named=$opt_n;
@ip=();
# get list of IP on interface
open(IN,"ifconfig -a | grep "inet addr" |");
while (<IN>)
{
chop;
s/^\s+//g;
s/\s+/ /g;
$line=$_;
@f=split(/ /,$line);
@g=split(/:/,$f[1]);
push(@ip,$g[1]);
}
close(IN);
#for ($i=0;$i<@ip;$i++)
#{ print ("IP=$ip[$i]\n"); }
open(IN,"/proc/net/ip_conntrack");
while (<IN>)
{
chop;
s/\s+/ /g;
$line=$_;
@f=split(/ /,$line);
$status="";
$source_ip="";
$source_port="";
$target_ip="";
$target_port="";
$target_name="";
$icmp_type="";
$icmp_code="";
$protocol=$f[0];
if ($protocol =~ /tcp/i)
{
$status=$f[3];
@g=split(/=/,$f[4]);
$source_ip=$g[1];
@g=split(/=/,$f[5]);
$target_ip=$g[1];
if ((!grep /$source_ip/, @ip) && (!grep /$target_ip/, @ip))
{
@g=split(/=/,$f[6]);
$source_port=$g[1];
@g=split(/=/,$f[7]);
$target_port=$g[1];
if ($named==0)
{
$res = new Net::DNS::Resolver;
$query = $res->query($target_ip,"PTR");
if ($query)
{
foreach $rr ($query->answer)
{
next unless $rr->type eq "PTR";
$target_name=$rr->ptrdname;
last;
}
}
}
printf("%4s %15s/%5s -> %15s/%5s %s",
"tcp",$source_ip,$source_port,$target_ip,$target_port,$status);
if ($named==0)
{ printf(" (%s)",$target_name); }
print ("\n");
}
}
elsif ($protocol =~ /udp/i)
{
@g=split(/=/,$f[3]);
$source_ip=$g[1];
@g=split(/=/,$f[4]);
$target_ip=$g[1];
if ((!grep /$source_ip/, @ip) && (!grep /$target_ip/, @ip))
{
@g=split(/=/,$f[5]);
$source_port=$g[1];
@g=split(/=/,$f[6]);
$target_port=$g[1];
if ($named==0)
{
$res = new Net::DNS::Resolver;
$query = $res->query($target_ip,"PTR");
if ($query)
{
foreach $rr ($query->answer)
{
next unless $rr->type eq "PTR";
$target_name=$rr->ptrdname;
last;
}
}
}
printf("%4s %15s/%5s -> %15s/%5s %s",
"udp",$source_ip,$source_port,$target_ip,$target_port,$status);
if ($named==0)
{ printf(" (%s)",$target_name); }
print ("\n");
}
}
elsif ($protocol =~ /icmp/i)
{
@g=split(/=/,$f[3]);
$source_ip=$g[1];
@g=split(/=/,$f[4]);
$target_ip=$g[1];
$icmp_type=$f[5];
$icmp_code=$f[6];
$status=$f[8];
if ((!grep /$source_ip/, @ip) && (!grep /$target_ip/, @ip))
{
if ($named==0)
{
$res = new Net::DNS::Resolver;
$query = $res->query($target_ip,"PTR");
if ($query)
{
foreach $rr ($query->answer)
{
next unless $rr->type eq "PTR";
$target_name=$rr->ptrdname;
last;
}
}
}
printf("%4s %15s %5s -> %15s %5s %s",
"icmp",$source_ip," ",$target_ip," ",$status);
if ($named==0)
{ printf(" (%s)",$target_name); }
print ("\n");
}
}
}
close(IN);
Signaler ce message à un modérateur | IP: Logguée Temps en ligne : 92 Jours, 20 Heures, 22 Minutes, 21 Secondes en ligne
|