[ASP] ipadressen in een file tellen

Pagina: 1
Acties:
  • 172 views sinds 30-01-2008
  • Reageer

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
Hallo,

Ik wil graag IP nummers in een logfile tellen met ASP.

Nu kan ik de file al inlezen en ook weergeven, ik kan in eens heel de file lezen en ook regel voor regel, ik kan zelfs de line nummers ervoor zetten, maar ik heb echt geen flauw idee hoe ik IP nummers uit moet gaan lezen.

Kan dat zoiezo wel in ASP of moet ik iets met regexp's gaan doen?

Ik heb al het een en ander afgezocht maar ik kan gewoon een aantal functies of methodes niet vinden in ASP, iets in de zin van CountLine ofzo, dus als iemand mij opweg zou kunnen helpen zou ik u allen zeer dankbaar zijn ;)

edit:

Hmm vergeten in de toppic te zetten waar het over gaat |:(

mischien kan een modje even de toppic editten?

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 17-09 12:17

Basszje

Reisvaap!]

request.serverVariables("")

En dus tussen die haakjes een variabele waarvan ik naam ff niet meer weet :P . Check ff op www.devguru.com

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
nee ik wil een txt file uitlezen (logfile) en dat kan niet met request server variabelen...

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
www.w3schools.com check asp en dan filesystem object.

Verwijderd

<%
intRemoteIP= Request.ServerVariables("REMOTE_HOST")
SET objFile= Server.CreateObject("Scripting.FileSystemObject")
SET objTextStream= objFile.OpenTextFile(Server.MapPath("ip_list.txt"))
strFullText= objTextStream.ReadAll
arrIP= Split(strFullText,vbNewLine)
FOR i = 0 TO uBound(arrIP)-0
IF Trim(arrIP(i)) = intRemoteIP THEN
Response.Redirect("goawey.asp")
END IF
NEXT
%>

naja was een ban scriptje :)

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
daar heb ik al gekeken en daar staat niet het gene dat ik zoek...
code:
1
2
3
4
5
6
7
8
9
10
11
12
<%
intRemoteIP= Request.ServerVariables("REMOTE_HOST")
SET objFile= Server.CreateObject("Scripting.FileSystemObject")
SET objTextStream= objFile.OpenTextFile(Server.MapPath("ip_list.txt"))
strFullText= objTextStream.ReadAll
arrIP= Split(strFullText,vbNewLine)
FOR i = 0 TO uBound(arrIP)-0
IF Trim(arrIP(i)) = intRemoteIP THEN 
Response.Redirect("goawey.asp")
END IF
NEXT
%>

ik snap uit dit bovenstaande scriptje dat er alleen IP nummers in de txtfile staan,

in mijn logfile staan meerdere gegevens achter elkaar op 1 lijn dus hoe kan ik die dan uitlezen?

het bovenstaande scriptje kan dat ook niet...

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


Verwijderd

als je de textfile kan inlezen kan je toch wel met regular expressions het zooitje eruit trekken

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Ok, op www.4guysfromrolla.com staat een goede tutorial over reguliere expressies in vbscript, dit is een functie die ik gebruik om bepaalde expressies te vinden als ik het zo hoor moet je deze functie redelijk eenvoudig kunnen aanpassen:

Function RegReplace(str)
Dim objRegEx, Match, Matches, StrReturnStr,strPhrase
Set objRegEx = New RegExp
strPhrase = str
StrReturnStr = strPhrase
objRegEx.Pattern = "JOUW REGULIERE EXPRESSIE"
objRegEx.Global = True
objRegEx.IgnoreCase = True
Set Matches = objRegEx.Execute(strPhrase)
For Each Match in Matches
response.write(Match.value)
Next

End Function

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
ah oke ga ik dat eerst even proberen... thx

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
kan ik dan ook met behulp van die regexpen ook het aantal unieke IP's tellen?

aangezien er in de logfile zowel unieke als niet unieke IP nummers voorkomen en ik wil graag alleen de unieke IP nummers vinden.

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
ik heb het nu zover dat ik met een regexp alle IP nummers er uit kan vissen alleen moet ik ze nu nog controleren of ze uniek zijn...

iemand een hint?

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • disjfa
  • Registratie: April 2001
  • Laatst online: 12-05 15:11

disjfa

be

in database of in array zetten :?

disjfa - disj·fa (meneer)
disjfa.nl


  • disjfa
  • Registratie: April 2001
  • Laatst online: 12-05 15:11

disjfa

be

of je zet t in een grote variabele, met #tussen de ip`s (of wat anders mag ook :)) en dan zoek je met:
if instr(string, expressie) then

end if

dat zou een stuk sneller gaan :)

disjfa - disj·fa (meneer)
disjfa.nl


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
ik heb nu een het aantal gevonden IP nummers in 1 grote var staan.

Ik heb nog nooit met arrays gewerkt dus vandaar dat ik het nog een keer vraag.

een stukje van de code:
code:
1
2
3
4
5
Response.Write colMatches.Count & " matches found...<br><br>"

For Each objMatch in colMatches
    Response.Write objMatch.Value & "<BR>"
Next

dat heeft als resultaat iets in de zin van:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1223 matches found...

213.84.106.109
213.84.106.109
213.84.106.109
213.84.106.109
213.84.106.109
213.84.106.109
213.84.106.109
213.84.106.109
213.84.106.109
213.84.106.109
213.84.106.109
213.84.106.109
213.84.106.109
213.84.106.109
213.84.106.109
213.84.106.109
213.84.73.117
213.84.25.236
213.84.25.236
213.84.25.236
213.84.25.236

dus nu moet ik die uit gaan sorteren in een array?

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • disjfa
  • Registratie: April 2001
  • Laatst online: 12-05 15:11

disjfa

be

eerst array declareren:
code:
1
dim array(1)

dan redimmen voor aantal ip`s (als dat iederekeer verschillend is):
code:
1
redim array(aantal)

dan om te zoeken:
code:
1
2
3
4
5
for i = 1 to aantal
   if array(i) = ip then
    error
   end if
next i

zoiets :)

disjfa - disj·fa (meneer)
disjfa.nl


  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Ik zou ze lekker in een db zetten, kan je misschien met de dubbele ook allerlei leuke dingen doen? De unieke adressen vis je er zo uit door een distinct select te doen. Oja, als je ze in een database gooit let dan op waar je je connectie opent en sluit, vaak zie je mensen binnen de loop telkens db open/close maken.

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
ik ben nu al een stuk verder.

De IP adressen zitten in een dynamsiche array.

Alleen nu kan ik ze niet op een makkelijke manier Sorteren op Unieke IP adressen (kost veel rekenkracht aangezien er erg veel IP's in zitten)

Dus wilde ik het met het Dictionary object doen (een soort assiosiatieve array)

alleen nu zit ik met het volgende probleem:

Ik wil een loopje maken dat er in pseudo taal zo uit ziet:
code:
1
2
3
4
5
Zolang IP bestaat doe
    Ga naar volgende IP
Bestaat IP niet
    Sla op in array
ga door tot einde

en vooral dat "ga naar volgende IP" weet ik niet hoe ik dat kan realiseren in VBscript. Met databases heb je rs.movenext maar bestaat dat ook voor andere handelingen?

de flowchart ziet er nu zo uit:
maak regexp --> open log file --> lees logfile in --> zoek naar strings die de regexp matchen --> gooi de matches in een collectieVar --> Tel het aantal matches --> schrijf iedere match weg --> EN NU WIL IK DUS GAAN KIJKEN OF DE IP's UNIEK ZIJN MAAR HOE?
wie kan mij helpen?

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • disjfa
  • Registratie: April 2001
  • Laatst online: 12-05 15:11

disjfa

be

maak regexp --> open log file --> lees logfile in --> zoek naar strings die de regexp matchen --> gooi de matches in een collectieVar --> Tel het aantal matches --> schrijf iedere match weg --> EN NU WIL IK DUS GAAN KIJKEN OF DE IP's UNIEK ZIJN MAAR HOE?
ten eerste als je ze wegschrijft moet je al checken of ie bestaat...

maar heb je t nou in een gewone array staan, dan is t gewoon ff de array afgaan.

als je ze wilt sorteren zou je ook gewoon een databaseje eraan kunnen hangen.
dan kun je ook gewoon een select * from bla where ip = '" & ip & "'"
en dan if .eof -----> wegschrijfen
else ------> bestaat al :7 :)

disjfa - disj·fa (meneer)
disjfa.nl


Verwijderd

Moet je dan niet met een For loop door je Dictionary waarden heenlopen en dan een ifje die tjekt of et IP bestaat?


Loop door Dictionary:

Set Dict= Server.CreateObject("Scripting.Dictionary")

dict.add "Naam", "waarde"
..
..
..
..


arrKeys= Dict.Keys
arrITems= Dict.Items

For intLoop = 0 to Dict.Count -1
strKey = arrKeys(intLoop)
strItem = arrItems(intLoop)
Next

Verwijderd

4of9: wie kan mij helpen?
In Perl (sorry, geen VBScript ASP):
code:
1
2
3
4
my %ip = ();
while (<>) {
    $ip{$1}++ if /(ip-regex)/;
}

Vertaling:
code:
1
2
3
maak lege hash (dictionary) ip
zolang je invoer hebt
   verhoog teller van ip dat je gevonden hebt

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
ik ben er idd nog iet bij vergeten te zetten.

Ik had al een loopje dat sjekte of hij betstond alleen stopte die meteen met IP's in de array gooien zodra hij een IP tegen kwam dat al bestond.

Gevolg: 1 waarde in mijn record ipv alle unieke IP's
maar heb je t nou in een gewone array staan, dan is t gewoon ff de array afgaan.
ja das nou net het probleem
als je ze wilt sorteren zou je ook gewoon een databaseje eraan kunnen hangen
ik wil geen database, ik wil graag array's leren gebruiken, hoewel het niet echt wil vlotten

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • disjfa
  • Registratie: April 2001
  • Laatst online: 12-05 15:11

disjfa

be

[b]Op dinsdag 30 oktober 2001 09:54 schreef 4of9 het
Ik had al een loopje dat sjekte of hij betstond alleen stopte die meteen met IP's in de array gooien zodra hij een IP tegen kwam dat al bestond.
code:
1
2
3
4
5
6
7
8
9
10
11
12
do voor alle ipen
for i = 1 to nummerip
   if iparray(i) = ip then
     inarray = true
   end if
next i

if inarray = false then
    iparray(nummerip) = ip
    nummerip = nummerip + 1
end if
loop

that`s it, duurt alleen beetje lang op t eind

