PDA

Bekijk de volledige versie : Программный доступ (обратная связь с роутером)



Mak
05-02-2008, 18:04
Необходима обратная связь с роутером. Причем программными средствами. Поиск в форуме к сожалению никаких ответов мне не дал.

Какие цели в общем то я приследую?
- Есть локальный компьютер, на котором крутится приложение работающее через интернет. т.е. использует интернет для рабОты.
Часто бывает что интернет отваливается(пока не разбирался кстати по чему, но в веб интерфейсе показано что коннект есть, но реально его нет и подрубить инет можно только сделав дисконнект а потом коннект :confused:).
Да и много для чего, необходимо, чтобы управлять роутером с локального компьютера. Причем программно, без участия человека. т.е. рОбот.
Хотел продвинуть такую тему: поставить на роутер kylix(в паскакале я достаточно хорошо понимаю, во всяком случае программирование под Delphi опыт достаточный), но он вроде используется с KDE и GNOME который на роутер поставить нельзя(как я понимаю).
Как бы сделал я: я бы написал на kylix(в этом ПО я не шарю, но можно было бы попробовать) серверное приложение, с использованием какойнибудь технологии DCOM(не важно, главное чтобы приложение было распределенным в сети).
Далее на Delphi написал бы клиентскую часть.
т.о. получилось бы что клиент запросто мог получать все необходимые данные с сервера, давать ему команды и получать ответы об их исполнении.
Люди подскажите пожалуйста, чтонибудь подобное возможно?

TVadim
05-02-2008, 18:43
Необходима обратная связь с роутером. ...управлять роутером с локального компьютера. Причем программно, без участия человека. т.е. рОбот.
...kylix... DCOM...
Далее на Delphi написал бы клиентскую часть.
...

Проще: открываем tcp соединение по 23 порту (телнет) посылаем роутеру любые команды и получаем ответы:rolleyes:

Mak
05-02-2008, 19:31
Проще: открываем tcp соединение по 23 порту (телнет) посылаем роутеру любые команды и получаем ответы:rolleyes:

А это как? Через PuTTY как знаю.
А вот можно к примеру написать скрипт на vbs?
С помощью которого можно посылать команды через телнет и получать ответы?

TVadim
05-02-2008, 19:34
А это как? Через PuTTY как знаю.
А вот можно к примеру написать скрипт на vbs?
С помощью которого можно посылать команды через телнет и получать ответы?

Если delphi знаете, то можно на нем.

Zyxmon
05-02-2008, 19:49
А это как? Через PuTTY как знаю.
А вот можно к примеру написать скрипт на vbs?
С помощью которого можно посылать команды через телнет и получать ответы?
На perl можно и скрипт написать. Если на Delphi - можно взять за основу мою программу ZtnBatch (в архиве исходники). Она на с++ и delphi. Пару строк исправить и с asus заработает.

Spacesoft
05-02-2008, 21:10
Известная трабла с нектрыми провами - зависание VPN сессии: сессия есть, пакеты не ходят...
На никсячем серве в крон засунул раз в минуту проверку инета: если хост не пинается - выкл/вкл pptp.

ICMP_PROBE=`/bin/ping -c 2 ИП_адрес_в_инете|/bin/grep "icmp_seq"`
if [ "$ICMP_PROBE" = "" ]; then
вырубить pptp0
врубить pptp0
fi

касаемо как сделать вкл/выкл VPN через http запросы:

Disconnect (http://192.168.1.1/apply.cgi?current_page=Main_GStatus_Content.asp&next_page=default+value&next_host=192.168.1.1&sid_list=default+value&group_id=&modified=0&action_mode=Update&first_time=&action_script=dhcpc_release&load_script=&wan_status_t=Connected&PPPConnection_x_WANAction_button=Disconnect)
Connect (http://192.168.1.1/apply.cgi?current_page=Main_GStatus_Content.asp&next_page=default+value&next_host=192.168.1.1&sid_list=default+value&group_id=&modified=0&action_mode=Update&first_time=&action_script=dhcpc_renew&load_script=&wan_proto_t=PPTP&wan_status_t=Connected&PPPConnection_x_WANAction_button1=Connect)

dmig
05-02-2008, 21:26
касаемо как сделать вкл/выкл VPN через http запросы:

Disconnect (http://192.168.1.1/apply.cgi?current_page=Main_GStatus_Content.asp&next_page=default+value&next_host=192.168.1.1&sid_list=default+value&group_id=&modified=0&action_mode=Update&first_time=&action_script=dhcpc_release&load_script=&wan_status_t=Connected&PPPConnection_x_WANAction_button=Disconnect)
Connect (http://192.168.1.1/apply.cgi?current_page=Main_GStatus_Content.asp&next_page=default+value&next_host=192.168.1.1&sid_list=default+value&group_id=&modified=0&action_mode=Update&first_time=&action_script=dhcpc_renew&load_script=&wan_proto_t=PPTP&wan_status_t=Connected&PPPConnection_x_WANAction_button1=Connect)

должно быть ещё проще, поскольку роутер позволяет управлять соединением через UPnP

naves
05-02-2008, 22:38
А это как? Через PuTTY как знаю.
А вот можно к примеру написать скрипт на vbs?
С помощью которого можно посылать команды через телнет и получать ответы?
что значит как? вы или знаете delphi или нет. создаете TCP подключение к роутеру и передаете/принимаете команды/данные.
и что-то непонятна цель автоматизированного управления роутером с компьютера, если роутер может сам прекрасно собой управлять. только нужно уметь писать скрипты.
ЗЫ имхо, дельфи и паскаль в линухах не используется, только как отдельные проекты реализаций Basic, Pascal, C#

Mak
06-02-2008, 20:17
что значит как? вы или знаете delphi или нет. создаете TCP подключение к роутеру и передаете/принимаете команды/данные.
и что-то непонятна цель автоматизированного управления роутером с компьютера, если роутер может сам прекрасно собой управлять. только нужно уметь писать скрипты.
ЗЫ имхо, дельфи и паскаль в линухах не используется, только как отдельные проекты реализаций Basic, Pascal, C#

Наверное все же нет.(не знаю)
Никогда не доводилось иметь дело с сокетами. или еще чем.
Обычно это вин-апи, СОМ и т.д.
Посмотрел существующие компоненты мельком. Как я понял нужно использовать группу компонентов indy.
Может я чего не понимаю? Получается так: коннектишься на роутер, к порту 23, логинишься и даешь команды текстом типа: ps.
А он тебе текстом возращает кучу всякой батвы.
Это чтоже я буду этот текст анализировать построчно.
Это копание в текстах напоминает доисторическое программирование.
Наверное я все же чегото не так понимаю?
Вот в винде к примеру объект WSH! Создаешь, юзаешь - все красиво.
Объекто ориентированное программирование - называется. А здесь чтото такое можно намутить?

lly
06-02-2008, 20:23
"Нет, с таким настроением ты слона не продашь."

Роутер, слава богу, не является ни объектом ни windows, ни delphi, поэтому такой ваш подход обречен на провал. Если управление через сокеты, http, скрипты и т.п. вы считаете доисторическим - лучше закрыть эту тему навсегда.

Mak
06-02-2008, 21:37
"Нет, с таким настроением ты слона не продашь."

)))



Роутер, слава богу, не является ни объектом ни windows, ни delphi, поэтому такой ваш подход обречен на провал. Если управление через сокеты, http, скрипты и т.п. вы считаете доисторическим - лучше закрыть эту тему навсегда.
Может быть. Но никогда не поздно переоценить цели.
Насчет того что роутер не является Дельфи, согласен. Железка превосходная. Рассказываю коллегам на работе - люди сильно удивляются. Спасибо Олегу и вам, господа участники форума.

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

Zyxmon
06-02-2008, 22:13
)))
Насчет работы по 23-ми порту, я все правильно понимаю?
- обмен текстом между роутером и приложением на большом компьютере
Не обязательно по 23 порту, и не обязательно текстом (хотя текстом проще и понятнее). А как Вы иначе представляете.

Spacesoft
06-02-2008, 22:40
#!/usr/bin/perl
use Net::Telnet();

$new = new Net::Telnet (Timeout => 4, );
$new -> open ("192.168.1.1") or die $!;
$new -> login ("admin", "admin") or die $!;
$new -> cmd("reboot");

angel_il
06-02-2008, 23:01
А вот можно к примеру написать скрипт на vbs?

С помощью которого можно посылать команды через телнет и получать ответы?

и что самое интересное - можно!

Starling
07-02-2008, 03:08
Что надо автоматизировать-то? Для чего огород такой?

lly
07-02-2008, 08:44
Mak
Никто тебе не мешает написать свой сервер(демон) который будет предоставлять наружу Delphi интерфейсы, вот только придется писать на C/C++ и под linux. И у ядра, и у iptables есть API... А вот надо ли оно такое городить, если уже есть интерфейс доступный человеку без Delphi и виндов? Решай сам...

Mak
12-02-2008, 22:03
что значит как? вы или знаете delphi или нет. создаете TCP подключение к роутеру и передаете/принимаете команды/данные.
и что-то непонятна цель автоматизированного управления роутером с компьютера, если роутер может сам прекрасно собой управлять. только нужно уметь писать скрипты.
ЗЫ имхо, дельфи и паскаль в линухах не используется, только как отдельные проекты реализаций Basic, Pascal, C#

Цель пока не ясна, так как проблемы с мат частью. Я никогда сетями не занимался - для меня это темный лес. Одно известно точно - Мне нужен бесперебойный интернет. Добиться этого собираюсь так: подцепить к роутеру нескольких провайдеров. Переключаясь между ними в случае отказа какого нибудь.
Причем роуетр по всей видимости не будет обладать правами по своему ведому переключать связь с первого провайдера на вторго, в случае отключения первого.
Это будет делать большой компьютер. На нем же работает сервис которому нужен интернет, по этому ему виднее.
Роутер, как устройство обеспечивающее связь будет набирать статистику и предоставлять большому компьютеру. А уж он будет решать что ему делать в том или ином случае.
Сдул с просторов интернета перловый скрипт - серверная часть работы с сокетами, немного переделав. Клиентскую написал на Delphi.
Пока клиент и сервер по сути ничего не делают. Просто обмениваются не нужной информацией. Но делают это исправно - что пока и хотелось сделать.
Кстати говоря в интернете крайне мало информации о работе с сокетами с помощью Perl.

Думаю выложить клиентскую и серверную часть.
Может кому пригодится, таким как я.
Или может кто меня поправит, может я лажу какую написал..

