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ò.

Perl su Windows: Ottenere l’indirizzo IP internet e l’hostname

10 Ottobre 2014 di In: Networking, Script
Questo è frutto di una mia curiosità. Ho utilizzato Strawberry Perl su Windows. Il codice è tutto commentato.
#!/usr/bin/perl -w
use strict;
use warnings;
use LWP::Simple;
use Time::localtime;
use Sys::Hostname;
 
# Percorso del file di output
my $output = 'output.txt';
 
# 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 la data per il timestamp
my $mese = localtime->mon + 1;
my $giorno = localtime->mday;
my $anno = localtime->year + 1900;
my $ora = localtime->hour;
my $minuti = localtime->min;
my $timestamp = $anno.$mese.$giorno." @ ".$ora.":".$minuti; 
 
# Estraggo l'hostname
my $host = hostname;
 
# Crea il file definito in precedenza se non esiste e scrive IP e timestamp (in append - senza sovrascrivere il file)
unless (-e $output) { open(FILE, '>', $output); close FILE; } 
open(FILE, '>>', $output) || die("Impossibile creare il file!"); 
print FILE $ip . ' - ' . $timestamp . "\n";
close FILE;
 
# Scrive a video IP e Hostname
system("cls");
print "Il tuo indirizzo IP e\' ".$ip."\nIl tuo hostname e\' " . $host ."\n";
 
#Evito che la finestra si chiuda ma non mostro l'output di pause
system ("pause>nul");
l’output a video è:
Il tuo indirizzo IP e' 166.95.244.117
Il tuo hostname e' Hostname-PC
Mentre il file output.txt contiene:
166.95.244.117 - 20141010 @ 1:26
166.95.244.117 - 20141010 @ 1:26
166.95.244.117 - 20141010 @ 1:27
166.95.244.117 - 20141010 @ 1:27
Prossimamente cercherò un modo per inviare questi dati ad un sito web che controlli l’idoneità della richiesta e salvi solo i dati dei computer abilitati.