Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl -w
- # This is a handy script for keeping your CloudFlare DNS & DynDNS records up to date using their respective api's.
- # Run it in a cron job, run it at start up, run it whenever, wherever.
- use strict;
- ##########
- package CloudFlare;
- use LWP::UserAgent;
- sub new {
- my ( $class, $url, $domains, $user, $token ) = @_;
- my ($self) = {};
- bless( $self, $class );
- $self->{'_url'} = $url;
- my $ua = LWP::UserAgent->new;
- $ua->agent('Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1;)');
- $self->{'_ua'} = $ua;
- my $ip;
- $self->{'_ip'} = $ip;
- my $api =
- 'https://www.cloudflare.com/api.html?a=DIUP'
- . '&hosts='
- . $domains . '&u='
- . $user . '&tkn='
- . $token;
- $self->{'_api'} = $api;
- return $self;
- }
- sub main {
- my ($self) = shift;
- $self->{'_ip'} = $self->getIp();
- $self->callApi();
- }
- sub getIp {
- my ($self) = shift;
- my $response = $self->{'_ua'}->get( $self->{'_url'} );
- if ( $response->is_success ) {
- my @ip =
- ( $response->decoded_content =~
- m/((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9]{1,2})){3})/g
- );
- return $ip[0];
- }
- else {
- die $response->status_line;
- }
- }
- sub callApi {
- my ($self) = shift;
- my $response =
- $self->{'_ua'}->get( $self->{'_api'} . '&ip=' . $self->{'_ip'} );
- if ( $response->is_success ) {
- die $response->decoded_content;
- }
- else {
- die $response->status_line;
- }
- }
- ##########
- package DynDNS;
- use LWP::UserAgent;
- use Socket;
- sub new {
- my ( $class, $url, $domain, $user, $pass ) = @_;
- my ($self) = {};
- bless( $self, $class );
- $self->{'_url'} = $url;
- $self->{'_domain'} = $domain;
- my $ua = LWP::UserAgent->new;
- $ua->agent('Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1;)');
- $self->{'_ua'} = $ua;
- my $ip;
- $self->{'_ip'} = $ip;
- my $api =
- 'https://'
- . $user . ':'
- . $pass . '@'
- . 'members.dyndns.org/nic/update?wildcard=NOCHG&mx=NOCHG&backmx=NOCHG'
- . '&hostname='
- . $domain;
- $self->{'_api'} = $api;
- return $self;
- }
- sub main {
- my ($self) = shift;
- $self->{'_ip'} = $self->getIp();
- if ( $self->{'_ip'} != inet_ntoa( inet_aton( $self->{'_domain'} ) ) ) {
- $self->callApi();
- }
- }
- sub getIp {
- my ($self) = shift;
- my $response = $self->{'_ua'}->get( $self->{'_url'} );
- if ( $response->is_success ) {
- my @ip =
- ( $response->decoded_content =~
- m/((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9]{1,2})){3})/g
- );
- return $ip[0];
- }
- else {
- die $response->status_line;
- }
- }
- sub callApi {
- my ($self) = shift;
- my $response =
- $self->{'_ua'}->get( $self->{'_api'} . '&myip=' . $self->{'_ip'} );
- if ( $response->is_success ) {
- die $response->decoded_content;
- }
- else {
- die $response->status_line;
- }
- }
- ##########
- package main;
- my $cloudFlare = CloudFlare->new(
- 'http://checkip.dyndns.com/', 'example.com,www.example.com',
- 'email@example.com', '_CLOUDFLARE_API_KEY_'
- );
- $cloudFlare->main();
- undef $cloudFlare;
- my $dyndns = DynDNS->new(
- 'http://checkip.dyndns.com/', 'example.dyndns.com',
- '_DYNDNS_USER_', '_DYNDNS_PASSWORD_'
- );
- $dyndns->main();
- undef $dyndns;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement