1. Welkom op het onafhankelijke Ziggo Gebruikersforum. Een forum voor en door gebruikers van Ziggo.
    Registreer je gratis om direct zelf berichten te plaatsen en gebruik te maken van extra functies!
    Verberg deze melding

Perl script voor linux routers icm Motorola modems

Discussie in 'Internet - Eigen netwerk' gestart door Toor, 4 apr 2009.

Niet open voor verdere reacties.
  1. Hieronder een perl scriptje dat ik heb geschreven om automatisch de interfaces te herconfigureren wanneer Ziggo aan 't kloten is geweest. Je zult waarschijnlijk het e.e.a. moeten aanpassen, maar het is een goede basis.

    Code:
    #!/usr/bin/perl
    
    use LWP::UserAgent;
    use HTTP::Cookies;
    
    $ua = LWP::UserAgent->new;
    $ua->agent("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727)");
    my $cookie_jar = HTTP::Cookies->new(
       file     => "/tmp/cookies.lwp",
       autosave => 1,
    );
    $ua->cookie_jar( $cookie_jar );
    
    sub login_cablemodem {
      $req = HTTP::Request->new(GET => 'http://192.168.100.1/loginData.htm?loginUsername=admin&loginPassword=motorola&LOGIN_BUTTON=Login');
      $res = $ua->request($req);
      $req = HTTP::Request->new(GET => 'http://192.168.100.1/loginData.htm?loginUsername=admin&loginPassword=motorola&LOGIN_BUTTON=Login');
      $res = $ua->request($req);
    }
    
    sub interface_up {
      $do = `/sbin/ifconfig |/bin/grep eth0|/bin/grep -v grep|/usr/bin/wc -l`;
      chomp($do);
      $do+=0;
      return($do);
    }
    
    sub nmbd {
      $do = `/bin/ps aux |/bin/grep nmbd |/bin/grep -v grep|wc -l`;
      chomp($do);
      $do+=0;
      return($do);
    }
    
    sub cablemodem_up {
      &login_cablemodem();
      my $req = HTTP::Request->new(GET => 'http://192.168.100.1/indexData.html');
      my $res = $ua->request($req);
      if ($res->is_success) {
        if ($res->content =~ /[\<]TD[\>]Operational[\<][\/]TD[\>]/) {
          return(1);
        } else {
          return(0);
        }
      }
      else {
        return(2);
      }
    }
    sub restart_cablemodem {
      &login_cablemodem();
      $req = HTTP::Request->new(GET => 'http://192.168.100.1/reset.htm?reset_modem=Restart+Cable+Modem');
      $res = $ua->request($req);
    }
    
    sub restart_dhcp {
      $do = `/bin/ps aux |/bin/grep dhclient |/bin/grep -v grep`;
      if ($do =~ /^root([^0-9]*)([0-9]*)/) {
        $pid = $2;
      }
      system("/bin/kill -9 $pid");
      system("/bin/killall -9 dhclient");
      sleep(10);
      # Mogelijk moet je paths aanpassen.
      system("/sbin/dhclient -1 -q -lf /var/lib/dhcp/dhclient-eth0.leases -pf /var/run/dhclient-eth0.pid -cf /etc/dhclient-eth0.conf eth0");
    }
    
    sub ip_up {
      $pingmij = `/bin/ping -t 50 -q -c 30 -n 195.85.225.1|/bin/grep "packets transmitted"`;
      @pingmij = split(/\ /, $pingmij);
      ($transmitted,$null,$null,$received) = @pingmij;
      if (!$pingmij) {
        &log("IP BROKEN.\n");
        $loss = "100";
        return(0);
      }
      if (!$transmitted) {
        $percentage = 0;
      } else {
        $percentage = (100/$transmitted)*$received;
        $loss = 100-$percentage;
      }
      if ($loss eq 100) {
        $pingmij = `/bin/ping -t 50 -q -c 30 -n 94.75.210.1|/bin/grep "packets transmitted"`;
        @pingmij = split(/\ /, $pingmij);
        ($transmitted,$null,$null,$received) = @pingmij;
        $percentage = (100/$transmitted)*$received;
        if ($loss eq 100) {
          return(0);
        } else {
          fix:
          if ($loss > 0) {
            &log("STATUS: PACKETLOSS IS $loss PERCENT.");
          }
          return(1);
        }
      }
      else {
        return(1);
      }
    }
    
    sub log {
      ($message) = @_;
      $ts = time();
      open(OUTFILE,">>/var/log/ziggolog.log");
      print OUTFILE "$ts\: $message\n";
      close(OUTFILE);
    }
    check_interfaces:
    
    $have_if = &interface_up;
    if (!$have_if) {
      ## Mn interfaces willen nog wel eens verdwijnen als DHCP niet lukt. Onderstaande code fixt het weer.
      &log("STATUS: INTERFACE DOWN, IFUP ETH0");
      $do = `/sbin/ifup eth0`;
      $do = `/sbin/ifconfig eth0 down`;
      #Met onderstaande kun je je MAC adres faken en dus je IP wijzigen
      #$do = `/sbin/ifconfig eth0 hw ether 00:17:AB:CD:EF:12`;
      $do = `/sbin/ifconfig eth0 up`;
      sleep(10);
      goto check_interfaces;
    } else {
      if ($have_if < 4) {
        &log("STATUS: INTERFACE UP, ALIASES MISSING. FIXING.");
        $do = `/bin/dointerfaces.sh`;
        sleep(10);
        goto check_interfaces;
      }
    }
    
    check_cablemodem:
    $cable_up = &cablemodem_up;
    if ($cable_up eq "2") {
      goto check_interfaces;
    }
    if ($cable_up eq "0") {
      &log("STATUS: CABLE MODEM DOWN.");
      $have_if = &interface_up;
      if (!$have_if || $have_if < 4) {
        goto check_interfaces;
      }
      fix_cable:
      &log("RESTARTING CABLE MODEM");
      &restart_cablemodem;
      sleep(15);
      $i=0;
      while ($i ne 180) {
        $i++;
        sleep(1);
        $cable_up = &cablemodem_up;
        if ($cable_up eq "2") {
          goto check_interfaces;
        }
        if ($cable_up eq "1") {
          $i=180;
        }
      }
      if ($cable_up) {
        &log("STATUS: MODEM BACK ONLINE, ATTEMPT DHCP");
        &restart_dhcp;
        sleep(60);
        goto check_interfaces;
      } else {
        &log("STATUS: CABLEMODEM STILL DOWN");
        goto check_interfaces;
      }
    }
    else {
      $online = &ip_up;
      if (!$online) {
        &log("STATUS: NO PING, REBOOTING MODEM");
        goto fix_cable;
      }
      else {
        if (!$nmbd) {
          #Even comments weghalen als je samba doet
          #$do = `/usr/sbin/nmbd`;
          #&log("STATUS: NMBD WAS DOWN, FIXED IT.");
          #sleep(2);
        }
        &log("STATUS: I AM COMPLETELY OPERATIONAL AND ALL MY SYSTEMS ARE FUNCTIONING PERFECTLY");
        $nmbd = &nmbd;
        $do = `/usr/sbin/ntpdate ntp1.nl.net`;
        sleep(300);
        goto check_interfaces;
      }
    }
    
     
Niet open voor verdere reacties.

Deel Deze Pagina