Pour les scripts : c'est ici

bonjour;
Nouveau venu ici, voici une petite contribution: c’est un script qui permet d’écouter mes radios favorite via mplayer. Ce script demande de cliker sur la radio, puis lance mplayer. Il y manque un test de reconnexion en cas de perte du flux.ainsi qu’un bouton d’arret.

#!/usr/bin/perl -w
# ---------------------------------------
# interface perl & tk pour l'écoute
# d'une radio via internet
# ---------------------------------------
# R. Suinot (rsuinux@gmx.fr)
# le 13/03/2004 / Rev° 15/03/2004
# ---------------------------------------
# historique:
#   -> 15/03/2004:
#     - chargement d'un fichier de radio
# A faire?
#   -> 
#     - gestion des erreurs du playeur (mplayer ou xmms)
#       et/ou couper le playeur si processus deja en cours.
#   -> 
#     - tester le numéro de port et/ou adresse internet
#   -> 
#     - gestion des options (fichier des radios, ...)
#   ->
#    - gerer le flux rtsp de la freebox?
# ---------------------------------------
use strict;
use Tk;
use Tk::widgets qw/ Dialog ROText /;

my $UPDATED = '15 Mars 2004';
my $FONT = '-*-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*';
my $ERROR_TXT="Erreur de type inconnue";

my $fichier="/home/admin/bin/radio.lst";
&charge_fichier_liste_radio();
my @radio;
my @adresse;

my $titre="Selecteur de radio  ";

my $mw = MainWindow->new;
$mw->title($titre);

my $lookup_frame = $mw->Frame()->pack(-expand => '1', -fill => 'both', -side => 'top');

#-- boite d'erreur
my $dialog_err = $mw->Dialog(
                      -title  => 'ERREUR(s)',
                      -bitmap => 'error',
                      -default_button => [ 'Ok' ],
                      -textvariable   => \$ERROR_TXT
                     );
$dialog_err -> resizable(0, 0);

#-- boite About
my $help = $mw->Dialog(
                -title          => 'About',
                -bitmap         => 'questhead',
                -default_button => 'OK',
                -buttons        => [ 'OK' ],
                -font           => $FONT,
                -text           => "Radio-Net\n" . "La radio via Internet \n" .
                                   "necessite mplayer et ses divers drivers.\n" .
                                   "remi\@suinot.org\n". "(updated $UPDATED)\n\n" .
                                   "Tk version $Tk::VERSION"
               );
$help->resizable(0, 0);

#-- bouton About
my $about = $lookup_frame->Button(
                           -text       => 'About',
                           -command    => [ $help => 'Show' ]
                           )->pack(-side => 'left', -expand => '1', -fill => 'both');

#-- bouton Exit
my $exit = $lookup_frame->Button(
                          -text              => 'Exit',
                          -cursor            => 'hand1',
                          -activeforeground  => 'red',
                          -command           => sub { exit; }
                          )->pack(-side => 'left', -expand => '1', -fill => 'both');
 
# -- nouvelle frame pour la liste des radio
my $liste_radio = $mw->Frame()->pack(-side => 'left', -expand => '1', -fill => 'both');

$liste_radio->Label(-text=> "\n  Choisissez votre radio!  \n")->pack(-side => 'top');
my $i=0;
my $j=0;
my $result=-1;
foreach $i (@radio ){
    $j++;
    $liste_radio->Radiobutton(
                  -text      => $i,
                  -variable  => \$result,
                  -value     => $j
                 )->pack( -side => 'top');
}

# -- bouton Ecouter!
my $execute = $liste_radio->Button(
                            -text               => 'Ecoutez!',
                            -background         => 'cyan',
                            -foreground         => 'blue',
                            -borderwidth        => 1,
                            -relief             => 'ridge',
                            -highlightthickness => 0,
                            -command            => \&ecoutez
                           )->pack(-side => 'bottom');
                                                                                                                                                       
MainLoop;

#-------------- Fonctions -------------------------
sub ecoutez {

  print "valeur de sortie: $result \n";

  if ( $result == 1) {
     print "$result: $adresse[0]";
     exec "mplayer -slave  $adresse[0]";
  } elsif ( $result == 2) {
     print "$result: $adresse[1]\n";
     exec "mplayer -slave  $adresse[1]";
  } elsif ( $result == 3) {
     print "$result: $adresse[2]\n";
     exec "mplayer -slave  $adresse[2]";
  } elsif ( $result == 4) {
     print "$result: $adresse[3]\n";
     exec "mplayer -slave  $adresse[3]";
  } elsif ( $result == 5) {
     print "$result: $adresse[4]\n";
     exec "mplayer -slave  $adresse[4]";
  } elsif ( $result == 6) {
     print "$result: $adresse[5]\n";
     exec "mplayer -slave  $adresse[5]";
  } elsif ( $result == 7) {
     print "$result: $adresse[6]\n";
     exec "mplayer -slave  $adresse[6]";
  } elsif ( $result == 8) {
     print "$result: $adresse[7]\n";
     exec "mplayer -slave  $adresse[7]";
  } elsif ( $result == -1) {
    $ERROR_TXT="Vous n'avez rien séctionneé!!!\n Réfléchissez un peu!";
    $dialog_err->Show;
  } else {
    $ERROR_TXT="Erreur de type inconnue...!!!\n";
    $dialog_err->Show;
  }

}


sub charge_fichier_liste_radio {
  my $i=0;
  my @tmp;
  open (FR, $fichier) or die "Fichier des radios non trouvé;.\n";
 
  while( <FR> ) {
    if ( $_ =~ /[#*]/ ) {
      # Un commentaire? On passe!
    } else {
      @tmp = split (/,/);
      $radio[$i] = $tmp[0] ;
      $adresse[$i] = $tmp[1];
      chomp($adresse[$i]);
      print "$i: $radio[$i]  -> $adresse[$i]<\n";
      $i++;
    }
  }
  close FR;
}

et voici le fichier des radio:

FranceInter     , http://viphttp.yacast.net/V4/radiofrance/franceinter_hd.m3u
FranceInfo      , http://ogg.tv-radio.fr:1441/encoderfinfo.ogg
FranceCulture   , http://viphttp.yacast.net/V4/radiofrance/franceculture_hd.m3u
FranceMusique   , http://viphttp.yacast.net/V4/radiofrance/francemusique_hd.m3u
France Info     , http://viphttp.yacast.net/V4/radiofrance/franceinfo_bd.m3u
FIP-TheBest!!!  , http://viphttp.yacast.net/V4/radiofrance/fip_hd.m3u
LeMouv          , http://viphttp.yacast.net/V4/radiofrance/lemouv_hd.m3u
Le Mouv         , http://viphttp.yacast.net/V4/radiofrance/lemouv_hd.m3u
France Vivace   , http://viphttp.yacast.net/V4/radiofrance/francevivace_hd.m3u
France Bleu Ile-de-France , http://viphttp.yacast.net/V4/radiofrance/francebleu_idf_hd.m3u

Rémi.

Bonsoir

escusez cette question de débutant.

Comment executer ce script de radio??

On l’enregistre dans un fichier sans extension ou il faut mettre .pl ?
et apres comment l’executer ?

faut il compiler ?
peux ton compiler ?

ps : Je code déja en delphi sous windows

le "shell escape"#!/usr/bin/perl -w en première ligne suffit au shell pour savoir avec quoi ça s’execute.
Quel que soit le suffixe (ou pas), il suffit donc de le rendre executable pour l’appeler ensuite.

alors je prend le script du dessus, que je rend executable dans ses propriétées, je fait lancer et je test aussi lancer dans un terminal mais ça ne marche pas??

Le chanban suffit normalement avec le positionnement du bit d’execution.
Pour le lancer tu fais bien un :

./script

les droits sur mon script sont :

-rwxr-xr-x 1 admin admin   5182 2007-09-09 21:15 Radio.pl

mais pour l’executer, il faut que le fichier des listes soit dans le même répertoire.
Peut etre est-ce la l’erreur?

j’ai les meme droits que toi
et j’ai aussi le fichier radio.lst dans le meme repertoire

Tu as quoi dans la console, quand tu l’execute?

ceci :

tinnine@madebian:~$ sh /home/tinnine/Desktop/Scripts/radio.pl
/home/tinnine/Desktop/Scripts/radio.pl: line 24: use: command not found
/home/tinnine/Desktop/Scripts/radio.pl: line 25: use: command not found
/home/tinnine/Desktop/Scripts/radio.pl: line 26: use: command not found
/home/tinnine/Desktop/Scripts/radio.pl: line 28: my: command not found
/home/tinnine/Desktop/Scripts/radio.pl: line 29: my: command not found
/home/tinnine/Desktop/Scripts/radio.pl: line 30: my: command not found
/home/tinnine/Desktop/Scripts/radio.pl: line 32: my: command not found
/home/tinnine/Desktop/Scripts/radio.pl: line 33: syntax error near unexpected to ken `&'
/home/tinnine/Desktop/Scripts/radio.pl: line 33: `&charge_fichier_liste_radio(); 

C’est dommage de polluer ce fil, vous devriez aller dans la programmation ou le support…

Tu as raison.
J’arrete de poluer ce poste (voici le fil de ma question)

J’ai enfin résussi à executer ton script de radios :wink:

Un fois la radio lancé, la fenêtre se ferme et on ne peux plus arretter la radio.

Ou peu etre n’ai je pas compris

c’est un petit problème que je contourne en lançant ca en console, puis en fermant la console pour couper la couenne de mplayer.
Si tu as une meilleur idée, je suis premeur :slightly_smiling:

Salut,

je viens de changer ceci dans ton script

#-- bouton Exit
my $exit = $lookup_frame->Button(
                          -text              => 'Quitter',
                          -cursor            => 'hand1',
                          -activeforeground  => 'red',
                          -command           => sub { exec "killall mplayer";
                                                      exit; }
                          )->pack(-side => 'left', -expand => '1', -fill => 'both');

Dans command j’ai rajouter un killall mplayer et ça fonctionne, mais faut cliquer sur quitter

voici quelques m3u : zeho.free.fr/src/files/m3u/radio/FR/

j’ai fait une petite modif dans le script pour écouter la radio

#!/usr/bin/perl -w
# ---------------------------------------
# interface perl & tk pour l'écoute
# d'une radio via internet
# ---------------------------------------
# R. Suinot (rsuinux@gmx.fr)
# le 13/03/2004 / Rev° 15/03/2004
# ---------------------------------------
# historique:
#   -> 15/03/2004:
#     - chargement d'un fichier de radio
# A faire?
#   ->
#     - gestion des erreurs du playeur (mplayer ou xmms)
#       et/ou couper le playeur si processus deja en cours.
#   ->
#     - tester le numéro de port et/ou adresse internet
#   ->
#     - gestion des options (fichier des radios, ...)
#   ->
#    - gerer le flux rtsp de la freebox?
# ---------------------------------------
use strict;
use Tk;
use Tk::widgets qw/ Dialog ROText /;

my $UPDATED = '15 Mars 2004';
my $FONT = '-*-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*';
my $ERROR_TXT="Erreur de type inconnue";

my $fichier="./radio.lst";
&charge_fichier_liste_radio();
my @radio;
my @adresse;

my $titre="Selecteur de radio  ";

my $mw = MainWindow->new;
$mw->title($titre);

my $lookup_frame = $mw->Frame()->pack(-expand => '1', -fill => 'both', -side => 'top');

#-- boite d'erreur
my $dialog_err = $mw->Dialog(
                      -title  => 'ERREUR(s)',
                      -bitmap => 'error',
                      -default_button => [ 'Ok' ],
                      -textvariable   => \$ERROR_TXT
                     );
$dialog_err -> resizable(0, 0);

#-- boite About
my $help = $mw->Dialog(
                -title          => 'a propos',
                -bitmap         => 'questhead',
                -default_button => 'OK',
                -buttons        => [ 'OK' ],
                -font           => $FONT,
                -text           => "Radio-Net\n" . "La radio via Internet \n" .
                                   "necessite mplayer et ses divers drivers.\n" .
                                   "remi\@suinot.org\n". "(updated $UPDATED)\n\n" .
                                   "petite modif par TinninE\n\n".
                                   "Tk version $Tk::VERSION"
               );
$help->resizable(0, 0);

#-- bouton About
my $about = $lookup_frame->Button(
                           -text       => 'a propos',
                           -command    => [ $help => 'Show' ]
                           )->pack(-side => 'left', -expand => '1', -fill => 'both');

#-- bouton Exit
my $exit = $lookup_frame->Button(
                          -text              => 'Quitter',
                          -cursor            => 'hand1',
                          -activeforeground  => 'red',
                          -command           => sub { exec "killall mplayer";
                                                      exit; }
                          )->pack(-side => 'left', -expand => '1', -fill => 'both');
 
# -- nouvelle frame pour la liste des radio
my $liste_radio = $mw->Frame()->pack(-side => 'left', -expand => '1', -fill => 'both');

$liste_radio->Label(-text=> "\n  Choisissez votre radio!  \n")->pack(-side => 'top');
my $i=0;
my $j=0;
my $result=-1;
foreach $i (@radio ){
    $j++;
    $liste_radio->Radiobutton(
                  -text      => $i,
                  -variable  => \$result,
                  -value     => $j
                 )->pack( -side => 'top');
}

# -- bouton Ecouter!
my $execute = $liste_radio->Button(
                            -text               => 'Ecoutez!',
                            -background         => 'cyan',
                            -foreground         => 'blue',
                            -borderwidth        => 1,
                            -relief             => 'ridge',
                            -highlightthickness => 0,
                            -command            => \&ecoutez
                           )->pack(-side => 'bottom');
                                                                                                                                                       
MainLoop;

#-------------- Fonctions -------------------------
sub ecoutez {

  print "valeur de sortie: $result \n";
  
  if ( $result > 0) 
    {
     print "$result: $adresse[$result - 1]";
     exec "mplayer -slave  $adresse[$result - 1]";
    }
  elsif ( $result == -1) 
    {
    $ERROR_TXT="Vous n'avez rien séctionneé!!!\n Réfléchissez un peu!";
    $dialog_err->Show;
    }
}



sub charge_fichier_liste_radio {
  my $i=0;
  my @tmp;
  open (FR, $fichier) or die "Fichier des radios non trouvé;.\n";
 
  while( <FR> ) {
    if ( $_ =~ /[#*]/ ) {
      # Un commentaire? On passe!
    } else {
      @tmp = split (/,/);
      $radio[$i] = $tmp[0] ;
      $adresse[$i] = $tmp[1];
      chomp($adresse[$i]);
      print "$i: $radio[$i]  -> $adresse[$i]<\n";
      $i++;
    }
  }
  close FR;
} 

J’ai un peu alleger la function de lecture du lien et ajuter le killall mplayer quand on click sur quitter

je viens de tester. Mais comme la fenetre principal s’efface, on ne peux plus quitter sur exit.

Rémi.

ps: cela pollue t il le forum? Passer en forum programmation?

oui il faut relancer le script pour quitter ensuite

je reviens avec mon script des radio…

D’abord, j’ai enlevé le switch ‘-slave’ pour mplayer, et je lance ce script en console (parametre de gnome dans la barre du tableau de bord). Cela permet de couper mplayer avec la touche ‘q’.
C’est déjà mieux.
Mais j’ai fait mieux!!! Si si!
j’y ai rajouté la télé via tv.freebox.fr. C’est un flux video de petite taille. Mais je ne sais pas si c’est réservé ou non pour les abonné free.fr. En tout cas, ça passe chez moi (je suis chez free). J’utilise vlc pour lire le flux video. Il a donc fallut modifier le fichier des flux:

0, FranceInter     , http://viphttp.yacast.net/V4/radiofrance/franceinter_hd.m3u
0, FranceInfo      , http://ogg.tv-radio.fr:1441/encoderfinfo.ogg
0, FranceCulture   , http://viphttp.yacast.net/V4/radiofrance/franceculture_hd.m3u
0, FranceMusique   , http://viphttp.yacast.net/V4/radiofrance/francemusique_hd.m3u
0, France Info     , http://viphttp.yacast.net/V4/radiofrance/franceinfo_bd.m3u
0, FIP-TheBest!!!  , http://viphttp.yacast.net/V4/radiofrance/fip_hd.m3u
0, LeMouv          , http://viphttp.yacast.net/V4/radiofrance/lemouv_hd.m3u
0, Le Mouv         , http://viphttp.yacast.net/V4/radiofrance/lemouv_hd.m3u
0, France Vivace   , http://viphttp.yacast.net/V4/radiofrance/francevivace_hd.m3u
0, France Bleu Ile-de-France , http://viphttp.yacast.net/V4/radiofrance/francebleu_idf_hd.m3u
1, France 2     , http://tv.freebox.fr/stream_france2
1, France 3     , http://tv.freebox.fr/stream_france3
1, France 4     , http://tv.freebox.fr/stream_france4
1, France 5     , http://tv.freebox.fr/stream_france5
1, Arte         , http://tv.freebox.fr/stream_arte
1, Direct 8     , http://tv.freebox.fr/stream_direct8
1, NT 1         , http://tv.freebox.fr/stream_nt1
1, NRJ 12               , http://tv.freebox.fr/stream_nrj12
1, LCP          , http://tv.freebox.fr/stream_lcp
1, BFM          , http://tv.freebox.fr/stream_bfmtv
1, TV 5         , http://tv.freebox.fr/stream_tv5
1, France O     , http://tv.freebox.fr/stream_franceo
1, ALjazeera    , http://tv.freebox.fr/stream_aljazeera

et voici le code perl? bah, le voilà:

#!/usr/bin/perl -w
# ---------------------------------------
# interface perl & tk pour l'ecoute
# d'une radio via internet
# ou d'une tele via internet
# ---------------------------------------
# R. Suinot (rsuinux@gmx.fr)
# le 13/03/2004 / Rev. 30/10/2007
# ---------------------------------------
# historique:
#   -> 15/03/2004:
#     - chargement d'un fichier de radio
#   -> 
#     - gestion des erreurs du playeur (mplayer ou xmms)
#       et/ou couper le playeur si processus deja en cours.
#   -> 
#     - tester le numero de port et/ou adresse internet
#   -> 
#     - gestion des options (fichier des radios, ...)
#
# ---------------------------------------
use strict;
use Tk;
use Tk::widgets qw/ Dialog ROText /;

my $UPDATED = '30 Oct. 2007';
my $FONT = '-*-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*';
my $ERROR_TXT="Erreur de type inconnue";

my $fichier="/home/admin/bin/radio.lst";
&charge_fichier_liste_radio();
my @lect;
my @radio;
my @adresse;

my $titre="Selecteur de radio  ";

my $mw = MainWindow->new;
$mw->title($titre);

my $lookup_frame = $mw->Frame()->pack(-expand => '1', -fill => 'both', -side => 'top');

my @lecteur;
$lecteur[0] ="mplayer";
$lecteur[1] ="vlc";

#-- boite d'erreur
my $dialog_err = $mw->Dialog(
                      -title  => 'ERREUR(s)',
                      -bitmap => 'error',
                      -default_button => [ 'Ok' ],
                      -textvariable   => \$ERROR_TXT
                     );
$dialog_err -> resizable(0, 0);

#-- boite About
my $help = $mw->Dialog(
                -title          => 'About',
                -bitmap         => 'questhead',
                -default_button => 'OK',
                -buttons        => [ 'OK' ],
                -font           => $FONT,
                -text           => "Radio-Net\n" . "La radio via Internet \n" .
                                   "necessite mplayer et ses divers drivers.\n" .
                                   "remi\@suinot.org\n". "(updated $UPDATED)\n\n" .
                                   "Tk version $Tk::VERSION"
               );
$help->resizable(0, 0);

#-- bouton About
my $about = $lookup_frame->Button(
                           -text       => 'About',
                           -command    => [ $help => 'Show' ]
                           )->pack(-side => 'left', -expand => '1', -fill => 'both');

#-- bouton Exit
my $exit = $lookup_frame->Button(
                          -text              => 'Exit',
                          -cursor            => 'hand1',
                          -activeforeground  => 'red',
                          -command           => sub { exit; }
                          )->pack(-side => 'left', -expand => '1', -fill => 'both');
 
# -- nouvelle frame pour la liste des radio
my $liste_radio = $mw->Frame()->pack(-side => 'left', -expand => '1', -fill => 'both');

$liste_radio->Label(-text=> "\n  Choisissez votre radio!  \n")->pack(-side => 'top');
my $i=0;
my $j=0;
my $result=-1;
foreach $i (@radio ){
    $j++;
    $liste_radio->Radiobutton(
                  -text      => $i,
                  -variable  => \$result,
                  -value     => $j
                 )->pack( -side => 'top');
}

# -- bouton Ecouter!
my $execute = $liste_radio->Button(
                            -text               => 'Ecoutez!',
                            -background         => 'cyan',
                            -foreground         => 'blue',
                            -borderwidth        => 1,
                            -relief             => 'ridge',
                            -highlightthickness => 0,
                            -command            => \&ecoutez
                           )->pack(-side => 'bottom');
                                                                                                                                                       
MainLoop;

#-------------- Fonctions -------------------------
sub ecoutez {

  print "valeur de sortie: $result \n";

  if ( $result >= 1) {
     print "Radio: $radio[$result] \nLecteur: $lecteur[$lect[$result-1]] \nAdresse: $adresse[$result-1] \n\n";
     exec "$lecteur[$lect[$result-1]]  $adresse[$result-1]";
  } elsif ( $result == -1) {
    $ERROR_TXT="Vous n'avez rien sectionne !!!\n Reflechissez un peu!";
    $dialog_err->Show;
  } else {
    $ERROR_TXT="Erreur de type inconnue...!!!\n";
    $dialog_err->Show;
  }

}

sub charge_fichier_liste_radio {
  my $i=0;
  my @tmp;
  open (FR, $fichier) or die "Fichier des radios non trouve�.\n";
 
  while( <FR> ) {
    if ( $_ =~ /[#*]/ ) {
      # Un commentaire? On passe!
    } else {
      @tmp = split (/,/);
      $lect[$i] = $tmp[0];
      $radio[$i] = $tmp[1] ;
      $adresse[$i] = $tmp[2];
      chomp($adresse[$i]);
      print "$i: $radio[$i]  -> $adresse[$i]<\n";
      $i++;
    }
  }
  close FR;
}

Si cela peut servir…

Rémi.

Merci pour la modif.

La TV free est réservé pour les abonnés free :smt024

Plutout que de polluer plus ce post
je met à jour mon post :

Voici une source faites avec Lazarus pour ecouter la radio :
tinnine.free.fr/#tinradio

Mon par feux :slightly_smiling:

#!/bin/sh
case "$1" in
  start)
echo "démarrage du par feux 0.0.1"

ETH="eth0"
PCIP="192.168.1.80"
#permet d'hobtenire l'ip local de la machine,n'est pas utiliser dans ce script mai pourrait servir.
#IP=`/sbin/ifconfig $ETH | grep inet | cut -d : -f 2 | cut --delimiter=' ' -f 1`

iptables --zero
iptables -F
iptables -X
iptables -t nat -X
iptables -t nat -F

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
#================================== IP BAN===================================================
# si le nombre d'entrée devien importante il peux s'averer utile de crée un fichier des ip bannie
#Ban_IP="192.168.1.254"
#Ban_IP_1="192.168.1.253"
Ban_IP_2="224.0.0.251"

#iptables -A OUTPUT -o $ETH -m iprange --dst-range $Ban_IP -j DROP
#iptables -A OUTPUT -o $ETH -m iprange --src-range $Ban_IP -j DROP
#iptables -A INPUT -i $ETH -m iprange --dst-range $Ban_IP -j DROP
#iptables -A INPUT -i $ETH -m iprange --src-range $Ban_IP -j DROP

#iptables -A OUTPUT -o $ETH -m iprange --dst-range $Ban_IP_1 -j DROP
#iptables -A OUTPUT -o $ETH -m iprange --src-range $Ban_IP_1 -j DROP
#iptables -A INPUT -i $ETH -m iprange --dst-range $Ban_IP_1 -j DROP
#iptables -A INPUT -i $ETH -m iprange --src-range $Ban_IP_1 -j DROP

iptables -A OUTPUT -o $ETH -m iprange --dst-range $Ban_IP_2 -j DROP
iptables -A OUTPUT -o $ETH -m iprange --src-range $Ban_IP_2 -j DROP
iptables -A INPUT -i $ETH -m iprange --dst-range $Ban_IP_2 -j DROP
iptables -A INPUT -i $ETH -m iprange --src-range $Ban_IP_2 -j DROP
#================================	Diver en cour de teste	====================================
# ne tenez pas compte de cette section j'ai changer de routeur et je fait quelque teste :slightly_smiling:
iptables -A INPUT -p UDP --dport 68 --sport 67 -m iprange --dst-range 255.255.255.255 -j ACCEPT
iptables -A INPUT -p UDP --dport 67 --sport 68 -m iprange --dst-range 255.255.255.255 -j ACCEPT
iptables -A OUTPUT -p TCP --dport 68 --sport 67 -m iprange --dst-range 255.255.255.255 -j ACCEPT
iptables -A OUTPUT -p TCP --dport 67 --sport 68 -m iprange --dst-range 255.255.255.255 -j ACCEPT

iptables -A INPUT -p UDP --dport 68 --sport 67 -m iprange --dst-range 192.168.1.254 -j ACCEPT
iptables -A INPUT -p UDP --dport 67 --sport 68 -m iprange --dst-range 192.168.1.254 -j ACCEPT
iptables -A INPUT -p TCP --dport 68 --sport 67 -m iprange --dst-range 192.168.1.254 -j ACCEPT
iptables -A INPUT -p TCP --dport 67 --sport 68 -m iprange --dst-range 192.168.1.254 -j ACCEPT

iptables -A OUTPUT -p UDP --dport 68 --sport 67 -m iprange --dst-range 192.168.1.254 -j ACCEPT
iptables -A OUTPUT -p UDP --dport 67 --sport 68 -m iprange --dst-range 192.168.1.254 -j ACCEPT
iptables -A OUTPUT -p TCP --dport 68 --sport 67 -m iprange --dst-range 192.168.1.254 -j ACCEPT
iptables -A OUTPUT -p TCP --dport 67 --sport 68 -m iprange --dst-range 192.168.1.254 -j ACCEPT

#iptables -A OUTPUT -p UDP --dport 138 --sport 138 -m iprange --src-range 255.255.255.255 -j ACCEPT
#iptables -A INPUT -p UDP --dport 138 --sport 138 -m iprange --src-range 192.168.1.80 --dst-range 192.168.1.255 -j ACCEPT
#iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -p UDP --dport 138 --sport 138 -m iprange --src-range 192.168.1.80 --dst-range 192.168.1.255 -j ACCEPT

iptables -A INPUT -p UDP --dport 137 --sport 137 -m iprange --src-range 192.168.1.10 --dst-range 192.168.1.255 -j ACCEPT

iptables -A INPUT -i $ETH -m state --state NEW,INVALID -j ULOG --ulog-prefix="Drop"
iptables -A INPUT -i $ETH -m state --state NEW,INVALID -j DROP

#==========================================		DNS		========================================
iptables -A INPUT -p UDP --sport 53 -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -p UDP --dport 53 -j ACCEPT
#================================== ouverture ssh serveur  et client ===========================
#La durée du ban,
# permet donc d'avoir X temp duran la qu'elle la première connection est permise 
Ban_TIME="900"
#nombre de connection permise PAR IP, si LA connection actuelle est deja (toujours) connectée, 
#c'est la nouvelle connection qui sera bannie duran le $Ban_TIME mai laisse la première connection active
#il est donc iportan de ne pas laisser trop longtemp le temps pour le client ssh puisse ce loguer. afin de pouvoire reprendre la main si les deux client 
# aurait la meme ip publique
#l'avantage c'est que cela limite le nombre de connection par ip. limite aussi le brute force puis qu'il lui faut passe 1 connection la foit par ip
#on pourrait pour bien faire limiter le nombre de tentative qui serai valable meme si la perssonne ce deconnecte, puis ce reconnecte
# il faudrai alors cree une 2 emem chaine avec un hitcount global, le risque c'est de bloque le serveur completment
Ban_FAILD="1"
#creation de la chaine
iptables -N SSH
#on log
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSH --rcheck --seconds $Ban_TIME --hitcount $Ban_FAILD -j ULOG --ulog-prefix="SSH"
# si hitcount est depasser on ban 
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSH --rcheck --seconds $Ban_TIME --hitcount $Ban_FAILD -j DROP
# permière et les suivante (si le hitcoun n'est pas atteint ) entrée son enfin aceptée
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
#laisse sortir les client ssh 
iptables -A OUTPUT -p TCP --dport 22 -m state --state NEW -j ACCEPT
#================================== e-mail ===================================================
#on force l'ip de sont propre FAI pour eviter d'avoir un port ouvert.
m1="212.147.0.153"
m2="212.147.0.121"
iptables -A OUTPUT -p TCP --dport 110 -m iprange --src-range $PCIP --dst-range $m1 -j ACCEPT
iptables -A INPUT -p TCP --sport 110 -m iprange --dst-range $PCIP --src-range $m1 -j ACCEPT
iptables -A OUTPUT -p TCP --dport 25 -m iprange --src-range $PCIP --dst-range $m2 -j ACCEPT
iptables -A INPUT -p TCP --sport 25 -m iprange --dst-range $PCIP --src-range $m2 -j ACCEPT
#================================== Navigateur================================================
#encore quelque subtiliter de ce coter car beacoup de trafique passe par le port 80.
iptables -A INPUT -p TCP -m multiport --source-port 80 -j ACCEPT
iptables -A INPUT -p TCP --sport 443 -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -p UDP --dport 80 -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -p TCP -m multiport --destination-port 80,443 -j ACCEPT
#================================== IRC =======================================================
iptables -A INPUT -p TCP --sport 6667 -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -p TCP --dport 6667 -j ACCEPT
#==================================Nexuiz=====================================================
# plage de port délibererment ouvert, en faite c'est pas pratique et pas fiable (on ne verifie pas ou sa va ce connecter)
# j'ai resolut ce petit problème plus bas
iptables -A OUTPUT -p UDP -m multiport --destination-port 26000:26010  -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p UDP -m multiport --source-port 26000:26010  -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p TCP -m multiport --destination-port 26000:26010  -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p TCP -m multiport --source-port 26000:26010  -m state --state ESTABLISHED,RELATED -j ACCEPT
#================================== amsn =====================================================
iptables -A OUTPUT -p TCP -m multiport --destination-port 1863  -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p TCP -m multiport --source-port 1863 -j ACCEPT
iptables -A OUTPUT -p TCP --dport 5353 --sport 5353 -m state --state NEW,ESTABLISHED,RELATED -j DROP
iptables -A INPUT -p TCP --dport 5353 --sport 5353  -j DROP
#================================== ftp =========================================================
ftp="212.147.60.253"
iptables -A OUTPUT -p TCP -m iprange --dst-range $ftp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p TCP -m iprange --src-range $ftp  -m state --state ESTABLISHED,RELATED -j ACCEPT
#================================== ip passee en ligne de commande ================================
T="true"
I="0"
#site a rentrer sur la ligne de commande après le start 
#Ceci permet de rentrer un ip sur la ligne de commande plutot que les placers dans un fichier,
#le port n'est pas préciser,cela peux s'averer utile pour Nexiuz ou bitorrent etc
#il est possible de placer les ip en fixe mai si elle change il va faloir éditer le fichier
#alors que en passant le parramettre sur la ligne de commande il suffi de modifier directement la ligne
#il serai aussi possible de passer par un autres fichier pour placer les ip.
#while $T ;do
for B in $@ ;do
#I=$(($I+1))
	if [ ! -z $B ] && [ $B != "start" ] ;then
		E=`iptables -A OUTPUT -p TCP -m iprange --dst-range $B -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT`
		E=`iptables -A INPUT -p TCP -m iprange --src-range $B  -m state --state ESTABLISHED,RELATED -j ACCEPT`
		echo "ip ajoutée: $B"
	fi
done
#================================== scanner et autres logiciel local==========================
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#================================== ICPM ====================================================
#de nos jours c'est plus une menace,m'enfin reston mefian tout de meme
#il pourrait etre bon d'utilise le module recent pour eviter les attack via les zombie.
iptables -A INPUT -p 1 -m limit --limit 30/h --limit-burst 30 -j ACCEPT
#================================== Règle pour logquer========================================
iptables -A INPUT -i $ETH  -j  ULOG --ulog-prefix="Entrée"
iptables -A OUTPUT -o $ETH -m owner --uid-owner 0 -j ULOG --ulog-prefix="Root"
iptables -A OUTPUT -o $ETH -j ULOG --ulog-prefix="Sortie"

	;;
  stop)
iptables --zero
iptables -F
iptables -X
iptables -t nat -X
iptables -t nat -F

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

	;;
  *)
	N=/etc/init.d/$NAME
	echo "Usage: /etc/init.d/firewall {start ¦ stop | sart ip1 ip2 ip3 ip4 etc}" $DAEMON >&2
	exit 1
	;;
esac

exit 0