![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 11.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Jestem w trakcie próby stworzenia weryfikatora serwerów proxy, nie opierającego się na bazie znanych adresów ip serwerów proxy. Jak wiadomo należy bacznie prześledzić zmienne środowiskowe, które powinny nas doprowadzić do najbardziej prawdopodobnego wyniku. Wzoruję się na takich stronach: http://www.jockersoft.com/english/ipaddress.php oraz http://www.proxyserverprivacy.com/adv-free...-detector.shtml Napotykam takie oto problemy: Na tych stronach odczytują: Connection: keep-alive Keep-Alive: 300 Pierwsza z informacji teoretycznie powinna się znaleźć w zmiennej 'HTTP_CONNECTION', lecz w moim skrypcie nie istnieje taka zmienna. Czy widoczność tej zmiennej zależy od serwera na którym stoi skrypt?? Także po wejściu na te strony mam: Proxy HTTP_X_FORWARDED Variable: (none) Gdzie w moim skrypcie te zmienne mają pewne wartości(dwie pierwsze)Proxy HTTP_VIA Variable: (none) Proxy HTTP_PROXY_CONNECTION: (none) print_r( $_SERVER ); Wynik działania powyższego kodu na moim serwerze Array ( [PATH] => /usr/local/bin:/usr/bin:/bin [UNIQUE_ID] => SggzBldi3pgAAHLJkHsAAAA0 [REAL_HOST] => 193.239.80.21 [HTTP_HOST] => engineer.ovh.org [HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 [HTTP_ACCEPT_LANGUAGE] => pl,en-us;q=0.7,en;q=0.3 [HTTP_ACCEPT_ENCODING] => gzip,deflate [HTTP_ACCEPT_CHARSET] => ISO-8859-2,utf-8;q=0.7,*;q=0.7 [HTTP_COOKIE] => SESS47f8c6f823598c9dba1c59fb62aeb1bb=f71f56b5e2896bb7eec0132c8f3457ef [HTTP_CACHE_CONTROL] => max-age=0 [HTTP_MAX_FORWARDS] => 10 [HTTP_VIA] => 1.1 127.0.0.1 [HTTP_X_FORWARDED_FOR] => 193.239.80.21 [HTTP_X_FORWARDED_HOST] => engineer.ovh.org [HTTP_X_FORWARDED_SERVER] => 127.0.0.1 [SERVER_SIGNATURE] => [SERVER_SOFTWARE] => Apache [SERVER_NAME] => engineer.ovh.org [SERVER_ADDR] => 87.98.222.152 [SERVER_PORT] => 80 [REMOTE_ADDR] => 193.239.80.21 [DOCUMENT_ROOT] => /home/e/n/g/engineer/www [SERVER_ADMIN] => postmaster@engineer.ovh.org [SCRIPT_FILENAME] => /home/e/n/g/engineer/www/index.php [REMOTE_PORT] => 55217 [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => [REQUEST_URI] => / [SCRIPT_NAME] => /index.php [UID] => 105826 [PHP_SELF] => /index.php [REQUEST_TIME] => 1242051334 [argv] => Array ( [0] => index.php ) [argc] => 1 ) |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
"Widoczność" zmiennych globalnych $_SERVER['HTTP_*']
zalezy w prostej linii od ich wystepowania w naglowku HTTP Moim zdaniem najlepiej weryfikowac proxy na podstawie czasu dostepu, wrzuc do sieci plik txt i sprawdzaj laczac sie z nim jak szybko proxy go otworzy, oto masz wynik weryfikacji proxy, nie wiem po co chcesz patrzec w jakies naglowki. Aha i poka koda. Ten post edytował wNogachSpisz 11.05.2009, 18:19:07 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 11.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
Czy możesz rozwinąć swoją wypowiedź odnośnie tego nagłówka http?
Jak to możliwe że na jednej stronie są inne zmienne niż na drugiej skoro wchodzę z tego samego hosta? Analiza nagłówków potrzebna mi jest do rozróżnienia typów proxy, czy to jest zwykłe cache, czy też anonymuos itp. Jak się ma czas dostępu do plików? Przez proxy jest znacznie dłuższy(krótszy)? Moim zdaniem proxy może działać tak, że jak już zbuforuje plik to drugie wejście może mieć inny czas dostępu. ? Koda jeszcze nie mam w zasadzie, na razie testuję nagłówki,zmienne i szukam sposobu na weryfikacje proxy. Ten post edytował kaczors 11.05.2009, 21:24:08 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
Mogę Cię nakierować, ściagnij fajny sniffer http://www.nirsoft.net/utils/smsniff.zip,rzuć okiem jak wyglądają nagłowki rozgrywając dwa scenariusze:
- twoj skrypt laczy sie z serwerem proxy - twoj skrypt jest serwerem i laczysz sie z nim przez przegladarke Zobacz jak wyglada tablica $_SERVER['HTTP_*'] w obu przypadkach. Nie powinno mieć znaczenia ze polaczenie będzie w ramach localhosta, sprawdź. Buforowanie o którym mówisz to nic innego jak cache, opisany w wielu dokumentacjach rówież w języku polskim (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) cachowanie występuje w różnych wersjach, takich co łączą się przy każdym wywołaniu z serwerem zeby sprawdzic czy cos sie zminilo oraz takie które tego nie robily opierając się czasie życia cachu, wszystko zalezy wlasnie od naglowka HTTP. Gdybym to ja robił skrypt określający szybkość serwera proxy, nie zerkałbym w superglobalne $_SERVER. Zamiast tego lepiej połączyć się z docelowym proxy i ręcznie stworzyć nagłowek HTTP a następnie sparsować odpowiedź serwera proxy ;p ( /* Pod uwage w ostatecznym wyniku wiąć długość nagłowka HTTP */ ) sprawdzić jak proxy zadziała przy różnych scenariuszach, z cachem, bez cachu, z duzym plikem, z malym plikiem. Dokumentacje HTTP masz chociażby na wikipedii, to na prawde nie jest trudne ;p Jeśli masz problem z napisaniem skryptu który odpowiednie sparsuje nagłowek HTTP, zapraszam na gielde (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) , (to doslownie 2 wyrażenie ragularne na krzyż) Chętnie skrobne coś takiego w ramach rozrywki za równowartość 1 piwa marki Lech Premium (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Mam nadzieje że wraziłem się nie bardzo nie jasno. Pytaj dalej (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 11.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
Wszystko ładnie pięknie, ale niezupełnie o takie działanie skryptu mi chodzi.
Moim celem jest napisanie czegoś co rozpozna czy ktoś kto się łączy z naszą stroną używa proxy bądź nie, a jeżeli używa to w jakiego jest ono rodzaju. Twoje rozwiązanie służy do testowania konkretnego proxy, możliwe że nie wyraziłem się jasno , ale nie o takie działanie mi chodzi. Dlatego więc męczę te zmienne serwera ;] I dalej nie wiem jak pozyskać hosta jego typ połączenia (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Myślę, że ze sparsowaniem nagłówka bym sobie poradził, więc giełda nie jest dla mnie rozwiązaniem, tam się niczego nie nauczę (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Wróćmy do problemów W pierwszym poście wylistowałem wartości zmiennych $SERVER i tak np mamy: HTTP_X_FORWARDED FOR: 193.239.80.21 (czyli moje ip) a po wejściu na inną przykładową stronę sprawdzającą te zmienne jest (http://www.thisisarecording.com/proxy_check/): HTTP_X_FORWARDED FOR: (none) Skąd ta różnica, przecież te zmienne zależą od hosta i powinny być w obu przypadkach te same!? Generalnie mam zamiar zbadać nagłówki (co jest naiwne) + zbadać typ połączenia + baza whois (zauważyłem że dla proxy nie podaje większości informacji tylko nazwa hosta). Powiązując to wszystko ze sobą mam nadzieję że z dosyć wysokim prawdopodobieństwem odgadnę czy ktoś się łączy przez proxy czy nie. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
No właśnie, ty o pierniku a ja...
Sprawdzanie czy user korzysta z proxy, teraz mamy jasność :P Połącznie wygląda tak: przeglądarka usera -> serwer proxy -> Twój skrypt Nagłowki http wysyła do Twojego skryptu wyłącznie serwer proxy. Może on oszukiwać na przerozmaite sposoby łącznie z emitowaniem nagłówków identycznych jak te odebrane od przeglądarki usera, więc pewna część użytkowników przejdzie bez problemu przez takie zabezpieczenie przechodzić. Jeśli jednak nie chcesz łączyć się z zwenętrznymi serwerami w celu weryfikacji, to jest to jedyne sensowne rozwiązanie. Jak ja bym to zrobił: 1. Skan IP w poszukiwaniu otwartego proxy Minusem tego rozwiązania jest czas skanowania (nawet kilka minut), należy wobec tego przy pierwszy odwiedzinach wpuścić usera, w tle rozpocząć skanowanie IP i jeśli okaże się że to proxy, zablokować kolejne wywołania strony przez takiego użytkownika. To chyba najlepsze rozwiązanie 99,9% skuteczności. 2. Google Jeśli pod wybrabym IP jest publiczne proxy, google wyplują slowo "proxy" w 3000 ekzemplarzach, ale może też zdarzyć się ze wypluje slow proxy jeśli tam proxy wcale nie ma i tym sposobem zablokujesz normalnego usera. 3. Whois: Nie wiem gdzie we whois jest napisane że to proxy, jeśli już to nie za często, 3% skutecznosci :P 4. Jeszcze raz nagłowki Jeśli uda Ci się zbudować skrypt rozpoznający nagłówki wysyłane przez 99% współczesnych przeglądarek internetowych (różne wersje), to takie rozwiązanie też będzie OK, 90% skuteczności. Wszystko zależy od tego, jakie masz wymagania wobec skryptu, metod jak widzisz jest conajmniej kilka. Coś do rozpoznawania przeglądraki od CodeIgnitera:
Ten post edytował wNogachSpisz 12.05.2009, 08:58:58 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 11.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
Propozycja 1.
Strona ma działać raczej od razu jednorazowo sprawdzając proxy, więc skanowanie nie wchodzi w grę, zdecydowanie za długo by trwało. Propozycja 2. Nie do końca tak jest, np 66.197.167.120 (pewne Anonymous Proxy Online z googla) ma tylko 150 wyników ,więc nijak ma się liczba wyników od adresu IP proxy Propozycja 3. Zauważyłem (możesz to sam sprawdzić), że jak wpiszesz np swoje IP do whois (jeżeli nie jesteś za proxy) to dostaniesz wszystkie info od ISP, a jak wpiszesz IP proxy to wyskoczy tylko nazwa hosta. No ale właśnie patrzę, że także i to nie jest żadną regułą. Propozycja 4. Tu chciałbym się skupić. Za pewną stroną wnioskuję, że: Analiza nagłówków VIA, PROXY_CONNECTION i X_FOWARDED_FOR pozwala nam wykryć transparent proxy, ponieważ te proxy nie ukrywa adresów IP. Dalej sprawa jest bardziej skomplikowana, jeżeli w nagłówkach nasze IP się powtarza lub go nie ma to możemy mieć do czynienia z anonymous lub elite proxy, ale też doskonale może tam go nie być. Znalazłem także popularne porty dla proxy (8080,80,6588,8000,3128,553,554) lecz widzę że to nie jest regułą i nie można na tym oprzeć weryfikacji, kolejną wskazówką jest connection type oraz cache control. No ale jak już pisałem mam problemy z tymi cholernymi nagłówkami. No i tu koło się zamyka, ponieważ mam problemy z tymi zmiennymi. Powtarzam moje pytanie: dlaczego jak wylistowuję moje zmienne $SERVER na moim serwerze (moja strona) to mam niekiedy inne wyniki niż np na (tym) weryfikatorze proxy? Np. Proxy HTTP_VIA , nie wspominając o tym, że np typu połączenia wogóle nie mam u siebie (IMG:http://forum.php.pl/style_emoticons/default/blinksmiley.gif) . ? // BTW: Dzięki za zainteresowanie tematem // Ten post edytował kaczors 12.05.2009, 09:57:58 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
propozycja 1.
Jeśli zeksanujesz tylko popularne porty na jakich działają http proxy ( sam napisałeś (8080,80,6588,8000,3128,553,554) ), to będzie to trwało raptem kilka sekund. propozycja 2. Nie do końca się zrozumieliśmy, google na zapytanie: http://www.google.pl/search?&q=66.197.167.120 zwaraca wyniki z 7-krotnym powtórzeniem słowa "proxy", uznajemy na tej podstawie że to proxy, jeśli powiedzmy są 2 powtórzenia i mniej, uznajemy że to nie proxy, niestety google po kilku tysiącach takich zapytań wrzuci bana na IP Twojego serwera. propozycja 3. We wpisach whois nie będziesz miał informacji że pod tym IP jest proxy. Odp na pytanie: Różne proxy to różne nagłowki, dlatego. Ten post edytował wNogachSpisz 12.05.2009, 11:43:01 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 11.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
No ale przecież ja nie wchodzę tam przez proxy, po prostu odpalam moją stronę i stronę tego weryfikatora w tej samej przeglądarce, korzystając z tego samego połączenia, czy zmienne środowiskowe nie powinny być takie same?
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
To czym się różni jedno wejście od drugiego?
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 11.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
Szanowny kolego, doceniam Twoje starania, ale mam wrażenie że nie możemy się dogadać. Nie wiem, może to wynika z mojej niewiedzy (w końcu to dział "przedszkole"). Może zróbmy taki eksperyment. Tu jest kawałek kodu:
Wyświetli nam zawartość zmiennych HTTP_VIA oraz HTTP_CONNECTION i teraz: umieszczamy to sobie na swoim serwerze. Wchodzimy naszą stronę i przed oczami ukazuję się mi odpowiednio: "1.1 127.0.0.1" oraz pusto. Po czym wchodzimy na stronę Free Proxy Detector i przed naszymi oczami pokazuję się nam odpowiednio taka wartość tych samych zmiennych: pusto oraz "keep-alive". Jak to możliwe że te zmienne są różne? Czy nagle dla innej strony zmienia się sposób łączenia? Połączenie jest takie same, wpisuje oba adresy w tym samym oknie przeglądarki. Te zmienne powinny zależeć od przeglądarki? Niech ktoś mi to wytłumaczy ostatecznie? ================================================================================ ========== Dobra, chyba to rozwiązuje sprawę różnicy zmiennych: "$_SERVER Contains information about your server. Because your Web server provides the information, the information that’s available depends on what server you’re using." Może ktoś ma jeszcze jakieś sposoby weryfikacji proxy, choć podejrzewam że większość została tu już napisana.... Pozdrawiam Ten post edytował kaczors 13.05.2009, 21:04:35 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 21:41 |