Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [cURL] formularz i ukryty token
magu112
post 19.12.2010, 15:46:46
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 2
Dołączył: 22.07.2009

Ostrzeżenie: (0%)
-----


Witam,
Chcę wysłać formularz lecz posiada on ukryty token który po odświeżeniu strony się zmienia a trzeba go też wysłać smile.gif

Tak wygląda token (przykład):
  1. <input name="thxytbwh" type="hidden" value="97a74bf0189ca6444e4ecbc1e8825da2" />

po odświeżeniu strony zmienia się wartość 'name', value jest stały bo to hash

i mam funkcję która by pobrała ten token, tylko jak go pobrać i wysłać bez przeładowania strony?
  1. preg_match("|name=\"(.+?)\".+ value=\"97a74bf0189ca6444e4ecbc1e8825da2\"|", $return, $name_login_hash);


mam coś takiego, z tym że strona się przeładowuje i token się zmienia ;| i nie wiem jak to obejść
  1. $send = new cURL();
  2. $send->get('http://' . $_POST['url'] . '/?action=forgo');
  3.  
  4. // pobieram hasha [jest zakodowany na początku strony w script]
  5. preg_match("|var login_hash = '(.+?)';|", $return, $login_hash);
  6.  
  7. // pobieram name hasha [token]
  8. preg_match("|name=\"(.+?)\".+ value=\"" . $login_hash[1] . "\"|", $return, $name_login_hash);
  9.  
  10. $send->post('http://' . $_POST['url'] . '/?action=forgo', 'subject='.$_POST['subject'].'&text='.$_POST['text'].'&' . $name_login_hash[1] .'='. $login_hash[1].'&send=send');



a przed tym mam jeszcze logowanie na stronie
  1. $login_site = new cURL();
  2. $login_site->get('http://' . $_POST['url']);
  3. $login_site->post('http://' . $_POST['url'], "login=" . $_POST['login'] . "&password=" . $_POST['password'] . "&submit=submit");



funkcja cURL
  1. class cURL {
  2. var $headers;
  3. var $user_agent;
  4. var $compression;
  5. var $cookie_file;
  6. var $proxy;
  7. function cURL($cookies=TRUE,$cookie='cookies.txt',$compression='gzip',$proxy='') {
  8. $this->headers[] = 'Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg';
  9. $this->headers[] = 'Connection: Keep-Alive';
  10. $this->user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13';
  11. $this->compression=$compression;
  12. $this->proxy=$proxy;
  13. $this->cookies=$cookies;
  14. if ($this->cookies == TRUE) $this->cookie($cookie);
  15. }
  16. function cookie($cookie_file) {
  17. if (file_exists($cookie_file)) {
  18. $this->cookie_file=$cookie_file;
  19. } else {
  20. fopen($cookie_file,'w') or $this->error('The cookie file could not be opened. Make sure this directory has the correct permissions');
  21. $this->cookie_file=$cookie_file;
  22. fclose($this->cookie_file);
  23. }
  24. }
  25. function get($url) {
  26. $process = curl_init($url);
  27. curl_setopt($process, CURLOPT_HTTPHEADER, $this->headers);
  28. curl_setopt($process, CURLOPT_HEADER, 0);
  29. curl_setopt($process, CURLOPT_USERAGENT, $this->user_agent);
  30.  
  31. if ($this->cookies == TRUE) curl_setopt($process, CURLOPT_COOKIEFILE, $this->cookie_file);
  32. if ($this->cookies == TRUE) curl_setopt($process, CURLOPT_COOKIEJAR, $this->cookie_file);
  33. curl_setopt($process,CURLOPT_ENCODING , $this->compression);
  34. curl_setopt($process, CURLOPT_TIMEOUT, 30);
  35. if ($this->proxy) curl_setopt($process, CURLOPT_PROXY, $this->proxy);
  36. curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);
  37. curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1);
  38. $return = curl_exec($process);
  39. curl_close($process);
  40. return $return;
  41. }
  42. function post($url,$data) {
  43. $process = curl_init($url);
  44. curl_setopt($process, CURLOPT_HTTPHEADER, $this->headers);
  45. curl_setopt($process, CURLOPT_HEADER, 1);
  46. curl_setopt($process, CURLOPT_USERAGENT, $this->user_agent);
  47. if ($this->cookies == TRUE) curl_setopt($process, CURLOPT_COOKIEFILE, $this->cookie_file);
  48. if ($this->cookies == TRUE) curl_setopt($process, CURLOPT_COOKIEJAR, $this->cookie_file);
  49. curl_setopt($process, CURLOPT_ENCODING , $this->compression);
  50. curl_setopt($process, CURLOPT_TIMEOUT, 30);
  51. if ($this->proxy) curl_setopt($process, CURLOPT_PROXY, $this->proxy);
  52. curl_setopt($process, CURLOPT_POSTFIELDS, $data);
  53. curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);
  54. curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1);
  55. curl_setopt($process, CURLOPT_POST, 1);
  56. $return = curl_exec($process);
  57. curl_close($process);
  58. return $return;
  59.  
  60. }
  61. function error($error) {
  62. echo "<center><div style='width:500px;border: 3px solid #FFEEFF; padding: 3px; background-color: #FFDDFF;font-family: verdana; font-size: 10px'><b>cURL Error</b><br>$error</div></center>";
  63. }
  64. }
Go to the top of the page
+Quote Post
Quadina
post 19.12.2010, 16:22:31
Post #2





Grupa: Zarejestrowani
Postów: 200
Pomógł: 38
Dołączył: 1.12.2010
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Ale po co Ci przeładowywanie strony? Popatrz:
1. Przegladarka pobiera strone w tym dane z tokenem
2. Wpisujesz w przegladarce dane
3. Wysyłasz na zadany w action url wszyskie dane wraz z aktualnym tokenem

Gdzie tutaj potrzeba przeładowywania?


--------------------
Warsztat: NetBeans 7.2 Beta, PHP, MySQL, PostgreSQL, Symfony (<=1.4), Diem, Java, Sieci neuronowe
Go to the top of the page
+Quote Post
magu112
post 19.12.2010, 16:47:25
Post #3





Grupa: Zarejestrowani
Postów: 47
Pomógł: 2
Dołączył: 22.07.2009

Ostrzeżenie: (0%)
-----


aha. no comments
--------
w skrócie, skrypt ma:
1. wejść na stronę formularza
2. pobrać token
2. wysłać formularz wraz z tokenem
// token za każdym odświeżeniem strony się zmienia

prosił bym o wypowiedzenie się kogoś doświadczonego

Ten post edytował magu112 19.12.2010, 16:55:46
Go to the top of the page
+Quote Post
Quadina
post 19.12.2010, 17:10:45
Post #4





Grupa: Zarejestrowani
Postów: 200
Pomógł: 38
Dołączył: 1.12.2010
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Kolego, buduje boty od najmniej 5 lat, więc pozwolisz, że zignoruje Twój komentarz o doświadczeniu.

W twoim 2 (3?) punktowym opisie nawet sam podajesz informację, że nie pobierasz tokenu dwa razy. Mówiąc jak najbardziej łopatologicznie:
1. Dostajesz formularz od urzędnika z sygnaturą
2. Wypełniasz go swoim imieniem i nazwiskiem
3. Oddajesz mu formularz

Ponowie pytanie, gdzie tutaj podwójne proszenie urzędnika o formularz z sygnaturą - innymi słowy, gdzie potrzeba pobierania formularza dwa razy?

Z tego co widzę, nie masz pojęcia o działaniu formularzy stąd prawdopodobnie bierze się Twój problem. Otóż nasze przeglądarki nie pobierają formularzy więcej niż dwa razy bo wtedy nie miało by to większego sensu. Przy wysyłaniu danych z formularza wszystko pakuje się w jeden łańcuch danych i wysyła metodą odpowiednio GET lub POST do adresu zadanego w tagu form. Tam też ląduje token o którym wspominasz - nie ma zatem żadnej potrzeby pobierania tokena wielokrotnie.


--------------------
Warsztat: NetBeans 7.2 Beta, PHP, MySQL, PostgreSQL, Symfony (<=1.4), Diem, Java, Sieci neuronowe
Go to the top of the page
+Quote Post
amii
post 19.12.2010, 18:15:24
Post #5





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

Ostrzeżenie: (0%)
-----


A nie możesz po prostu:
1. wczytać CURL-em strony bez przesyłania żadnych danych
2. pobrać ukryte i zmieniające się dane wyrażeniem regularnym
3. wczytać stronę CURL-em jeszcze raz i przesłać wszystkie kompletne dane


--------------------
gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet.
Zarabianie bez wysiłku na domenach bez ruchu: prolink.
Go to the top of the page
+Quote Post
magu112
post 19.12.2010, 18:52:56
Post #6





Grupa: Zarejestrowani
Postów: 47
Pomógł: 2
Dołączył: 22.07.2009

Ostrzeżenie: (0%)
-----


