Avatar billede el-installatoer Nybegynder
11. september 2004 - 17:52 Der er 17 kommentarer

IP-ban, jeg kan ikke får det til at virke

Jeg har downloadet et script, som skulle banne bestemte IP-adresser.
scriptet ligger i en fil ban.php  men jeg kan bare ikke få det til at virke.
på siden som skal udelukke bestemte ipadr, ligger følgende kodestump:

<? include_once"ban.php"; ?>

Filen ban.php indeholder følgende kode:

<?
// Denne fil kan benyttes frit under GPL så længe
// Disse linjer FORBLIVER i scriptet.
// Det er tilladt at rette i scriptet.
// Scriptet må ikke videredistribueres, eller gives
// videre uden skriftlig tilladelse fra PHPCODER.DK
// God fornøjelse
// Martin Allan Jensen
// PHPCODER.DK

$url = "http://www.gh-el.dk/kontaktban.htm";
$ipfil = "ip.txt";

//Selve filen
if($mode == "indtast" && $submode != "gem") {
$fp = fopen("$ipfil","r");
$adresser = fgets($fp,4096);
fclose($fp);
echo "<html>

<head>
<meta http-equiv='Content-Language' content='da'>
<meta name='GENERATOR' content='Microsoft FrontPage 5.0'>
<meta name='ProgId' content='FrontPage.Editor.Document'>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1252'>
<title>indtastning</title>
</head>

<body>

<form method='POST' action='ban.php'>
  <p>
  IP-Adresser der skal bannes:<br>
  <input type='text' name='adresser' style='font-family: Verdana; font-size: 10 px; border: 1px solid #000000; background-color: #00FF00; width:400px' value='$adresser'><br>
  (Adskil med ; &quot;semikolon&quot;)<br>
  Eks. 10.0.0.2;10.0.0.3<br>
  <br>
  Og lav <b>ikke </b>linjeskift.<br>
  <input type='submit' value='GEM IP ADRESSER' name='B1' style='font-family: Verdana; font-size: 10 px; border: 1px solid #000000; background-color: #00FF00'></p>
  <input type='hidden' name='submode' value='gem'>
  <input type='hidden' name='mode' value='indtast'>
</form>

</body>

</html>";
} elseif($mode == "indtast" && $submode == "gem") {
$fp = fopen("$ipfil","w");
fputs($fp, $adresser);
fclose($fp);
echo"GEMT";
} else {
?><html>
<head>
<?
$forbindelse = fopen("$ipfil", "r");
$indhold = fgets($forbindelse, 4096);
fclose($forbindelse);
$tekst = $indhold;
$hver = split (";", $tekst);
$brip = $REMOTE_ADDR;
if (in_array ("$brip", $hver)) {
?>
<META HTTP-EQUIV=Refresh CONTENT=0;URL=<?=$url?> -->
</head>
</html><?}} ?>


<!--slut-->

For mig ser det ud som om man på denne side kan indtaste de IP-adresser som skal bannes - det virker bare ikke.
Jeg har manuelt indtastet min egen IP i filen ip.txt men det hjælper ikke så meget. I de tilfælde hvor ip.txt er tom - ja så bliver jeg banned ??????????

Nogen gode forslag??
Avatar billede jakoba Nybegynder
11. september 2004 - 18:03 #1
får du følgende felmelding:
  Not Found
  The requested URL /kontaktban.htm was not found on this server.
Det er hvad der skal ske hvis du er bannet.

hvis du ikke er bannet får du vist den htmlside der står efter linien:
  <!--slut-->
Avatar billede el-installatoer Nybegynder
11. september 2004 - 18:19 #2
Nopes ...
Jeg får ingen fejlmeddelse.
siden http://www.gh-el.dk/kontaktban.htm" er den side alle blokerede ipadresser sendes videre til.

