webForumDet fria alternativet

Perl - Automatisk updatering av IP på internet sida

Programmering

0 svar · 1 807 visningar · startad av Viktor

Medlem sedan aug. 20021 752 inlägg
Frågan#1

Dags att få liv i det här forumet igen :)

Ett litet script som jag har gjort, gjorde det när dns2go inte hade fungerat på 24 timmar :l.
Det laddar automatiskt upp en sida med din IP adress till en FTP server. Du kan själv välja var IP adressen ska vara på sidan genom att skriva <!--IP_ADDR--> i html dokumentet (kan finnas på flera ställen).
Glöm inte att ändra inställningarna i början av skriptet så det passar dig.
Själv kör jag detta script varje timme genom min crontab. Det går säkert att modda så att det lysnar efter byte av IP adress men det är lite för avanserat för mig men om någon kan göra det så skulle det vara kul att veta hur :)

Testat på Redhat 7.3.

#!/usr/bin/perl

#################################################
#
# This script will get the ip address of your computer
# put it inside a html page as a link and send the html
# file to a ftp server. All this to enable you to always
# be able to point users to your site even if you use a
# dynamic ip address.
#
# Copyright (C) Viktor 2002
#
#################################################

use strict;
use Socket;
use Net::FTP;

#############################

my $ip_addr="";
# FTP server address
my $server_addr="";
# Username and password for FTP server
my $username="";
my $password="";
# The remote directory where you want to place the html file
my $remote_dir="";
# The name of the template
my $template="template.html";
# The name of the file
my $indexfile="index.html";
# The ethernet card that is conected to the internet (the one we shuld use to get the ip address)
my $eth="eth1";

#############################

getIP();
createIndex();
sendFile();
exit;

sub sendFile
{
    my $ftp = Net::FTP->new($server_addr, Debug => 0);
    $ftp->login($username,$password);
    $ftp->cwd($remote_dir);
    $ftp->put($indexfile);
    $ftp->quit;
}

sub getIP
{
    my $buffer = `/sbin/ifconfig $eth | awk '/inet /{sub("addr:","");print$2}'`;
    $buffer =~ s/ {2,}/ /g;
    my @pairs = split(/ /, $buffer);
    $ip_addr=$pairs[2];
}

sub createIndex
{
    open(INFILE,$template);
    open(OUTFILE,">$indexfile");
    my @infile = <INFILE>;
    my $line="";

    foreach $line (@infile)
    {
        chomp($line);
        $line =~ s/<!--IP_ADDR-->/$ip_addr/g;
        print OUTFILE "$line\n";
    }

    close(INFILE);
    close(OUTFILE);
}

/Viktor

245 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
116 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
116 ms — ändringar (db)