modification script php/mysql

modification script php/mysql - PHP - Programmation

Marsh Posté le 06-10-2009 à 11:34:03    

bonjour,
 
je suis en train de modifier un script php qui permet d'interroger des équipements (routeur, switch) via une page web. le script en question est accessible ici : MRLG
 
Ce script contient 3 fichiers, 2 sont utiles à ca configuration :
mrlg-config.php et mrlg-lib.php
 
dans mrlg-config on viendra lui renseigner ou joindre le matériel : nom, ip, service, login, mot de passe + les commandes utilisables
 
dans mrlg-lib pas grand chose a faire si on veut l'utiliser tel quel.
 
 
Donc, mon souci est que pour plus de souplesse, j'aimerai allé récupérer les informations concernant mon équipement sur ma DB mysql, car j'ai plus de 300 switchs.  
Et continuer à utiliser les commandes sur le script.
 
Pour cela, j'ai effectué une liste déroulante qui m'affiche les noms des switch dans celle-ci en ce connectant bien sur à ma DB.
 
Le problème, c'est que je ne sais pas comment faire pour que une fois le matériel choisi, je puisse lui lancer une commande. Pour le moment, dès que je choisi un matériel et que je choisi une commande, la commande ne se lance pas et la sélection du matériel reviens sur la premier de la base.
 
Voici le code de mes 2 fichiers, si quelqu'un pouvait prendre le temps de m'aider, ca serai génial.
 
Le fichiers mrlg-config

Code :
  1. <?
  2. // Specify the look you wish lists to have here: ('radio'/'select')
  3. $request_list_style = 'radio';
  4. $socket_timeout = 5;
  5. // default values for all switch, used if there is no more specific setting
  6. $switch['default']['telnet_port'] = 23;
  7. $switch['default']['password'] = '*';
  8. $switch['default']['password_en'] = "*";
  9. $switch['default']['ignore_argc'] = FALSE;
  10. /*
  11. Requests definitions.
  12. [title] is what you see on the web-page. If omitted, <command> is used instead.
  13. <command> is what is sent to the CLI.
  14. <handler> is processing daemon's name
  15. <argc> is minimal argument count
  16. */
  17.   $request[010]['title'] = 'show interface status';
  18. $request[010]['command'] = 'show interface status';
  19. $request[010]['handler'] = 'telnet';
  20. $request[010]['argc'] = 0;
  21. $request[020]['title'] = 'show interface vlan';
  22. $request[020]['command'] = 'show interface vlan';
  23. $request[020]['handler'] = 'telnet';
  24. $request[020]['argc'] = 1;
  25. $request[030]['title'] = 'show vlan';
  26. $request[030]['command'] = 'show vlan';
  27. $request[030]['handler'] = 'telnet';
  28. $request[030]['argc'] = 0;
  29. $request[040]['title'] = 'show version';
  30. $request[040]['command'] = 'show version';
  31. $request[040]['handler'] = 'telnet';
  32. $request[040]['argc'] = 0;
  33. ?>


 
Le script mrlg-lib

