Accesskontrol

1 view
Skip to first unread message

Bertel Lund Hansen

unread,
May 6, 2020, 11:32:28 AM5/6/20
to
Jeg har fået lavet mig et adgangstjek til mine sider som jeg (som
sædvanlig) selv synes er smart.

Jeg har fundet en webside hvor man kan bede om lister med
ip-intervaller der tilhører et land. Jeg har så lavet et
Python-script der kan samle listerne fra udvalgte lande,
komprimere dem så nabointervaller slås sammen til ét, og derefter
oversætte ip-numrene til decimaltalsintervaller som så gemmes i
en fil.

Rå fil (.cn = China):

1.0.1.0-1.0.1.255
1.0.2.0-1.0.3.255
1.0.8.0-1.0.15.255
1.0.32.0-1.0.63.255
...
(Den opmærksomme læser vil have opdaget at to af intervallerne er
naboer)

Færdig fil klar til brug:

<?php
$banned_intervals = [
[16777472,16778239],
[16779264,16809983],
[16842752,16843007],
[16843264,16875519],
...

I en mappe på serveren lægger jeg så denne liste samt et script
der tjekker brugeren og exit'er hvis det er en uønsket gæst. De
ser kun en tom side.

Scriptet skal bare inkluderes (med den rigtige serversti) i
begyndelsen af index.php.

Den version jeg selv bruger, gemmer en logfil med 6 data per
ønsket bruger sådan at man kan få en statistik der ser sådan ud:

http://fiduso.dk/_statistics.php

Aflæsningen af hvilket land ip-nummeret tilhører, forudsætter at
der er adgang til de nødvendige lister. Det betyder at der skal
hentes en ny hver gang der dukker et ip-nummer op uden tilhørende
nationalitet.

Er det noget som andre kan have interesse i? Jeg stiller gerne
alle relevante scripts til rådighed, både Python- og PHP-scripts,
men måske Python-operationerne er for indviklede for hvermand
(stierne er lokale og specifikke)? Det PHP-script der tjekker
brugeren, er derimod rimeligt simpelt at forstå og at anvende, og
man kan let fjerne de logninger som jeg selv bruger.

Jeg vil ikke offentliggøre filerne her medmindre I overbeviser
mig om at det ikke er noget problem. Ellers kan I få dem i en
mail.

PS. Jeg spærrer også ved at aflæse brugerens tld hvis den er
tilgængelig. Der er nemlig nogle domæner fra ét land der hostes i
et andet land.

PPS. Jeg kan ikke garantere for korrektheden. Det website jeg
bruger, er ikke altid enig med sig selv. Men scriptet har fjernet
en stor mængde uønskede besøg.

--
/Bertel

Arne Vajhøj

unread,
May 6, 2020, 12:38:36 PM5/6/20
to
On 5/6/2020 11:32 AM, Bertel Lund Hansen wrote:
> Jeg har fået lavet mig et adgangstjek til mine sider som jeg (som
> sædvanlig) selv synes er smart.
>
> Jeg har fundet en webside hvor man kan bede om lister med
> ip-intervaller der tilhører et land.

Sådanne findes - bl.a. MaxMind.
En god use case for auto_prepend_file måske?

> PPS. Jeg kan ikke garantere for korrektheden. Det website jeg
> bruger, er ikke altid enig med sig selv. Men scriptet har fjernet
> en stor mængde uønskede besøg.

Geolocation er aldrig perfekt.

Arne


Kim Ludvigsen

unread,
May 6, 2020, 1:02:14 PM5/6/20
to
Den 06.05.2020 kl. 17.32 skrev Bertel Lund Hansen:
> Jeg har fået lavet mig et adgangstjek til mine sider som jeg (som
> sædvanlig) selv synes er smart.

Sådan har jeg det også, når jeg laver noget nyt. Desværre holder
følelsen ikke altid i længden.

> PPS. Jeg kan ikke garantere for korrektheden. Det website jeg
> bruger, er ikke altid enig med sig selv. Men scriptet har fjernet
> en stor mængde uønskede besøg.

Jeg ville ikke turde/ønske at fjerne adgang, medmindre det er et klart
forsøg på hacking, og selv der ville jeg normalt ikke gide gøre noget.
Det generer vel ikke, at der er ekstra trafik på serveren (den fjernes
jo så alligevel ikke helt), og du risikerer at nægte legitim trafik
adgang til siderne.

Hvorfor ikke bare acceptere trafikken og så i stedet sortere dem fra i
statistikken? Der betyder det jo ikke så meget, om du får sorteret en
for meget fra eller til i en statistik.

--
Mvh. Kim Ludvigsen

Bertel Lund Hansen

unread,
May 6, 2020, 1:04:06 PM5/6/20
to
Arne Vajhøj skrev:

> En god use case for auto_prepend_file måske?

Måske - hvis man er sikker på at man vil udelukke de samme
nationer på alle sine websider. Jeg har forskellige målgrupper på
forskellige sider.

--
/Bertel

Bertel Lund Hansen

unread,
May 6, 2020, 1:24:56 PM5/6/20
to
Kim Ludvigsen skrev:

> Hvorfor ikke bare acceptere trafikken og så i stedet sortere dem fra i
> statistikken?

Fordi jeg så skal opdatere løbende.

Jeg bruger scriptet på obese.dk og fiduso.dk. Begge websider er
decideret rettet mod dansktalende, så det vil være et mindretal
der bliver afskåret. Jeg har ikke spærret for Thailand ...

> Der betyder det jo ikke så meget, om du får sorteret en
> for meget fra eller til i en statistik.

Nej, det er mere irritation over dem der forøger at hacke
serveren, der har motiveret mig.

--
/Bertel

Kim Ludvigsen

unread,
May 6, 2020, 1:41:18 PM5/6/20
to
Den 06.05.2020 kl. 19.24 skrev Bertel Lund Hansen:
> Kim Ludvigsen skrev:
>
>> Hvorfor ikke bare acceptere trafikken og så i stedet sortere dem fra i
>> statistikken?
>
> Fordi jeg så skal opdatere løbende.

Jeg forstår ikke forskellen. Hvis din løsning virker automatisk til
blokering af sidevisninger, virker den vel også automatisk til at
forhindre, at der gemmes i statistikken.

Nu er det nok ikke så sandsynligt i øjeblikket, men det kunne jo tænkes,
at en søgemaskine som Google oprettede et datacenter i Kina eller et
andet blokeret land, som så skulle bruges af deres webcrawler. I så
fald, ville siderne risikere at blive slettet fra søgemaskinen.

--
Mvh. Kim Ludvigsen

Jan Hansen

unread,
May 6, 2020, 3:17:25 PM5/6/20
to
Bertel Lund Hansen skrev:

> Er det noget som andre kan have interesse i? Jeg stiller gerne
> alle relevante scripts til rådighed, både Python- og PHP-scripts,
> men måske Python-operationerne er for indviklede for hvermand

Det er for mig i hvert fald. Jeg hentede en ntpserver på
<https://github.com/fygrave/honeyntp/blob/master/ntpserver.py>
og brugte et halvt døgn på at få den til at lyve en time under
sommertid. Kan det ikke laves i php i stedet for? Det er man jo
alligevel tvunget til at lære for at lave hjemmeside.

> Jeg vil ikke offentliggøre filerne her medmindre I overbeviser
> mig om at det ikke er noget problem.

Det er nok ikke noget problem, de kan jo ligge i en mappe, hvor
der ikke er nogen adgang. PHP filerne kan så vises frem med
highlight_file fra en anden mappe.
Python filerne kan om ikke andet pakkes med zip.



--
mvh Jan.
Help Microsoft stamp out piracy. Give
Linux to a friend today!

Bertel Lund Hansen

unread,
May 6, 2020, 3:32:06 PM5/6/20
to
Kim Ludvigsen skrev:

>> Fordi jeg så skal opdatere løbende.

> Jeg forstår ikke forskellen.

Du har ret. Jeg havde min tidligere løsning i baghovedet.

--
/Bertel

Bertel Lund Hansen

unread,
May 6, 2020, 3:44:06 PM5/6/20
to
Jan Hansen skrev:

>> Er det noget som andre kan have interesse i? Jeg stiller gerne
>> alle relevante scripts til rådighed, både Python- og PHP-scripts,
>> men måske Python-operationerne er for indviklede for hvermand

> Det er for mig i hvert fald. Jeg hentede en ntpserver på
> <https://github.com/fygrave/honeyntp/blob/master/ntpserver.py>

Den er sørme også indviklet. Men jeg bliver skeptisk når jeg ser
sådan noget som dette her:

def _to_int(timestamp):
"""Return the integral part of a timestamp.
Parameters:
timestamp -- NTP timestamp
Retuns:
integral part
"""
return int(timestamp)

Alt mellem """ er kommentarer, så funktionen er her:

def _to_int(timestamp):
return int(timestamp)

Skulle _to_int() være så meget bedre forklarende end int() at det
kræver en hel funktion?

> og brugte et halvt døgn på at få den til at lyve en time under
> sommertid. Kan det ikke laves i php i stedet for?

Man kan lyve så tosset man vil med PHP, men det kan nok ikke
pille ved opsætningen af en veldrevet server. Skal du virkelig
have serveren til at lyve, eller er det nok på hjemmesiden?

Kan du ikke bare stille om på uret?

> Det er man jo alligevel tvunget til at lære for at lave
> hjemmeside.

Ja. PHP er sådan set nemt at gå til, men det er desværre et
kaotisk organiseret sprog.

> Det er nok ikke noget problem, de kan jo ligge i en mappe,[...]

Jeg kikker på det i morgen.

--
/Bertel

Jan Hansen

unread,
May 6, 2020, 5:26:52 PM5/6/20
to
Bertel Lund Hansen skrev:

> Jan Hansen skrev:
>
> >> Er det noget som andre kan have interesse i? Jeg stiller gerne
> >> alle relevante scripts til rådighed, både Python- og PHP-scripts,
> >> men måske Python-operationerne er for indviklede for hvermand
>
> > Det er for mig i hvert fald.

Det jeg mente var, at sådan noget python er svært for mig, og om ikke
dine python filer kunne laves i php.

> > Jeg hentede en ntpserver på
> > <https://github.com/fygrave/honeyntp/blob/master/ntpserver.py>
>
> Den er sørme også indviklet. Men jeg bliver skeptisk når jeg ser
> sådan noget som dette her:
>
> def _to_int(timestamp):
> """Return the integral part of a timestamp.
> Parameters:
> timestamp -- NTP timestamp
> Retuns:
> integral part
> """
> return int(timestamp)
>
> Alt mellem """ er kommentarer, så funktionen er her:
>
> def _to_int(timestamp):
> return int(timestamp)
>
> Skulle _to_int() være så meget bedre forklarende end int() at det
> kræver en hel funktion?

Sikkert ikke, og det bliver ikke bedre af, at han skriver variabel og
funktions navne på engelsk, så flader det hele i mine øjne ud til
det rene volapyk. Det havde været meget nemmere, hvis han skrev urdu
eller serbokroatisk: Står der noget engelsk-agtigt, skal jeg finde
forklaringen i python-manualen, står der noget anderledes, skal jeg
finde forklaringen andetsteds i samme fil. I php kan man da i det
mindste kende variablerne på $.

> Man kan lyve så tosset man vil med PHP, men det kan nok ikke
> pille ved opsætningen af en veldrevet server. Skal du virkelig
> have serveren til at lyve, eller er det nok på hjemmesiden?

Det var nu ikke på hjemmeside, jeg skulle bruge den ntp-server.
Jeg har et kamera mage til
https://www.pinterest.dk/pin/402931497892329366/
Det er så smart lavet, at det virker via noget direktX eller aktivX
eller hvad det nu hedder, noget der kun er i windows. I opsætningen
på det kan man vælge tidszone, og skrive adresse og port på en
ntp-server, men sommertid har konstruktøren åbenbart ikke hørt om.
Jeg havde så valget imellem at skulle starte windows og skifte
tidszone på det ved skift mellem sommer og vintertid, eller jeg
kunne lave noget ntp, der skifter om for det.

Skulle andre have noget elektronik med samme fejl er løsningen:
udskift

def system_to_ntp_time(timestamp):
return timestamp + NTP.NTP_DELTA

med

def system_to_ntp_time(timestamp):
localtid = time.localtime()
if localtid.tm_isdst>0:
timestamp = timestamp + 3600
return timestamp + NTP.NTP_DELTA

Bertel Lund Hansen

unread,
May 6, 2020, 11:38:04 PM5/6/20
to
Jan Hansen skrev:

> Det jeg mente var, at sådan noget python er svært for mig, og om ikke
> dine python filer kunne laves i php.

Nå jo, det kunne de godt. Men Python er sådan ca. 100 gange
hurtigere at skrive programmer i fordi det er så smart et sprog.

Jeg ved ikke om jeg orker at lægge det om til PHP, men det ville
ikke være første gang jeg lavede den operation.

--
/Bertel

Bertel Lund Hansen

unread,
May 7, 2020, 1:37:25 PM5/7/20
to
Bertel Lund Hansen skrev:

> Jeg har fået lavet mig et adgangstjek til mine sider som jeg (som
> sædvanlig) selv synes er smart.

Nu kan I få filerne at se. De ligger på det domæne der ender på
lundhansen.dk og som starter med temp.

Hvis I skriver den webadresse og tilføjer links+html, åbner en
side med fire links.

Hvis I vil hente filerne, skal I bare bruge det nederste link.

--
/Bertel

Jan Hansen

unread,
May 7, 2020, 4:38:46 PM5/7/20
to
Bertel Lund Hansen skrev:

> Hvis I vil hente filerne, skal I bare bruge det nederste link.

Så er der lidt at øve sig på igen.
Hvad skal der ligge i mappen
originals = AC_base+'csv_files_originals/'
er det IP2LOCATION-LITE-DB1.CSV
eller
GeoLite2-Country-Blocks-IPv4.csv
eller noget helt tredie?

Arne Vajhøj

unread,
May 7, 2020, 10:44:15 PM5/7/20
to
On 5/6/2020 3:17 PM, Jan Hansen wrote:
> Kan det ikke laves i php i stedet for? Det er man jo
> alligevel tvunget til at lære for at lave hjemmeside.

PHP er uhyre udbredt til hjemmesider og en mulighed
hos næsten alle web hoteller.

Men du er ikke nødt til at bruge PHP til en
(dynamisk) hjemmeside.

Du kan vælgeÆ C# (ASP.NET), VB.NET (ASP.NET), Java,
Ruby (RoR), JavaScript (Node), Python og flere andre.

Arne

Bertel Lund Hansen

unread,
May 8, 2020, 1:17:47 AM5/8/20
to
Arne Vajhøj skrev:

> Du kan vælgeÆ C# (ASP.NET), VB.NET (ASP.NET), Java,
> Ruby (RoR), JavaScript (Node), Python og flere andre.

... afhængigt af serverens opsætning. Hos den hoteludbyder jeg
har valgt, er Python f.eks. (desværre) ikke en mulighed.

--
/Bertel

Bertel Lund Hansen

unread,
May 8, 2020, 1:23:23 AM5/8/20
to
Jan Hansen skrev:

> originals = AC_base+'csv_files_originals/'

På siden

https://www.countryipblocks.net/acl.php

kan man bestille IP-ranges for f.eks. Danmark. Listen bliver vist
i den blå firkant til højre med en knap nedenunder der får
indholdet kopieret til clipboard.

Det indhold sætter jeg så ind i en fil jeg kalder dk.txt, som så
skal ligge i AC_base+'csv_files_originals/'. Formatet er:

aaa.bbb.ccc.ddd-eee.fff.ggg.hhh

Hvorfor så csv? En ren forglemmelse. De første filer jeg brugte,
var fra en anden webside hvor man fik csv-filer, og derfor brugte
jeg det i min kode - og glemte at rette det til da jeg gik over
til tekstfiler.

--
/Bertel

Jan Hansen

unread,
May 8, 2020, 5:06:32 AM5/8/20
to
Bertel Lund Hansen skrev:

> På siden
>
> https://www.countryipblocks.net/acl.php
>
> kan man bestille IP-ranges for f.eks. Danmark. Listen bliver vist
> i den blå firkant til højre med en knap nedenunder der får
> indholdet kopieret til clipboard.
>
> Det indhold sætter jeg så ind i en fil jeg kalder dk.txt, som så
> skal ligge i AC_base+'csv_files_originals/'. Formatet er:
>
> aaa.bbb.ccc.ddd-eee.fff.ggg.hhh

Den side er der ikke meget liv i lige i øjeblikket, heller ikke fra
https://www.isitdownrightnow.com/countryipblocks.net.html

Men bortset fra at jeg har sat en > og et par mellemrum på, må det vel
være mage til det fra http://www.sniper-pistol.com/myip/findip.php
Når ellers siden er oppe, kommer 167.99.37.81 så med på en liste
over Holland?

Der står i usercheck.inc.php noget med
require_once '/home/www/lundhansen.dk/access_control/banned_intervals.inc.php';
Hvad står der i den fil?

Bertel Lund Hansen

unread,
May 8, 2020, 5:40:50 AM5/8/20
to
Jan Hansen skrev:

>> https://www.countryipblocks.net/acl.php

> Den side er der ikke meget liv i lige i øjeblikket,

Jeg har ingen problemer med den.

> Når ellers siden er oppe, kommer 167.99.37.81 så med på en liste
> over Holland?

Når jeg slår nummeret op på siden, får jeg at vide at det er et
usa-nummer.
I listen over NL-numre er det ikke med. Der er kun følgende to
linjer med 167:

167.81.0.0-167.81.255.255
167.202.192.0-167.202.223.255

I listen med USA-numre forekommer følgende linje:

167.99.0.0-167.99.255.255

> Der står i usercheck.inc.php noget med
> require_once '/home/www/lundhansen.dk/access_control/banned_intervals.inc.php';
> Hvad står der i den fil?

<?php
$banned_intervals = [
[16777472,16778239],
[16779264,16809983],
[16842752,16843007],
[16843264,16875519],
...

Det var det jeg viste i det første indlæg som
"Færdig fil klar til brug:".

--
/Bertel

Jan Hansen

unread,
May 8, 2020, 5:55:39 AM5/8/20
to
Arne Vajhøj skrev:

> On 5/6/2020 3:17 PM, Jan Hansen wrote:
> > Kan det ikke laves i php i stedet for? Det er man jo
> > alligevel tvunget til at lære for at lave hjemmeside.
>
> PHP er uhyre udbredt til hjemmesider og en mulighed
> hos næsten alle web hoteller.
>
> Men du er ikke nødt til at bruge PHP til en
> (dynamisk) hjemmeside.

Det er korrekt. Jeg retter mig selv:
... at lave hjemmeside på webhotel.

> Du kan vælgeÆ C# (ASP.NET), VB.NET (ASP.NET), Java,
> Ruby (RoR), JavaScript (Node), Python og flere andre.

På min egen computer har jeg også stadig mod-perl installeret,
selvom det er mange år siden, jeg har brugt det. Min counter
strike server laggede, når hjemmesiden brugte alt båndbredden,
så til sidst bed jeg i det sure æble og flyttede på webhotel.
Der var jeg så tvangsindlagt til at lære PHP, og siden da er
alt min fritid gået med at lappe hjemmesider, der forsvinder
hver gang det bras bliver opdateret.

Men når fibernet bliver udbredt, så der er båndbredde nok,
kommer det måske på mode igen at lave hjemmesider, når man kan
bruge andet end php.

Krabsen

unread,
May 8, 2020, 8:50:03 AM5/8/20
to
Den 08-05-2020 kl. 11:55 skrev Jan Hansen:

> På min egen computer har jeg også stadig mod-perl installeret,
> selvom det er mange år siden, jeg har brugt det. Min counter
> strike server laggede, når hjemmesiden brugte alt båndbredden,
> så til sidst bed jeg i det sure æble og flyttede på webhotel.
> Der var jeg så tvangsindlagt til at lære PHP, og siden da er
> alt min fritid gået med at lappe hjemmesider, der forsvinder
> hver gang det bras bliver opdateret.

Sådan har vi forskellige oplevelser.

Jeg har en del php-drevne sites kørende, alt fra simple databaser til
avancerede medlemskartoteker med booking system m.v.

Og jeg har aldrig problemer med opgraderinger:

- Webhotellet fortæller, at der er en ny php version.
- Jeg checker om den giver problemer i relation til min kode.

De fleste går glat; i enkelte tilfælde skal der laves små justeringer.
Så aftaler jeg bare med webhotellet, at de lader mit site køre på den
gamle php-version til jeg melder klar.

Bertel Lund Hansen

unread,
May 8, 2020, 11:56:19 AM5/8/20
to
Jan Hansen skrev:

>> Men du er ikke nødt til at bruge PHP til en
>> (dynamisk) hjemmeside.

> Det er korrekt. Jeg retter mig selv:
> ... at lave hjemmeside på webhotel.

Jamen, det er heller ikke rigtigt. Der er skam udbydere der har
sat nogle af de andre webkodesprog op på deres servere.

> Der var jeg så tvangsindlagt til at lære PHP, og siden da er
> alt min fritid gået med at lappe hjemmesider, der forsvinder
> hver gang det bras bliver opdateret.

Jeg vælger selv tegnsæt og PHP-version på alle mine domæner. Jeg
får ikke at vide om der er kommet en ny PHP-version. Det opdager
jeg først hvis jeg vipper valglisten ned og ser at der er kommet
flere muligheder til.

> Men når fibernet bliver udbredt, så der er båndbredde nok,
> kommer det måske på mode igen at lave hjemmesider, når man kan
> bruge andet end php.

Kik dig omkring på nettet. Der er mange hjemmesider der ikke er
lavet i PHP.

En træffer på DuckDuckGo:

Webhoteller med CMS, JSP, TOMCAT, Java, ASP, .NET, Open Source
CMS, VELKOMMEN TIL CMS-HOTEL & WEB-HOTEL [...]

--
/Bertel

Jan Hansen

unread,
May 8, 2020, 1:09:30 PM5/8/20
to
Bertel Lund Hansen skrev:

> Jeg vælger selv tegnsæt og PHP-version på alle mine domæner. Jeg
> får ikke at vide om der er kommet en ny PHP-version. Det opdager
> jeg først hvis jeg vipper valglisten ned og ser at der er kommet
> flere muligheder til.

Ja, jeg bliver også på gigahost, jeg gider ikke "opdatere" mere php.

> > Men når fibernet bliver udbredt, så der er båndbredde nok,
> > kommer det måske på mode igen at lave hjemmesider, når man kan
> > bruge andet end php.
>
> Kik dig omkring på nettet. Der er mange hjemmesider der ikke er
> lavet i PHP.
>
> En træffer på DuckDuckGo:
>
> Webhoteller med CMS, JSP, TOMCAT, Java, ASP, .NET, Open Source
> CMS, VELKOMMEN TIL CMS-HOTEL & WEB-HOTEL [...]

Ja, men prisen er også derefter: 29 kr pr. md. for 10 MB, 49 for 100 MB,
og hvis der skal være subdomæner starter prisen ved 149 kr pr md. Det er
ingen stavefejl, der står MB og ikke GB. Til den pris tror jeg de fleste
tager til takke med php, eller holder deres egen server på noget fibernet.

Kim Ludvigsen

unread,
May 8, 2020, 1:21:41 PM5/8/20
to
Den 08.05.2020 kl. 19.09 skrev Jan Hansen:

> ingen stavefejl, der står MB og ikke GB. Til den pris tror jeg de fleste
> tager til takke med php, eller holder deres egen server på noget fibernet.

Det med egen server kan jeg ikke anbefale. Jeg startede i sin tid med at
bruge min egen computer som webserver, men det gav en masse stress,
fordi det blev meget vigtigt, at computeren altid kørte. Ikke mindst,
hvis jeg var hjemmefra i flere dage i træk, var det stressende.

Jeg regnede desuden dengang ud, at ved at bruge en ekstra computer,
kostede det ca. 2.000 kroner ekstra om året i strøm - jeg ved ikke, hvad
det vil koste i vore dage. Bruger man sin almindelige computer, skal man
naturligvis kun regne med ekstra strøm, hvis man plejer at slukke den om
natten.

Hertil kommer naturligvis sådan noget som sikkerhed, som webhotellerne
nok har mere styr på end de fleste almindelige nørder.

--
Mvh. Kim Ludvigsen

Bertel Lund Hansen

unread,
May 8, 2020, 1:29:32 PM5/8/20
to
Jan Hansen skrev:

> Ja, men prisen er også derefter:

Det var bare et tilfældigt eksempel. I sin tid faldt jeg over
mange websider der kørte ASP (almindelig - ikke den nette
udgave). Men måske er de blevet udkonkurreret?

--
/Bertel

Arne Vajhøj

unread,
May 8, 2020, 1:50:44 PM5/8/20
to
On 5/6/2020 5:26 PM, Jan Hansen wrote:
> Sikkert ikke, og det bliver ikke bedre af, at han skriver variabel og
> funktions navne på engelsk, så flader det hele i mine øjne ud til
> det rene volapyk. Det havde været meget nemmere, hvis han skrev urdu
> eller serbokroatisk: Står der noget engelsk-agtigt, skal jeg finde
> forklaringen i python-manualen, står der noget anderledes, skal jeg
> finde forklaringen andetsteds i samme fil. I php kan man da i det
> mindste kende variablerne på $.

Normalt foretrækker man at variabelnavne fortæller hvad variablen
indeholder.

Det kræver et beskrivende navn i et sprog som læseren forstår.

Engelsk er normalt et god bud på sådant et sprog.

Arne

Jan Hansen

unread,
May 8, 2020, 2:03:57 PM5/8/20
to
Kim Ludvigsen skrev:

> Jeg regnede desuden dengang ud, at ved at bruge en ekstra computer,
> kostede det ca. 2.000 kroner ekstra om året i strøm - jeg ved ikke, hvad
> det vil koste i vore dage. Bruger man sin almindelige computer, skal man
> naturligvis kun regne med ekstra strøm, hvis man plejer at slukke den om
> natten.

Ja, lidt strøm bruger det selvfølgelig, hvis computeren står og kører alene
for at holde hjemmeside. Men... hvis den står et sted, der alligevel er
opvarmet, er det gratis om vinteren. Den varme, computeren laver, er nok
ikke så meget dyrere end den, der ellers ville komme fra en radiator.
Jeg skal så ikke gøre mig klog på, om det giver et bedre indeklima, at
blæserne sætter luften i bevægelse, eller om det medfører træk, der kan
give gigt.
Der skal nok være nogle meget tunge udregninger på hjemmesiden, for at det
ikke kører udmærket på en raspberry pi. Strømforsyningen til min pi2 kan
give 2 ampere ved 5 volt, det må være 10 watt eller 87 kWh på år. Men det
er jo kun når cpu arbejder, at den bruger så meget strøm. Den har også den
fordel, at "harddisken" er et sd-kort til 80 kr. Hvis det skulle holde op
med at virke, tager det ikke et minut at sætte et kort med sikkerhedskopi
i den, og få hjemmesiden op og køre igen.

Jan Hansen

unread,
May 8, 2020, 2:13:30 PM5/8/20
to
Bertel Lund Hansen skrev:

> Det var bare et tilfældigt eksempel. I sin tid faldt jeg over
> mange websider der kørte ASP (almindelig - ikke den nette
> udgave). Men måske er de blevet udkonkurreret?

Hos surftown kunne man selv vælge imellem php og asp til samme
pris, det ser ud til det stadig gælder hos det simply.com, som
de kalder sig nu.

Arne Vajhøj

unread,
May 8, 2020, 2:30:39 PM5/8/20
to
On 5/8/2020 5:55 AM, Jan Hansen wrote:
> Arne Vajhøj skrev:
>> On 5/6/2020 3:17 PM, Jan Hansen wrote:
>>> Kan det ikke laves i php i stedet for? Det er man jo
>>> alligevel tvunget til at lære for at lave hjemmeside.
>>
>> PHP er uhyre udbredt til hjemmesider og en mulighed
>> hos næsten alle web hoteller.
>>
>> Men du er ikke nødt til at bruge PHP til en
>> (dynamisk) hjemmeside.
>
> Det er korrekt. Jeg retter mig selv:
> ... at lave hjemmeside på webhotel.

Du kan godt få web hoteller med andre sprog.

Men de er normalt dyrere.

> så til sidst bed jeg i det sure æble og flyttede på webhotel.
> Der var jeg så tvangsindlagt til at lære PHP, og siden da er
> alt min fritid gået med at lappe hjemmesider, der forsvinder
> hver gang det bras bliver opdateret.

Jeg vil mene at man kan undgå mange problemer ved at
tænke lidt fremad.

Eksempel:

Den gamle mysql extension forsvandt i 7.x, men erstatningerne
havde været klar i et årti, og de sidste år inden 7.x kom
på gaden var mysql extension dokumenteret som deprecated. Det
er ikke rettidig omhu at vente til den forsvandt i 7.x

Arne

Arne Vajhøj

unread,
May 8, 2020, 2:34:14 PM5/8/20
to
ASP/IIS/Windows kræver licens, hviket koster penge.

Men derudover så er seneste version af ASP (3.0)
20 år gammel og dermed aldeles forældet.

Arne


Jan Hansen

unread,
May 8, 2020, 3:39:21 PM5/8/20
to
Arne Vajhøj skrev:

> Normalt foretrækker man at variabelnavne fortæller hvad variablen
> indeholder.

Det er sikkert rigtigt nok, hvis man ved hvad man har med at gøre.
Jeg aner intet om python, og ser en linie med

def system_to_ntp_time(timestamp):

Så er det store spørgsmål, hvad er timestamp? Er det en variabel,
eller er det noget python, der svarer til php's time()?
Eller måske det, som uret i hjørnet af skærmen viser, når nu det
hedder system_to_ntp_time?
Efter at have googlet "python timestamp" kom jeg frem til at det
må være en variabel. Det havde jeg kunnet gætte med det samme,
hvis der havde stået zeit, zeitstempel eller horodatage.
Samtidig må det give programmøren en vis anseelse, at have lært
andet end easy engelsk i skolen.

Arne Vajhøj

unread,
May 8, 2020, 4:06:12 PM5/8/20
to
On 5/8/2020 3:39 PM, Jan Hansen wrote:
> Arne Vajhøj skrev:
>> Normalt foretrækker man at variabelnavne fortæller hvad variablen
>> indeholder.
>
> Det er sikkert rigtigt nok, hvis man ved hvad man har med at gøre.
> Jeg aner intet om python, og ser en linie med
>
> def system_to_ntp_time(timestamp):
>
> Så er det store spørgsmål, hvad er timestamp? Er det en variabel,
> eller er det noget python, der svarer til php's time()?
> Eller måske det, som uret i hjørnet af skærmen viser, når nu det
> hedder system_to_ntp_time?
> Efter at have googlet "python timestamp" kom jeg frem til at det
> må være en variabel.

Python:

def system_to_ntp_time(timestamp):

svarer til PHP:

function system_to_ntp_time($timestamp) {

Udfra konteksten så skal det være et argumentnavn.

Arne


Bertel Lund Hansen

unread,
May 9, 2020, 2:35:09 AM5/9/20
to
Jan Hansen skrev:

> Jeg aner intet om python, og ser en linie med

> def system_to_ntp_time(timestamp):

> Så er det store spørgsmål, hvad er timestamp?

Det kan kun være en variabel. Funktioner får overført variable på
den måde.

Jeg er lidt forundret over at du er så glad for $-tegnene. De
irriterer mig til stadighed. PHP er det eneste sprog jeg har
prøvet, der mærker variable.

--
/Bertel

Martin Larsen

unread,
May 9, 2020, 4:47:04 AM5/9/20
to
On 08.05.2020 11.55, Jan Hansen wrote:

>> Men du er ikke nødt til at bruge PHP til en
>> (dynamisk) hjemmeside.

> Det er korrekt. Jeg retter mig selv:
> ... at lave hjemmeside på webhotel.

Nope!

Jeg bruger mere og mere Vue.js. Det er et javascript-framework som er
uhyre elegant, intuitivt og lækkert at arbejde med. Og tilmed meget let
at lære.

Man arbejder deklarativt, dvs. en stor del af funktionaliteten
deklareres direkte i HTML-koden. Det gør at den samlede kode bliver
koncis, letforståelig og effektiv.

Et godt eksempel er https://motionsorientering.dk/ som jeg har lavet som
en del af et større igangværende projekt.

Det er en samlet oversigt over arrangementer i Dansk Orienterings-Forbund.

Data fås fra en bagvedliggende JSON-fil der opdateres to gange dagligt.
Resten renderes direkte i browseren.

Prøv at kigge på HTML-koden og se hvor simpel den er. Og det er ikke
fordi den tilhørende JS-fil så omvendt er specielt indviklet:
https://motionsorientering.dk/js/index.js

Et par udvalgte eksempler fra koden:

<input type="search" placeholder="Filtrér på klubnavn" v-model="filter"
title="ESC sletter feltet" autofocus @dblclick="resetFilter"
@keydown.esc="resetFilter">

v-model er det datasæt elementet er bundet til. Der er tale om en
tovejsbinding. Hvis data ændrer sig, gør indholdet af inputfeltet det
også. Og omvendt.

@dblclick kalder funktionen resetFilter når man dobbeltklikker på
elementet. Det samme med @keydown.esc som kalder samme funktion. Det er
altså kun hvis man trykker Escape. Man kunne også have valgt fx
@keydown.enter, så ville den reagere på Enter osv.

resetFilter sætter bare filter="".


<div class="klub" v-for="klub in klubber">

Dette er containeren for hver klub. Denne DIV bliver gentaget for hver
klub i klubber. Det sørger Vue selv for. Inde i hver DIV vil klub
referere til den aktuelle klub i iterationen.

<a target="_blank" :href="klubUrl(klub.fbID)">{{klub.name}}</a></h1>

Dette laver en A tag hvor href sættes ud fra klubbens facebook-ID.
Teksten {{klub.name}} erstattes af Vue automatisk af klubbens navn.


Jeg har arbejdet professionelt med programmering siden 1992 eller
deromkring og jeg har været forbi mange sprog og frameworks. Vue.js er
ubetinget det der har givet mig den bedste oplevelse!

Jeg kan klart anbefale det. Det er meget let at lære og egner sig også
til helt små projekter som Kim Ludvigsens valutaomregner. Og det kan
snildt bruges drypvis til en enkelt ting på en eksisterende hjemmeside.

--
tv4ever.dk
bedrevejr.dk

Jan Hansen

unread,
May 9, 2020, 7:34:55 AM5/9/20
to
Bertel Lund Hansen skrev:

> Jan Hansen skrev:
>
> > Jeg aner intet om python, og ser en linie med
>
> > def system_to_ntp_time(timestamp):
>
> > Så er det store spørgsmål, hvad er timestamp?
>
> Det kan kun være en variabel. Funktioner får overført variable på
> den måde.

Ja, det ved du. Men når man intet aner om python, er det ikke nemt
at gennemskue, når det er maskeret som noget, der ligeså godt kunne
være en del af python.

> Jeg er lidt forundret over at du er så glad for $-tegnene.
De gør det muligt at se, hvad der er variabler. Hvis variablerne har
navne, der helt åbenlyst ikke er en del af programmeringssproget,
er $ selvfølgelig ganske overflødige.

> De irriterer mig til stadighed. PHP er det eneste sprog jeg har
> prøvet, der mærker variable.

Så har du ikke leget med basic på Vic-20 eller Commodore64, der
markeres strenge med $, og heltal med %.
De er beskrevet på side 6 (36) i brugsanvisningen på
https://www.commodore.ca/manuals/c64_users_guide/c64-users_guide-03-beginning_basic_programming.pdf

Jan Hansen

unread,
May 9, 2020, 9:27:17 AM5/9/20
to
Martin Larsen skrev:

> On 08.05.2020 11.55, Jan Hansen wrote:
>
> >> Men du er ikke nødt til at bruge PHP til en
> >> (dynamisk) hjemmeside.
>
> > Det er korrekt. Jeg retter mig selv:
> > ... at lave hjemmeside på webhotel.
>
> Nope!
>
> Jeg bruger mere og mere Vue.js. Det er et javascript-framework som er
> uhyre elegant, intuitivt og lækkert at arbejde med. Og tilmed meget let
> at lære.
...
> Data fås fra en bagvedliggende JSON-fil der opdateres to gange dagligt.
> Resten renderes direkte i browseren.

Er den events.json noget, der bliver uploaded færdigt på siden? Hvis
webserverens eneste opgave er at sende færdige filer ud, virker det
selvfølgelig, uden hverken php eller andet programmering er nødvendig.

Bertel Lund Hansen

unread,
May 9, 2020, 2:21:31 PM5/9/20
to
Jan Hansen skrev:

> De gør det muligt at se, hvad der er variabler.

Jamen, det er navnenes position der afslører deres funktion.

> Så har du ikke leget med basic på Vic-20 eller Commodore64, der
> markeres strenge med $, og heltal med %.

Jo ... det havde jeg bare glemt.

--
/Bertel

Arne Vajhøj

unread,
May 9, 2020, 3:02:34 PM5/9/20
to
On 5/9/2020 7:34 AM, Jan Hansen wrote:
> Bertel Lund Hansen skrev:
>> Jeg er lidt forundret over at du er så glad for $-tegnene.

> De gør det muligt at se, hvad der er variabler. Hvis variablerne har
> navne, der helt åbenlyst ikke er en del af programmeringssproget,
> er $ selvfølgelig ganske overflødige.

Men er $ nu det rette tegn?

:-) :-) :-)

Jævnfør den klassiske https://aloneonahill.com/blog/if-php-were-british/ ...

Arne

Bertel Lund Hansen

unread,
May 9, 2020, 3:17:32 PM5/9/20
to
Arne Vajhøj skrev:
Smukt - især exit() => brexit()

--
/Bertel

Martin Larsen

unread,
May 9, 2020, 6:47:19 PM5/9/20
to
On 09.05.2020 15.27, Jan Hansen wrote:

> Er den events.json noget, der bliver uploaded færdigt på siden? Hvis
> webserverens eneste opgave er at sende færdige filer ud, virker det
> selvfølgelig, uden hverken php eller andet programmering er nødvendig.

Ja, JSON-filen bliver uploadet til serveren automatisk via ftp. Filen
bliver genereret på min Raspberry Pi af et NodeJS script. Men den kunne
komme hvorsomhelst fra.

Og du har ret, webserverens opgave er bare at sende de færdige filer ud.
Sitet kan faktisk køre direkte i browseren fra de statiske filer på min
harddisk.

--
tv4ever.dk
bedrevejr.dk

Krabsen

unread,
May 10, 2020, 2:21:12 AM5/10/20
to
Og der findes et værktøj der konverterer koden mySql -> mySqlI
I mine tilfælde har det konverteret i omegnen af 99% af kommandoerne..

Arne Vajhøj

unread,
May 10, 2020, 10:20:27 AM5/10/20
to
Kan det konvertere fra escape & streng konkatanering til
prepare?

Arne


Jakob Bohm

unread,
May 10, 2020, 3:21:02 PM5/10/20
to
On 09/05/2020 20:21, Bertel Lund Hansen wrote:
>
> Jan Hansen skrev:
>
>> De gør det muligt at se, hvad der er variabler.
>
> Jamen, det er navnenes position der afslører deres funktion.
>
>> Så har du ikke leget med basic på Vic-20 eller Commodore64, der
>> markeres strenge med $, og heltal med %.
>
> Jo ... det havde jeg bare glemt.
>

Der er også $ (etc.) prefix i flere af de gamle unix-sprog: Shell, Awk,
perl. Især perl var dominerende i webbets barndom og har stadig god
www-support.

Enjoy

Jakob
--
Jakob Bohm, MSc.Eng., I speak only for myself, not my company
This public discussion message is non-binding and may contain errors
All trademarks and other things belong to their owners, if any.

Bertel Lund Hansen

unread,
May 11, 2020, 2:30:13 AM5/11/20
to
Jakob Bohm skrev:

> Der er også $ (etc.) prefix i flere af de gamle unix-sprog: Shell, Awk,
> perl.

