Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Zasady

[Win 7 + PC] Pobranie informacji o serwerze i plikach na nim. Pobieranie plików.



 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Sieci komputerowe i Internet
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Tomek S



Dołączył: 10 Gru 2005
Posty: 1954

PostWysłany: Nie Lut 05, 2017 7:58 pm  OP    Temat postu: [Win 7 + PC] Pobranie informacji o serwerze i plikach na nim. Pobieranie plików. Odpowiedz z cytatem Pisownia

Mam przykładowo serwer pierwszy lepszy wybrany przez google
serwer
Jak pobrać informacje o serwerze tj czy serwer zezwala pobrać plik np jpg w kilku częściach ?
Jak pobrać plik w kilku częściach ?
Jak uzyskać informacje o samych plikach, interesuje mnie zwłaszcza wielkość pliku.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
marcin_an



Dołączył: 26 Maj 2005
Posty: 18814

PostWysłany: Nie Lut 05, 2017 9:22 pm      Temat postu: Re: [Win 7 + PC] Pobranie informacji o serwerze i plikach na nim. Pobieranie pli Odpowiedz z cytatem Pisownia

Jako przykładowy serwer mogłeś podać Coder's city - przecież niczym się nie różni :D.

Tomek S napisał:
Jak pobrać informacje o serwerze tj czy serwer zezwala pobrać plik np jpg w kilku częściach ?
Próbując pobrać w kilku częściach. Jeśli nie działa, to znaczy, że nie zezwala na taką operację. Można użyć zapytania HEAD, jeśli serwer obsługuje.

Tomek S napisał:
Jak pobrać plik w kilku częściach ?
Ustawiając nagłówek Range, zgodnie z rfc7233, sekcja 3.1.

Tomek S napisał:
Jak uzyskać informacje o samych plikach, interesuje mnie zwłaszcza wielkość pliku.
Pobierając je i sprawdzając rozmiar pobranego pliku - to jedyny pewny sposób. Opcjonalnie, jeśli w odpowiedzi zostanie wysłany nagłówek Content-length oraz jeśli dane nie są kompresowane oraz jeśli dane nie są wysyłane fragmentami (nagłówek Transfer-encoding ustawiony na chunked), to można przyjąć, że Content-length wskazuje rozmiar pobieranego zasobu. Mam nadzieję, że niczego nie pominąłem (HTTP jest dosyć obszernym standardem, a ja nie mam głowy z gumy). Podobnie jak w pierwszym przypadku można spróbować przez HEAD, jeśli serwer obsługuje.

Generalnie nie polecam robić tego ręcznie. Jeśli mimo wszystko masz zamiar, to przeanalizuj, jak robią to istniejące narzędzia.

edit:
Przykłady. Do testów użyję sobie takiego, 122-bajtowego pliku:
$ cat /dev/urandom | head -c 90 | base64 | tee test.txt
cg03NbiQ+MrTlfxsr5udrR0iHIrI2ps6VQY+f6E0VroJ72OpM0o3Xa6ZN8IxBPssv+rMNp0jWRFh
IzPnTAIZ635mn19w5tqsMN3aSeigwjnNLaR3M2g0xBpw

$ scp -P 59184 test.txt ciach@s19.vdl.pl:public_html/pub
Host key fingerprint is SHA256:k5EOPPoL3Gstn4Ldq0vJVdv7dNO+wFb3mUHz6UKqNXM
+---[ECDSA 256]---+
| |
| . . |
| + o . o |
| . + + o . +|
| . S . .. +o|
| . + o . +.o B|
| oo*o =.E.=+|
| .o=oo.o =ooo.|
| .=*+o ..o|
+----[SHA256]-----+
ciach@s19.vdl.pl's password:
test.txt 100% 122 2.0KB/s 00:00

$ curl http://www.coderscity.pl/pub/test.txt
cg03NbiQ+MrTlfxsr5udrR0iHIrI2ps6VQY+f6E0VroJ72OpM0o3Xa6ZN8IxBPssv+rMNp0jWRFh
IzPnTAIZ635mn19w5tqsMN3aSeigwjnNLaR3M2g0xBpw


Próbujemy, czy obsługuje HEAD:
ncat www.coderscity.pl 80 <<EOD
> OPTIONS * HTTP/1.1
> Host: www.coderscity.pl
>
> EOD
HTTP/1.1 200 OK
Date: Sun, 05 Feb 2017 22:44:24 GMT
Server: Apache
Content-Length: 0
Content-Type: text/plain

Cóż... nie obsługuje globalnie OPTIONS ;). Ale możemy spróbować jeszcze na samym zasobie docelowym:
$ ncat www.coderscity.pl 80 <<EOD
> OPTIONS /pub/test.txt HTTP/1.1
> Host: www.coderscity.pl
>
> EOD
HTTP/1.1 200 OK
Date: Sun, 05 Feb 2017 22:46:05 GMT
Server: Apache
Allow: GET,HEAD,POST,OPTIONS
Vary: Accept-Encoding,User-Agent
Content-Length: 0
Content-Type: text/plain

No to wiemy, że HEAD jest obsługiwane. Zatem użyjmy:
$ ncat www.coderscity.pl 80 <<EOD
> HEAD /pub/test.txt HTTP/1.1
> Host: www.coderscity.pl
>
> EOD
HTTP/1.1 200 OK
Date: Sun, 05 Feb 2017 22:21:49 GMT
Server: Apache
Last-Modified: Sun, 05 Feb 2017 22:16:54 GMT
Accept-Ranges: bytes
Content-Length: 122
Vary: Accept-Encoding,User-Agent
Content-Type: text/plain

Dowiedzieliśmy się niechcący, że ma możliwość obsługi pobierania odpowiedzi po kawałku: nagłówek Accept-Ranges. Ale nie każdy serwer jest tak uczynny, że nie proszony podaje taką informację - czasami więc może być potrzebne zapytanie wprost, wysyłając nagłówek Range bez żadnych parametrów:
$ ncat www.coderscity.pl 80 <<EOD
> HEAD /pub/test.txt HTTP/1.1
> Host: www.coderscity.pl
> Range:
>
> EOD
HTTP/1.1 200 OK
Date: Sun, 05 Feb 2017 22:23:36 GMT
Server: Apache
Last-Modified: Sun, 05 Feb 2017 22:16:54 GMT
Accept-Ranges: bytes
Content-Length: 122
Vary: Accept-Encoding,User-Agent
Content-Type: text/plain

Gdyby serwer nie obsługiwał HEAD, trzeba użyć GET. Tutaj oczywiście powstaje kłopot, bo jeżeli użyjemy GET, to dostaniemy całą odpowiedź, czyli mijamy się z celem. Jeśli jednak chcemy wykonać wiele zapytań do różnych zasobów, to stosowna informacja dotycząca jednego z nich daje nadzieję, że dla innych jest podobnie. Ale tylko nadzieję - bo nie musi tak wcale być. Przykładowo phpBB nie radzi sobie z Range i zawsze wysyła całość, stąd w pierwszym przykładzie było brak nagłówka Accept-Ranges. Jedyna pewna metoda to wystartowanie na ślepo z Range i zobaczenie, co się stanie.

Pobranie fragmentu:
$ ncat www.coderscity.pl 80 <<EOD
> GET /pub/test.txt HTTP/1.1
> Host: www.coderscity.pl
> Range: bytes=0-9
>
> EOD
HTTP/1.1 206 Partial Content
Date: Sun, 05 Feb 2017 22:28:41 GMT
Server: Apache
Last-Modified: Sun, 05 Feb 2017 22:16:54 GMT
Accept-Ranges: bytes
Content-Length: 10
Vary: Accept-Encoding,User-Agent
Content-Range: bytes 0-9/122
Content-Type: text/plain

cg03NbiQ+M
Nakazaliśmy pobranie bajtów 0-9 (pierwsze 10 bajtów). Otrzymaliśmy pierwsze 10 bajtów. Możemy też pobrać ze środka:
$ ncat www.coderscity.pl 80 <<EOD
> GET /pub/test.txt HTTP/1.1
> Host: www.coderscity.pl
> Range: bytes=100-109
>
> EOD
HTTP/1.1 206 Partial Content
Date: Sun, 05 Feb 2017 22:30:41 GMT
Server: Apache
Last-Modified: Sun, 05 Feb 2017 22:16:54 GMT
Accept-Ranges: bytes
Content-Length: 10
Vary: Accept-Encoding,User-Agent
Content-Range: bytes 100-109/122
Content-Type: text/plain

aSeigwjnNL
Zwróć uwagę na to, że Content-range zawiera też informację o rozmiarze całej odpowiedzi.

I tutaj przechodzimy do ostatniego pytania: rozmiar pobieranego zasobu. W pierwszym zapytaniu, przez metodę HEAD, otrzymaliśmy Content-Length równy 122. Ponieważ reszta podanych wcześniej warunków została spełniona, to jest to długość tego zasobu. Alternatywnie, jeśli pobieramy tylko część, to Content-Range może nam wskazać pełny rozmiar. Ale to nie musi być prawdą:
$ ncat www.coderscity.pl 80 <<EOD
> GET /pub/test.txt HTTP/1.1
> Host: www.coderscity.pl
> Accept-Encoding: gzip, defalte
>
> EOD
HTTP/1.1 200 OK
Date: Sun, 05 Feb 2017 22:33:55 GMT
Server: Apache
Last-Modified: Sun, 05 Feb 2017 22:16:54 GMT
Accept-Ranges: bytes
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
Content-Length: 139
Content-Type: text/plain

(... zgzipowane dane)
Mamy Content-Encoding równy "gzip". Content-Length wskazuje rozmiar przesyłanych danych, nie oryginalnej wiadomości! Stąd mamy 139 bajtów. I nie, Content-Range w niczym tutaj nie pomoże:
$ ncat www.coderscity.pl 80 <<EOD
> GET /pub/test.txt HTTP/1.1
> Host: www.coderscity.pl
> Accept-Encoding: gzip, deflate
> Range: bytes=100-109
>
> EOD
HTTP/1.1 206 Partial Content
Date: Sun, 05 Feb 2017 22:36:03 GMT
Server: Apache
Last-Modified: Sun, 05 Feb 2017 22:16:54 GMT
Accept-Ranges: bytes
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
Content-Range: bytes 100-109/139
Content-Length: 10
Content-Type: text/plain

(... zgzipowane dane)
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Tomek S



Dołączył: 10 Gru 2005
Posty: 1954

PostWysłany: Pon Lut 06, 2017 7:52 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

Dzięki za odpowiedź, teraz przynajmniej wiem jak to ugryźć.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Sieci komputerowe i Internet Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.16046 sekund, zapytan = 11
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |