Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[SRIPT-PHP] Dns dynamique
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
404_crazy
Tux's lil' helper
Tux's lil' helper


Joined: 22 Jan 2008
Posts: 145

PostPosted: Fri Jan 30, 2009 11:37 am    Post subject: [SRIPT-PHP] Dns dynamique Reply with quote

Bonjour je vous post un petit script sans pretention qui permet de faire un DNS Dynamique avec PHP

Dans cette exemple il est configuré pour un domain "test.net." avec un serveur nomé "www"
il faut aussi que votre dns soit configuré avec nsupdate

Ca fonctionne avec une authentification LDAP (Vous pouvez biensure changer ca)
le script crée un fichier par utilisateur (login_ldap) puis il excute nsupdate

n'esiter pas a mettre vos commentaires, j'ai une version plus aboutie mais je ne l'ai pas sous la main je vous post ca dés que possible.

Code:

<html>
<br>
<?

//Detection IPv4 ou IPv6
class ipv6
{

  function is_ipv6($ip = "")
  {
   if ($ip == "")
    {  $ip = ipv6::get_ip();   }
    if (substr_count($ip,":") > 0 && substr_count($ip,".") == 0)
    { return true;  } else {  return false; }  }
                       
                       
  function is_ipv4($ip = "")
   { return !ipv6::is_ipv6($ip);  }
                         
  function get_ip()
   { return  getenv ("REMOTE_ADDR");  }
 
 }
                           
echo "<center>";

//Affiche @ IP et nom DNS (reverse)
$ip_client = $_SERVER["REMOTE_ADDR"]; //Recuperation de l'ip de la station cliente
echo "<br><center><h1>Votre Adresse IP = ";
 echo (ipv6::is_ipv6())? "IPv6/":"IPv4/";
 echo ipv6::get_ip();
echo "</center></h1>";

$hostname = gethostbyaddr($ip_client);
echo "<center><h2>".$hostname."</center></h2>";


// A faire
// => afficher FAI
// tester IPv4 / IPv6

// ------------- ANTI BOT ----------------------------------
$captcha="";//mise a zero de la variable

//caractères utilisés
$car="0123456789";
//compte le nombre de caracteres pour $car
$wlong=strlen($car);
// definition de wpas et wpas2
$wpas="";
$wpas2="";
// Taille des operandes
$taille=2;
//Initialisation de la fonction aleatoire
srand((double)microtime()*1000000);
// depart de la boucle for pour le nombre de caracteres voulut
for($i=0;$i<$taille;$i++){
      $wpos=rand(0,$wlong-1);
      $wpas=$wpas.substr($car,$wpos,1);}
// On continue avec le caractère suivant à générer     
srand((double)microtime()*100000);
for($i=0;$i<$taille;$i++){
      $wpos2=rand(0,$wlong-1);
      $wpas2=$wpas2.substr($car,$wpos2,1);
}

?>



<FORM METHOD=POST ACTION="index.php">
<table border=1>
  <tbody>
    <tr>
      <td>Login :</td>
      <td><INPUT type="text" value="" name="ldaplogin"></td>
    </tr>
    <tr>
      <td>Password : </td>
      <td><INPUT type="password" value="" name="ldappass"></td>
    </tr>
   <tr>
      <td><?echo $wpas."+".$wpas2?><INPUT type="hidden" name= "verif" value="<?echo $wpas+$wpas2?>"> </td>
      <td><INPUT type="text" value="" name="captcha"></td>
    </tr>
    <tr>
   <tr>
      <td>Groupe</td>
      <td>
     <SELECT name="ou">
      <OPTION VALUE="grp1">grp1</OPTION>
      <OPTION VALUE="grp2">grp2</OPTION>
      <OPTION VALUE="grp3">grp3</OPTION>
      <OPTION VALUE="grp4">grp4</OPTION>
      <OPTION VALUE="grp5">grp5</OPTION>

     </SELECT>
     </td>
    </tr>
  </tbody>