disjfa - disj·fa (meneer)
disjfa.nl


Verwijderd

Dit zou het idee moeten zijn (met wat copy-paste van een post hierboven en brakke syntax?):
code:
1
2
3
4
5
6
7
8
9
10
Dim ip
Set ip = CreateObject("Scripting.Dictionary")

For Each objMatch in colMatches
    If ip.Exists(objMatch) Then
      ip(objMatch) = ip(objMatch) + 1
    Else
      ip.Add(objMatch, 0)
    End if
Next

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
ik ga eens kijken wat ik kom er alleen echt niet uit merk ik...

ff proberen

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
ik heb nu
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Set IP = CreateObject("Scripting.Dictionary")

test = i
i = objMatch

For Each objMatch in colMatches
    
    If IP.Exists(objMatch) Then
      IP(objMatch) = IP(objMatch) + 1
    Else
      IP.Add objMatch, 0
    End if
Next

Response.Write IP.Count & "<br>"

Maar dan krijg ik als resultaat gewoon het totaal aantal IP nummers...

heeft niemand anders al eens zo'n functie geschreven? Als ik het zie dan snap ik het wel of zit er een foutje in de loop?

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 14-09 17:42

Gerco

Professional Newbie

Op dinsdag 30 oktober 2001 12:05 schreef 4of9 het volgende:
ik heb nu
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Set IP = CreateObject("Scripting.Dictionary")

test = i
i = objMatch

For Each objMatch in colMatches
    
    If IP.Exists(objMatch) Then
      IP(objMatch) = IP(objMatch) + 1
    Else
      IP.Add objMatch, 0
    End if
Next

Response.Write IP.Count & "<br>"

Maar dan krijg ik als resultaat gewoon het totaal aantal IP nummers...

heeft niemand anders al eens zo'n functie geschreven? Als ik het zie dan snap ik het wel of zit er een foutje in de loop?
Je kijkt nu of het OBJECT waar 1 van de IP's inzit al ion de dictionary zit. Nu zitten alle IP's ook in een ANDER object, dus zijn alle OBJECTEN uniek :)

Je moet er een String van maken met dus "xxx.yyy.zzz.www" erin, en DIE als key in de dictionary gebruiken.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
Hij doet het!!!!
code:
1
2
3
4
5
6
7
8
9
10
11
Set IP = CreateObject("Scripting.Dictionary")

i = 1
For Each objMatch in colMatches
    
    If NOT IP.Exists(objMatch.Value) Then
     IP.Add objMatch.Value, (i+1)
    End if
Next

Response.Write IP.Count & "<br>"

thx for all the help!!!

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • disjfa
  • Registratie: April 2001
  • Laatst online: 12-05 15:11

disjfa

be

Op dinsdag 30 oktober 2001 12:19 schreef 4of9 het volgende:
Hij doet het!!!!
Yeah... :) nu op naar het volgende probleem :P

disjfa - disj·fa (meneer)
disjfa.nl

Pagina: 1