Code :
  1. <?
  2. function printError ($message)
  3. {
  4. echo "<font color=red><code><strong>" . $message . "</strong></code></font><br>\n";
  5. }
  6. function safeOutput ($string)
  7. {
  8. return htmlentities (substr ($string, 0, 50));
  9. }
  10. //Exécution sur la base, Table_Switch de requêtes pour récupérer les infos des switch
  11. $Host_Name = "*";
  12. $User_Login = "*";
  13. $User_Password = "*";
  14. mysql_connect("$Host_Name", "$User_Login", "$User_Password" )or die ("Impossible de se connecter" );
  15. mysql_select_db ("raps" )or die ("Impossible d'accéder à la base de données" );
  16. function printSwitchList ($switch, $type)
  17. // Préparation du select
  18. echo '<select name="Nom_Switch">';
  19. // Préparation de la requête
  20. $query = 'SELECT * from Table_Switch';
  21. list ($ID, $attribute) = each ($switch)
  22.   if (strcmp ($ID, "Nom_Switch" ) && !empty($attribute["Adresse_IP_Switch"])) 
  23.      
  24. // Exécution de la requête  
  25. $result = mysql_query($query) or die($query . "-" . mysql_error());
  26. while ($tab = mysql_fetch_array($result))
  27. {   
  28. echo "<option value=".$tab['Nom_Switch'].'">'.$tab['Nom_Switch'];
  29. }
  30. echo '</select>';
  31.    
  32. //mysql_close();
  33. //exécution sur la base de requétes pour récupérer les commandes telnet à éxécuter sur les switch.
  34. function printRequestList ($request, $type)
  35. {
  36. while (list($id, $attribute) = each ($request))
  37.  if (!empty ($attribute["command"]) && !empty ($attribute["handler"]) && isset ($attribute["argc"]))
  38.  {
  39.   if ($type == "radio" ) echo "<input type=radio name=requestid value={$id}";
  40.   if ($_REQUEST["requestid"] == $id)
  41.   {
  42.    if ($type == "radio" ) echo " checked=on";
  43.   }
  44.   echo ">";
  45.   echo $attribute["title"] ? $attribute["title"] : $attribute["command"];
  46.   if ($type == "radio" ) echo "</input><br>\n";
  47.  }
  48. echo "</{$type}>\n";
  49. }
  50. function execPreviousRequest ($switch, $request)
  51. {
  52. if (!isset($_REQUEST["Nom_Switch"])) return;
  53. $Nom_Switch = $_REQUEST["Nom_Switch"];
  54. if (!isset ($switch[$Nom_Switch]["Adresse_IP_Switch"])) return;
  55. if (!isset($_REQUEST["requestid"])) return;
  56. $requestid = $_REQUEST["requestid"];
  57. if (!isset ($request[$requestid]["argc"])) return;
  58. $handler = $request[$requestid]["handler"];
  59. if (empty ($handler) || strpos ($switch[$Nom_Switch]["services"], $handler) === false)
  60. {
  61.  printError ("Cette requête n'est pas autorisé par l'administrateur." );
  62.  return;
  63. }
  64. if ($request[$requestid]["argc"] > 0)
  65. {
  66.  if (trim ($_REQUEST["argument"]) == '')
  67.  {
  68.   $switch_defined = isset ($switch[$Nom_Switch]["ignore_argc"]);
  69.   $switch_permits = $switch[$Nom_Switch]["ignore_argc"] == 1;
  70.   $default_defined = isset ($switch["default"]["ignore_argc"]);
  71.   $default_permits = $switch["default"]["ignore_argc"] == 1;
  72.   $final_permits =
  73.    (!$switch_defined && $default_defined && $default_permits) ||
  74.    ($switch_defined && $switch_permits);
  75.   if (!$final_permits)
  76.   {
  77.    printError ("Full table view is denied on this switch" );
  78.    return;
  79.   }
  80.  }
  81.  else $argument = trim ($_REQUEST["argument"]);
  82. }
  83. // All Ok, prepare to connect.
  84. $address = $switch[$Nom_Switch]["Adresse_IP_Switch"];
  85. if (!empty ($switch[$Nom_Switch][$handler . "_port"]))
  86.  $port = $switch[$Nom_Switch][$handler . "_port"];
  87. else
  88.  $port = $switch["default"][$handler . "_port"];
  89. if (!empty ($switch[$Nom_Switch][$handler . "_password"]))
  90.  $password = $switch[$Nom_Switch][$handler . "_password"];
  91. elseif (!empty ($switch[$Nom_Switch]["password"]))
  92.  $password = $switch[$Nom_Switch]["password"];
  93. else
  94.  $password = $switch["default"]["password"];
  95. $command = $request[$requestid]["command"] . (!empty ($argument) ? (" " . safeOutput ($argument)) : "" );
  96. global $socket_timeout;
  97. $link = fsockopen ($address, $port, $errno, $errstr, $socket_timeout);
  98. if (!$link)
  99. {
  100.  printError ("Erreur de connection au switch" );
  101.  return;
  102. }
  103. socket_set_timeout ($link, $socket_timeout);
  104. $username = $switch[$Nom_Switch]["username"];
  105. if (!empty ($username)) fputs ($link, "{$username}\n" );
  106. fputs ($link, "{$password}\nterminal length 0\n{$command}\n" );
  107. // let daemon print bulk of records uninterrupted
  108. if (empty ($argument) && $request[$requestid]["argc"] > 0) sleep (2);
  109. fputs ($link, "quit\n" );
  110. echo "<pre>\n";
  111. // Skip text up to the line following out command.
  112. while (!feof ($link)
  113.  && (strpos (fgets ($link, 1024), $command) === FALSE));
  114. // Skip everything up to the 'quit' command.
  115. while (!feof ($link)
  116.  && (strpos (($buf = fgets ($link, 1024)), "quit" ) === FALSE))
  117. {
  118.  echo $buf;
  119. }
  120. echo "</pre>\n";
  121. fclose ($link);
  122. }
  123. mysql_close();
  124. ?>


 
 
Je commence à apprendre le php avec ce script.  
 
Merci de votre lecture.


Message édité par nicx le 06-10-2009 à 11:34:29
Reply

Marsh Posté le 06-10-2009 à 11:34:03   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed