Archivi

Perl: automatizzare il dump di un database MySQL remoto via PHPMyAdmin

26 ottobre 2014 di In: Script, Sistemistico

Ho appena finito di scrivere questo script in Perl che permette di scaricare in locale un dump in formato SQL di un server MySQL remoto tramite PHPMyAdmin (d’ora in poi PMA).
In questo caso il server MySQL è quello di Aruba e PMA è in italiano.
Lo script simula una navigazione nel sito quindi è possibile che non funzioni con tutte le versioni di PMA.

Lo script è chiaramente migliorabile. La prossima versione permetterà l’esecuzione da terminale passando gli argomenti necessari e sarà in formato EXE.

#!/usr/bin/perl -w 
use strict;
use WWW::Mechanize;
my $login    = "XXXXXXX";
my $password = "Password!";
my $url = "http://mysql.aruba.it/login/index.php?lang=it-iso-8859-1";
my $url2 = "http://mysql.aruba.it/phpMyAdmin-5/server_export.php";
my $url3 = "http://mysql.aruba.it/phpMyAdmin-5/navigation.php";
my $dumpfile = 'c:\Percorso\del_file\di_output\DBdump.sql';
my $mech = WWW::Mechanize->new();
 
print "1 - Connessione\n";
$mech->get($url) or die "ERRORE: Impossibile raggiungere il sito web\n" ;
 
print "2 - Autenticazione\n";
$mech->form_with_fields(("utente","password","controllo")) or die "ERRORE: Impossibile trovare un form con i campi\n" ;
$mech->field("utente",$login);
$mech->field("password",$password);
$mech->submit_form(); 
 
print "3 - Download del backup\n";
$mech->get($url2);
$mech->form_name("dump");
$mech->submit_form() or die "ERRORE: Impossibile raggiungere la pagina esporta\n";
$mech->save_content ( $dumpfile ) or die "ERRORE: Impossibile salvare il file\n";
 
print "4 - Disconnessione\n";
$mech->get($url3);
$mech->follow_link( tag => 'a', n => 3 ) or die "ERRORE: Impossibile disconnettersi\n" ;

Perl su Windows: automatizzare il completamento di un form

10 ottobre 2014 di In: Networking, Script

Questo script Perl prende IP internet e hostname della macchina su cui viene eseguito e li manda ad un form presente in internet.
Il completamento del form è possibile grazie al modulo WWW::Mechanize;

#!/usr/bin/perl -w
use strict;
use warnings;
use LWP::Simple;
use Sys::Hostname;
use WWW::Mechanize;
 
# Estraggo l'indirizzo IP connettendomi ad un sito
my $ip = get('https://www.net-addiction.net/ip/ip.php');
$ip = 'Non ho trovato un indirizzo IP!' if !$ip;
 
# Estraggo l'hostname
my $host = hostname;
 
# Imposto i campi da compilare con i relativi valori (il nome del campo dev'essere uguale all'attributo name del tag input 
my $mech = WWW::Mechanize->new();
my $url = "https://www.net-addiction.net/ip/form.php"; # Definizione dell'URL contenente il form
$mech->get($url);
my $result = $mech->submit_form(
form_number => 1,                  # L'identificativo del form (nel caso in cui nella pagina ce ne fosse piu' di uno
fields      => 
{
Code		=> 'RLRRLRLL', # Codice di controllo - è la variabile che distingue le richieste autorizzate
IP    		=> $ip,        # L'indirizzo IP estratto
Hostname            => $host,      # L'hostname estratto
}
, button            => 'Invia'     # Questo deve corrispondere all'attributo name del tag input type="submit"
);
print $result->content();         # Esegue il completamento
 
 
 
system("cls"); # Svuota la finestra del prompt
print "Il tuo indirizzo IP e\' ".$ip."\nIl tuo hostname e\' " . $host ."\n"; # Scrive a video IP e Hostname

Dall’altra parte (seguendo l’esempio sopra in https://www.net-addiction.net/ip/form.php) ci deve essere un form tipo:

<html>
<head><title>Pagina per ricezione dati</title></head>
<body>
<?php
if ($_POST['Code'] == 'RLRRLRLL') { // Se il codice corrisponde
 
$ip = $_POST['IP']; // assegno le variabili
$hostname = $_POST['Hostname'];
 
$myfile = fopen("dati.txt", "a") or die("Impossibile aprire il file!"); // Tento di aprire il file in append
$txt = $ip . " - " . $hostname . "\n"; // Creo la stringa da scrivere su file
fwrite($myfile, $txt); // Scrivo su file
fclose($myfile); // chiudo il file
 
echo "<h1>dati inviati</h1>"; // Confermo che i dati sono stati inviati
	}
?>
 
<form id="1" action="form.php" method="POST">
<input type="text" id="Code" name="Code" />
<input type="text" id="IP" name="IP" />
<input type="text" id="Hostname" name="Hostname" />
<input type="submit" id="Invia" name="Invia" value="Invia" />
</form>
</body>
</html>

Lo so, l’ho fatto in PHP per comodità. Quando imparerò un minimo di programmazione web di Perl integrerò.