LINUX.ORG.RU

Необходимо соединение несвязных (на первый взгляд) скриптов

 , ,


0

1

Есть два скрипта:(все взято с инета, сам в этом не силен, к сожалению)
Один определяет ип адресс с роутера и записывает в файл.

#!/bin/sh
#!/usr/bin/perl
use LWP::UserAgent;
wget=/usr/bin/wget
wget -O- http://user:pass@192.168.0.2/RST_conn_status.htm       |  perl -ne '/var info_get_wanip="((\d+\.){3}(\d+))"/ and print $1'  > /home/user/test.txt

Другой определяет ип адресс через инет(сайт) и записывает его в файл если он изменился или пекрашает скрипт если ип не изменился.

#!/usr/bin/perl
use LWP::UserAgent;
my $hostout = `host user.dyndns.org`;
if ($hostout =~ /(\d+)\.(\d+)\.(\d+)\.(\d+)/) {
  my $ip = "$1.$2.$3.$4";
   #Добавлено:
  open (FILE,"my_ip.txt");
  my @lines = <FILE>;
  $old_ip = $lines[0]; #Считываем IP из файла
  $old_ip =~ s/^\s+|\s+$//g; #trim
  close(FILE);
  if ($old_ip eq $ip) {
    die "IP not changed"; # Выходим из скрипта, если IP не изменился
  }
  open (FILE,">my_ip.txt");
  print FILE $ip; # Записываем в файл новый IP
  close(FILE);[br]

/продолжение ряда команд/


Проблема в том, что второй скрипт не может определить(в отличии от первого скрипта) реальный ип если выдан серый.

Можно ли во второй скрипт добавить ряд условий м.б. чтобы он смог зайти на страницу и считать от туда значение строки «var info_get_wanip=»?



Последнее исправление: Tavols (всего исправлений: 4)

Ответ на: комментарий от DELIRIUM

Спасибо, так нагляднее, думал в спойлер загнать, но не пошло...

Tavols
() автор топика

Задача-то в чём? Определить смену внешнего IP? Определить смену IP на роутере? Определить и то, и другое в одном скрипте?

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

нет-нет, мне бы хотелось надеяться, что возможно в скрипте 2 изменить код так, чтобы он мог определить IP в роутере(зашел по адресу роутера с логином и паролем и в строке"var info_get_wanip=" нашел значение) и после этого выполнял уже код описанный ниже.

Другими словами надо в скрипт № 2 вставить ссылку первого скрипта, но просто так не получается.

Строка my $hostout = `host http://user:pass@192.168.0.2/RST_conn_status.htm`; не работает (иначе бы я не мог зайти на роутер с другого ип(типа защита))

Tavols
() автор топика
Ответ на: комментарий от Tavols

Тогда можешь сделать просто сделать так (можно сделать проще, но сам я в перле тоже не силён):

my $routeraddress = `wget -O- http://user:pass@192.168.0.2/RST_conn_status.htm | perl -ne '/var info_get_wanip="((\d+\.){3}(\d+))"/ and print $1'`

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

Как считаешь, так будет правильно?

#!/bin/sh
#!/usr/bin/perl

use LWP::UserAgent;
my $routeraddress = `wget -O- http://user:pass@192.168.0.2/RST_conn_status.htm`;

if ($routeraddress =~ `perl -ne '/var info_get_wanip="((\d+\.){3}(\d+))"/ and print $1'`) {
  my $ip = "$1.$2.$3.$4";

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

но чето дико ругается на сие чудо:

line 5:my: команда не найдена

line 7: `if ($routeraddress =~ `perl -ne '/var info_get_wanip="((\d+\.){3}(\d+))«/ and print $1'`) {'

Tavols
() автор топика
Ответ на: комментарий от Tavols

Мне просто надо, чтобы вся байда зарулилась и распарсилась my $ip = «$1.$2.$3.$4»;

В оригинале он так не ругается:

line 5:my: команда не найдена

Tavols
() автор топика
Ответ на: комментарий от Tavols

Ты зачем два шебанга поставил? Убирай первую строчку и больше никогда так не делай.

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

И из нормального конвейера ты какую-то чушь сотворил имхо (я про if ($routeraddress =~ `perl -ne '/var info_get_wanip="((\d+\.){3}(\d+))«/ and print $1'`) {), верни как было.

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

На счет шибанга я уже понял(что поделать, я технарь а не программер).

Подскажи как это завернуть в распознование my $ip = «$1.$2.$3.$4»;

#!/usr/bin/perl

use LWP::UserAgent;

my $routeraddress = `wget -O- http://user:pass@192.168.0.2/RST_conn_status.htm | perl -ne '/var info_get_wanip="((\d+\.){3}(\d+))"/'`{
  my $ip = "$1.$2.$3.$4";

   #Добавлено:
  open (FILE,"my_ip.txt");
чето не заводиться, пишет syntax error на 5 строке

Tavols
() автор топика

Проблема в том, что второй скрипт не может определить(в отличии от первого скрипта) реальный ип если выдан серый.

Этот скрипт вообще не определяет твой IP, он определяет IP, назначенный user.dyndns.org. И естественно, в случае серого адреса он с реальностью ничего общего не имеет. Ты лучше все-таки расскажи, что именно ты хочешь сделать.

Deleted
()
Ответ на: комментарий от Tavols

Чувак. Выключай тупилку, включай думалку.

my $routeraddress = `wget -O- http://user:pass@192.168.0.2/RST_conn_status.htm | perl -ne '/var info_get_wanip="((\d+\.){3}(\d+))"/'`
В переменной $routeraddress _уже_ IP-адрес роутера.

А syntax error из-за того, что ты фигурную скобку пробелом не отделил.

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