miercuri, 1 octombrie 2008

WCZONE pentru OpenWRT

Acesta esta executabilul WCZONE compilat de Mihai pentru OpenWRT. Abonatii Czone pot folosi acest program pe orice router care ruleaza OpenWRT, pentru a nu mai fi necesara rularea aplicatiei de autentificare pe nici unul dintre calculatoarele conectate la router. Treaba asta poate sa fie utila pentru cei care vor sa conecteze spre exemplu o consola de jocuri la netul de la Czone, fara sa mai aiba nevoie de un calculator pornit.

Eu am testat varianta compilata static si a fost OK.

Compilat dinamic, executabilul are nevoie de librariile:
libmcrypt.so.4
libm.so.0
libgcc_s.so.1
libc.so.0
ld-uClibc.so.0
DOWNLOAD
wczone.OpenWRT.dinamic.tgz [3.8KB]
wczone.OpenWRT.static.tgz [85.5KB]

Utilizare:
./wczone utilizator parola

Exemplu rulare fara afisare a mesajelor primite de la server si deconectare de la consola:
./wczone utilizator parola >> /dev/null &

Tutorial de instalare WCZONE pe routere cu OpenWRT
Se presupune ca routerul este configurat corect (netul functioneaza daca este deschisa aplicatia veche de autentificare pe unul dintre calculatoare) si vrei sa muti aplicatia pe router. Daca nu ai ajuns la pasul asta urmeaza tutorialul de aici.

Din linux:

Copiaza cu scp executabilul compilat static si dezarhivat. Comanda are formatul:
scp fisier_local utilizator@IP_Router:/cale/catre/fisier_destinatie
exemplu:
scp wczone root@192.168.1.1:/tmp/wczone
/tmp/ este directorul mapat pe memoria RAM
Logheaza-te la router prin ssh cu comanda de forma
ssh user@IP_Router
exemplu
ssh root@192.168.1.1
Acum esti logat la consola routerului.
cd /tmp
Adauga drepturi de executie pt fisierul wczone
chmod +x wczone
Ruleaza pentru test wczone
./wczone username password
Daca totul e OK ultima linie primita de la server contine:
MESSAGE=CONNECTED
Cu CTRL+C opresti executia programului. Mai departe muta executabilul in memoria flash a routerului.
mv wczone /sbin/wczone
Acum trebuie sa faci aplicatia sa porneasca la restartul routerului. Pentru asta adauga o linie in fisierul /etc/init.d/S40network (daca nu exista foloseste alt fisier de initializare din directorul asta). Comanda este:
echo wczone username password 1\>/dev/null 2\>/dev/null \& >> /etc/init.d/S40network

Dupa un restart, wczone ar trebui sa porneasca automat.
reboot

Ca sa verifici daca ruleaza poti sa te conectezi din nou la router prin ssh si sa rulezi comanda ps. Printre procese trebuie sa apara si wczone.


Din Windows:

Foloseste pentru copiat fisierul WinSCP si pentru conectare la consola routerului prin SSH PuTTY. In rest totul este la fel.

34 de comentarii:

Anonim spunea...

A mers ce-a mers, dar acu' vad ca imi da failed. E posibil sa fie de la headerele pe care le trimiteti, sunt nitel altele decat ale lor si deci usor de identificat. O sa ma joc si eu cu codu, sa vedem ce iese.

wickedProgrammer spunea...

Eu il am pus pe router si merge ok. Daca e o problema nu cred ca e de la stringul de GET HTTP. Am verificat acum si e identic. Sau la ce headere te referi?

Anonim spunea...

Salut,

Eu am un Linksys WRT54GL, v1.1. Am pus un DD-WRT v24 pe el si l-am configurat acum 6 luni (din iptables) sa dea internet in tot LAN-ul unor prieteni de familie in reteaua c-zone. Cu restrictia ca trebuia rulat clientul de c-zone pe un calculator din LAN inainte de a avea toti. Recent, cei de la c-zone au schimbat usor infrastructura(cablurile trase prin interiorul scarilor de bloc). Odata cu asta , au modificat si IP-urile in DHCP, Gateway-ul si clientul de conectare. Cu router-ul configurat identic, clientul nu se mai conecteaza... In consecinta, am ajuns la concluzia ca solutia unica pare clientul rulat pe router direct. Am ajuns la postul vostru, dar am vazut ca scriptele compilate(sau nu) sunt doar pt OpenWRT. Cu mentiunea ca nu ma pricep prea bine la Linux, v-as ruga sa ma ajutati cu ceva explicatiii "babesti" .. Multumesc anticipat.

mo

wickedProgrammer spunea...

Executabilul ar trebui sa mearga si pt DD-WRT. O sa scriu un tutorial pentru instalarea pe router. O solutie temporara ar fi sa ruleze aplicatia veche in continuare pe unul din calculatoare. Inca functioneaza.

Anonim spunea...

Compilarea statica presupune ca nu mai am nevoie de librariile mentionate mai sus? Doar pun unde pe router fisierul "wczone" si il rulez cu parametrii user and password?
Toate cele bune

wickedProgrammer spunea...

Da, exact. Il copiezi cu scp sau wget sau din interfata web, ii dai drept de executie cu
chmod +x wczone
rulezi cu
./wczone user pass >/dev/null &

Anonim spunea...

Am rulat din telnet:
./wczone utilizator parola >> /dev/null & .. pare-mi-se cu succes, pt ca dupa rulare apare ceva de genul: "gethostbyname: Success". Din pacate insa din clientul de Windows, niciun succes. Ma gandesc ca poate nu sunt bune comenzile mele din iptables:
iptables -t mangle -I PREROUTING -i vlan1 -j TTL --ttl-set 10
iptables -t mangle -I POSTROUTING -o vlan1 -j TTL --ttl-set 128.
De asemenea am Static IP pt extern. Ar trebui pus DHCP si spre c-zone pt ca sa functioneze scriptul wczone? P.S. Routarea nu mai merge nici cu clientul vechi de czone :(

wickedProgrammer spunea...

Nu e configurat bine... Uite aici un tutorial. Daca dai acolo comenzile atunci cand se restarteaza routerul (cade curentul) pierzi toate setarile. Pe WAN pune IP static.

Anonim spunea...

Am fost eu neatent - era parola gresita. :)

Stringul HTTP nu e identic, cel putin nu cu varianta pe care am descarcat-o acum de pe acces.czone.ro si decodata cu unul din serviciile web care se ocupa cu asa ceva. Ei folosesc HTTP/1.1, voi 1.0. Deocamdata nu se uita nimeni pe acolo, dar teoretic serverul poate fi setat sa nu accepte decat conexiuni 1.1.

Eu unul am pus executabilul in /usr/sbin ca sa il pot apela cu "wczone" simplu si am pus in /etc/init.d/S40networking comanda de lansare, DUPA toate setarile alea de activare a interfetelor si asa mai departe. In felul asta e lansat imediat dupa ce se porneste reteaua.

Anonim spunea...
Acest comentariu a fost eliminat de administratorul blogului.
Anonim spunea...

cu varianta dinamica primesc eroarea:

Segmentation fault


P.S. Rog adminul sa stearga in postul anterior liniile de credentiale pentru logare :) Stupid me! Oricum le voi schimba :)

wickedProgrammer spunea...

S-ar putea sa fie un bug in wczone. Am sters cu totul postul tau, nu am putut sa il editez. Daca tot iti schimbi parola sa incerci si cu parola noua, poate o sa mearga. O sa incerc sa gasesc bug-ul.

Anonim spunea...

O problema si la mine , am incercat cu un router linux slack 12,
root@w222:/opt# ./wczone1
-bash: ./wczone: cannot execute binary file
asta-i un wczone static . Ar mai trebui facut ceva in afara de download si de "chmod +x wczone" ?
Multumesc

Anonim spunea...

Salut,
La rularea scriptului primesc mesajul
gethostbyname: Success
desi din cate am inteles ar trebui sa primesc un mesaj de genul MESSAGE=CONNECTED
Topologie:
Am un router care face rutarea si incrementarea TTL-ului + un linux in spate pe care ar trebui sa ruleazw wczone.
Fac asta deoarece pe router nu a mers aplicatia si singura solutie a ramas sa o rulez pe linux-ul din spatele routerului.
Help please
Multumesc

Anonim spunea...

doar ce am bagat wczone static pe un wl500 gp v2 ( cu ddwrt 2.4 ).
merge de minune.
10x pt aplicatie.

Anonim spunea...

@wickedProgrammer & Mihai - Multam mult pt programel si executabilele pt OpenWRT.

Router: Asus WL-500g Premium v2
Firmware: Koppel 1.7 (Oleg 1.9.2.7-10 cu suport pt modemuri USB si driver wifi actualizat si stabil pt modelul meu de router).

Am incercat sa rulez executabilul compilat static, dar la rulare am urmatorul output:
HTTP/1.1 200 OK
...
Connection: close

Content-Type: ...

YOURIP=<< IPul meu >>
Result=<< un sir cu aprox toate caracterele ASCII posibile :) >>

Nu exista nicio problema legata de firewall, configurare router etc pt ca in marja aceea de aprox 10-15 minute (dupa ce am realizat autentificarea pe unul din calculatore si trec cablul CZone in portul WAN al routerului) pot partaja i-net'ul pe toate calculatoarele (atat wirred cat si wireless). Asa cum explica si "mo" intr-un post anterior, de ceva timp clientul tb rulat pe router pt a partaja i-net'ul.

Mai mult ca sigur problema sta in toolchainul si librariile utilizate de fw Oleg (http://oleg.wl500g.info/). Toolchainul utilizat de fw Oleg este bazat pe uClibc 0.9.19 (de asemenea, nu utilizeaza "libgcc" din cate am inteles).

Rugamintea mea se adreseaza catre cei care au compilat deja "wczone" dinamic si/sau static pt fw Oleg (versiune >= 1.9.2.7-4, cu uClibc 0.9.19) sa urce executabilele (in cazul dinamic, inclusiv libraria "libmcrypt").

Multumesc anticipat pentru ajutor, as economisi o groaza de timp (creat cross-compiler pt mips-linux cu uClibc, build pt librariile uClibc, libmcrypt, libm, etc).

Kox

Anonim spunea...

Am recompilat "libmcrypt-2.5.7" si "wczone" cu toolchain-ul folosit de Oleg bazat pe uClibc-0.9.19 folosind instructiuniile de configurare a mediului pt cross-compiler (ignorand partea de recompilare a firmware-ului).

Executabilele, link-ate dinamic sau static, au acelasi rezultat la rulare cu un hang dupa afisarea mesajului "Result=[ diferite caractere ]":
...
Connection: close
Content-Type: ...

YOURIP= [ IP-ul czone ]
Result= [ diferite caractere ]
[hang/stale]

Firewall-ul din iptables este mai mult decat permisiv. Ma indoiesc ca au schimbat ceva in modul de autentificare.

@Mihai sau wickedProgrammer - toolchain-ul utilizat pt compilare wczone.OpenWRT.* este bazat pe un uClibc > 0.9.19? (alta problema decat uClibc nu vad)

A reusit cineva sa ruleze vreun executabil sau sa compileze pt Oleg (>= 1.9.2.7-4)?

Multumesc anticipat,
Kox (Andrei)

wickedProgrammer spunea...

Kox,
Cred ca este un bug in aplicatia mea. Mi-au mai spus si alti oameni care au rulat pe x86.. aceeasi problema. Cred ca e de la semnele non-alfanumerice din utilizator / parola. Scuze pt bug, nu te enerva... o sa ma ocup de el in curand.

Wicked

Kox spunea...

Wicked,
Multam' mult pt reply; nu am cum sa ma enervez, doar tu ai facut un efort si ai scris codul.
Daca pot sa te ajut, te rog sa imi spui. Totusi, in user/pass nu am caractere non-alfanumerice; este posibil sa fie in alta parte problema.

Script-ul php czone este cel de aici , banuiesc. O sa fac si eu un review pe codul lor.

Dupa ce avem "wczone" fixat, pot compila executabilele pt Oleg (>= 1.9.2.7-4, cu uClibc-0.9.19) si, evident, ti le pot trimite sa le publici aici.

Cheers,
- Kox

Anonim spunea...

dar nu puteti sa le spuneti provider-ului ca sunteti superstitiosi si ca vreti sa va schimbati userul si parola ? :)

Kox spunea...

Wicked,

Am rezolvat problema. Am scris de la zero un programel pe baza scriptului de conectare CZone (deZend'uit). Comunicarea se face prin socketi SSL (cu OpenSSL) pe portul 443 (https), header request-ul trimis este HTTP 1.1, se afiseaza si celelalte posibile raspunsuri din partea server-ului CZone, iar functia de codificare in baza 64 este preluata din sursele de PHP 5.

Programelul merge fara probleme; testat pe linux (Ubuntu 8.10) si pe router cu firmware Oleg (uClibc 0.9.19 - urmeaza sa recompilez si pt uClibc 0.9.28).

Partea mai putin pozitiva este ca executabilele compilate static sau dinamic sunt considerabil mai mari fata de "wczone"; sunt necesare in plus librariile libssl, libcrypto si libdl. O sa incerc sa elimin SSL, nu vad de ce nu ar merge direct pe portul 80 (http).
Imediat ce am o forma finala optimizata a programelului o sa postez sursele.

--
Kox

Victor spunea...

Salut,

Am si eu o problema...sper ca nu e iremediabila :D. Am un router Linsys WRT54GS v7. Din pacate are memorie f mica si nu merge pus pe el decat DD-WRT versiunea micro. Dar problema este ca aceasta versiune nu are SSH, ci doar telnet. Intrebarea mea este cum as putea sa uploadez fisierul de la CZone pe router?Multumesc anticipat

V

wickedProgrammer spunea...

Salve Victor,
DD-WRT are si el SSH, trebuie doar sa il activezi. Intra pe undeva prin meniu pe la Services, cauta sshd si da-i enable, save, apply changes.
O alta optiune e sa il pui pe un server http sau ftp si sa il iei cu wget (fiind conectat prin telnet).
In 15 minute postez versiunea 2 a programului, care elimina niste buguri.

wickedProgrammer spunea...

rectific ce am spus mai sus, DD-WRT micro intr-adevar nu are sshd, deci solutia ar fi sa folosesti wget.

Victor spunea...

Multumesc frumos pentru raspunsul prompt. Din pacate insa varianta micro a DD-WRT nu are SSH (toate celelalte au: http://www.scorpiontek.org/portal/content/view/70/32/), iar singurele comenzi disponibile prin telnet sunt:
. : [ [[ alias bg break cd chdir command continue eval exec exit export false fg getopts hash help jobs kill let local pwd read readonly return set shift source test times trap true type ulimit umask unalias unset wait. Oare se poate face ceva? Mersi frumos inca o data

Victor spunea...

Hm...acum am testat comanda wget...vad ca nu da eroare (deci pare ca ar cunoaste-o). Ma poti ajuta te rog sa imi spui cum se foloseste pentru a scoate fisierul de pe un FTP? fisierul o sa il pun in radacina pe FTP-ul de pe calc meu.
Mersi frumos inca o data

wickedProgrammer spunea...

Am postat versiunea 2 a WCZONE care elimina niste buguri.

Victor, google is your best friend, ask him.

Kox spunea...

Wicked,

Nu am testat wczone vs2 dar sunt sigur ca rezolva problemele existente initial. Pentru referinta, daca totusi mai intampina cineva probleme, am urcat sursele programelului scris de mine si executabilele compilate pt Linux 32-biti:
http://kzone-wczone.blogspot.com/

Am urcat ambele variante, atat cea simpla, fara SSL, cat si cea cu socketi SSL.
Imediat ce imi fac timp o sa compilez executabilele wczone vs2 si kzone pt Oleg.

Weekend placut,
Kox

Victor spunea...

Salut din nou,

Am gasit cum sa pun fisierul in /tmp, merge perfect dar din pacate nu pot sa il copiez in /sbin, deoarece in acel dir nu am drepturi de scriere (nu pot nici macar sa creez un director :( ).In /tmp merge perfect. Stiu ca sunt varza, dar ma poti ajuta si pe mine te rog sa imi spui cum imi pot da drepturi pe /sbin (sunt conectat cu root#). Multumesc frumos, sper sa nu fiu exasperant dar am cautat mult pe net si nu gasesc nici un articol despre asa ceva :(

wickedProgrammer spunea...

Victor, da-mi un mail cu un user de YM sau gtalk ca sa vb live.
wickedprogrammer@gmail.com

Anonim spunea...

Salut baieti acum am descoperit si eu blog-ul asta ,am si eu o problema am un router asus wl-500G premium v2 am pus pe el Tomato_1_21.7 toate bune si frumoase a mers netu pe tot ce am eu acum cu aplicatia deschisa doar pe unul din ele,da acum am schimbat windows-ul pe desktop si nu mai merge cu aplicatia noua si sa stau cu laptoul pornit ca sa pot avea net pe desktop e destul de enerveant,am citit pe aici si e interesant ce zice dar m-ati pierdut pe drum ,mai exact care ma ajuta si pe mine sa pun wczone pe routerul meu ,fac cinste

wickedProgrammer spunea...

da-mi un mail cu id de mess sau gtalk domnule anonim, altfel cum sa te ajut? ;)

sdmbist spunea...

Pentru versiunea kzone /Oleg 1.9.2.7-4 am observat ca kzone crapa dupa un timp...la mine am observat dupa 24 de ore.
Pentru asta un prieten (smocanu) a facut un scriptuletz simplu care verifica la 10 minute kzone si il porneste daca e crapat.Pun aici scriptul pt ca e mic si folositor :)
------------------------------
#!/bin/sh

if [ "X$1" != "X" ];then
kill -9 $1
fi

sleep 303
if ! pidof kzone >> /dev/null ;then
/usr/local/sbin/kzone usr pas >> /dev/null &
fi

# rulam din nou script-ul curent
pid=$$
$0 $pid
-----------------------------------
kzone si scriptul de fatza functioneaza pe router-ul meu Asus WL-500 GP .
Eu am pus scriptul sa ruleze din /usr/local/sbin/post-boot (urmat de flashfs save && flashfs commit && flashfs enable && reboot).

Anonim spunea...

Salut wickedProgrammer,

Vad ca esti cel mai documentat la acest capitol...
Am si eu un ruter ce necesita atentia ta, contra cost normal..

Daca ma poti ajuta ma gasesti la mi_3zu at yahoo . com sau z_crys at hotmail . com