Mak
03-03-2008, 21:01
Установил Perl командой: ipkg install perl
Удачно работал долгое время с ним и вот недавно потребовалось использование потоков..
при подключении в скрипте пакета:
use threads;
ошибка:
This Perl hasn't been configured and built properly for the threads
module to work. (The 'useithreads' configuration option hasn't been used.)

Having threads support requires all of Perl and all of the XS modules in
the Perl installation to be rebuilt, it is not just a question of adding
the threads module. (In other words, threaded and non-threaded Perls
are binary incompatible.)

If you want to the use the threads module, please contact the people
who built your Perl.


Никто не знает как побороть данную ошибку. В интернете народ говорит что нужно пересобрать Перл с нужной опцией.
Подскажите как лучше это сделать?

Mak
04-03-2008, 07:48
Ну или хотябы подскажите как попробовать установить перл не с помощью команды ipkg install perl.
Чувствую себя недопрограммистом когда пишу эту команду. Чего она делает хз.
В Линуксе к сожалению не силен. В винде устанавливать знаю как - качаешь дистрибутив, запускаешь setup.exe и нажимаешь кнопки по умолчанию.

Я себе так понимаю, что тот перл который есть сейчас не правильно собран. Собран без поддержки потоков в написании программы.
Думаю сейчас мне никто его не пересоберет. Посему вариант такой наверное: качать другой дистрибутив с просторов интернета и пробовать поставить на роутер.
Люди, подскажите как это сделать?

al37919
04-03-2008, 08:25
вот описание по компиляции пакетов для роутера.
http://www.nslu2-linux.org/wiki/Optware/AddAPackageToOptware

Последовательность действий такая --- установить систему компиляции, поправить файл perl.mk для включения нужной опции, скомпилировть и получить новый ipk

Mak
04-03-2008, 08:40
вот описание по компиляции пакетов для роутера.
http://www.nslu2-linux.org/wiki/Optware/AddAPackageToOptware

Последовательность действий такая --- установить систему компиляции, поправить файл perl.mk для включения нужной опции, скомпилировть и получить новый ipk

((((((((((((
По английски. :eek::mad::confused:
Так и знал. Обычно мануал линукса по русски то не понятно.
Что уж говорить про английский вариант(

rainman_v84
04-03-2008, 11:14
А не проще ли будет вместо пересборки перла плодить детей процесса с помощью fork()?
Пишется сложнее, читается тоже не очень, зато совместимость хорошая :)

Mak
04-03-2008, 11:21
А не проще ли будет вместо пересборки перла плодить детей процесса с помощью fork()?
Пишется сложнее, читается тоже не очень, зато совместимость хорошая :)

Да! Это первое что я сделал.
Но к сожалению у этих процессов нужно реализовать общие переменные.
А пакетов которые отвечают за шаред-мемори в этом перле тоже нет.
А без этих пакетов соответственно общие переменные для порождаемых процессов не реализовать.
Как вариант можно сделать обмен информацией между процессами через pipe, но это гемор страшный.(((

Mak
04-03-2008, 13:41
вот описание по компиляции пакетов для роутера.
http://www.nslu2-linux.org/wiki/Optware/AddAPackageToOptware

Последовательность действий такая --- установить систему компиляции, поправить файл perl.mk для включения нужной опции, скомпилировть и получить новый ipk

Спасибо конечно вам за совет((
Но боюсь мне не справиться с не русскими буковами.
Задача у меня в общем то двойная чтоли.
Подготавливаю серверную прогу которая будет слать через себя инфу удаленным клиентам.
т.е. клиент подсоединился и сервер начинает бомбардировать клиента данными.
Сделал себе бесплатный хостинг на holm.ru(кстати говоря есть перл и удаленный доступ через putty:))
Там тож перл обрезанный. Нет поддержки потоков и пакета "IPC::Shareable" (пакет для реализации расшаренных переменных для нескольких процессов) тоже нет:(
Блин вот лажа. Да и порты похоже закрыты(но это отдельная история я так думаю).
Это чтоже получается, я напишу прогу, куплю платный хостинг а там на перле тоже не будет поддержки потоков?!

А обмен данными между процессами с помощью pipe похоже не прокатит.
т.к. принимающий данные ПРОЦЕСС блокируется пока не получит данные от предполагаемого отправителя. А мне так нельзя. Нужно чтобы все процессы работали и прерывались чтобы посмотреть глобальные переменные и принять решение о своих действиях..
Кстати я так понял в Линуксе нету критических сессий? Видел мьютексы, а как их сделать именованными, чтобы виделись между процессами не понял..

OlegM
17-11-2008, 10:39
Надо запустить один perl-скрипт, но он ругается:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "en_US.UTF8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
Can't locate LWP.pm in @INC (@INC contains: /opt/lib/perl5/5.8.8/mipsel-linux /opt/lib/perl5/5.8.8 /opt/lib/perl5/site_perl/5.8.8/mipsel-linux /opt/lib/perl5/site_perl/5.8.8 /opt/lib/perl5/site_perl .) at /tmp/hdd/jflash/flashget line 4.
BEGIN failed--compilation aborted at /tmp/hdd/jflash/flashget line 4.
Как заставить работать скрипт? Помогите, пожалуйста.
Скрипт приложен.

markovrv
22-11-2010, 22:11
вот пример, программа на делфи: http://www.wl500g.info/showpost.php?p=217583&postcount=34