hallo,
Ik ben student informatica en we hebben de opdracht gekregen om een proxy server te programmeren. Het is niet de bedoeling om een mega uitgebreide versie te maken maar lieft wel eentje dat naar behoren werkt.
Momenteel hebben we nog twee problemen en dan zou hij af moeten zijn:
wat wil deze foutmelding zeggen:
bad arg lenght for socket::pack_sockaddr_in, length is 0, should be 4 at P:/ActivePer5.8.0/lib/socket.pm line 373
Iemand een idee en hoe je hem moet oplossen?
We hebben nog een klein probleempje. Wanneer we onze server runnen krijgen we een error op lijn 59. Daar staan een paar regels code om de client versie van de proxyserver te verzorgen. Het server gedeelte zelf werkt wel maar van de moment dat we het client gedeelte er aan toe voegen loopt het mis ...
De code van de proxyserver is als volgt:
#//////////////////////////////////// Begin code ////////////////////////////////////////
#!/usr/local/bin/perl
use Socket;
$queuelength = 1;
socket(HANDLE, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
$addr = sockaddr_in(80, INADDR_ANY);
bind(HANDLE, $addr);
listen(HANDLE, $queuelength);
while(true)
{
accept(NEW_HANDLE, HANDLE);
$line=<NEW_HANDLE>;
print $line;
#zoeken wat hij juist moet doen (get? adres?)
@headers = split(' ', $line);
$method = $headers[0];
$requestedDocument = "index.html";
$url = $headers[1];
$httpversion = $headers[2];
$lengte = length($url)-7;
$url = substr($url,7,$lengte);
@temp = split('/', $url);
$url = $temp[0];
print "$method\n";
print "$url\n";
if( $method eq "GET") {
open(FILE, "blacklist.txt") or die "Blacklist bestaat niet";
@banned = <FILE>;
close(FILE);
$toegelaten=0;
$teller=0;
while($teller<=$#banned){
if($banned[$teller] =~ /$url/){
$toegelaten=1;
}
$teller = $teller + 1;
print "$toegelaten toegelaten\n";
}
print "$toegelaten\n";
if($toegelaten == 0){
#send(NEW_HANDLE,"Grrrr", 0);
socket(HANDLE1, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
$addres = sockaddr_in(8080, inet_aton($url));
connect(HANDLE1,$addres) or die "verbinding niet gelukt";
send (HANDLE1, "GET / HTTP/1.1\r\nhost: $url\r\n\r\n",0);
@opvangen = <HANDLE1>;
print @opvangen;
} else {
send(NEW_HANDLE,"<HEAD><TITLE>403 Forbidden</TITLE></HEAD>\n", 0);
send(NEW_HANDLE, "<H1>Forbidden</H1>", 0);
send(NEW_HANDLE, "You don't have permission to access ... de url", 0);
send(NEW_HANDLE, "on this server.<P>", 0);
send(NEW_HANDLE, "<HR>", 0);
send(NEW_HANDLE, "<ADDRESS>...</ADDRESS>", 0);
send(NEW_HANDLE, "</BODY></HTML>", 0);
}
} else {
send(NEW_HANDLE,"$httpver 404 File Not Found\n\n",0);
send(NEW_HANDLE,"<HEAD><TITLE>404 File Not Found</TITLE></HEAD>\n", 0);
send(NEW_HANDLE, "<BODY><H1>File Not Found</H1>\n", 0);
send(NEW_HANDLE, "The requested URL $url was not found on this server.\n",0);
send(NEW_HANDLE, "De server kan alleen een GET afhandelen.\n",0);
send(NEW_HANDLE, "</BODY>", 0);
}
close(NEW_HANDLE);
}
#/////////////////////////////////// end code ///////////////////////////////////////
Is er iemand dat kan helpen want we zitten er zo dicht bij en toch met de handen in het haar ...
Alvast bedankt
Ik ben student informatica en we hebben de opdracht gekregen om een proxy server te programmeren. Het is niet de bedoeling om een mega uitgebreide versie te maken maar lieft wel eentje dat naar behoren werkt.
Momenteel hebben we nog twee problemen en dan zou hij af moeten zijn:
wat wil deze foutmelding zeggen:
bad arg lenght for socket::pack_sockaddr_in, length is 0, should be 4 at P:/ActivePer5.8.0/lib/socket.pm line 373
Iemand een idee en hoe je hem moet oplossen?
We hebben nog een klein probleempje. Wanneer we onze server runnen krijgen we een error op lijn 59. Daar staan een paar regels code om de client versie van de proxyserver te verzorgen. Het server gedeelte zelf werkt wel maar van de moment dat we het client gedeelte er aan toe voegen loopt het mis ...
De code van de proxyserver is als volgt:
#//////////////////////////////////// Begin code ////////////////////////////////////////
#!/usr/local/bin/perl
use Socket;
$queuelength = 1;
socket(HANDLE, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
$addr = sockaddr_in(80, INADDR_ANY);
bind(HANDLE, $addr);
listen(HANDLE, $queuelength);
while(true)
{
accept(NEW_HANDLE, HANDLE);
$line=<NEW_HANDLE>;
print $line;
#zoeken wat hij juist moet doen (get? adres?)
@headers = split(' ', $line);
$method = $headers[0];
$requestedDocument = "index.html";
$url = $headers[1];
$httpversion = $headers[2];
$lengte = length($url)-7;
$url = substr($url,7,$lengte);
@temp = split('/', $url);
$url = $temp[0];
print "$method\n";
print "$url\n";
if( $method eq "GET") {
open(FILE, "blacklist.txt") or die "Blacklist bestaat niet";
@banned = <FILE>;
close(FILE);
$toegelaten=0;
$teller=0;
while($teller<=$#banned){
if($banned[$teller] =~ /$url/){
$toegelaten=1;
}
$teller = $teller + 1;
print "$toegelaten toegelaten\n";
}
print "$toegelaten\n";
if($toegelaten == 0){
#send(NEW_HANDLE,"Grrrr", 0);
socket(HANDLE1, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
$addres = sockaddr_in(8080, inet_aton($url));
connect(HANDLE1,$addres) or die "verbinding niet gelukt";
send (HANDLE1, "GET / HTTP/1.1\r\nhost: $url\r\n\r\n",0);
@opvangen = <HANDLE1>;
print @opvangen;
} else {
send(NEW_HANDLE,"<HEAD><TITLE>403 Forbidden</TITLE></HEAD>\n", 0);
send(NEW_HANDLE, "<H1>Forbidden</H1>", 0);
send(NEW_HANDLE, "You don't have permission to access ... de url", 0);
send(NEW_HANDLE, "on this server.<P>", 0);
send(NEW_HANDLE, "<HR>", 0);
send(NEW_HANDLE, "<ADDRESS>...</ADDRESS>", 0);
send(NEW_HANDLE, "</BODY></HTML>", 0);
}
} else {
send(NEW_HANDLE,"$httpver 404 File Not Found\n\n",0);
send(NEW_HANDLE,"<HEAD><TITLE>404 File Not Found</TITLE></HEAD>\n", 0);
send(NEW_HANDLE, "<BODY><H1>File Not Found</H1>\n", 0);
send(NEW_HANDLE, "The requested URL $url was not found on this server.\n",0);
send(NEW_HANDLE, "De server kan alleen een GET afhandelen.\n",0);
send(NEW_HANDLE, "</BODY>", 0);
}
close(NEW_HANDLE);
}
#/////////////////////////////////// end code ///////////////////////////////////////
Is er iemand dat kan helpen want we zitten er zo dicht bij en toch met de handen in het haar ...
Alvast bedankt