Cytat
A nie możesz po prostu:
1. wczytać CURL-em strony bez przesyłania żadnych danych
2. pobrać ukryte i zmieniające się dane wyrażeniem regularnym
3. wczytać stronę CURL-em jeszcze raz i przesłać wszystkie kompletne dane


właśnie o to chodzi że token jest już wtedy inny

żeby pobrać tokena muszę pobrać stronę łącząc się zalogowany przez curla, a żeby wysłać formularz z tokenem znów trzeba utworzyć nowe połączenie curl a wtedy token jest już inny
  1. $send = new cURL();
  2. // wczytuję stronę formularza aby pobrać tokena
  3. $send->get('http://' . $_POST['url'] . '/?action=forgo');
  4.  
  5. // pobieram hasha [jest zakodowany na początku strony w script]
  6. preg_match("|var login_hash = '(.+?)';|", $return, $login_hash);
  7.  
  8. // pobieram name hasha [token]
  9. preg_match("|name=\"(.+?)\".+ value=\"" . $login_hash[1] . "\"|", $return, $name_login_hash);
  10.  
  11. // wysyłam formularz wraz z pobranym tokenem
  12. $send->post('http://' . $_POST['url'] . '/?action=forgo', 'subject='.$_POST['subject'].'&text='.$_POST['text'].'&' . $name_login_hash[1] .'='. $login_hash[1].'&send=send');
Go to the top of the page
+Quote Post
Rid
post 19.12.2010, 19:16:00
Post #7





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

Ostrzeżenie: (0%)
-----


Cytat(magu112 @ 19.12.2010, 16:47:25 ) *
aha. no comments
--------
w skrócie, skrypt ma:
1. wejść na stronę formularza
2. pobrać token
2. wysłać formularz wraz z tokenem
// token za każdym odświeżeniem strony się zmienia

prosił bym o wypowiedzenie się kogoś doświadczonego

Jedyna co mi przychodzi na myśl to AJAX

Ten post edytował Rid 19.12.2010, 20:52:13
Go to the top of the page
+Quote Post
Quadina
post 19.12.2010, 21:01:06
Post #8





Grupa: Zarejestrowani
Postów: 200
Pomógł: 38
Dołączył: 1.12.2010
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Cytat
żeby pobrać tokena muszę pobrać stronę łącząc się zalogowany przez curla, a żeby wysłać formularz z tokenem znów trzeba utworzyć nowe połączenie curl a wtedy token jest już inny


Pytam się po raz trzeci. Po co pobierasz jeszcze raz formularz zamiast go wysłać? Innymi słowy, po co pobierasz formularz dwa razy? Przecież to jest zupełnie bezsensowne. Pomyśl jak robi to przeglądarka, pobiera dane wyświetla ci je, uzupełniasz i potem wysyłasz już przygotowany formularz... Nie wiem czemu uczepiłeś się tego podwójnego pobierania, a ja już nie wiem jak Ci to wytłumaczyć, że to nie jest problem z formularzem, ale z logiką tego zadania.

Cytat
Jedyna co mi przychodzi na myśl to AJAX

Nie wiem po co w tym wszystkim miałby być AJAX, do wypełnienia formularza po stronie przeglądarki? To zaraz Ci autor tematu napisze, że AJAX będzie chciał pobierać formularz dwa razy...

Jestem po raz kolejny zdruzgotany w tym tygodniu wiedzą teoretyczną i zadawaniem pytań o problemy, których nie ma. W razie co jestem dostępny na GG, mogę nawet pokazać jak zbudować takie wywołanie curla, tylko proszę nie mówcie mi, że nie da się obsłużyć tokena przez php, bo ta forma zabezpieczenie służy do anulowania używania funkcji "wstecz" w przeglądarce, a nie zabezpiecza przed botami.

Ten post edytował Quadina 19.12.2010, 21:02:26


--------------------
Warsztat: NetBeans 7.2 Beta, PHP, MySQL, PostgreSQL, Symfony (<=1.4), Diem, Java, Sieci neuronowe
Go to the top of the page
+Quote Post
Rid
post 19.12.2010, 21:08:48
Post #9





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

Ostrzeżenie: (0%)
-----


Za pomocą Ajaxa ,może przesłać formularz bez przeładowania strony ,o to pytał autor strony.Metodą prób i błędów może coś wyjdzie.
Go to the top of the page
+Quote Post
Quadina
post 19.12.2010, 21:12:31
Post #10





Grupa: Zarejestrowani
Postów: 200
Pomógł: 38
Dołączył: 1.12.2010
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


No swojej strony nie przeładujesz, ale załadujesz dwa razy AJAXem stronę zewnątrzną. Więc gdzie zysk?

Póki co autor musi się zastanowić co chce uzyskać, a nie co potrafi zrobić.


--------------------
Warsztat: NetBeans 7.2 Beta, PHP, MySQL, PostgreSQL, Symfony (<=1.4), Diem, Java, Sieci neuronowe
Go to the top of the page
+Quote Post
magu112
post 22.12.2010, 11:13:45
Post #11





Grupa: Zarejestrowani
Postów: 47
Pomógł: 2
Dołączył: 22.07.2009

Ostrzeżenie: (0%)
-----


hmmm może prościej będzie na przykładzie captcha

bo captcha też za każdym razem jest inne (zmienia się z odświeżeniem strony)
a więc jak pobrać go do skryptu a potem wpisać/wysłać bez przeładowania strony, gdyż aby pobrać kod trzeba wywołać i zakończyć polecenie curl, a żeby go wpisać i wysłać znów trzeba nawiązać połączenie curl co wiąże się z ponownym wczytaniem strony co wiąże się z innym kodem...

wykonując taką czynność się nie da:
- rozpoczynam polecenie curl
- wchodzę na stronę
- wywołuję polecenie / zakańczam
- pobieram kod
- rozpoczynam polecenie curl
- wysyłam kod
- wywołuję polecenie / zakańczam curl
- kod jest zły / kod się zmienił
Go to the top of the page
+Quote Post
amii
post 22.12.2010, 15:00:07
Post #12





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

Ostrzeżenie: (0%)
-----


A powinno być tak:
wykonując taką czynność się nie da:
- rozpoczynam polecenie curl
- jeśli potrzeba (są jakieś dane POST dynamicznie zmieniające się za każdym przeładowaniem) to pobieram te dane wyrażeniem regularnym z wyniku na poprzednim curl tutaj też obrabiam kod dla captacha czyli wyliczam pixelki i takie tam inne banalnie proste rzeczy winksmiley.jpg
- wykonuje jeszcze raz curl przesyłając wszystkie potrzebne dane

Gdzie tu widzisz problem ?

Tak jak mówiłem potrzebujesz najprawdopodobniej dwa razy wykonać CURL. Jak pisałem programy oparte o logowanie i automaty do postowania to czasami CURL trzeba było wykonać 3 razy.
1. Raz do zalogowania (autoryzacja)
2. Dwa do wczytania strony obsługującej pisanie posta (tu skanowałem wyniki wyrażeniem + obróbka danych)
3. Trzy przesłanie tych parametrów do strony odbierającej wyniki.


--------------------
gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet.
Zarabianie bez wysiłku na domenach bez ruchu: prolink.
Go to the top of the page
+Quote Post
CuteOne
post 22.12.2010, 23:09:21
Post #13





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


Magu:: skąd ten bulwers? Quadina dobrze prawi a ty go mięsem obrzucasz...

Łopatologicznie:
- wysyłasz żądanie na stronę np. http://www.gra.pl/formularz.php
- w ten sposób pobierasz token
- następnie wysyłasz dane na adres logowania np. http://www.gra.pl/loguj.php wraz z pobranymi wcześniej danymi

Innymi słowy nie wysyłaj danych do formularza tylko do pliku, który dane z formularza obrabia w tym wypadku loguj.php

ps. do jakiego pliku/ścieżki masz wysłać dane znajdziesz w polu action="" formularza
Go to the top of the page
+Quote Post
Quadina
post 22.12.2010, 23:24:23
Post #14





Grupa: Zarejestrowani
Postów: 200
Pomógł: 38
Dołączył: 1.12.2010
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


@CuteOne Chwała Ci, Chwala, niech będzie chwała ;-)

Już myślałem, że na forum wszyscy wierzą, że żeby wysłać cokolwiek przez formularz to trzeba go najpierw 3 razy pobrać, potem upewnić się, że został pobrany (ewentualnie pobrać 4 razy) i potem go pobrać uzupełniając dane, żeby pobrać go jeszcze raz smile.gif


--------------------
Warsztat: NetBeans 7.2 Beta, PHP, MySQL, PostgreSQL, Symfony (<=1.4), Diem, Java, Sieci neuronowe
Go to the top of the page
+Quote Post
mmdo
post 23.12.2010, 07:29:38
Post #15





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 9.08.2005

Ostrzeżenie: (0%)
-----


Cytat(magu112 @ 19.12.2010, 16:47:25 ) *
w skrócie, skrypt ma:
1. wejść na stronę formularza
2. pobrać token
2. wysłać formularz wraz z tokenem
// token za każdym odświeżeniem strony się zmienia


Moje pytanie, po co chcesz przechować token? A jeżeli chcesz to np: baza(najbezpieczniej), sesja, cookie nawet plik na upartego.

Ten post edytował mmdo 23.12.2010, 08:38:30
Go to the top of the page
+Quote Post
CuteOne
post 23.12.2010, 18:12:14
Post #16





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


Jemu chyba chodziło o pobranie tokena jako zmiennej, żeby potem mieć co wysyłać winksmiley.jpg chyba, że ma hobby i zbiera w bazie tokeny z różnych stron..

Ten post edytował CuteOne 23.12.2010, 18:13:21
Go to the top of the page
+Quote Post
magu112
post 29.12.2010, 23:27:21
Post #17





Grupa: Zarejestrowani
Postów: 47
Pomógł: 2
Dołączył: 22.07.2009

Ostrzeżenie: (0%)
-----


Już w ogóle nie kapuje działania tego curla ^^ siedzę dumam piszę ni działa ;]
za to napisałem na szybko tester i wrzuciłem go na demo stronę to testowania http://rebox.ugu.pl/
<-- rebox.ugu.pl
login login
hasło haslo
-->
jeżeli komuś uda się wysłać tamten formularz za pomocą curla i poda przykład jak to zrobił, będę bardzo wdzięczny ;]
Go to the top of the page
+Quote Post
thek
post 29.12.2010, 23:53:58
Post #18





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Przecież chłopaki mają racje jak byk! Pobierasz CURLem stronę, parsujesz ją pod kątem inputów z type="hidden" (DOM, simpleXML lub wyrażenia regularne) bo są takie 2. Pobierasz zarówno name jak i value i "przepychasz je" w CURLu dalej. Niepotrzebne jest wcale podwójne pobieranie strony. Tak jak piszą chłopaki:

1) pobierasz stronę rebox.ugu.pl/?action=frogo&i=wyslij
2) parsujesz to co dostajesz z CURLa by wyszukać inputy z polami typu hidden
3) ustawiasz w CURL dane POST na te znalezione przy parsowaniu
4) wysyłasz formularz na rebox.ugu.pl/?action=frogo&i=wyslij
5) cieszysz się biggrin.gif

Jeśli nadal nie rozumiesz, że to chłopaki mają racje to niestety ciężko widzę twoją przyszłość w programowaniu...


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
marcineck
post 5.03.2011, 21:58:39
Post #19





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 5.03.2011

Ostrzeżenie: (0%)
-----


Witam wszystkich i kłaniam się, gdyż jestem tu nowy,

A teraz do meritum.

Przeczytałem temat kilka razy i niestety mam podobny problem co kolega.
Mam formularz z ukrytym hashem, ktory to (dziad jeden) zmienia sie za kazdym przeladowaniem/pobraniem strony (hidden input).

CURL'a dopiero liznalem, wiec z gory dzieki za pomoc zaawansowanych w temacie.

Tak wyglada formularz:
  1. <form class="login" method="post" action="/login.php">
  2. <input name="hash" type="hidden" value="401704ef750f5f2e9fc84ed2c5db8292"><table>
  3. <tr>
  4. <td style="" align="right" width="150px">Username</td>
  5. <td><input type="text" name="user"></td>
  6. </tr>
  7. <tr>
  8.  
  9. <td style="" align="right" width="150px">Password</td>
  10. <td><input type="password" name="pass"></td>
  11. </tr>
  12. <tr>
  13. <td style="" align="right" width="150px"></td>
  14. <td><input type="submit" name="" value="Log in"></td>
  15. </tr>
  16. </form>



Login mam, haslo tez. Jesli pobieram strone CURLem, obrabiam ja i pobieram sobie token, ale... jak znowu wydam polecenie
  1. curl_setopt($ch, CURLOPT_URL, "http://costam.pl/login.php");

to token sie juz zmienia i ten pobrany jest do kitu.

Jeszcze raz - z gory dzieki za pomoc. Siedze, googluje, rwe wlosy z glowy i juz trace nadzieje, ze to logowanie z automatu jest mozliwe.
Go to the top of the page
+Quote Post
wNogachSpisz
post 5.03.2011, 23:30:09
Post #20





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Oszczędze Wam przechwałek, ile lat tworze boty smile.gif
Intryguje mnie, ze korzystacie z innych narzędzi, niż reszta świata...

Zamiast tego zamulonego CURL'a z API rodem z lat 90tych, używam PEAR:HTTP_Request.

zamiast wydłubywać inputy preg_matchem, używam PHP:DOM.

Radze zaczerpnąć z moich rad, opłaca się.

Pozdro600
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 6.05.2025 - 10:29