</table>
<br>
 <INPUT type="submit" value="Connexion">
</form>
</center>


<?php
/*
Connection a la base ldap puis generation d'un fichier  portant le nom de l'utilisateur
version du 6/11/08
*/

error_reporting(E_ERROR | E_PARSE ); // on affiche toutes les erreurs sauf les erreurs de type E_WARNING
//(Pour evité les message d'erreurs si le login n'est pas bon ou la connexion n'est pas OK...)

$ldaplogin  = "cn=".$_POST['ldaplogin'].",ou=".$_POST['ou'].",dc=test,dc=net"; // Definition de l'enregistrement dn
$ldappass = $_POST['ldappass']; //Definition de la variable contenant le mot de passe
$ip_client = $_SERVER["REMOTE_ADDR"]; //Recuperation de l'@ ip de la station cliente
$captcha = $_POST['captcha'];

$fichier_nom =$_POST['ldaplogin'] ; //Definition de la variable contenant le nom du fichier créé
// definition du contenu du fichier créé
$fichier =
"server 127.0.0.1
zone ".$_POST['ldaplogin'].".test.net
update delete ".$_POST['ldaplogin'].".test.net. A
update add ".$_POST['ldaplogin'].".test.net. 60 A  ".$ip_client."
send
";

$nomDNS = $_POST['ldaplogin'].".test.net";

// Connection sur le serveur LDAP
$connect = ldap_connect("www.test.net")
    or die("Impossible de se connecter au serveur LDAP.");

// Passage de ldap en version 3
   ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);
   ldap_set_option($connect, LDAP_OPT_REFERRALS, 0);
   
//Connexion en anonymous si la captcha est valide.
if ($captcha==NULL){ echo "<center>Veuillez remplir tous les champs ci-dessus</center>";}
else
  {
    if ($captcha==$_POST['verif'])
    {
       $bind_test = ldap_bind($connect);
      if ($bind_test != TRUE) { echo "Connexion LDAP échouée..."; }
      else //serveur LDAP répond
        {
          $bind = ldap_bind($connect, $ldaplogin, $ldappass);
          if ($bind != FALSE)
          { // Si LDAP accepte les login et mot de passe
            echo "Authentification LDAP réussie ...<p>";
           
      $inF = fopen("DDNS/".$fichier_nom,"w"); //Creation du fichier au nom de l'utilisateur
       fwrite($inF,$fichier); //ecriture de $fichier de le fichier login.txt
       fclose($inF); // fermeture du fichier
      
       exec("nsupdate DDNS/".$fichier_nom , $out, $err );     // MAJ DDNS
                 if ($err !=0) { echo "code erreur = ".$err." " ;}
                 else {
                       if ( gethostbyname($nomDNS) == $ip_client )
                        { echo $nomDNS." a pour adresse IP ".gethostbyname($nomDNS);
                          echo "<p><p>Services accessibles dans moins de 5 minutes";
                          echo "<p><p>Actualiser avant ce délai !"; 

                          //fichier avec seulement l'adresse IP
                          //".IPv4";
                 $inF = fopen("IPv4/".$fichier_nom,"w"); //Creation
                fwrite($inF,$ip_client); //ecriture
                fclose($inF); // fermeture
                        }// modif DDNS correspond à demande
                       
                        else { echo "Echec mise à jour" ;} // @IP changée <> lue !!!
                      }// pas d'erreur DDNS                               
          } //authentifié
            else { echo "Mauvais mot de passe ou mauvais identifiant de login";    }

        ldap_close($connect);  // fermeture de la connexion LDAP
   }// connexion LDAP
    }//captcha
    else { // si le captcha est vide ou faux
       if ($captcha==NULL){ echo "<center>Veuillez remplir tous les champs ci-dessus</center>";}
       else {echo "Code de verification incorrect !"; }
          }//captcha vide
  }//captcha pas vide

// <Copyleft 404_crazy 2008>
?>
<html>

Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum