Link Station > Section Technique > Software >

[LINUX] Script PERL pour lister les connexions NAT




Aller au Forum:
Notez ce sujet :

  Sujet précédent   Sujet suivant
Auteur
Sujet    Tout développer | Tout contracter NOUVEAU SUJET    RÉPONDRE
Réduire ce messagesoul^keeperConnectéAdministrateurNiveau 50 · OscariséRéférenceur Légendaire
Membre depuis
2002
Messages
17300
Plus
Membre n°
1
Inscription
22 Feb 2002
Localisation
La Défense
Âge
49 ans
Sujets lancés
2916
Ancienneté
100 %
Participation
100 %
Lightbulb [LINUX] Script PERL pour lister les connexions NATAncien message 27-07-2005 12:43
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

Réduire ce messageSshakes808080GuruNiveau 27 · FigurantRéférenceur Appliqué
Membre depuis
2002
Messages
8978
Plus
Membre n°
517
Inscription
08 Mar 2002
Sujets lancés
354
Ancienneté
100 %
Participation
91 %
Ancien message 27-07-2005 12:50
sympa, j'essayerai ça ce soir...

Signaler ce message à un modérateur | IP: Logguée

Il est actuellement 18:12 (GMT) NOUVEAU SUJET    RÉPONDRE   
  Sujet précédent   Sujet suivant
Link Station > Section Technique > Software > [LINUX] Script PERL pour lister les connexions NAT

Aller au Forum:
Notez ce sujet :


Réponse rapide
Afficher une version imprimable | Chercher dans ce sujet | Envoyer cette page par email | S'inscrire à ce sujet | Télécharger ce sujet
Règles du forum :
Créer de nouveaux sujets
Répondre aux messages
Attacher des fichiers
Editer vos messages
: not autorisé
: not autorisé
: not autorisé
: not autorisé
Le Code HTML est OFF
Le BBCode est ON
Les Smileys sont ONs
Le code [IMG] est ON
Page générée en 0.050705 secondes en exécutant 38 requêtes SQL.
Apache - Compression GZIP : Activée.