Avatar billede alizweb Nybegynder
17. januar 2005 - 20:48 Der er 24 kommentarer og
2 løsninger

tjekke de føste 3 cifre af en IP

Jeg har efter noget søgning fundet ud af at det er googlebot der blir ved med at være min mystiske online gæst.
For at undgå at jeg har en ekstra gæst online, skal mit online system  ikke registere google's IP som starter med 66.249 og så er problemet, hvordan får jeg bannet alle de IP'er der stammer fra disse 2 start numre?
Avatar billede morteeart Nybegynder
17. januar 2005 - 20:54 #1
har du prøvet med:

<?
$ip = $_SERVER['REMOTE_ADDR'];
$subip = substr($ip,0,6);
if($subip == "66.249") { header("Location: http://goat.cx"); }
?>
Avatar billede ellebaek Nybegynder
17. januar 2005 - 20:55 #2
$id = $_SERVER['REMOTE_ADDR'];
$bits = explode(".", $ip);

if ($bits[0] == 66) {
die("Not allowed ip");
}
Avatar billede alizweb Nybegynder
17. januar 2005 - 20:55 #3
havde tænkt på noget med
split($IP,".");
if(($IP[0] == "66") && ($IP[1] == "249"))

Hvis altså jeg husker split funktionen rigtigt.
Avatar billede ellebaek Nybegynder
17. januar 2005 - 20:55 #4
ja, og så hvis det næste skal med:

<?
$id = $_SERVER['REMOTE_ADDR'];
$bits = explode(".", $ip);

if ($bits[0] == 66 && $bits[1] == 249) {
die("Not allowed ip");
}
?>
Avatar billede ellebaek Nybegynder
17. januar 2005 - 20:56 #5
og så lige den sidste..
$id skal være $ip i første linie..

Så har jeg vidst styr på det ;-)
Avatar billede morteeart Nybegynder
17. januar 2005 - 20:59 #6
mht. google, så kan du vel bare bruge en robots.txt :D
Avatar billede alizweb Nybegynder
17. januar 2005 - 21:00 #7
okay :D
morteeart > kan du forklare substr? er ikke helt sikker på den. og hvor vil din være smartere end explode/split?

Post svar begge 2.
Avatar billede alizweb Nybegynder
17. januar 2005 - 21:01 #8
nej, og ja... det gør ikke noget google tjekker mine filer, bare den ikke vises på online bruger listen.
Har også googleads, det er måske derigennem den tjekker indhold.
Avatar billede ellebaek Nybegynder
17. januar 2005 - 21:01 #9
et svar her ;-)
Avatar billede detox Nybegynder
17. januar 2005 - 21:01 #10
Du kan osse benytte dig af ip2long():

$ipstart = ip2long('66.249.0.0');
$ipslut = ip2long('66.249.255.255');
if (ip2long($_SERVER['REMOTE_ADDR'])>=$ipstart && ip2long($_SERVER['REMOTE_ADDR'])<=$ipslut) {
    // Banned
}
Avatar billede ellebaek Nybegynder
17. januar 2005 - 21:03 #11
og kan da lige forklare substr..

$subip = substr($ip,0,6);
ovenstående gemmer de 6 tegn startende fra tegn nr. 0 if variablen $subip.

Ved ikke om der er nogen performance mæssig gevinst.
Avatar billede alizweb Nybegynder
17. januar 2005 - 21:03 #12
detox > hvordan håndtere ip2long input? altså hvad er output?
Avatar billede detox Nybegynder
17. januar 2005 - 21:04 #13
Jeg tror faktisk ikke engang det er nødvendigt at konvertere:

if ($_SERVER['REMOTE_ADDR']>='66.249.0.0' && $_SERVER['REMOTE_ADDR']<='66.249.255.255') {
    // Banned
}
Avatar billede detox Nybegynder
17. januar 2005 - 21:06 #14
ip2long() laver et heltal (altså den reélle adresse).
Avatar billede alizweb Nybegynder
17. januar 2005 - 21:06 #15
hvordan? 6624900 eller hva?
Avatar billede alizweb Nybegynder
17. januar 2005 - 21:07 #16
detox post et svar, så kan i 2 dele. hvis altså det er ok?
Avatar billede detox Nybegynder
17. januar 2005 - 21:12 #17
Næ, ip2long('66.249.0.0'); // giver: 1123614720.
Du skal tænke på en ip adresse som 4 dele der hver kan indeholde 0-255 (eller hex: 00 - FF).
Avatar billede alizweb Nybegynder
17. januar 2005 - 21:15 #18
ja okay, du må gerne forklare lidt nærmere hvis du vil og kan :D
Avatar billede detox Nybegynder
17. januar 2005 - 21:22 #19
Ok en ip adresse består af 4 dele af 8 bit. Fx:

1000010 11111001 00000000 00000001 // (66.249.0.1)

eller: 42 f9 00 01 // hexadecimalt
Avatar billede detox Nybegynder
17. januar 2005 - 21:29 #20
Det reelle tal kan så udregnes med:

66*256*256*256 + 249*256*256 + 0*256 +1 = 1123614721
Avatar billede detox Nybegynder
17. januar 2005 - 21:32 #21
Det giver mulighed for godt og vel 4,3 mia. adresser (4.294.967.296 helt præcist).
Avatar billede detox Nybegynder
17. januar 2005 - 21:37 #22
1000010 11111001 00000000 00000001 // (66.249.0.1)

skulle være:

01000010 11111001 00000000 00000001 // (66.249.0.1)
Avatar billede alizweb Nybegynder
17. januar 2005 - 21:58 #23
ja okay... så forstår jeg det...
Kan du udregne hex og binært i hoved?
Hvor er det at hex bliver brugt? for har aldrig set funktionaliteten af hverken oktal, hexadecimal eller binær.
Avatar billede detox Nybegynder
17. januar 2005 - 22:13 #24
Arh, det er nemmere med en lommeregner (fx den på pc'en ;O).
De forskellige talformater koomer sig vel af at en pc i bund og grund kun bruger 0'er og 1'er (altså binært). oktal og hexadecimal er så en nemmere måde at repræsentere binære tal på, fx: 11111111 = FF (255).
Der passer vores 10-tal system ikke særlig godt ;o)
Avatar billede detox Nybegynder
17. januar 2005 - 22:16 #25
Du bruger det fx osse når du skal angive farver i html (fx: rød = #ff0000). Altså 8 bit til hver farve: #rød,grøn,blå
Avatar billede morteeart Nybegynder
17. januar 2005 - 23:32 #26
www.php.net/substr

Vist nemmest at se eksemplerne :)
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