Тем кому в ручную надоело скорость менять в MaxDSL Dyn.

Все что не попало в остальные разделы forum.lan.md

Модератор: MegaDance

Аватара пользователя
halflife_

 

Тем кому в ручную надоело скорость менять в MaxDSL Dyn.

Сообщение halflife_ 28 авг 2005, 07:41

День добрый

Читал где-то тут что МТ в пакетах MaxDSL Dynamic не собираются делать автоматический переход после 00:00 на 512/512 а утром по выбору на что-то другое, ну и ладно ;)) Набросал для себя такую вот штуку:

у меня по крону

в 00:05

ruby srvdi.rb логин пароль MDIX TESTNIGH

утром в 7:55

ruby srvdi.rb логин пароль MDIX 64

параметры

MDIX - 1мбит по молдове
TESTNIGH - то что после полуночи анлим 512кбпс
64 - платный 64/512

писал на ruby - ruby-lang.org, просто щас больше с ним завязан. Но думаю не трудно и на перле переписать.

может еще кому пригодится.

Код: Выделить всё
#!/usr/bin/env ruby

require 'net/http'
require 'uri'

=begin
	
	Voprosi napravliaite siuda: sunwinder@gmail.com
=end

module MT
    URL_MTS = "http://192.168.169.66:8080/"

    MT_MDIX_SERVICE = "PrSer4"
    MT_TESTNIGH_SERVICE = "testnigh"
    MT_64_SERVICE = "PrSer1"

# GET /serviceStart/refresh/home?service=testnigh&group=2 HTTP/1.1
# GET /serviceStart/refresh/home?service=PrSer1&group=2 HTTP/1.1

    class LiveCookie
	attr_reader :cookies
	
	def initialize
	    @cookies = Hash.new
	end
	
	def add_raw(raw_cookie)
	    raw_cookie =~ /(\w+)=([^|;]*)/
	    @cookies[$1] = $2
	end

	def dump
	    str = ""
	    @cookies.each { |k, v|
		str += "#{k}=#{v}; "
	    }
	    str.chomp("; ")
	end

	alias << add_raw
    end
    
    class Service
	class MTSLoginFailure < StandardError; end

	def urlencode(kv)
	    str = ""
	    kv.each { |k, v|
		str += "&#{k}=#{v}"
	    }
	    URI.encode(str)
	end

	def initialize(username, password)
	    @live_cookie = LiveCookie.new

	    @username = username
	    @password = password
	end

	def show_headers(resp)
	    resp.each { |k, v|
		puts "#{k}: #{v}"
	    }
	end

	def check_location(resp)
	    resp.each { |k, v|
		if (k == 'location') then
		    return v
		end
	    }
	    nil
	end

	def store_cookies(resp)
	    resp.each { |k, v|
		if k == 'set-cookie' then
		    v.split(/, (?=\w+=)/).each { |cookie|
			@live_cookie << cookie
		    }
		end
	    }
	end

	def init
	    url = URL_MTS
	    while (1) do
		puts "trying: #{url}"
		resp, rd = do_GET(url)

		url = check_location(resp) 
		break if url.nil?
	    end
	end

	def do_POST(rel_url, form)
	    uri = URI.parse(URL_MTS + rel_url)
	    http = Net::HTTP.new(uri.host, uri.port)

	    req = uri.path
	    req += "?" + uri.query if uri.query
	    resp, rd = http.post(req, urlencode(form), 
				 @live_cookie.cookies)
	    show_headers(resp)	    
	end

	def start_service(service)
	    url = URL_MTS + "serviceStart/refresh/home?service=#{service}&group=2"
	    do_GET(url)	    
	end

	def stop_service(service)
	    url = "serviceStop/refresh/home?service=#{service}&group=2"

	    confirm_stop = {
		'confirmed' => 'true',
		'submitButton' => 'OK+'
	    }
	    do_POST(url, confirm_stop)
	end

	def login
	    url = "user/refresh/home?confirmed=true&submitButton=OK+"

	    login_credentials = {
		'username' => @username,
		'password' => @password
	    }
	    do_POST(url, login_credentials)
	end

	def logoff
	    url = "accountLogoff/home"

	    confirm_logoff = {
		'confirmed' => 'true',
		'submitButton' => 'OK+'
	    }
	    do_POST(url, confirm_logoff)
	end

	def do_GET(url)
	    uri = URI.parse(url)
	    http = Net::HTTP.new(uri.host, uri.port)

	    req = uri.path
	    req += "?" + uri.query if uri.query
	    resp, rd = http.get(req, { "Cookie" => @live_cookie.dump })

	    show_headers(resp)

	    store_cookies(resp)

	    [ resp, rd ]
	end
    end
end

=begin
mts = MT::Service.new('username_xyz', 'password_xyz')
mts.init

mts.logoff; sleep 2 # FIXME: 
mts.login

mts.start_service(MT::MT_MDIX_SERVICE)
mts.start_service(MT::MT_TESTNIGH_SERVICE)
=end
if $0 == __FILE__
    username = ARGV[0]
    password = ARGV[1]

    mts = MT::Service.new(username, password)
    mts.init
    
    mts.logoff; sleep 2 # FIXME: 
    mts.login
    
    ARGV[2...ARGV.size].each { |service|
	case (service) 
	when "TESTNIGH"
	    mts.start_service(MT::MT_TESTNIGH_SERVICE)
	when "MDIX"
	    mts.start_service(MT::MT_MDIX_SERVICE)
	when "64"
	    mts.start_service(MT::MT_64_SERVICE)
	else
	    puts "Undefined service #{service}..."
	end
    }
end

Аватара пользователя
Mistakila

 
Сообщения: 597
Зарегистрирован:
28 апр 2005, 10:40
Откуда: местный

Сообщение Mistakila 03 сен 2005, 14:12

А это код скрипта ?
он подходит и для фри и для линуха?
просвяти уж

Аватара пользователя
Igoras
Moderator
Moderator
 
Сообщения: 3248
Зарегистрирован:
22 окт 2003, 20:27
Откуда: Кишинев, Starushka.net

Сообщение Igoras 03 сен 2005, 14:52

Пасиба, у меня все работает :) правда в крон пока не закинул :)

просвяти уж
да уж.. взял тут понаписал, ничего не ясно, ничего не объяснил... а ну-ка разложи по полочкам срочно...

Аватара пользователя
halflife_

 

Сообщение halflife_ 04 сен 2005, 23:40

Mistakila писал(а):А это код скрипта ?
он подходит и для фри и для линуха?
просвяти уж


Для линуха, фри и под виндой должен работать, а вообще везде где есть ruby..

Я уж незнаю как более понятно разжевать.. Смотри в портах/репозитарии дистрибутива, если не найдешь, сходи на ruby-lang.org, собери для своей платформы. Ничего больше кроме самого интерпретатора ставить не надо. Дальше по инструкции выше ..

Пасиба, у меня все работает Smile правда в крон пока не закинул Smile


Незачто.

Выложил вдобавок к себе сюда:

http://sunray.homelinux.org/vovka/srvdi.rb

Аватара пользователя
Mistakila

 
Сообщения: 597
Зарегистрирован:
28 апр 2005, 10:40
Откуда: местный

Сообщение Mistakila 11 окт 2005, 11:22

Но тема прикольная
кто сделал - мегамозг
RESPECT FOREVA

Аватара пользователя
skystar

 
Сообщения: 5
Зарегистрирован:
19 дек 2005, 14:49

Сообщение skystar 20 дек 2005, 20:44

Вот подправленный код под нынешний динамик.
Код: Выделить всё
#!/usr/bin/env ruby 

require 'net/http' 
require 'uri' 

=begin 
    
   Voprosi napravliaite siuda: sunwinder@gmail.com 
=end 

module MT 
    URL_MTS = "http://192.168.169.66:8080/" 

    MT_MDIX_SERVICE = "PrSer4" 
    MT_64_SERVICE = "PrSer12"
    MT_512_SERVICE = "PrSer5"
 

# GET /serviceStart/refresh/home?service=testnigh&group=2 HTTP/1.1 
# GET /serviceStart/refresh/home?service=PrSer12&group=2 HTTP/1.1 

    class LiveCookie 
   attr_reader :cookies 
    
   def initialize 
       @cookies = Hash.new 
   end 
    
   def add_raw(raw_cookie) 
       raw_cookie =~ /(\w+)=([^|;]*)/ 
       @cookies[$1] = $2 
   end 

   def dump 
       str = "" 
       @cookies.each { |k, v| 
      str += "#{k}=#{v}; " 
       } 
       str.chomp("; ") 
   end 

   alias << add_raw 
    end 
    
    class Service 
   class MTSLoginFailure < StandardError; end 

   def urlencode(kv) 
       str = "" 
       kv.each { |k, v| 
      str += "&#{k}=#{v}" 
       } 
       URI.encode(str) 
   end 

   def initialize(username, password) 
       @live_cookie = LiveCookie.new 

       @username = username 
       @password = password 
   end 

   def show_headers(resp) 
       resp.each { |k, v| 
      puts "#{k}: #{v}" 
       } 
   end 

   def check_location(resp) 
       resp.each { |k, v| 
      if (k == 'location') then 
          return v 
      end 
       } 
       nil 
   end 

   def store_cookies(resp) 
       resp.each { |k, v| 
      if k == 'set-cookie' then 
          v.split(/, (?=\w+=)/).each { |cookie| 
         @live_cookie << cookie 
          } 
      end 
       } 
   end 

   def init 
       url = URL_MTS 
       while (1) do 
      puts "trying: #{url}" 
      resp, rd = do_GET(url) 

      url = check_location(resp) 
      break if url.nil? 
       end 
   end 

   def do_POST(rel_url, form) 
       uri = URI.parse(URL_MTS + rel_url) 
       http = Net::HTTP.new(uri.host, uri.port) 

       req = uri.path 
       req += "?" + uri.query if uri.query 
       resp, rd = http.post(req, urlencode(form), 
             @live_cookie.cookies) 
       show_headers(resp)       
   end 

   def start_service(service) 
       url = URL_MTS + "serviceStart/refresh/home?service=#{service}&group=2" 
       do_GET(url)       
   end 

   def stop_service(service) 
       url = "serviceStop/refresh/home?service=#{service}&group=2" 

       confirm_stop = { 
      'confirmed' => 'true', 
      'submitButton' => 'OK+' 
       } 
       do_POST(url, confirm_stop) 
   end 

   def login 
       url = "user/refresh/home?confirmed=true&submitButton=OK+" 

       login_credentials = { 
      'username' => @username, 
      'password' => @password 
       } 
       do_POST(url, login_credentials) 
   end 

   def logoff 
       url = "accountLogoff/home" 

       confirm_logoff = { 
      'confirmed' => 'true', 
      'submitButton' => 'OK+' 
       } 
       do_POST(url, confirm_logoff) 
   end 

   def do_GET(url) 
       uri = URI.parse(url) 
       http = Net::HTTP.new(uri.host, uri.port) 

       req = uri.path 
       req += "?" + uri.query if uri.query 
       resp, rd = http.get(req, { "Cookie" => @live_cookie.dump }) 

       show_headers(resp) 

       store_cookies(resp) 

       [ resp, rd ] 
   end 
    end 
end 

=begin 
mts = MT::Service.new('username_xyz', 'password_xyz') 
mts.init 

mts.logoff; sleep 2 # FIXME: 
mts.login 

mts.start_service(MT::MT_MDIX_SERVICE) 
mts.start_service(MT::MT_TESTNIGH_SERVICE) 
=end 
if $0 == __FILE__ 
    username = ARGV[0] 
    password = ARGV[1] 

    mts = MT::Service.new(username, password) 
    mts.init 
    
    mts.logoff; sleep 2 # FIXME: 
    mts.login 
    
    ARGV[2...ARGV.size].each { |service| 
   case (service) 
   when "MDIX" 
       mts.start_service(MT::MT_MDIX_SERVICE) 
   when "64" 
       mts.start_service(MT::MT_64_SERVICE)
   when "512"
       mts.start_service(MT::MT_512_SERVICE)
 
   else 
       puts "Undefined service #{service}..." 
   end 
    } 
end

Спасибо большое господинуhalflife_

Аватара пользователя
MuadDib

 
Сообщения: 193
Зарегистрирован:
06 июл 2005, 13:59

Сообщение MuadDib 25 янв 2006, 01:32

А вот на перле скрипт:

На включение 64к и мд-их:
Код: Выделить всё
#!/usr/bin/perl

use LWP::UserAgent;
use HTTP::Request::Common qw(POST);

$ua=LWP::UserAgent->new;
$ua->agent("Mozzila");
my $req = POST 
'http://192.168.169.66:8080/accountLogoff/home', [confirmed =>
'true' ], [ submitButton => 'OK+' ];
$res = $ua->request($req)->as_string;
sleep 2;
my $req = POST
'http://192.168.169.66:8080/home?confirmed=true&submitButton=OK+&username=ЛОГИН&password=ПАРОЛЬ';
$res = $ua->request($req)->as_string;
my $req = POST
'http://192.168.169.66:8080/serviceStart/refresh/home?service=PrSer1';
$res = $ua->request($req)->as_string;
my $req = POST
'http://192.168.169.66:8080/serviceStart/refresh/home?service=PrSer4';
$res = $ua->request($req)->as_string;


И на 512к и мд-их:
Код: Выделить всё
#!/usr/bin/perl

use LWP::UserAgent;
use HTTP::Request::Common qw(POST);

$ua=LWP::UserAgent->new;
$ua->agent("Mozzila");
my $req = POST 
'http://192.168.169.66:8080/accountLogoff/home', [confirmed =>
'true' ], [ submitButton => 'OK+' ];
$res = $ua->request($req)->as_string;
sleep 2;
my $req = POST
'http://192.168.169.66:8080/home?confirmed=true&submitButton=OK+&username=ЛОГИН&password=ПАРОЛЬ';
$res = $ua->request($req)->as_string;
my $req = POST
'http://192.168.169.66:8080/serviceStart/refresh/home?service=PrSer5';
$res = $ua->request($req)->as_string;
my $req = POST
'http://192.168.169.66:8080/serviceStart/refresh/home?service=PrSer4';
$res = $ua->request($req)->as_string;



Надо только свой логин и пароль прописать там.

Аватара пользователя
halflife

 
Сообщения: 40
Зарегистрирован:
14 фев 2004, 23:28
Откуда: Кишинев

Сообщение halflife 25 янв 2006, 17:07

Респект.

Народ, если возникнут какие-то вопросы относительно того как это поднять, на подобии - что вместо крона под виндовс итд То лучше пишите не мне, а сюда. На то он и форум :)

Аватара пользователя
Mistakila

 
Сообщения: 597
Зарегистрирован:
28 апр 2005, 10:40
Откуда: местный

Сообщение Mistakila 26 янв 2006, 15:27

Тоесть теперь скрипт написан на перле и не надо искать и устанавливать руби,так?
И теперь достаточно вставить скрипт в крон и он по времени будет перерубать скорость пакета.

Аватара пользователя
Шинкевич Владимир

 
Сообщения: 1628
Зарегистрирован:
28 дек 2004, 17:36
Откуда: Киштаун

Сообщение Шинкевич Владимир 26 янв 2006, 17:47

как вам предложение от МТК?
1 мегабит гарантированный за 12 к лей
2 мегабита за 21,6 к.

По-моему для большой сети - это очень и очень пакет)
Возвратно-поступательные движения неэффективны.

Аватара пользователя
halflife

 
Сообщения: 40
Зарегистрирован:
14 фев 2004, 23:28
Откуда: Кишинев

Сообщение halflife 27 янв 2006, 11:53

Mistakila писал(а):Тоесть теперь скрипт написан на перле и не надо искать и устанавливать руби,так?
И теперь достаточно вставить скрипт в крон и он по времени будет перерубать скорость пакета.


Думаю так, хоть и не проверял.

Аватара пользователя
halflife

 
Сообщения: 40
Зарегистрирован:
14 фев 2004, 23:28
Откуда: Кишинев

Сообщение halflife 27 янв 2006, 12:13

Profi the same писал(а):как вам предложение от МТК?
1 мегабит гарантированный за 12 к лей
2 мегабита за 21,6 к.

По-моему для большой сети - это очень и очень пакет)


Мне это не грозит, поэтому сказать ничего не могу :) Наверное не плохо.

Вот если бы мтк раздавал по internal bgp или еще какимнибудь доступным для автоматизации способом список того, что входит в MDIX, я был бы признателен.

Может кто знает, если можно об этом договориться с кемнибудь из других провайдеров ? Помоему не так уж и трудно организовать что-то вроде web сервиса с списком и обновлять его каждые 30мин. По идее, не должно быть никаких доп. расходов в сравнении с игровыми, радио сервисами.

Аватара пользователя
Igoras
Moderator
Moderator
 
Сообщения: 3248
Зарегистрирован:
22 окт 2003, 20:27
Откуда: Кишинев, Starushka.net

Сообщение Igoras 27 янв 2006, 12:31

Согласен... и полностью поддерживаю... Единственное что я пока видел из этой серии это список сетей на старнетовском трекере, типа обновляеся раз в 15 минут... правда не знаю насколько он точный, у меня кажется в списке сетей побольше было :)

Аватара пользователя
Шинкевич Владимир

 
Сообщения: 1628
Зарегистрирован:
28 дек 2004, 17:36
Откуда: Киштаун

Сообщение Шинкевич Владимир 27 янв 2006, 12:40

Старнет дает такой список раз в 15 минут на трекере. Осталось это дело автоматизировать :)
Возвратно-поступательные движения неэффективны.

Аватара пользователя
halflife

 
Сообщения: 40
Зарегистрирован:
14 фев 2004, 23:28
Откуда: Кишинев

Сообщение halflife 07 фев 2006, 22:47

Profi the same писал(а):Старнет дает такой список раз в 15 минут на трекере. Осталось это дело автоматизировать :)


О нем я знал, но как-то скептически к нему относился. В общем, всеравно выбирать не из чего, немного для себя оптимизировал.

Написал штуку которая забирает список с трекера, проверяет (traceroute), выбрасывает то, что не прошло, и из оставшегося создает два списка. Не думаю, что если оно даже и ходит через telco-out.moldtelecom.md (с какой-то из подсетей старнета так), то это не MDIX трафик, непонятно как оно у них там построено, но иначе вроде как проверить нельзя..

генерируются списки
1. подсети вида 192.168.0.0/24
2. проверенный ipfilter.dat для пользователей

Два дня работает, вроде полет нормальный. Только жаль BitCommet и другие клиенты не умеют забирать список автоматически. А иначе смысла от этого всего не много.. Поэтому подумываю генерировать еще и PeerGuardian типа список - что-то на подобии ipfilter.dat только, либо PeerGuardian либо azureus его умеют забирать автоматически через N минут.

Незнаю если кому пригодится как есть, но может как пример подойдет

ipfilter.rb:
Код: Выделить всё
require 'ip.rb'

class IPFilter
    NOT_FREE_LABLE = 'NOT_IN_MDIX'

    def initialize
        @networks = Array.new 
    end

    def add_entry(from, to, opt, name)
        @networks << [ from, to, opt, name ]
    end

    def ary_addr_to_s(ary_addr)
        addr = ''
        ary_addr.each_index { |i|
            addr += '0' * (3 - ary_addr[i].to_s.size) + ary_addr[i].to_s
            addr += '.' if i < 3
        }
        addr
    end
        
    def net_inc(subnet)
        inc = subnet.dup
        i = 3
        while ((inc[i] += 1) > 255)
            inc[i] = 0
            i -= 1
        end
        inc
    end

    def net_dec(subnet)
        dec = subnet.dup
        i = 3
        while ((dec[i] -= 1) < 0)
            dec[i] = 255
            i -= 1
        end
        dec
    end

    def put_in_jail
        formatted = Array.new
       p = [ 0, 0, 0, 0 ]
        @networks.each { |from, to, opt, name|
            formatted << [ p, net_dec(from), '000', NOT_FREE_LABLE ] if from != p
            formatted << [ from, to, opt, name ]
            p = net_inc(to)
        }
        formatted << [ p, [ 255, 255, 255, 255 ], '000', NOT_FREE_LABLE ]
        formatted
    end

    def self.parse(filename)
        networks = []
        File.open(filename, 'r') { |f|
            while(f.eof == false) do
                line = f.readline
                next if !(line =~ /^\d+/) # comment
                line =~ /^(\d+.\d+.\d+.\d+) - (\d+.\d+.\d+.\d+) , (\d+) , (.+)/
                next if $3.to_i < 127 # < 127 blocked

                networks << [ IP.make_addr_readable($1),
                              IP.make_addr_readable($2), $4 ]
            end
        }
        networks
    end

    def save(header, filename = "ipfilter.dat_safe")
        File.open(filename, "w") { |f|
            f.puts header
            ranges = put_in_jail
            ranges.each { |from, to, opt, name|
                f.puts "#{ary_addr_to_s(from)} - #{ary_addr_to_s(to)} , #{opt} , #{name}"
            }
        }
    end
end

=begin
ipf = IPFilter.new
IPFilter.parse('ipfilter.dat').each { |network|
     ipf.add_entry(network[0], network[1], 127, network[2])
}
=end


ip.rb:
Код: Выделить всё
module IP
    def IP.ary_addr_to_s(addr)
        addr_str = ''
        addr.each_index { |i|
            addr_str += addr[i].to_s
            addr_str << '.' if i < 3
        }
        return addr_str
    end

    def IP.dotted_to_addr(dotted)
        addr = 0
        dotted.split('.').each { |p|
            addr <<= 8
            addr |= p.to_i
        }
        addr
    end

    def IP.make_addr_readable(addr)
        addr =~ /(\d+).(\d+).(\d+).(\d+)/
        addr_ary = [ $1.to_i, $2.to_i, $3.to_i, $4.to_i ]
        addr_ary
   end

    def IP.normalize(min, max)
        n1 = IP.dotted_to_addr(min)
        n2 = IP.dotted_to_addr(max)

        addrs = n2 - n1
        nth = 0
        for n in 0..31
            nth = n if addrs[n] == 1
        end
        min =~ /^(\d+).(\d+).(\d+)/
        [ "#{$1.to_i}.#{$2.to_i}.#{$3.to_i}.0", 31 - nth ]
    end
end


traceroute.rb:
Код: Выделить всё
module Traceroute
    TRACEROUTE = "/usr/bin/traceroute 2>/dev/null"
    def Traceroute.check(gw, hops, addr)
        File.popen(TRACEROUTE + " -m #{hops} #{addr}") { |f|
            while (f.eof == false) do
                ln = f.readline
                hops -= 1
                if hops == 0
                    if ln =~ /#{gw}/
                        return true
                    else
                        return false
                    end
                end
            end
        }
    end
end

# p Traceroute.check('telco-out.moldtelecom.md', 4, 'lrn.ru')


update.rb:
Код: Выделить всё
load 'ipfilter.rb'
load 'ip.rb'
load 'traceroute.rb'

# Uncomment if parsing comments is boring for you
INCLUDE_COMMENTS = false
# INCLUDE_COMMENTS = true
    
WORLD_GW = 'telco-out.moldtelecom.md'
HOPS_NUM = 4
ISP_SELF = 'MOLDTELECOM'

really_mdix_networks = Hash.new 
ipf = IPFilter.new

IPFilter.parse('ipfilter.dat').each { |network|
    puts "#{IP.ary_addr_to_s(network[0])} - #{IP.ary_addr_to_s(network[1])} #{network[2]}"
    n1 = network[0].dup
    n1[3] += 1
    n2 = network[1].dup
    n2[3] -= 1
    if (ISP_SELF == network[2]) or
        (Traceroute.check(WORLD_GW, HOPS_NUM, IP.ary_addr_to_s(n1)) == false and
        Traceroute.check(WORLD_GW, HOPS_NUM, IP.ary_addr_to_s(n2)) == false)
        plain = IP.normalize(IP.ary_addr_to_s(network[0]),
                             IP.ary_addr_to_s(network[1]))
        really_mdix_networks["#{plain[0]}/#{plain[1]}"] = network[2]
        ipf.add_entry(network[0], network[1], 127, network[2])
        puts "passed"
    else
        puts "failed traceroute test"
    end
}

ipf_header =<<END
# Automatically regenerated from http://tracker.starnet.md/ipfilter.dat
# and checked for safety on mtk. This list is guaranteed to comply with 
# our router infromation about MDIX.
#
# Feel free to contact me at any time
#    by jabber: halflife@gw
#    by e-mail: sunwinder@gmail.com
#
# The latest version can be found here:
#    http://sunray.homelinux.org/vovka/ipfilter.dat
#
# Created at: #{Time.now}
END
ipf.save(ipf_header)

f = File.open("mdix-networks", "w")
really_mdix_networks.each_key { |network|
    f.puts "# #{really_mdix_networks[network]}" if INCLUDE_COMMENTS == true
    f.puts network
}


update.sh
Код: Выделить всё
#!/bin/sh

/usr/bin/wget --output-document=ipfilter.dat \
        http://tracker.starnet.md/ipfilter.dat

sh iptcleanup.sh try 192.168.0.0/24
sh iptcleanup.sh vpn 192.168.10.0/24

/usr/local/bin/ruby update.rb

sh iptsetup.sh try 192.168.0.0/24
sh iptsetup.sh vpn 192.168.10.0/24

cp ipfilter.dat_safe /var/www/htdocs/vovka/ipfilter.dat

Аватара пользователя
halflife

 
Сообщения: 40
Зарегистрирован:
14 фев 2004, 23:28
Откуда: Кишинев

Сообщение halflife 07 фев 2006, 22:54

Забыл,

traceroute'ом проверяется старт + 1, енд - 1 границы диапазона

например если есть

192.168.0.0 - 192.168.0.255

то чекается

traceroute 192.168.0.1
traceroute 192.168.0.254

Аватара пользователя
halflife

 
Сообщения: 40
Зарегистрирован:
14 фев 2004, 23:28
Откуда: Кишинев

Сообщение halflife 08 фев 2006, 03:16

Прикрутил pg типа ipfilter,

проверил на azureus'е + SafePeer plugin, периодически обновляется и вроде работает нормально

Доп. инф. http://en.wikipedia.org/wiki/PeerGuardi ... ext_Format

peerguardian.rb
Код: Выделить всё
load 'ip.rb'
load 'ipfilter.rb'

class PeerGuardian
    def initialize
        @blocked = Array.new
    end

    def append(ipfilter)
        entries = ipfilter.put_in_jail
        entries.each_index { |i|
            from, to, opt, name = entries[i]
            if opt.to_i < 127
                @blocked << [ from, to, "range.id.#{i}" ]
            end
        }
    end

    def save(filename = "ipfilter.txt_safe")
        File.open(filename, "w") { |f|
            @blocked.each { |from, to, name|
                f.puts "#{name}:#{IP.ary_addr_to_s(from)}-#{IP.ary_addr_to_s(to)}"
            }
        }
    end
end

=begin
ipf = IPFilter.new
IPFilter.parse("ipfilter.dat_safe").each { |from, to, name|
    ipf.add_entry(from, to, 127, name)
}
pgf = PeerGuardian.new
pgf.append(ipf)
pgf.save
=end

Аватара пользователя
Шинкевич Владимир

 
Сообщения: 1628
Зарегистрирован:
28 дек 2004, 17:36
Откуда: Киштаун

Сообщение Шинкевич Владимир 08 фев 2006, 11:36

спасибо заранее, теперь осталось это всё на винду поставить :)))))
Возвратно-поступательные движения неэффективны.

Аватара пользователя
halflife

 
Сообщения: 40
Зарегистрирован:
14 фев 2004, 23:28
Откуда: Кишинев

Сообщение halflife 09 фев 2006, 22:52

Profi the same писал(а):спасибо заранее, теперь осталось это всё на винду поставить :)))))


Можно попробовать заточить traceroute.rb под tracert. А вот как дальше, я уже не представляю.

Аватара пользователя
MuadDib

 
Сообщения: 193
Зарегистрирован:
06 июл 2005, 13:59

Сообщение MuadDib 23 фев 2006, 18:49

Некоторые жалуются, что скрипт на перле на 64 не работает.
Так вот, если у кого не работает, поменяйте там строчку:
'http://192.168.169.66:8080/serviceStart/refresh/home?service=PrSer1';
на
'http://192.168.169.66:8080/serviceStart/refresh/home?service=PrSer12';

А и еще не забывайте ставить сам перл ( http://www.activestate.com/ActivePerl/ )
Ну и скрипты надо копировать не в сам крон. А создать файлы 64.pl и 512.pl и в них скопировать скрипты. И в кроне уже запускать именно эти файлы по раснисанию.

Аватара пользователя
Mistakila

 
Сообщения: 597
Зарегистрирован:
28 апр 2005, 10:40
Откуда: местный

Сообщение Mistakila 24 фев 2006, 12:59

А если руби подглючивает и не всегда меняет скорость
можно и перло-скрипт в крон вписать?
как должны тогда строки в кроне выглядить..

Аватара пользователя
Mistakila

 
Сообщения: 597
Зарегистрирован:
28 апр 2005, 10:40
Откуда: местный

Сообщение Mistakila 24 фев 2006, 13:01


Аватара пользователя
Igoras
Moderator
Moderator
 
Сообщения: 3248
Зарегистрирован:
22 окт 2003, 20:27
Откуда: Кишинев, Starushka.net

Сообщение Igoras 24 фев 2006, 13:44

Mistakila писал(а):как должны тогда строки в кроне выглядить..
Да как обычно - дата и время запуска и что делать :)

А та софтина - она во-первых платная, а во-вторых отсылает логин/пароль твой кому-то там :)) а потом не удивляйся если деньги со счета уходят :)

Аватара пользователя
syntax

 
Сообщения: 1
Зарегистрирован:
08 мар 2006, 18:09

Сообщение syntax 08 мар 2006, 18:13

MuadDib писал(а):Некоторые жалуются, что скрипт на перле на 64 не работает.
Так вот, если у кого не работает, поменяйте там строчку:
'http://192.168.169.66:8080/serviceStart/refresh/home?service=PrSer1';
на
'http://192.168.169.66:8080/serviceStart/refresh/home?service=PrSer12';

А и еще не забывайте ставить сам перл ( http://www.activestate.com/ActivePerl/ )
Ну и скрипты надо копировать не в сам крон. А создать файлы 64.pl и 512.pl и в них скопировать скрипты. И в кроне уже запускать именно эти файлы по раснисанию.

объясните по конкретней какой именно код нужно вставлять в nncron я так и не понял :?
у меня mtc dynamic 1

Аватара пользователя
MuadDib

 
Сообщения: 193
Зарегистрирован:
06 июл 2005, 13:59

Сообщение MuadDib 01 май 2006, 09:42

Думаю все сами себе уже исправили скрипты под новые пакеты, но мало ли.
Вот под Го2 :

use LWP::UserAgent;
use HTTP::Request::Common qw(POST);

$ua=LWP::UserAgent->new;
$ua->agent("Mozzila");
my $req = POST
'http://192.168.169.66:8080/accountLogoff/home', [confirmed =>
'true' ], [ submitButton => 'OK+' ];
$res = $ua->request($req)->as_string;
sleep 2;
my $req = POST
'http://192.168.169.66:8080/home?confirmed=true&submitButton=OK+&username=ЛОГИН&password=ПАРОЛЬ';
$res = $ua->request($req)->as_string;
my $req = POST
'http://192.168.169.66:8080/serviceStart/refresh/home?service=PrDSL9';
$res = $ua->request($req)->as_string;
my $req = POST
'http://192.168.169.66:8080/serviceStart/refresh/home?service=PrDSL15';
$res = $ua->request($req)->as_string;

След.

Вернуться в Разное

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

cron