Dem har jeg ikke arbejdet med.

--
/Bertel

Krabsen

unread,
May 11, 2020, 2:35:26 AM5/11/20
to
Keine Ahnung ;-)

Jeg ved blot at den har konverteret alle mine mySql kald uden problemer.
Strengmanipulationer laver jeg som regel for sig, inden jeg opbygger
Sql-kaldet..


Men prøv..

* MySQLConverterTool
* Andrey Hristov <and...@php.net>, Ulf Wendel <ulf.w...@phpdoc.de>
* @copyright 1997-2006 The PHP Group

Arne Vajhøj

unread,
May 11, 2020, 9:34:08 AM5/11/20
to
Jeg fandt en nyere udgave af det her:

https://github.com/philip/MySQLConverterTool

Det laver bare en 1:1 oversættelse fra mysql_ kald til
matchende mysqli_ kald.

Det omskriver ikke til at bruge prepare.

Jeg vil ikke anbefale at bruge et sådant værktøj.

Kode der bruger mysql extension bør omskrives til
mysqli eller PDO extension med brug af prepare.

(eller ORM hvis det giver mening i konteksten)

Arne

Martin Larsen

unread,
May 11, 2020, 9:42:28 AM5/11/20
to
On 11.05.2020 15.34, Arne Vajhøj wrote:

> Kode der bruger mysql extension bør omskrives til
> mysqli eller PDO extension med brug af prepare.

Jeg synes PDO er rart at arbejde med. Bedre end mysqli.

--
tv4ever.dk
bedrevejr.dk

Jan Hansen

unread,
May 16, 2020, 11:38:23 AM5/16/20
to
Bertel Lund Hansen skrev:

> På siden
>
> https://www.countryipblocks.net/acl.php
>
> kan man bestille IP-ranges for f.eks. Danmark. Listen bliver vist
> i den blå firkant til højre med en knap nedenunder der får
> indholdet kopieret til clipboard.

Der er nu stadigvæk ikke liv, når jeg eller
https://www.isitdownrightnow.com/ prøver.
Men https://downforeveryoneorjustme.com/ og
https://www.websiteplanet.com/webtools/down-or-not/
siger der er liv, så jeg må åbenbart være banned på den side.

Men er deres data så præcise, så det kan bruges? Jeg kan se på
http://fiduso.dk/_statistics.php at der er 2 "Unknown country code"
Maxmind og ip2location siger samstemmende, at
109.232.2.118 = Iran
193.36.116.142 = Danmark

Jeg har forsøgt at sætte en banned_intervals.inc.php sammen ud
fra ip2location's data, http://www.sniper-pistol.com/myip/banliste.php
klik på de lande, der skal bannes og tryk på knappen.
Ligner output din fil?
Koden er selvfølgelig til at se med
http://www.sniper-pistol.com/myip/banliste.php?viskode

Arne Vajhøj

unread,
May 16, 2020, 12:12:18 PM5/16/20
to
On 5/16/2020 11:38 AM, Jan Hansen wrote:
> Bertel Lund Hansen skrev:
>> På siden
>>
>> https://www.countryipblocks.net/acl.php
>>
>> kan man bestille IP-ranges for f.eks. Danmark. Listen bliver vist
>> i den blå firkant til højre med en knap nedenunder der får
>> indholdet kopieret til clipboard.
>
> Der er nu stadigvæk ikke liv, når jeg eller
> https://www.isitdownrightnow.com/ prøver.
> Men https://downforeveryoneorjustme.com/ og
> https://www.websiteplanet.com/webtools/down-or-not/
> siger der er liv, så jeg må åbenbart være banned på den side.
>
> Men er deres data så præcise, så det kan bruges? Jeg kan se på
> http://fiduso.dk/_statistics.php at der er 2 "Unknown country code"
> Maxmind og ip2location siger samstemmende, at
> 109.232.2.118 = Iran
> 193.36.116.142 = Danmark

Geolocation er aldrig 100% præcis.

For land så er en lav kvalitet database vel
omkring 95% korrekt og en god kvalitet database
vel omkring 99% korrekt.

Lidt lavere procenter for delstat/provins og by.

Arne


Bertel Lund Hansen

unread,
May 16, 2020, 12:13:41 PM5/16/20
to
Jan Hansen skrev:

> Jeg har forsøgt at sætte en banned_intervals.inc.php sammen ud
> fra ip2location's data, http://www.sniper-pistol.com/myip/banliste.php
> klik på de lande, der skal bannes og tryk på knappen.
> Ligner output din fil?

Nej. Jeg laver min banned-fil i tre trin:

1. Saml alle enkeltfiler i et langt array.

2. Sorter filen (efter ip-numerisk værdi) og komprimer den (så
nabointervaller slås sammen). Format uændret:

5.10.78.16-5.10.78.23
5.32.128.0-5.32.135.255
5.53.128.0-5.53.255.255

3. Omsæt alle ip-adresser til deres numeriske værdi, og gem
arrayet som en include-fil. Format:

<?php
$banned_intervals = [
[16777472,16778239],
[16779264,16809983],
[16842752,16843007],

3-formatet giver den hurtigste søgning, og med binær søgning går
det rigtig tjep.

Derudover laver jeg numeriske filer for hver nations-fil så
statistikprogrammets søgning efter nationalitetskode også kan gå
stærkt. Format:

84561424-84561431
86016000-86018047
87392256-87425023

--
/Bertel

Bertel Lund Hansen

unread,
May 16, 2020, 12:44:40 PM5/16/20
to
Jan Hansen skrev:

> Men er deres data så præcise, så det kan bruges? Jeg kan se på
> http://fiduso.dk/_statistics.php at der er 2 "Unknown country code"
> Maxmind og ip2location siger samstemmende, at
> 109.232.2.118 = Iran
> 193.36.116.142 = Danmark

Iran har jeg ikke implementeret endnu. Jeg har kun de
nationaliteter som er dukket op.

Det med Danmark er en fejl. De siger på websiden at de gratis
data opdateres med 90 dages forsinkelse. Når jeg finder et hul
som det du omtaler, slår jeg intervallet op på websiden (det
oplyses når man søger på et enkelt IP-nummer) og tilføjer det
manuelt til min fil.

--
/Bertel

Jan Hansen

unread,
May 16, 2020, 12:46:37 PM5/16/20
to
Bertel Lund Hansen skrev:

> 3. Omsæt alle ip-adresser til deres numeriske værdi, og gem
> arrayet som en include-fil. Format:
>
> <?php
> $banned_intervals = [
> [16777472,16778239],
> [16779264,16809983],
> [16842752,16843007],
>
> 3-formatet giver den hurtigste søgning, og med binær søgning går
> det rigtig tjep.
Ups, jeg havde overset, at det ikke skulle skrives som IP. Nu skulle
det gerne være korrekt med de tal, som ip2location lite leverer.

Jan Hansen

unread,
May 16, 2020, 12:57:09 PM5/16/20
to
Arne Vajhøj skrev:

> > 109.232.2.118 = Iran
> > 193.36.116.142 = Danmark
>
> Geolocation er aldrig 100% præcis.
>
> For land så er en lav kvalitet database vel
> omkring 95% korrekt og en god kvalitet database
> vel omkring 99% korrekt.
>
> Lidt lavere procenter for delstat/provins og by.

Ja, men de to IP er nu med i de gratis databaser fra Maxmind
og ip2location.

Bertel Lund Hansen

unread,
May 16, 2020, 1:29:35 PM5/16/20
to
Jan Hansen skrev:

> Ups, jeg havde overset, at det ikke skulle skrives som IP. Nu skulle
> det gerne være korrekt med de tal, som ip2location lite leverer.

Ja, det er de. Du har lidt flere linjer end der er i mine filer,
men det kan være fordi du har bedre data.

--
/Bertel

Jan Hansen

unread,
May 16, 2020, 1:42:17 PM5/16/20
to
Bertel Lund Hansen skrev:

> Derudover laver jeg numeriske filer for hver nations-fil så
> statistikprogrammets søgning efter nationalitetskode også kan gå
> stærkt.

Det var smart. Når langt de fleste er danskere, er det til at
tjekke dem først. Hvis ikke der er bid, er det til at includere
noget mere omfattende.

Bertel Lund Hansen

unread,
May 17, 2020, 5:03:25 AM5/17/20
to
Jan Hansen skrev:

> Det var smart. Når langt de fleste er danskere, er det til at
> tjekke dem først. Hvis ikke der er bid, er det til at includere
> noget mere omfattende.

Sådan kunne man gøre, men jeg tager dem bare i alfabetisk
rækkefølge.

--
/Bertel

Bertel Lund Hansen

unread,
May 21, 2020, 10:39:26 AM5/21/20
to
Bertel Lund Hansen skrev:

[en hel masse]

Nu har jeg lavet en PHP-version. Den ligger her:

Folder: mine efternavne+dk + access_control
Filnavn: ac_ip_utilities + extension
Indsæt selv diverse skilletegn.

Brug evt. 'viskode'.

--
/Bertel

Bertel Lund Hansen

unread,
May 21, 2020, 10:45:46 AM5/21/20
to
Bertel Lund Hansen skrev:

> Nu har jeg lavet en PHP-version. Den ligger her:

Jeg glemte lige:

Den forudsætter at der ligger IP-lister på formen:

5.10.78.16-5.10.78.23
5.32.128.0-5.32.135.255
5.53.128.0-5.53.255.255

i en folder der hedder:

ipdata_files_originals

Resten af filer og mapper kan scriptet selv lave.

Største forbedring er at det nu kan sammenligne alle de
tilgængelige komprimerede IP-filer og finde overlap imellem dem.

Det undrer mig at den kører så stærkt, men når jeg lægger en kopi
af en af filerne ind under et andet navn, så myldrer det med
overlap, så forhåbentlig er den god nok.

Lige nu ligger der som test en kopi af cn-filen - kaldet yy.

--
/Bertel

Jan Hansen

unread,
May 21, 2020, 12:25:59 PM5/21/20
to
Bertel Lund Hansen skrev:

> Bertel Lund Hansen skrev:
>
> > Nu har jeg lavet en PHP-version. Den ligger her:
>
> Jeg glemte lige:
>
> Den forudsætter at der ligger IP-lister på formen:
>
> 5.10.78.16-5.10.78.23
> 5.32.128.0-5.32.135.255
> 5.53.128.0-5.53.255.255

Jeg har fosøgt at komprimere lidt, og har lavet databasen om
til binær udgave. Hver IP kan jo skrives i 4 bytes, og da de
gratis databaser kun indeholder områder, hvor sidste byte er
ens, er den fjerde byte til at spare væk. Der er under 256
lande, så jeg har sat én byte for landekode ind til hvert
område. Hele databasen er så kommet ned på 692 KB, og ved
hjælp af en liste over landenavne og -koder, kan det stadig
pakkes ud til den 8,1 MB .csv fil, det kommer fra.
Søgerutinen kunne nok laves lidt mere effektiv, hvis jeg
havde forstand på det, men det tager da ikke en evighed at
finde de 50 lande på hver side af for eksempel
http://www.sniper-pistol.com/stats/0907cs/

> Største forbedring er at det nu kan sammenligne alle de
> tilgængelige komprimerede IP-filer og finde overlap imellem dem.

Er der overlap? Hvis det er områder i forlængelse af hinanden,
har jeg prøvet at lave noget, der sætter dem sammen til et område.
Når jeg på http://www.sniper-pistol.com/geoip/ipliste.php laver en
liste over USA, kommer der i intervallet imellem 148.59.133.255 og
148.59.135.0 ti forskellige områder. Det samme med Canada.
Hvis jeg derimod laver en liste, hvor både Canada og USA er med,
bliver det sat sammen til ét område,
['148.59.134.0','148.59.134.255'],

Jan Hansen

unread,
May 21, 2020, 12:53:58 PM5/21/20
to
Jan Hansen skrev:

> Hvis jeg derimod laver en liste, hvor både Canada og USA er med,
> bliver det sat sammen til ét område,
> ['148.59.134.0','148.59.134.255'],

Det var vist noget sludder,
i intervallet imellem 148.59.133.255 og 148.60.0.0
kommer 10 områder fra enten USA eller Canada, de bliver
slået sammen til
['148.59.133.0','148.59.255.255'],

Bertel Lund Hansen

unread,
May 21, 2020, 2:25:43 PM5/21/20
to
Jan Hansen skrev:

> Søgerutinen kunne nok laves lidt mere effektiv, hvis jeg
> havde forstand på det,

Kender du binær søgning? Det er den mest effektive metode jeg
kender, og den er nem at forstå og implementere.

>> Største forbedring er at det nu kan sammenligne alle de
>> tilgængelige komprimerede IP-filer og finde overlap imellem dem.

> Er der overlap?

Det var der da jeg tog en fil fra Nirsoft der angiveligt skulle
svare til tld gb - men der var mange sammenfald med den uk-fil
jeg havde i forvejen. Det var derfor jeg lavede tjekrutinen.

> Hvis det er områder i forlængelse af hinanden, har jeg prøvet
> at lave noget, der sætter dem sammen til et område.

Det er det jeg kalder at komprimere filerne.

--
/Bertel

Jan Hansen

unread,
May 22, 2020, 7:24:49 AM5/22/20
to
Bertel Lund Hansen skrev:

> Kender du binær søgning? Det er den mest effektive metode jeg
> kender, og den er nem at forstå og implementere.

Jeg har forsøgt, men der må være noget, jeg har misforstået.
Det er for det meste lidt hurtigere på
http://www.sniper-pistol.com/geoip/test1.php
hvor jeg finder 100 tilfældige IP, først med det jeg har brugt
hidtil, og bagefter med noget, der skulle ligne binær søgning.
Det sjove er, at når jeg bytter om, så jeg først søger binært,
er den hidtige metode generelt hurtigere,
http://www.sniper-pistol.com/geoip/test2.php

Jeg søger i en streng - i stumper af 4 bytes - den stump, hvor
de første 3 bytes er mindre end eller lig søgestrengen, og
første 3 bytes i næste stump er større end søgestrengen.

Bertel Lund Hansen

unread,
May 23, 2020, 5:46:49 AM5/23/20
to
Jan Hansen skrev:

> Jeg har forsøgt, men der må være noget, jeg har misforstået.

Ja. Hvis du skal finde et element i et array, så kan du starte
forfra og sammenligne til der er en træffer. Worst case er at man
skal søge på alle elementerne.

Ved binær søgning sørger man først for at sortere det array der
skal søges på, og derefter sammenligner man med det midterste
element. Hvis det er for lille, søger man i den del der går fra
midten og op. Hvis det er for stort, søger man i den nederste
halvdel.

På samme måde opdeler man det nye afsnit der skal søges i og
bliver ved til elementet er fundet.

Hvis der er 1 mio. elementer, tager det højst
log2(1000000)=~19.93 søgninger, altså max 20. Det er noget andet
end den halve million man ellers skulle regne med i snit.

> Det er for det meste lidt hurtigere på
> http://www.sniper-pistol.com/geoip/test1.php
> hvor jeg finder 100 tilfældige IP, først med det jeg har brugt
> hidtil, og bagefter med noget, der skulle ligne binær søgning.
> Det sjove er, at når jeg bytter om, så jeg først søger binært,
> er den hidtige metode generelt hurtigere,
> http://www.sniper-pistol.com/geoip/test2.php

Den hurtigste måde at søge på som jeg har fundet, forudsætter at
man har ip-numrene konverteret til rene tal. Fra:

2.104.0.0-2.104.127.255

omregnes til

40370176-40894463

Hvis man så én gang omregner den IP man vil søge på til
decimaltal, så kan en sammenligning gå hurtigt.

Her er den rutine hvor jeg tjekker om en given IP ligger indenfor
et af de intervaller jeg vil udelukke:

function ip2int ($ip) {
$num=0;
foreach (explode('.',$ip) as $unit)
$num=$num*256+$unit;
return $num;
}

// IP check
$ip=$_SERVER['REMOTE_ADDR'];
$ip_value=ip2int($ip);
$low=0;
$high=count($banned_intervals);
while ($high-$low>1) {
$point=intdiv($low+$high,2);
list($pointbot)=$banned_intervals[$point];
if ($ip_value<$pointbot)
$high=$point;
else
$low=$point;
}
list($bot,$top)=$banned_intervals[$low];
if ($bot<=$ip_value && $ip_value<=$top)
exit();

--
/Bertel

Jan Hansen

unread,
Aug 2, 2020, 7:04:59 AM8/2/20
to
Martin Larsen skrev:

> On 08.05.2020 11.55, Jan Hansen wrote:
>
> >> Men du er ikke nødt til at bruge PHP til en
> >> (dynamisk) hjemmeside.
>
> > Det er korrekt. Jeg retter mig selv:
> > ... at lave hjemmeside på webhotel.
>
> Nope!
>
> Jeg bruger mere og mere Vue.js. Det er et javascript-framework som er
> uhyre elegant, intuitivt og lækkert at arbejde med. Og tilmed meget let
> at lære.
>
> Man arbejder deklarativt, dvs. en stor del af funktionaliteten
> deklareres direkte i HTML-koden. Det gør at den samlede kode bliver
> koncis, letforståelig og effektiv.
>
> Et godt eksempel er https://motionsorientering.dk/ som jeg har lavet som
> en del af et større igangværende projekt.

Er det med vilje, at den side er lavet, så den ikke kan ses i Firefox 50?
Eller er det noget blokering i Vue.js? Der kommer en linie øverst, hvor
der står "Motionsorientering" og 4 ikoner, og resten af siden er grå. Når
jeg klikker på overskriften kommer jeg frem til https://do-f.dk/
der virker i Firefox 50, både med og uden javascript. Den eneste forskel
er, at de billeder der kører på tværs forsvinder når jeg slår javascript fra.

Jeg kom i tanke om den side da jeg på trustpilot blev stillet videre til
https://dk.trustpilot.com/error/upgradebrowser?status=browser
men trustpilot virker trods alt stadigvæk, når jeg slår javascript fra.

Dennis Munding

unread,
Aug 2, 2020, 11:22:47 AM8/2/20