Avatar billede shifter Nybegynder
19. juli 2000 - 11:18 Der er 15 kommentarer og
1 løsning

Redirect udfra land

Jeg har ledt med lys og lygte efter en stump kode, der kan gøre følgende:

Detecte hvilket land brugeren kommer fra og sende den videre til enten den ene eller den anden side.

Det var den lette del! :)

Det reelle problem er, at Telia-kunder jo så vil blive betragtet som udlændinge, og det er mindre heldigt.

Den eneste brugbare løsning, jeg kan komme på, er, at telia (eller andre for den sags skyld) een gang for alle fortæller scriptet, at de er danskere, hvorefter scriptet husker det via en cookie.

Okay, det var hele to ting - hvis du kun kan klare første del af problemet er der 300 points - og 700 hvis du kan klare både redirection OG cookiesetting...
Avatar billede breum Nybegynder
19. juli 2000 - 16:16 #1
Har du adgang til at bruge .shtml
???
Det med telia kan nu godt lade sig gøre uden cookies....
Avatar billede y2k Nybegynder
19. juli 2000 - 16:29 #2
hej,
de fleste webservere understøtter variablen $ENV{'REMOTE_HOST'} som normalt returnerer f.eks. brugerid.udbyder.landetstopdomain.
f.eks. ville den hos en cybercity-bruger returnere 44.ppp3.cybercity.dk eller lignende. visse webservere understøtter dog ikke denne variabel, men her er et eksempel der tager forbehold for dette:

$RemoteHost = $ENV{'REMOTE_HOST'};
if ((!$RemoteHost) || ($RemoteHost =~ m!^\d+\.\d+\.\d+\.\d+$!)) {
    if ($ENV{'REMOTE_ADDR'} =~ m!^(\d+)\.(\d+)\.(\d+)\.(\d+)$!) {
        $RemoteHost = (gethostbyaddr(pack('C4',$1,$2,$3,$4),2))[0] || $ENV{'REMOTE_ADDR'};
        }
    }
$RemoteHost = lc($RemoteHost);
$country = (split(/\./,$RemoteHost))[$#_];
if  ((split(/\./,$RemoteHost))[$#_-1] eq 'telia') { $country = 'dk/se';}

print "content-type: text*html\n\nDu kommer fra: ".uc($country);
exit;


dette script skulle gerne skrive, at du kommer fra DK hvis du bruger f.eks. cybercity eller worldonline osv...

/y2k
Avatar billede y2k Nybegynder
19. juli 2000 - 16:31 #3
lige lidt vejledning;
$country er landekoden med små bogstaver
uc($country) er den samme, men med store bogstaver..
$RemoteHost er hele brugerens adresse (f.eks. 144.ppp3-1.worldonline.dk)
Avatar billede y2k Nybegynder
19. juli 2000 - 16:39 #4
og så lidt ekstra godter:
hvis du tilføjer følgende:

%CountryCodes = (
      'ad','Andorra',
      'ae','United Arab Emirates',
      'af','Afghanistan',
      'ag','Antigua and Barbuda',
      'ai','Anguilla',
      'al','Albania',
      'am','Armenia',
      'an','Netherlands Antilles',
      'ao','Angola',
      'aq','Antarctica',
      'ar','Argentina',
      'as','American Samoa',
      'at','Austria',
      'au','Australia',
      'aw','Aruba',
      'az','Azerbaijan',
      'ba','Bosnia and Herzegovina',
      'bb','Barbados',
      'bd','Bangladesh',
      'be','Belgium',
      'bf','Burkina Faso',
      'bg','Bulgaria',
      'bh','Bahrain',
      'bi','Burundi',
      'bj','Benin',
      'bm','Bermuda',
      'bn','Brunei Darussalam',
      'bo','Bolivia',
      'br','Brazil',
      'bs','Bahamas',
      'bt','Bhutan',
      'bv','Bouvet Island',
      'bw','Botswana',
      'by','Belarus',
      'bz','Belize',
      'ca','Canada',
      'cc','Cocos (Keeling) Islands',
      'cf','Central African Republic',
      'cg','Congo',
      'ch','Switzerland',
      'ci','Cote DIvoire (Ivory Coast)',
      'ck','Cook Islands',
      'cl','Chile',
      'cm','Cameroon',
      'cn','China',
      'co','Colombia',
      'cr','Costa Rica',
      'cs','Czechoslovakia (Former)',
      'cu','Cuba',
      'cv','Cape Verde',
      'cx','Christmas Island',
      'cy','Cyprus',
      'cz','Czech Republic',
      'de','Germany',
      'dj','Djibouti',
      'dk','Denmark',
      'dm','Dominica',
      'do','Dominican Republic',
      'dz','Algeria',
      'ec','Ecuador',
      'ee','Estonia',
      'eg','Egypt',
      'eh','Western Sahara',
      'er','Eritrea',
      'es','Spain',
      'et','Ethiopia',
      'fi','Finland',
      'fj','Fiji',
      'fk','Falkland Islands (Malvinas)',
      'fm','Micronesia',
      'fo','Faroe Islands',
      'fr','France',
      'fx','France (Metropolitan)',
      'ga','Gabon',
      'gb','Great Britain (UK)',
      'gd','Grenada',
      'ge','Georgia',
      'gf','French Guiana',
      'gh','Ghana',
      'gi','Gibraltar',
      'gl','Greenland',
      'gm','Gambia',
      'gn','Guinea',
      'gp','Guadeloupe',
      'gq','Equatorial Guinea',
      'gr','Greece',
      'gs','S. Georgia and S. Sandwich Islands',
      'gt','Guatemala',
      'gu','Guam',
      'gw','Guinea-Bissau',
      'gy','Guyana',
      'hk','Hong Kong',
      'hm','Heard and McDonald Islands',
      'hn','Honduras',
      'hr','Croatia (Hrvatska)',
      'ht','Haiti',
      'hu','Hungary',
      'id','Indonesia',
      'ie','Ireland',
      'il','Israel',
      'in','India',
      'io','British Indian Ocean Territory',
      'iq','Iraq',
      'ir','Iran',
      'is','Iceland',
      'it','Italy',
      'jm','Jamaica',
      'jo','Jordan',
      'jp','Japan',
      'ke','Kenya',
      'kg','Kyrgyzstan',
      'kh','Cambodia',
      'ki','Kiribati',
      'km','Comoros',
      'kn','Saint Kitts and Nevis',
      'kp','North Korea',
      'kr','South Korea',
      'kw','Kuwait',
      'ky','Cayman Islands',
      'kz','Kazakhstan',
      'la','Laos',
      'lb','Lebanon',
      'lc','Saint Lucia',
      'li','Liechtenstein',
      'lk','Sri Lanka',
      'lr','Liberia',
      'ls','Lesotho',
      'lt','Lithuania',
      'lu','Luxembourg',
      'lv','Latvia',
      'ly','Libya',
      'ma','Morocco',
      'mc','Monaco',
      'md','Moldova',
      'mg','Madagascar',
      'mh','Marshall Islands',
      'mk','Macedonia',
      'ml','Mali',
      'mm','Myanmar',
      'mn','Mongolia',
      'mo','Macau',
      'mp','Northern Mariana Islands',
      'mq','Martinique',
      'mr','Mauritania',
      'ms','Montserrat',
      'mt','Malta',
      'mu','Mauritius',
      'mv','Maldives',
      'mw','Malawi',
      'mx','Mexico',
      'my','Malaysia',
      'mz','Mozambique',
      'na','Namibia',
      'nc','New Caledonia',
      'ne','Niger',
      'nf','Norfolk Island',
      'ng','Nigeria',
      'ni','Nicaragua',
      'nl','Netherlands',
      'no','Norway',
      'np','Nepal',
      'nr','Nauru',
      'nt','Neutral Zone',
      'nu','Niue',
      'nz','New Zealand (Aotearoa)',
      'om','Oman',
      'pa','Panama',
      'pe','Peru',
      'pf','French Polynesia',
      'pg','Papua New Guinea',
      'ph','Philippines',
      'pk','Pakistan',
      'pl','Poland',
      'pm','St. Pierre and Miquelon',
      'pn','Pitcairn',
      'pr','Puerto Rico',
      'pt','Portugal',
      'pw','Palau',
      'py','Paraguay',
      'qa','Qatar',
      're','Reunion',
      'ro','Romania',
      'ru','Russian Federation',
      'rw','Rwanda',
      'sa','Saudi Arabia',
      'sb','Solomon Islands',
      'sc','Seychelles',
      'sd','Sudan',
      'se','Sweden',
      'sg','Singapore',
      'sh','St. Helena',
      'si','Slovenia',
      'sj','Svalbard and Jan Mayen Islands',
      'sk','Slovak Republic',
      'sl','Sierra Leone',
      'sm','San Marino',
      'sn','Senegal',
      'so','Somalia',
      'sr','Suriname',
      'st','Sao Tome and Principe',
      'su','USSR (Former)',
      'sv','El Salvador',
      'sy','Syria',
      'sz','Swaziland',
      'tc','Turks and Caicos Islands',
      'td','Chad',
      'tf','French Southern Territories',
      'tg','Togo',
      'th','Thailand',
      'tj','Tajikistan',
      'tk','Tokelau',
      'tm','Turkmenistan',
      'tn','Tunisia',
      'to','Tonga',
      'tp','East Timor',
      'tr','Turkey',
      'tt','Trinidad and Tobago',
      'tv','Tuvalu',
      'tw','Taiwan',
      'tz','Tanzania',
      'ua','Ukraine',
      'ug','Uganda',
      'uk','United Kingdom',
      'um','US Minor Outlying Islands',
      'us','United States',
      'uy','Uruguay',
      'uz','Uzbekistan',
      'va','Vatican City State (Holy See)',
      'vc','Saint Vincent and the Grenadines',
      've','Venezuela',
      'vg','Virgin Islands (British)',
      'vi','Virgin Islands (US)',
      'vn','Viet Nam',
      'vu','Vanuatu',
      'wf','Wallis and Futuna Islands',
      'ws','Samoa',
      'ye','Yemen',
      'yt','Mayotte',
      'yu','Yugoslavia',
      'za','South Africa',
      'zm','Zambia',
      'zr','Zaire',
      'zw','Zimbabwe',
      'com','US Commercial',
      'edu','US Educational',
      'gov','US Government',
      'int','International',
      'mil','US Military',
      'net','Network',
      'org','Non-Profit Organization',
      'arpa','Old-Style Arpanet',
      'nato','NATO Field',
      'xxx','Unresolved Domain',
      'ooo','Non-Standard Domain'
      'se/dk','Danmark/Sverige (Telia)'
      );

så kan du lave en
print "Dit land hedder: ".$CountryCodes{$country};
Avatar billede y2k Nybegynder
19. juli 2000 - 16:40 #5
lige en rettelse til min første kode:
der skal selvfølgeligt stå "text/html" og ikke "text*html" ;-)
Avatar billede shifter Nybegynder
19. juli 2000 - 17:01 #6
Hmmm... det ser jo fint ud, men du skriver "de fleste". Vil det så sige, at der er brugere, der bliver sendt til Ingenmandsland og hvad med Telia-brugerne?
Avatar billede breum Nybegynder
19. juli 2000 - 17:04 #7
Nej han mener at det måske ikke virker på din webserver, men det finder du ud af ved at prøve
Avatar billede breum Nybegynder
19. juli 2000 - 17:19 #8
mht til telia så har han det med, der findes dog en meget lettere og hurtigere løsning, hvis du kan bruger .shtml hvilket du sikkert kan når din udbyder har åbent for perl.

prøv at se på http://www.breum.dk/landetest her bliver du viderestillet til http://www.rejs-med.dk hvis du er dansker (incl telia) og http://www.edderkoppens.net hvis du ikke er.

Siden er på 5 linier og bruger ikke andet end .shtml, meget simpel at gå til og rette, skriv hvis du vil have den mailet.

y2ks løsning er dog også fin, omend langsommere da den skal starte en perl-process op på serveren. Og den er formodentlig også sværere for dig at rette i???
Avatar billede breum Nybegynder
19. juli 2000 - 17:50 #9
Man kan iøvrigt lade det stå på samme URL, således viser http://www.breum.dk/landetest2/ en side hvorpå der står: "Hej dansker det er rart at se dig!" hvis du er dansker ellers står der "Hello there, nice to see you!" Det virker på samme måde som ovenstående, men URLen beholdes, og det er ikke FRAME. Iøvrigt, hvis du vælger min løsning synes jeg alligevel at du skulle give y2k nogle points, idet hans løsning også vil virke, hvis du klikker på avanceret, kan du dele pointsene som du ønsker, .
Avatar billede y2k Nybegynder
19. juli 2000 - 18:22 #10
breum, nu giver du jo egentligt intet svar på, hvordan han tjekker landet. du henviser blot til en shtml-side, som man jo takket være webserveren ikke aner en bønne om.
at starte en perl process tager normalt ikke mere end 1/4 sekund, så det med at processen er langsommere er vist bare tom snak..og så kan mit script trods alt mere end bare sige om man er dansk eller ej. ;)

og til shifter;
nej, det jeg mener er, at nogle webservere understøtter en variabel der hedder $ENV{'REMOTE_HOST'}, andre gør ikke. men dette er ligegyldigt, eftersom mit script selv laver variablen hvis den ikke findes, så alle kommer et sted hen :-)
Avatar billede shifter Nybegynder
19. juli 2000 - 18:43 #11
Takker for svarene. Eftersom y2k var først med det korrekte svar OG jeg bedte om et perl-script, får han points'ene...
Avatar billede breum Nybegynder
19. juli 2000 - 20:31 #12
shifter>> fint fint, når du bruger hans løsning skal du selvfølgelig også give ham pointsene.

y2k>> Jeg giver da et svar, jeg har lavet .shtml-siden og tilbudt at maile den, hvis det er det han ønsker. Og jeg mener stadig at min løsning, laver præcis det der bliver bedt om. Så jeg forstår ikke din kritik. Ja din løsning er sat til at kunne mere, men det er ting der ikke er bedt om, den kan, og det ville være meget let at tilføje andre lande på min, hvis man ønsker det. Med hensyn til det 1/4 sekund, så betyder det efter min mening en hel del, hvis man har et velbesøgt site. Perl er meget fint at bruge. Men efter min mening ikke her.
Avatar billede shifter Nybegynder
20. juli 2000 - 10:24 #13
Jeg kom lige i tanke om noget.

Hvordan kan jeg sikre mig, at det hele fungerer i den engelske udgave? Jeg kan jo ikke lige hooke mig op via en engelsk udbyder! :)
Avatar billede breum Nybegynder
21. juli 2000 - 10:23 #14
Med risiko for at lyde point-grådig, så burde du vel have oprettet et nyt spørgsmål til dette. Nå men jeg svarer gerne uden point:

det er såmen ret simpelt, og du kan gøre det på flere måder, men den letteste er at få en server i usa til at hente siden, det gør du således:
skriv i adressefeltet i din browser
http://anon.free.anonymizer.com/http://www.breum.dk/landetest2/

Så ser du min side som den ser ud, hvis den bliver hentet af en .com surfer

Du skal således bare udskifte http://www.breum.dk/landetest2/ med adressen på dit site for at checke det. God fornøjelse med din redirect!!!
Avatar billede breum Nybegynder
21. juli 2000 - 10:36 #15
Du kan iøvrigt også slippe for reklamerne, så skal du bare skrive Din url igen i http-feltet hvor reklamerne er
Avatar billede ianj Nybegynder
14. juli 2001 - 19:18 #16
Hvad nu hvis der ingen reverse-dns findes på den host man accesser den fra, er man så automatisk erklæret udlænding ?

Det ville vel være lidt dårligt.

Måske nogle socket connects til en whois server, for at konstatere originen af IPv4 IP\'en ?

Plus hvad nu hvis man skulle være så pop man kom fra en IPv6 IP ?

/Ian - ADVICE A/S
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
Kurser inden for grundlæggende programmering

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