Nos konzultáltam Hypercube kollégával és természetesen hozzájárult az általa átírt script közléséhez!
Leírom lépésről lépésre, hogy én hogyan csináltam.
A myip.hu-n lévő leírás elejét követtem:
- file tartalmának szerkesztése
perl fordító elérési útjának beállítása alapértelmezésként
#!/usr/bin/perl -w
frissítési periódus, felhasználónév, jelszó, domain megadása,
opcionális proxy szerver és proxy port
- tulajdonos beállítása (szükséges hogy a syslog file-ba tudjon írni)
chown root:root myip
- file jogosultság beállítása
chmod 775 myip
- file átmozgatása a /usr/bin könyvtárba
mv myip /usr/bin
Ezek után futtatáshoz csak 'myip'-t kell beírni.
És a script:
#!/usr/bin/perl -w
print("Kilepni a ctrl-c billentyukombinacioval tudsz\n");
my $process=1;
for (;1;$process++)
{
print("Perl [OK] \n");
#===============================================================================
# Configurációs paraméterek.
#
my $ido ='600'; # frissítési idő másodpercben!
my $USERNAME = 'felhasználónév'; # felhaszálónév
my $PASSWORD = 'jelszó'; # jelszó
my $DOMAIN = 'myip.hu'; # domain (pl.:myip.hu)
my $PROXY = ''; # proxy szerver beállítása (ha használsz ilyet)
# pl.: my $PROXY='proxy.szolgaltatom.hu';
my $PROXY_PORT = ''; # proxy portja
# pl.: my $PROXY_PORT='3128';
print("Config [OK]\n ");
#===============================================================================
# Ne vátoztass semmit inentől hacsak nem tudod mit csinálsz :-)
#
use IO::Socket;
use Sys::Syslog qw/:DEFAULT setlogsock/;
use File::Basename;
use POSIX qw/setsid/;
use strict;
my($Server) = 'www.myip.hu';
my($ServerPort) = 80;
my($URI) = 'http://myip.hu/update/updateip.phtml';
if ($PROXY && $PROXY_PORT){
$Server = $PROXY;
$ServerPort = $PROXY_PORT;
Print("Proxy [OK] \n");
}
open STDERR, '>>/dev/null' or die "Can't write to /dev/null: $!";
my($exit) = 0;
my($proto) = getprotobyname('udp');
my($program) = basename($0);
my($port, @addr, $new_ip,$old_ip, $MYIP, $pid, $action);
socket(SOCKET, PF_INET, SOCK_DGRAM, $proto);
setlogsock( 'unix' );
openlog($program, 'cons,pid', 'user');
connect(SOCKET, sockaddr_in(0, inet_aton('27.0.0.1')));
($port, @addr) = unpack_sockaddr_in(getsockname(SOCKET));
$new_ip = join("\n", map {inet_ntoa($_)} @addr);
# tcp kapcsolat nyitása a myip.hu webszerverhez
$MYIP = new IO::Socket::INET (
Proto=>'tcp',
PeerAddr=>$Server,
PeerPort=>$ServerPort,
Reuse=>1 ) || { error() };
$MYIP->autoflush(1);
print("TCP [OK] \n");
# url elküldése
print($MYIP "GET $URI?user_name=$USERNAME&password=$PASSWORD&domain=$DOMAIN HTTP/1.0\r\n\r\n");
# válasz feldolgozása
while (<$MYIP>){
if (/^\+OK(.*?\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/){
# Felülírodott az IP ?
print("$1\n");
print("Updating procedure $process [OK]\n");
syslog('notice', "$1\n");
}
elsif (/^\-ERR(.*?)$/){
syslog('crit', "HIBA: $1 \n");
print "Hiba $1 \n";
closelog();
exit($exit);
}
}
close ($MYIP);
closelog();
sub error{
print("Unsuccessful accession $Server\n");
syslog('crit',"Unsuccessful accession $Server\n");
closelog();
exit($exit);
}
sleep($ido);
}
Ha minden igaz terminálból kiadod a myip parancsot és addig frissítgeti amíg ki nem lépsz.
szerk:
Tesztelve tökéletes :) Már csak az lenne a legjobb ha a háttérbe futna