działa ![]()
dziękuje bardzo.
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
eko.one.pl → Posty przez oneiro
działa ![]()
dziękuje bardzo.
Racja, tworzą się zmienne, ale ciągle mam problem ze loginem:
#!/bin/sh
if [ "$REQUEST_METHOD" == "POST" ]; then
read -t 3 QUERY_STRING
eval $(echo "$QUERY_STRING"|awk -F'&' '{for(i=1;i<=NF;i++){print $i}}')
fi
aaa=$QUERY_STRING
if [ "$REQUEST_METHOD" == "POST" ]; then
read -t 3 QUERY_STRING
eval $(echo "$QUERY_STRING"|awk -F'&' '{for(i=1;i<=NF;i++){print $i}}')
fi
bbb=$QUERY_STRING
echo "Content-type: text/plain"
echo ""
if [ "$login" == "root" ]; then
echo "=================LOGIN OK==============="
fi
if [ "$passwd" == "12345" ]; then
echo "=================HASLO OK==============="
fi
echo "========"
echo "Login: $login"
echo "Passwd: $passwd"
echo "oryginal query aaa :$aaa"
echo "oryginal query bbb :$bbb"wynik na root/12345
=================HASLO OK===============
========
Login: root
Passwd: 12345
oryginal query aaa :login=root
oryginal query bbb :passwd=12345Cezary, Twoje evale robią
login=root
passwd=12345
a sedy
root
12345
i takie właśnie chce mieć zmienne.
Na pewno coś jest w SEDach, w domu będę myślał.
Po modyfikacji pozornie działa, ale musi jakiś niewidoczny znak jeszcze wrzucać w ciąg loginu, bo nie działa jakbym chciał:
#!/bin/sh
if [ "$REQUEST_METHOD" == "POST" ]; then
read -t 3 QUERY_STRING
eval $(echo "$QUERY_STRING"|awk -F'&' '{for(i=1;i<=NF;i++){print $i}}')
fi
login=`echo "$QUERY_STRING" | sed -n 's/^.*login=\([^&]*\).*$/\1/p' | sed "s/[%20+]/ /g"`
#pass= `echo "$QUERY_STRING" | sed -n 's/^.*passwd=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
aaa=$QUERY_STRING
if [ "$REQUEST_METHOD" == "POST" ]; then
read -t 3 QUERY_STRING
eval $(echo "$QUERY_STRING"|awk -F'&' '{for(i=1;i<=NF;i++){print $i}}')
fi
bbb=$QUERY_STRING
#login=`echo "$QUERY_STRING" | sed -n 's/^.*login=\([^&]*\).*$/\1/p' | sed "s/[%20+]/ /g"`
pass=`echo "$QUERY_STRING" | sed -n 's/^.*passwd=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
echo "Content-type: text/plain"
echo ""
echo "Login: $login"
echo "Passwd: $pass"
echo "oryginal query aaa :$aaa"
echo "oryginal query bbb :$bbb"
if [ "$login" == "root" ]; then
echo "=================LOGIN OK==============="
fiWynik dla testowego hasła "12345" i login "root":
Login: root
Passwd: 12345
oryginal query aaa :login=root
oryginal query bbb :passwd=12345Warunek nie działa, czyli login musi mieć jakieś niewidoczne znaki dodane.
co do stylu to racja, dzięki za uwagę (dopieoro przyswajam więdzę w temacie HTMLa).
Co do głównego pytania będę testował.
root@OpenWrt:/www/skrypt/cgi-bin# cat ps.sh
#!/bin/sh
if [ "$REQUEST_METHOD" == "POST" ]; then
read -t 3 QUERY_STRING
eval $(echo "$QUERY_STRING"|awk -F'&' '{for(i=1;i<=NF;i++){print $i}}')
fi
hjk=$QUERY_STRING
login=`echo "$QUERY_STRING" | sed -n 's/^.*login=\([^&]*\).*$/\1/p' | sed "s/[%20+]/ /g"`
pass=`echo "$QUERY_STRING" | sed -n 's/^.*passwd=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
echo "Content-type: text/plain"
echo ""
echo "========"
echo "Serwer Software = $SERVER_SOFTWARE"
echo "Serwer name= $SERVER_NAME"
echo "Gateway Inteface= $GATEWAY_INTERFACE"
echo "Serwer prokolo = $SERVER_PROTOCOL"
echo "Serwer post = $SERVER_PORT"
echo "request method = $REQUEST_METHOD"
echo "path info = $PATH_INFO"
echo "path translated = $PATH_TRANSLATED"
echo "script name = $SCRIPT_NAME"
echo "query string = $QUERY_STRING"
echo "remonte host = $REMOTE_HOST"
echo "remonte addr = $REMOTE_ADDR"
echo "auth type = $AUTH_TYPE"
echo "remonte user = $REMOTE_USER"
echo "remonte ident = $REMOTE_IDENT"
echo "content type = $CONTENT_TYPE"
echo "content lenght = $CONTENT_LENGTH"
echo "http accept = $HTTP_ACCEPT"
echo "http user agent = $HTTP_USER_AGENT"
echo "======="
echo "Login: $login"
echo "Passwd: $pass"
echo "oryginal query: $hjk"
if [ "$pass" != "XXXX" ] && [ "$login" == "YYY" ]; then
KOD WŁAŚCIWY - DZIAŁA
else
echo "Bledy login lub haslo"
fi
exit 0root@OpenWrt:/www/skrypt# cat open.html
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Polecenie</title>
<form action="/cgi-bin/ps.sh" method="post" enctype="text/plain" onreset="if (!confirm('Czy na pewno chcesz wyczyscic caly formularz?')) return false">
<div>
<fieldset>
<legend align="center">Formularz do wypelnienia open</legend>
<table align="center" bgcolor="silver">
<tr>
<td>
Podaj login: input type="text" name="login">
</td>
</tr>
<tr>
<td>
Podaj haslo: input type="password" name="passwd">
</tr>
<tr>
<td colspan="2" align="center">
input type="submit" value="Wyslij" />
input type="reset" value="Resetuj" />
<td>
</tr>
<table>
</div></form>
</fieldset>
</head>Cezary, jednak coś nie tak, post podaje mi tylko pierwszy człon, drugiego z hasłem nie ma. Otrzymuje tylko (echo $QUERY STRING):
query string = login=rootCezary, dziękuje działa (co prawda w SH będzie to wyglądać tak)
if [ "$REQUEST_METHOD" == "POST" ]; then
read -t 3 QUERY_STRING
eval $(echo "$QUERY_STRING"|awk -F'&' '{for(i=1;i<=NF;i++){print $i}}')
fiAle dlaczego trzeba tak kombinować?
Cześć,
Mam prostą stronę, podaje login i hasło i wysyłam je do skryptu SH (w ciągach input type nie ma znaku "<" bo forum nie przyjmuje wiadomości).
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
<title>Polecenie</title>
<form action="/cgi-bin/ps.sh" method="get">
<div>
<fieldset>
<legend align="center">Formularz do wypełnienia </legend>
<p align="center">open</p>
<table align="center" bgcolor="silver">
<tr>
<td>
Podaj login: input type="text" name="login">
</td>
</tr>
<tr>
<td>
Podaj haslo: input type="password" name="password">
</tr>
<tr>
<td colspan="2" align="center">
input type="submit" value="Wyslij" />
input type="reset" value="Resetuj" />
<td>
</tr>
<table>
</div></form>
</fieldset>
</head>Ale metoda POST nie wysyła danych, natomast GET tak.
Skąd wiem, co wysyłam? Bo skypt SH to:
#!/bin/sh
login=`echo "$QUERY_STRING" | sed -n 's/^.*login=\([^&]*\).*$/\1/p' | sed "s/[%20+]/ /g"`
pass=`echo "$QUERY_STRING" | sed -n 's/^.*password=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
echo "Content-type: text/plain"
echo ""
echo "========"
echo "Serwer Software = $SERVER_SOFTWARE"
echo "Serwer name= $SERVER_NAME"
echo "Gateway Inteface= $GATEWAY_INTERFACE"
echo "Serwer prokolo = $SERVER_PROTOCOL"
echo "Serwer post = $SERVER_PORT"
echo "request method = $REQUEST_METHOD"
echo "path info = $PATH_INFO"
echo "path translated = $PATH_TRANSLATED"
echo "script name = $SCRIPT_NAME"
echo "query string = $QUERY_STRING"
echo "remonte host = $REMOTE_HOST"
echo "remonte addr = $REMOTE_ADDR"
echo "auth type = $AUTH_TYPE"
echo "remonte user = $REMOTE_USER"
echo "remonte ident = $REMOTE_IDENT"
echo "content type = $CONTENT_TYPE"
echo "content lenght = $CONTENT_LENGTH"
echo "http accept = $HTTP_ACCEPT"
echo "http user agent = $HTTP_USER_AGENT"
echo "======="Wynik działania dla POST to:
========
Serwer Software = lighttpd/1.4.30
Serwer name= xxxxxxx.xxx
Gateway Inteface= CGI/1.1
Serwer prokolo = HTTP/1.1
Serwer post = 81
request method = POST
path info =
path translated =
script name = /cgi-bin/ps.sh
query string =
remonte host =
remonte addr = xx.xx.xx.xx
auth type =
remonte user =
remonte ident =
content type = application/x-www-form-urlencoded
content lenght = 27
http accept = text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
http user agent = Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36
=======Czyli query string jest pusty. Jak pisałem, dla GET działa.
Testowałem dla HTTP oraz HTTPS, dla lighttpd oraz uhttpd, na róznych przeglądarach, ciągle to samo. Jakieś sugestie?
Pozdrawiam, Krzysiek
Cześć,
Zadanie sztuki dla sztuki. Czy bez restartu da się ustawić rootfs na ext_root zlokalizowanego na pendrive?
Wszystko skonfigurowane, wystarczy zrobić reboot i będzie działać, ale pytanie sztuki dla sztuki - da się przepiąć bez restartu systemu?
Pozdrawiam, Krzysiek
Dzięki, nie ma getmaila w repozytorium (u mnie dystrybucja AA), ale znalzałem takie coś
http://eko.one.pl/forum/viewtopic.php?id=1435
na temat fetchmail + procmail + zapisywanie na nośnik e-maili.
Niestety, po konfiguracji nie działa, może ktoś pomoże.
Utworzyłem .fetchmailrc i dla konta na wp mam takie coś
pool pop3.wp.pl protocol pop3 port 995 username "UŻYTNIK" password "HASŁO" sllcertck
mda "/usr/bin/procmail -f -F% -d root"potem daję
fetchmail -vvv (czasami z opcja a) i mam, że
...... pool started
Trayning to connect to 212.77.101.140/995....connected
.... pool timeout
... error while fetching USERNAME@pop3.wp.plKtoś może pomoże z konfiguracją do wp?
Witam,
Jak na OpenWrt ściągać pocztę np. w konta na WP/ONET/GMAIL/Inny do pliku (najlepiej z zachowanym formatowaniem).
Od czego zacząć?
Chcę zrobić niezależne archwimum wiadomości w stosunku do poczty na koncie e-mail.
Pozdrawiam, Krzysiek
DObra, był bąłd w przykładzie poniższe działa
#!/bin/bash
r=$1
#usuwam spacje
r=$(echo $1 | sed 's/ /_/g')
#usuwam znaki specjalne PL
#r=$(echo $r | sed 's/Ą/A/g' | sed 's/Ć/C/g' | sed 's/Ę/E/g' | sed 's/Ł/L/g' | sed 's/Ń/N/g' | sed 's/Ó/O/g' | sed 's/Ś/S/g' | sed 's/Ź/Z/g' | sed 's/Ż/Z/g' | sed 's/ą/a/g' | sed 's/ć/c/g' | sed 's/ę/e/g' | sed 's/ł/l/g' | sed 's/ń/n/g' | sed 's/ó/o/g' | sed 's/ś/s/g' | sed 's/ź/z/g' | sed 's/ż/z/g' |sed 's/@/_at_/g' | sed 's/(/_/g' | sed 's/)/_/g' )
r=$(echo $r | sed -e 's/Ą/A/g; s/Ć/C/g ;s/Ę/E/g ;s/Ł/L/g ;s/Ń/N/g ;s/Ó/O/g; s/Ś/S/g ; s/Ź/Z/g ; s/Ż/Z/g ; s/ą/a/g ; s/ć/c/g ;s/ę/e/g;s/ł/l/g ; s/ń/n/g ;s/ó/o/g ; s/ś/s/g ; s/ź/z/g ; s/ż/z/g ;s/@/_at_/g ; s/(/_/g ; s/)/_/g; s/,/_/g; s/~/_/g; s/%/_/g; s/\[/_/g; s/\]/_/g' )
if [ "$1" != "$r" ]
then
if [ ! -f "$r" ]; then
echo "$1" '<<>>' "$r"
mv "$1" "$r"
else echo "Plik istnieje $r"
fi
fi
#echo $r
exit 0Racja, nie dotyczyłem. Ale mam jakiś problem
#!/bin/bash
r=$1
#usuwam spacje
r=$(echo $1 | sed 's/ /_/g')
#usuwam znaki specjalne PL
r=$(echo $1 | sed 's/Ą/A/g' | sed 's/Ć/C/g' | sed 's/Ę/E/g' | sed 's/Ł/L/g' | sed 's/Ń/N/g' | sed 's/Ó/O/g' | sed 's/Ś/S/g' | sed 's/Ź/Z/g' | sed 's/Ż/Z/g' | sed 's/ą/a/g' | sed 's/ć/c/g' | sed 's/ę/e/g' | sed 's/ł/l/g' | sed 's/ń/n/g' | sed 's/ó/o/g' | sed 's/ś/s/g' | sed 's/ź/z/g' | sed 's/ż/z/g')
echo '>>>' "$r" '<<>>' "$1" '|||' "$r" '<<<';
mv "$1" "$r"
exit 0Na przykładzie jednego katalogu mam:
root@omv:/media/6acff0b7-3a30-4c39-839a-76abecf91c04/backup/wspolny/Zdjęcia/Nasze/2006_Zdjecia_od_Krzysika# find -exec /zmiana.sh "{}" \;
>>> . <<>> . ||| . <<<
mv: `.' i `./.' to ten sam plik
>>> ./DSCN0995.JPG <<>> ./DSCN0995.JPG ||| ./DSCN0995.JPG <<<
mv: `./DSCN0995.JPG' i `./DSCN0995.JPG' to ten sam plik
>>> ./Krzysiek Oneiro.bmp <<>> ./Krzysiek Oneiro.bmp ||| ./Krzysiek Oneiro.bmp <<<
mv: `./Krzysiek Oneiro.bmp' i `./Krzysiek Oneiro.bmp' to ten sam plik
>>> ./DSCN0983.JPG <<>> ./DSCN0983.JPG ||| ./DSCN0983.JPG <<<
mv: `./DSCN0983.JPG' i `./DSCN0983.JPG' to ten sam plik
>>> ./Thumbs.db <<>> ./Thumbs.db ||| ./Thumbs.db <<<
mv: `./Thumbs.db' i `./Thumbs.db' to ten sam plik
>>> ./Krzys Ilo 1.jpg <<>> ./Krzys Ilo 1.jpg ||| ./Krzys Ilo 1.jpg <<<
mv: `./Krzys Ilo 1.jpg' i `./Krzys Ilo 1.jpg' to ten sam plik
>>> ./DSCN0965.JPG <<>> ./DSCN0965.JPG ||| ./DSCN0965.JPG <<<
mv: `./DSCN0965.JPG' i `./DSCN0965.JPG' to ten sam plik
>>> ./aacc.txt <<>> ./aacc.txt ||| ./aacc.txt <<<
mv: `./aacc.txt' i `./aacc.txt' to ten sam plikWydaje się, że znikły polski litery, ale ciągle mam problem ze spacjami.
O super za przykład.
A mogę jeszcze prosić o podpowiedź, jak "chodzić" po katalogach, bo przykład uruchomię na bieżącym katalogu, a w sumie mam około 600 katalogów i wolałbym, aby automat przeszukał drzewo katalogów.
Wykonam go na Debianie, myślę o BASH/SH
Witam,
Potrzebuję napisać skrypt, który zamieni wszystkie polskie litery na nie-polskie (tzn. Ł-->L Ą-->A Ń-->N itp) oraz spacje zastąpi podkreśleniem "_".
Potrzebuję zmieni kilkadziesiąt tys. plików (zdjęć), bez tego webowa galeria nie chce ich przyjąć.
Pętlę for mogę zrobić na jednym katalogu, ale chciałbym zapuścić skrypt na główmy katalogu i aby "zszedł" do końca i pomieniał nazwy plików.
Wyobrażam sobie, że odczytuje nazwę pliku do zmiennej, obrabiam string (jeszcze nie wiem jakim polecniem) oraz zmieniam nazwę pliku na nowy.
Nazwy katalogów zakładam niezmienne.
Pozdrawiam, Krzysiek
@Cezary,
Generalnie działa, ale chciałbym po pewnym czasie zamkną połączenie, a poniższe powoduje, że strona www "kreci się" czekając na zakończenie.
kod otwierający port
sleep 60
kod zamykający port Jakoś nie mam pomysłu na zakończanie tego.
A da się zrobić tak, aby pytało o login/hasło przed wejściem na stronę?
@g0f3r
Jakbyś miał chęć, to chętnie zobaczę Twoje rozwiązanie
Skro tak jest to w domu powalczę, dam znać....
Ok, prawdopodobnie zadziała, ale częściowo, bo skąd knock będzie wiedziało, skąd uderzam (jakie adres IP)?
Zauważ, że otwieram port tylko dla wskazanego adresu IP (czyli z którego uruchamiam przeglądarkę www - w moim przypadku adres IP zewnętrznego pracodawcy).
To od początku.
1. Teraz działa na routerze usługa knockd i jestem zadowolony z jego działania
2. Program, który wysyła pakiety (tzw. puka do routera) pod OS Widnows nazywa się knock.exe (pod *inux knock)
3. W pracy program knock.exe nie działa. Prawdopodobnie jest zablokowany na wysyłanie danych (jakieś reguły domenowe windowsa blokują to ewentualnie firewall - nie mam jak tego sprawdzić)
4. O dziwo w pracy działa putty, może dlatego, że uderzam na port 22? (wiem, bo jak permanentnie otworzę port na świat to loguję się w pracy do routera)
5. Aby wbić się router muszę otworzyć port na routerze
6. Stąd pomysł, aby wywołać (nowy?) skrypt SH poprzez stronę www, odpowiedzialny za otwarcie portu (i jego zamknięcie po zadanym czasie)
7. Skrypt SH mogę napisać/zmodyfikować pod siebie jak chcę (coś tam ogarniam
)
8. Strony www/php nie zbuduje, bo nie mam żadnego doświadczenia, stąd prośba o kod źródłowy pliku strona.html lub strona.php, który umieszczę w katalogu root-www
PROFIT - mam dostęp do routera via SSH w pracy zachowując funkcjonalność otwierania portów na życzenie (poprzez przycisk na stornie www).
Moje obecne rozwiązanie (knockd) jest takie, że w pliku /etc/knockd.con po wystukaniu odpowiedniej sekwencji uruchamia się skrypt, kod odpowiedzialny za to:
/opensshport %IP%Adres IP mam niejako "gratis", samo knockd je podaje.
Kod skryptu /opensshport to polecania IPTABLES plus zapisanie adresu IP do pliku
#!/bin/sh
iptables -I INPUT -p tcp -i pppoe-wan --dport 22 -s $1 -j ACCEPT
echo $1>/ip
exit 0Później na podstawie adresu w pliki /ip uruchamiam inne skrypy w putty, które dają mi dostęp np. VPN.
Oczywiście mam jeszcze 2-gi skrypt zamykający porty uruchamiany też przez knockd po określonym czasie po uruchomieniu otwarcia portu.
Chodzi o to, że adres IP z którego wbijam się do routera nie jest stały.
Byłbym wdzięczny
Może inaczej, teorie (chyba znam).
1. Miej uruchomioną usługę PHP oraz WWW - MAM
2. Utwórz skrypt bash przyjmujący parametry - MAM
3. Zrób stronę www/php - NIE MAM
Właśnie rozchodzi się i www/php - jestem kompletnie zielony w tych sprawach.
Witam,
Normlanie otwieram port poprzez knockd, który uruchamia odpowiedni skrypt, ale w mojej pracy nie mogę zapukać (prawdopodobnie knock.exe jest zablokowany na wysyłanie danych w sieć).
Wobec tego chciałbym utworzyć prostą stronę www z guzikiem, który będzie uruchamiał skrypt z knockd. Czy mogę prosić o pomoc.
Dodam, że port otwiera się tylko na pukający IP na określony czas, wobec tego rozwiązanie powinno być na tyle inteligentne, aby udało się odczytać adres IP z którego loguję się do routera (do www).
Ewentualnie jak obejść problem.
Pozdrawiam, Krzysiek
eko.one.pl → Posty przez oneiro
Forum oparte o PunBB, wspierane przez Informer Technologies, Inc