Pośrednik w pobieraniu pliku - ukrywanie prawdziwego IP pobierającego

0

Witam
Mam pewien problem. Dajmy na to mam 2 serwery: A i B. Potrzebuję do komputera (C) pobrać plik z serwera A, ale aby serwer A miał IP serwera B a nie C (komputera pobierania).
Czyli:
plik na serwerze A-> pośrednik B -> docelowy C. Z tym, że serwer A nie może poznać adresu IP C, tylko B.
Jak takie coś zrobić? I to jeszcze bez zużywania transferu (lub jakiś minimalny) serwera B?

0

Bez zużywania transferu na serwerze B nie da się.

0

A ja słyszałem o skrypcie, który reklamował gość i pisał, że transfer nie jest pobierany z konta serwera B, tylko jakoś przekierowaniem leci (i być może chodzi o allow_url_fopen).
Podam przykład (nie związany ze skryptem który chce zrobić, ale jako przykład): strona xlimit.pl która umożliwia pobieranie plików z RS itd. i piszą:

Nie trać czasu - jako jedyni Nie pobieramy plików na swoje serwery Pobierasz od razu na dysk swojego komputera.

A bezpośrednio na pewno nie jest pobierane z konta premium, bo by musieli mieć tyle kont premium ile pobierających (chodzi o blokowanie IP).
Ale jeśli się teoretycznie wg Ciebie nie da to jak się da zrobić to co pisałem z zużywaniem transferu serwera B? Oczywiście taka opcja, że plik jest najpierw ściągany na serwer B a dopiero później pobierany przez komputer C odpada - ja potrzebuję w czasie rzeczywistym pobierać - bez zajmowania miejsca na serwerze B. I jak taki skrypt zoptymalizować? Bo kiedyś pobrałem jakiś wyszukany na google to pobierało mi tylko np. 8MB, raz 12MB pliku a plik ważył 300... Zależy to od serwera? Jakiś timeout?
Jednak i tak wolałbym jakoś się zapytać o możliwość bez pobierania transferu z serwera B. Może jakieś przekierowanie albo coś - tak aby serwer A nie poznał adresu serwera C.

0

Pośredniczenie w pobieraniu pliku nie znaczy, że serwer pośredniczący musi najpierw cały plik pobrać i zapisać u siebie. Może się to na bieżąco odbywać w częściach, np. 1kb. Wtedy dla użytkownika pobierającego plik będzie to proces transparentny.
Skrypty z Allegro wiele niemożliwych rzeczy już miały robić, opis jest strasznie naciągany jak dla mnie.

0

A ja słyszałem o skrypcie, który reklamował gość i pisał, że transfer nie jest pobierany z konta serwera B, tylko jakoś przekierowaniem leci (i być może chodzi o allow_url_fopen).

No tak. Robisz przekierowanie w php i wtedy transfer nie leci, ale ip jest znane.

0
Rev napisał(a)

Pośredniczenie w pobieraniu pliku nie znaczy, że serwer pośredniczący musi najpierw cały plik pobrać i zapisać u siebie. Może się to na bieżąco odbywać w częściach, np. 1kb. Wtedy dla użytkownika pobierającego plik będzie to proces transparentny.

A możesz podać przykład takiego rozwiązania w php?

sirkruk napisał(a)

No tak. Robisz przekierowanie w php i wtedy transfer nie leci, ale ip jest znane.

A jak działają np. serwery proxy? IP nie jest znane więc leci transfer? Nie da się jakoś tak oszukać serwera A żeby pobrał IP serwera B ale transfer leciał z A? ;)

0

HTTP funkcjonuje poziom wyżej niż TCP, opiera się na nim. Proxy po prostu otrzymują zapytania, które przesyłają do zdalnego serwera, odsyłają otrzymany wynik. IP siedzi poniżej TCP, HTTP na tym poziomie nie pracuje, nie da się z jego poziomu ingerować w sposób, który chcesz osiągnać. Poczytaj o podstawach, co to HTTP, co to TCP itd.

0
pytajniczek napisał(a)
sirkruk napisał(a)

No tak. Robisz przekierowanie w php i wtedy transfer nie leci, ale ip jest znane.

A jak działają np. serwery proxy? IP nie jest znane więc leci transfer? Nie da się jakoś tak oszukać serwera A żeby pobrał IP serwera B ale transfer leciał z A? ;)

Działają w ten sposób, że pobierają dane, a następnie wysyłają je do użytkownika. A serwer to możesz sobie oszukać na amerykańskim filmie (i to najprawdopodobniej animowanym). Jak myślisz - gdyby każdy mógł się podszyć pod dowolne IP, czy nie byłby to poważny błąd bezpieczeństwa?

0

No to podajcie chociaż przykład kodu jak działa to z wykorzystaniem transferu? Przez jaką funkcję to można zrobić? Oczywiście odpada najpierw ściągnięcie na serwer - najlepiej by było jakby co kilka kb przesyłał no i aby działał nawet na darmowym serwerze (o ile się da), a nie że ściągnie kilka MB i przerwie...

0
pytajniczek napisał(a)

No to podajcie chociaż przykład kodu jak działa to z wykorzystaniem transferu? Przez jaką funkcję to można zrobić?

Od groma przykładów. Odczyt pliku przez http nie różni się niczym od odczytu z lokalnego dysku.

pytajniczek napisał(a)

najlepiej by było jakby co kilka kb przesyłał no i aby działał nawet na darmowym serwerze (o ile się da), a nie że ściągnie kilka MB i przerwie..

Jaka jest według Ciebie definicja darmowego serwera?

0
sirkruk napisał(a)

Odczyt pliku przez http nie różni się niczym od odczytu z lokalnego dysku.

Samo fopen nie wystarczy, bo ja nie mam tego pliku na serwerze B. Ja muszę chyba streamingiem dopiero pobierać z A, poprzez B do C. I np. co 50kb zapisywać na serwer B plik, przesyłać go do C i kasować z B i tak od nowa aż do całego pliku. Tylko jak to zrobić? Pisałem już że opcja w której serwer B pobiera najpierw cały plik od serwera A odpada (nie mam miejsca na serwerze B) więc tylko przesyłanie części pliku wchodzi w grę.

sirkruk napisał(a)

Jaka jest według Ciebie definicja darmowego serwera?

Taka, że np. nie mogę pewnie ustawić jakieś limitu timeout czy jakiś zaawansowanych bibliotek, które mogą być potrzebne do mojego pomysłu. Chcę, aby skrypt działał na każdym serwerze (ewentualnie na większości).

0

Wystarczy. Otwierasz plik, czytasz za pomocą fread w pętli i przesyłasz to do przeglądarki. Nic nie zapisujesz na dysk na serwerze, bo masz to zapisane w pamięci.

Taka, że np. nie mogę pewnie ustawić jakieś limitu timeout czy jakiś zaawansowanych bibliotek, które mogą być potrzebne do mojego pomysłu. Chcę, aby skrypt działał na każdym serwerze (ewentualnie na większości).

Po pierwsze nie korzystam z darmowych serwerów, więc nie wiem jak obecnie to wygląda, ale z tego co kojarzę te dołączają reklamy do wykonywanych plików, taki z góry odpada. Po drugie po cholerę Ci zaawansowane biblioteki?

0

Ok, rozumiem, wielkie dzięki za odpowiedź.
A teraz mam kolejne pytanie, jak zrobić tak, że IP komputera C jest widoczne? Chodzi mi o to, że komputer C wchodzi na serwer B. Serwer B pobiera IP komputera C i loguje się na serwerze A z którego pobierany jest następnie plik. Z tym, że serwer A nie zna IP serwera B tylko komputera C. Trochę to poplątane, ale chyba wytłumaczyłem. Ogólnie serwer A ma pobrać IP komputera C, ale komputer C nie może znać serwera A, tylko serwer B.

0

NIE MOŻNA ZMIENIĆ SOBIE IP. Teraz zrozumiał?

0

Jak nie można jak można - nawet w curlu przez proxy...

0
pytajniczek napisał(a)

Jak nie można jak można - nawet w curlu przez proxy...
To teraz przeczytaj sobie kilka postów wyżej w jaki sposób działa proxy. Coś mi się wydaje, że na siłę chcesz zmarnować komuś czas.

0

Nie mówię o zwykłym proxy a proxy w curlu!
Jak nie wiesz to nie mów, wpisz sobie w google curl proxy i będziesz miał masę stron (CURLOPT_PROXY, CURLOPT_HTTPPROXYTUNNEL itd).

0

mam identyczny problem, nazywa się to streamingiem pliku :/ i za cholere nie wiem jak to rozwiązać :/

0
pytajniczek napisał(a)

Nie mówię o zwykłym proxy a proxy w curlu!
Jak nie wiesz to nie mów, wpisz sobie w google curl proxy i będziesz miał masę stron (CURLOPT_PROXY, CURLOPT_HTTPPROXYTUNNEL itd).
Proxy w curlu to tylko implementacja, więc nie będzie się za bardzo różnić od proxy w brainfucku. No, ale na pewno wiesz lepiej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1