WinFuture-Forum.de: Herkunftsland/provider Auslesen - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Herkunftsland/provider Auslesen PHP


#1 Mitglied ist offline   F481 

  • Gruppe: aktive Mitglieder
  • Beiträge: 292
  • Beigetreten: 13. April 08
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:daheim ^^

geschrieben 29. Januar 2009 - 15:39

Hallo Leute ich möchte das Herkunftsland eines Besuchers auf einer HP auslesen.
Hab mich ein wenig schlau gemacht und bin dabei auf "HTTP_ACCEPT_LANGUAGE" ist aber net geeignet soviel ich weiß...
Dann bin ich auf die Seite http://ip-to-country.webhosting.info/ gestoßen und da ist es möglich, mittels IP das Land herauszufinden (so wie ich das verstanden habe ^^).

Gibt es noch andere Möglichkeiten?
Könnte mir jm erklären wie das funktioniert mit den IP´s und wie ich das dann in der Praxis mach und so..

Thx im voraus

Dieser Beitrag wurde von F481 bearbeitet: 10. Februar 2009 - 13:01

0

Anzeige



#2 _lustiger_affe_

  • Gruppe: Gäste

geschrieben 29. Januar 2009 - 15:58

Perl + GeoIP macht es einfach.

Gibt einige öffentliche Datenbanken, die die Zugehörigkeit von IP-Blöcken zu Providern und damit Ländern offerieren.

Dieser Beitrag wurde von lustiger_affe bearbeitet: 29. Januar 2009 - 16:07

0

#3 Mitglied ist offline   loedl 

  • Gruppe: aktive Mitglieder
  • Beiträge: 38
  • Beigetreten: 16. Juli 08
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:.AT

geschrieben 29. Januar 2009 - 16:09

Gibt mehrere Möglichkeiten.
Entweder du lässt ein Script den Hostnamen resolven und dann anhand des Hosts auf das Herkunftsland schliessen (nicht 100% akkurat), oder du schliesst eine Whois-Sache ein (gibt viele vorgefertige Sachen, siehe Vorredner). Maxmind etwa bietet hier auch eine relative solide whois/database-based Lösung an ('www.maxmind.com/app/locate_my_ip' , da kannst überprüfen was das System über deine IP aussagen kann) allerdings kosten solche Fertig-Sachen auch ziemlich viel Geld. Wenn du geschickt mit Scripts bist kannst du dir eventuell selbst was bauen, das WHOIS-Server mit den Besucher-IPs anqueried und Statistiken ausgibt mit Herkunftsländern etc. Auch ne Möglichkeit ist es, einen der diversen, ich nenns jetzt mal 'Besucher-Logger' zu verwenden, diese speichern Besucher, zählen wieviele Benutzer du hast/hattest und generieren entsprechende Statistiken auch nach Herkunftsland, hier wäre zB. CNstats ein Beispiel, das ich kenne.
0

#4 _lustiger_affe_

  • Gruppe: Gäste

geschrieben 29. Januar 2009 - 16:24

Ich weis ja nicht, worauf du genau abzielst, aber im (noch aktuellen) LinuxMagazin(02/09, nächste Ausgabe am 05.02.09) ist im Prinzip genau das drin. Dort wird mittels Perl+GeoIP eine Weltkarte eingefärbt, um zu verdeutlichen, wo Spammer herkommen - ergo nicht wirklich schwierig, für andere Szenarien zu adaptieren.

Das Prinzip kannst du in der Zeitung nachlesen, das passende Skript ist dieses - ich paste es auch mal hier, falls Fragen aufkommen:

CODE
#!/usr/local/bin/perl -w
###########################################
# spam2geo
# Mike Schilli, 2008 ([email protected])
###########################################
use strict;
use LWP::UserAgent;
use URI::URL;
use List::Util qw(max min);

use IP::Country::MaxMind;
use ApacheLog::Parser
qw(parse_line_to_hash);

my $gi =
IP::Country::MaxMind->open("GeoIP.dat");

my %by_country;

open LOG, "<access.log" or
die "Can't open access.log ($!)";

while(<LOG>) {
chomp;
my %fields = parse_line_to_hash $_;

# only proceed if forum post
next if $fields{file} !~ /posting/;

my $country =
$gi->inet_atocc( $fields{client} );

if(defined $country) {
$by_country{ $country }++;
}
}

close LOG;

# Convert values to Google format
my @SYMBOLS = ("A" .. "Z",
"a" .. "z", 0 .. 9);

my $max = max values %by_country;
my $min = min values %by_country;

for my $country (keys %by_country) {

my $val = $by_country{ $country };
my $norm = ($val - $min) /
$max * $#SYMBOLS;

$by_country{ $country } = $norm;
}

my $chld = join "", keys %by_country;
my $data = join "", values %by_country;

# Fetch chart
my $ua = LWP::UserAgent->new();

my $uri = URI::URL->new(
"http://chart.apis.google.com/chart");

$uri->query_form(
cht => "t",
chs => "440x220",
chtm => "world",
chd => "s:$data",
# white, yellow, red
chco => "ffffff,f4ed28,f11414",
chld => $chld,
# light blue
chf => "bg,s,EAF7FE"
);

my $resp = $ua->get($uri);

# Print image on success
if($resp->is_success()) {

open FILE, ">file.png" or die;
print FILE $resp->content();
close FILE;
system ("eog file.png");
} else {

die $resp->request->url() . " failed\n";
}

0

#5 Mitglied ist offline   F481 

  • Gruppe: aktive Mitglieder
  • Beiträge: 292
  • Beigetreten: 13. April 08
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:daheim ^^

geschrieben 10. Februar 2009 - 13:03

okay i habs mit meiner Version gemacht..^^
äh nun will ich den provider auslesen, aber wenn ich dies bei meinem machen
kommt da dies raus "p57A512C4.dip0.t-ipconnect.de" also iwas mit t-ipconnect.de obwohl ich eig bei
1&1 bin... kann mir das mal jm erklären.. (proxy? oder geht das net bei allen? oder was ist da los? ^^)

Dieser Beitrag wurde von F481 bearbeitet: 10. Februar 2009 - 13:08

0

#6 _lustiger_affe_

  • Gruppe: Gäste

geschrieben 10. Februar 2009 - 16:45

1&1 nutzt, wie viele andere auch, die Infrastruktur der Telekom, hat aber feste IP-Blöcke.
0

#7 Mitglied ist offline   F481 

  • Gruppe: aktive Mitglieder
  • Beiträge: 292
  • Beigetreten: 13. April 08
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:daheim ^^

geschrieben 10. Februar 2009 - 21:29

gibt es dazu auch eine liste, in der die Ip-Blöcke dem Provider zugeordnet sind?
0

#8 Mitglied ist offline   F481 

  • Gruppe: aktive Mitglieder
  • Beiträge: 292
  • Beigetreten: 13. April 08
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:daheim ^^

geschrieben 27. Februar 2009 - 11:52

Gibt es solche Listen auch?

Ich habe ein weiteres Problem...
Um das Herkunftsland auszulesen benötigt man eine bestimmte "Formel".
Zuerst teilt man die IP in "A.B.C.D".
Dann wird diese Formel angewandt:

IP Number = A x (256*256*256) + B x (256*256) + C x 256 + D

Und dieses Ergebnis müsste ich dann in der Liste finden die man downloaden kann..
Nur ich finde mein Ergebnis nicht in der Liste. Ich hab mir en kl. Script geschrieben, welches
meiner Meinung nach in Ordnung ist:

<?php

  $ip = $_SERVER['REMOTE_ADDR'];
  $teile = explode(".","$ip");
  $A = $teile[0];
  $B = $teile[1];
  $C = $teile[2];
  $D = $teile[3];

  $ip_vergleich = (($A * (256*256*256)) + ($B * (256*256)) + ($C * 256) + $D);

  $ip_country_open = file("ip-to-country.csv");
  for($x=0;$x<=count($ip_country_open);$x++) {
	  $zeile	= 0;
	  $zeile	= explode("\t", $ip_country_open[$x]);
	  if($ip_vergleich == $zeile[0] || $ip_vergleich == $zeile[1]) {
		  echo $zeile[4];
	  }
  }

?>


Aber der untere Teil ist ja jetzt erst mal egal, weil mein Ergebnis nicht in
der Liste vorkommt.. ist ein Berechnungsfehler im Script oder woran liegt
das? Wäre für Hilfe sehr dankbar =).
Die Anleitung nochmal hier.
0

#9 Mitglied ist offline   F481 

  • Gruppe: aktive Mitglieder
  • Beiträge: 292
  • Beigetreten: 13. April 08
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:daheim ^^

geschrieben 08. März 2009 - 21:29

*PUSH*!!
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0