"Rigor Mortis" <nej@nej.dk> skrev i en meddelelse
news:4268d442$0$79453$14726298@news.sunsite.dk...
> På mit arbejde er der sat spærring på en hel masse sider.
> Men jeg mener, hvis man nu havde en side man kunne gå ind på og
> skrive en adresse (f.ex:
http://www.emessenger.net) og så
> webserveren hentede siden og viste den i en frame.
>
> Findes der muligheder for det?
Hej Rigor.
Da jeg studerede på HTX i Nykøbing F. havde vi selv samme problem.
Det lyder som om at du går igennem en proxy, eller et andet program der
holder øje med hvad du besøger. Du skal bare omgå den.
Hvis du går igennem en proxy skal du være opmærksom på om du har adgang til
at lave "connect"-requests igennem den, og ikke kun "get" og
"post"-requests.
Ellers er det faktisk pærelet at opstille dit eget proxy-program til at gå
igennem flere proxyer. Til dette vil mange nok mene at det er lettest at
lave et seperat program, men dette er skam også muligt med PHP. Du skal lave
et enkelstående program, og skal derfor sørge for at starte dit script uden
for en webserver.
Når man laver et connect-request gennem en proxy kan det foregå som i denne
funktion jeg har skrevet:
function proxy_conn($proxyhost, $proxyport, $host, $port, $username = false,
$password = false){
$fp = fsockopen($proxyhost, $proxyport, $error1, $error2, 5);
if ($fp){
fputs($fp, "CONNECT " . $host . ":" . $port . " HTTP/1.0\r\n");
if ($username && $password){
$authstring = base64_encode($username . ":" . $password);
fputs($fp, "Proxy-Authorization: Basic " . $authstring . "\r\n");
}
fputs($fp, "\r\n");
while(trim(fgets($fp, 128))){}
return $fp;
}else{
return false;
}
}
Funktionere returnere således en variabel svarende til det som "fsockopen"
returnere, denne connection er bare gået igennem en proxy. Læg også mærke
til at du har mulighed for at skrive brugernavn og adgangskode hvis din
proxy kræver det.
Dertil skal du sørge for at lytte efter indkommende socket-connections
f.eks. fra Internet Explorer når du prøver at tilgå en side (måske en
spærret side ;) ). Du skal derfor sørge for at have inkluderet
"socket"-udvidelse til PHP (det kan du let gøre i php.ini).
Du kan således lytte efter connections som i mit eksempel fra mit eget
omtalte program:
$fp = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($fp, "localhost", 808);
socket_setopt($fp, SOL_SOCKET, SO_REUSEADDR, 1);
if (!socket_set_nonblock($fp)) {
echo socket_strerror(socket_last_error());
}
socket_listen($fp);
Du skal herefter lave en løkke der kan lytte efter uendelige
socket-connections. Det kan du gøre således:
while(true){
$tempcon = @socket_accept($fp);
if ($tempcon){
echo "Jamen dog, vi bliver brugt???\n";
}
}
Du kan herefter hente data som klienten sender således:
socket_recv($data[$c][fp_rm], $data[$c][headers], 65535, 0);
Du kan sende data med "socket_write". Læs mere om det hele ved at slå
funktionerne op på
www.php.net.
Du lytter altså således efter connections på din egen computer (du laver
altså et proxy program). Når en bruger forsøger at få fat på en side, kører
du den bare igennem en dit arbejdes proxy (hvis de har en) og derefter en
tilfældig open-proxy på nettet (find evt. på Google). Derefter sætter du
denne open-proxy til at hente den spærrede side, og sende tilbage til
klienten.
Således skal dit program altså gøre for hver connection (det vil sige for
hvert billede der findes på siden, for stylesheetet og andre filer den skal
bruge). Det vil måske gå en anelse langsommere end normalt da den skal
igennem et par proxys og sådan, men princippet virkede fint for os på skolen
;)
Håber du kunne bruge det til noget.
--
Mvh Kasper Johansen aka knj
www.kasperj.lir.dk