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 |
#!/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> |
<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ò.
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"); |
#!/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 |
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 |
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.
Può presentarsi la necessità di dover aggiungere un gruppo di dominio al gruppo Administrators locale di una macchina.
Nel mio caso mi trovavo in presenza di una foresta Active Directory 2003. Con un parent domain e 2 child domain e stavo installando un programma che per fare il deploy dei client necessita di credenziali amministrative. Quindi avevo necessità che un solo utente potesse “occuparsi” delle installazioni in tutta la foresta.
. Ci siamo accorti che il gruppo degli enterprise admins non aveva privilegi sui domini figli. Cercando in internet abbiamo trovato 2 strade: modificare il gruppo degli Administrators locale tramite GPO (ma il gruppo che aggiungevamo andava a sostituire gli administrators definiti in precedenza) o utilizzare Group Policy Preferences (che abbiamo scoperto dopo essere una feature di Windows Server 2008.
La soluzione provvidenziale ci è stata data da uno script in vbs che va fatto eseguire ai client da dominio.
script.vbs
1
2
3
4
5
6
7
| On Error Resume Next
'get main objects/variables
Set ws = WScript.CreateObject ( "WScript.Shell" ) compname = ws.ExpandEnvironmentStrings ( "%COMPUTERNAME%" ) Set adGrp = GetObject ( "WinNT://" & compname & "/Administrators,group" )
'add domain groups to local admin group
adGrp.Add ( "WinNT://[MyWindowsDomain]/[GroupIWantToAdd],group" ) |
On Error Resume Next
'get main objects/variables
Set ws = WScript.CreateObject ( "WScript.Shell" ) compname = ws.ExpandEnvironmentStrings ( "%COMPUTERNAME%" ) Set adGrp = GetObject ( "WinNT://" & compname & "/Administrators,group" )
'add domain groups to local admin group
adGrp.Add ( "WinNT://[MyWindowsDomain]/[GroupIWantToAdd],group" )
Lo script è abbastanza semplice da capire. Ovviamente il testo racchiuso tra parentesi quadre va modificato in base alle vostre esigenze.
Può nascere la necessità di dover creare una procedura automatizzata per la connessione ad un server FTP. Ci sono molti modi per affrontare la problematica; la più veloce è decisamente servirsi di un file batch e di uno scriptino contenente i comandi FTP.
ftp -s:script.txt ftp.dominio.it
questo comando non fa altro che connettersi sulla porta 21 del server ftp.dominio.it e gli passa i comandi scritti nello script.txt.
1
2
3
4
5
6
7
| [utenteFTP]
[password utente FTP]
bin
lcd [directory locale interessata]
cd [directory interessata]
put [files]
bye |
[utenteFTP]
[password utente FTP]
bin
lcd [directory locale interessata]
cd [directory interessata]
put [files]
bye
Nota importante: se i file che dovete trasferire, sia in un senso e sia nell’altro, sono più di uno dovete aggiungere l’opzione -i al comando ftp. In questo modo si disattiva l’interattività dell’utente.
Il file PAC (proxy auto-config) definisce come i web browser possono scegliere il proxy server appropriato per recuperare le informazioni di una data URL. Sostanzialmente stabilisce qual è la rotta che deve effettuare il vostro traffico per raggiungere certi siti web.
Un file PAC contiene una funzione JavaScript ( FindProxyForURL(url, host) ). Questa funzione restituisce una stringa con uno o più metodi di accesso. Questi fanno in modo che il vostro traffico venga mandato ad un proxy server, piuttosto che ad un altro oppure semplicemente che il sito venga raggiunto direttamente senza proxy.
Le stringhe restituite possono essere: “DIRECT” “PROXY [DNS name/ IP address del proxy]:[porta]”
Ecco 2 esempi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| function FindProxyForURL(url, host)
{
// Se il sito che l'utente vuole visitare è quello aziendale non utilizzare nessun proxy
if (shExpMatch(url, "http://sitointranetaziendale.it*")) { return "DIRECT"; }
// se l'indirizzo IP del client è all'interno della rete 192.168.1.0/24
if (isInNet(myIpAddress(), "192.168.1.0", "255.255.255.0"))
// usa questo proxy tramite questa porta
return "PROXY 192.168.1.1:8080";
// senno userà il suo default gateway
else
return "DIRECT";
} |
function FindProxyForURL(url, host)
{
// Se il sito che l'utente vuole visitare è quello aziendale non utilizzare nessun proxy
if (shExpMatch(url, "http://sitointranetaziendale.it*")) { return "DIRECT"; }
// se l'indirizzo IP del client è all'interno della rete 192.168.1.0/24
if (isInNet(myIpAddress(), "192.168.1.0", "255.255.255.0"))
// usa questo proxy tramite questa porta
return "PROXY 192.168.1.1:8080";
// senno userà il suo default gateway
else
return "DIRECT";
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| <strong>function FindProxyForURL(url, host)
{
// si possono impostare anche delle variabili che contengano le stringhe da restituire.
var proxy_a = "PROXY 192.168.1.22:8888";
var proxy_b = "PROXY 192.168.1.1:8080";
var proxy_c = "PROXY 192.168.1.243:7777";
var noproxy = "DIRECT";
// I siti seguenti verranno acceduti direttamente
if (shExpMatch(url, "http://sitoaziendale.local*")) { return noproxy; }
if (shExpMatch(url, "http://webmail.local*")) { return noproxy; }
// Il traffico verso cicciopasticcio verrà indirizzato verso il proxy A; Se il proxy A non risponde il traffico verrà girato al proxy B
if (shExpMatch(url, "http://www.cicciopasticcio.net*")) { return proxy_a ; proxy_b ; }
// Il traffico rimanente andrà verso il proxy C
return proxy_c;
} |
<strong>function FindProxyForURL(url, host)
{
// si possono impostare anche delle variabili che contengano le stringhe da restituire.
var proxy_a = "PROXY 192.168.1.22:8888";
var proxy_b = "PROXY 192.168.1.1:8080";
var proxy_c = "PROXY 192.168.1.243:7777";
var noproxy = "DIRECT";
// I siti seguenti verranno acceduti direttamente
if (shExpMatch(url, "http://sitoaziendale.local*")) { return noproxy; }
if (shExpMatch(url, "http://webmail.local*")) { return noproxy; }
// Il traffico verso cicciopasticcio verrà indirizzato verso il proxy A; Se il proxy A non risponde il traffico verrà girato al proxy B
if (shExpMatch(url, "http://www.cicciopasticcio.net*")) { return proxy_a ; proxy_b ; }
// Il traffico rimanente andrà verso il proxy C
return proxy_c;
}
Saluti!