Jeg kommer til den side som burde være blokeret -
dvs. at jeg kommer til http://www.gh-el.dk/kontaktban.htm" hvis txt filen er tom - Altså en blokering hvis ip.txt er tom, og ingen blokering hvis der står noget i ip.txt
- lidt omvendt.....
Avatar billede wickedd Juniormester
11. september 2004 - 18:21 #3
Hvis du har lyst til at prøve et andet script.. http://ip2.users.whitehat.dk
Avatar billede jakoba Nybegynder
11. september 2004 - 19:04 #4
Hmm.
du får en 'tom' celle bagerst i dit $hver array. og den vil muligvis matche $REMOTE_ADDR hvis register globals er off (ny php hvor scriptet er skrevet til den ældre version.

Prøv evt at insætte en debuglinie, så vi kan se hvad der bliver sammenlignet:
  ...
  $hver = split (";", $tekst);
  print_r( $hver );    //DEBUG LINIE.  fjernes igen når det virker.
  $brip = $REMOTE_ADDR;
  print_r( $brip );    //DEBUG LINIE.  fjernes igen når det virker.
  if (in_array ("$brip", $hver)) {
  ...
Avatar billede el-installatoer Nybegynder
11. september 2004 - 19:27 #5
wickedd : jeg har prøvet et lignende script med mysql, det er dog ikke lige noget jeg kunne overskue - det gik vist galt med oprettelsen af databasen. mysql er ikke lige mit område (endnu).. vil lige se om det her kommer til at virke - ellers så måske da :-)


jakoba : hvor skal den debuglinie placeres? på den side som skal beskyttes?
Avatar billede el-installatoer Nybegynder
11. september 2004 - 19:38 #6
jakoba : dumt sp før ... *G* jeg ser det er hentet fra ban.php - hvor du har tilføjet et par linier. Jeg har nnu sat det ind og forsøgt.
Resultat: på siden som skal beskyttes står der nu øverst -->

Array ( [0] => 58.7.5.65 )

58.7.5.65 er en tilfældig ip jeg har skrevet i ip.txt
Avatar billede jakoba Nybegynder
11. september 2004 - 19:39 #7
I din fil 'ban.php' (nede forneden hvor der testes).  Det er kun de 2 debug linier der sjkal indsættes de andre er der allerede.
Avatar billede el-installatoer Nybegynder
11. september 2004 - 19:43 #8
jeps, den er jeg med på - se min besked fra kl 19:38 (vi gik vist lige forbin hinanden der)
Avatar billede jakoba Nybegynder
11. september 2004 - 19:46 #9
Og der kom slet ingenting ud af  $brip  ?
Så skal du nok skifte fra:
  $brip = $REMOTE_ADDR;
til:
  $brip = $_SERVER['REMOTE_ADDR'];

prøv
Avatar billede el-installatoer Nybegynder
11. september 2004 - 19:47 #10
jakoba: jeg har nu tilføjet en ekstra tilfældig ip i ip.txt
siden der skal beskyttes viser nu følgende øverst----> 


Array ( [0] => 58.7.5.65 [1] => 90.43.2.2 )
Avatar billede el-installatoer Nybegynder
11. september 2004 - 19:55 #11
dit forslag af 19:46:42 virker ikke, jeg har godt nok selv den linie mistænkt, men det hjalp ikke :-(
Avatar billede jakoba Nybegynder
11. september 2004 - 20:06 #12
Så er det vel noget med at spørge din host hvorfor pokker remote_addr ikke bliver sat. Den burde være standard.
Avatar billede el-installatoer Nybegynder
11. september 2004 - 20:08 #13
jahh måske - men i forb med en formmail bruger jeg -->


<?php
$ip = getenv("REMOTE_ADDR");?>


- og den virker sammen med --->

    <tr><td></td><td><INPUT type="hidden" name="IP:" value="<?echo $ip;?>"</td></tr>

IP adressen bliver sendt med, så det er nok ikke det der er galt??
Avatar billede jakoba Nybegynder
11. september 2004 - 20:12 #14
så prøv med getenv og lad os se hvad der kommer ud af den.
Avatar billede el-installatoer Nybegynder
11. september 2004 - 20:14 #15
jeps, den har jeg netop lige prøvet, -->

$tekst = $indhold;
$hver = split (";", $tekst);
$ip = getenv("REMOTE_ADDR");
if (in_array ("$brip", $hver)) {



virker stadig ikke
Avatar billede el-installatoer Nybegynder
11. september 2004 - 20:27 #16
med $brip i 3. linie - virker heller ikke
Avatar billede el-installatoer Nybegynder
15. september 2004 - 11:39 #17
jakoba: jeg har fået løst problemet. egentlig foorstår jeg ikke at det ikke virkede før, det er stort set det samme. Du hjalp med lokalisering af problemet.
takker.

resultat-->

<?php
$ip = getenv("REMOTE_ADDR");
$url = "http://www.xx.dk";
$ipfil = "ip.txt";
$forbindelse = fopen("$ipfil", "r");
$indhold = fgets($forbindelse, 4096);
fclose($forbindelse);
$tekst = $indhold;
$hver = split (";", $tekst);
  if (in_array ("$ip", $hver)) {
?>
<html>
<head>
<META HTTP-EQUIV=Refresh CONTENT=0;URL=<?=$url?>
</head>
</html><?}?>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester