LINUX.ORG.RU

помогите переделать скрипт

 


0

1

нашел на просторах, скрипт который запрашивает внешний ip и сравнивает со старым ip (который сохранен заранее в файл) и авториз. на яндексе.

нужно выпилить все лишнее. а именно обращение к яндексу. т.е. получил ip адрес, сравнил со старым, если одинаковые - ничего не делать. если изменился перейти по моему URL.
т.е все домены, токены, ttl - лишние..
ну или может кто поделится своим скриптом))





#!/usr/bin/perl

use LWP::UserAgent;
my $current_ip = `curl https://myexternalip.com/raw`;

if ($current_ip =~ /(\d+)\.(\d+)\.(\d+)\.(\d+)/) {
  my $new_ip = "$1.$2.$3.$4";

  open (FILE,"my_ip.txt");
  my @lines = <FILE>;
  $old_ip = $lines[0]; 
  $old_ip =~ s/^\s+|\s+$//g; 
  close(FILE);
  if ($old_ip eq $new_ip) {
    die "IP not changed"; # Выходим из скрипта, если IP не изменился
  }
  open (FILE,">my_ip.txt");
  print FILE $new_ip; # Записываем в файл новый IP
  close(FILE);

  my $token = "JVP...";		#Токен для администратора DNS Яндекса
  my $domain = "domain.ru";	#Основной домен
  my $subdomain = "ddns";	#Поддомен
  my $id = "3570657";		#Идентификатор поддомена
  my $TTL = "900";		#Время кеширования записи
  my $uri ="https://pddimp.yandex.ru/api2/admin/dns/edit"; # URI запроса

 my $ua = LWP::UserAgent->new( ssl_opts => { verify_hostname => 0 } );

 $response = $ua->post( $uri,
 [
 'domain' => $domain,
 'subdomain' => $subdomain,
 'record_id' => $id,
 'content' => $new_ip,
 'TTL' => $TTL,
 ],
 'PddToken' => $token,
 );
 
 if ( $response->is_success ) {
 print $response->decoded_content;
 } else {
 die $response->status_line;
 }
}


#!/usr/bin/env perl

use strict;
use warnings;
use autodie;
use LWP::Simple qw/$ua get/;

our $URL_TO_GET = "http://ya.ru/";
our $IP_FILE = q/my_ip.txt/;
our $EXT_IP_HOST = q[https://myexternalip.com/raw];

$ua->ssl_opts( verify_hostname => 0 );

sub save_ip ($) {
  my $new_ip = shift;
  open my $fh, '>', $IP_FILE;
  print $fh $new_ip;
}

my ($old_ip, $new_ip) = ("");
$new_ip = get "$EXT_IP_HOST" or die "Cannot gather ip from $EXT_IP_HOST\n";

if( -f $IP_FILE ){
  open my $fh, '<', $IP_FILE;
  $old_ip = <$fh>;
}else{
  save_ip $new_ip;
}

if($new_ip eq $old_ip){
  print STDERR "Nothing changed\n";
}else{
  print STDERR "Save new ip $new_ip\n";
  save_ip $new_ip;
  get $URL_TO_GET;
}

pru-mike ★★ ()
Последнее исправление: pru-mike (всего исправлений: 1)
Ответ на: комментарий от pru-mike

Странный листинг и странный алгоритм. Почему бы не использовать:

use constant {
    URL_TO_GET  => 'http://ya.ru/',
    IP_FILE     => 'my_ip.txt',
    EXT_IP_HOST => 'https://myexternalip.com/raw',
};

Зачем финальное ветвление в STDERR ругается? В любом случае, почему не написать:

# perldoc -f warn
# ...If the last element of LIST does not end in newline, it appends the same file/line number text as "die" does.
warn 'Nothing changed';

?

А такие штуки:

our $IP_FILE = q/my_ip.txt/;
За гранью добра и зла. Используй одинарные кавычки.

perl5_guy ★★★ ()
Ответ на: комментарий от perl5_guy

Почему бы не использовать
warn 'Nothing changed';

Можно и так.
Только тогда

warn "Nothing changed\n";

our $IP_FILE = q/my_ip.txt/;
За гранью добра и зла. Используй одинарные кавычки.

Ну нет.

pru-mike ★★ ()
Ответ на: комментарий от pru-mike

правильно ли я понимаю, что print тогда не нужен?


warn «Nothing changed\n»;
}else{
warn «Save new ip $new_ip\n»;

Pivo ()
Ответ на: комментарий от pru-mike

Ну нет.

А смысл в этой записи? Одинарные кавычки не используются в строке.

Можно и так.

Только тогда

Я про это знаю, поэтому привёл цитату из perldoc в комментарии

perl5_guy ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.