Toon posts:

[C#] Hoe hou ik dit bij??

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hmmz, ik heb een klein probleem met een project waar 'k mee bezig ben. 'k maak een FTP server, en 'k ben met wat beveiligings dingetjes bezig. Een aantal dingen heb ik al, maar 'k probeer nu iets te maken zodat ik hammeren kan tegen gaan. Maar 't wil nog niet echt lukken. Ik kan niet echt een geschikte manier verzinnen om het bij te houden. 'k heb al meerdere dingen geprobeerd (een aparte class maken met lijstjes van IP addressen en het aantal keren dat er geprobeerd is om in te loggen), maar op de een of andere manier vind ik elke methode die ik tot nu geprobeerd heb niet echt handig.

Iemand nog een slim idee om het bij te houden? 't wil namelijk op deze manier niet echt vlotten.

Verwijderd

Lijstje bijhouden met: ip_adres, tijd_laatst_geprobeerd, counter

En dan de counter verhogen als tijd_laatst_geprobeerd korter geleden is dan X seconden, is het langer geleden, dan counter op 0

Lijkt me een voor de hand liggende oplossing

Verwijderd

Topicstarter
Mjah, dat leek mij dus ook, maar hoe implementeer ik dat het makkelijkst? Class maken met ip adres, tijd laatst geprobeerd en counter en steeds voor elk ip adres een nieuwe maken en in een ArrayList doen?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Op woensdag 15 mei 2002 16:34 schreef jmezach het volgende:
Mjah, dat leek mij dus ook, maar hoe implementeer ik dat het makkelijkst? Class maken met ip adres, tijd laatst geprobeerd en counter en steeds voor elk ip adres een nieuwe maken en in een ArrayList doen?
Je kan beter een hashtable gebruiken en dan hashen op ip adres (je kan dan veel sneller zoeken naar een bepaald ip adres), maar verder is deze aanpak wel oke.

  • cpwins
  • Registratie: Oktober 2001
  • Laatst online: 25-07 16:54

cpwins

ut Grunn...

Als je het netjes wil doen dan geef je de Class die het lijstje bijhoudt (i.d.d. bij voorkeur een hashtable) ook een clean() functie, die ip-nummers die al langer dan bijv. 30 minuten niet geprobeerd hebben een verbinding te maken uit de lijst haalt. Zo voorkom je dat je server hoe langer hoe meer geheugen nodig heeft.

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Op woensdag 15 mei 2002 16:44 schreef Alarmnummer het volgende:
Je kan beter een hashtable gebruiken en dan hashen op ip adres (je kan dan veel sneller zoeken naar een bepaald ip adres), maar verder is deze aanpak wel oke.
En dan wel ipadressen als nummer opslaan natuurlijk. Maar ik denk dat de IPAdress class van .NET standaard wel de juiste hash implementeert.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

een ipadres is idd gewoon een 32bit getal dus gewoon als getal opslaan (zoals Orphix ook al zegt). Maak er dan trouwens gelijk een 64bits getal van zodat je ftpserver gelijk klaar is voor IPv6 :)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Hmmz, en hoe maak je dan zo'n hastable in C#? 'k ken 't principe van een hashtable wel, maar geen idee hoe je zoiets in C# doet.

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 03-09 23:48
System.Collections.Hashtable

IPv6 is trouwens 128 bit en wordt genoteerd als 8 paren van 4 hexadecimale digits gescheiden door een ':'. Bijv:
1234:5678:9ABC:DEF0:1234:5678:9ABC:DEF0. In .Net heb je trouwens ook een IPAddress class zitten.

Verwijderd

Topicstarter
Hmmz, het kan aan mij liggen maar 'k kan volgens mij maar 1 waarde in in die hashtable kwijt, en ik moet dus minstens 3 waarden opslaan.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Op woensdag 15 mei 2002 18:49 schreef Orphix het volgende:

[..]

En dan wel ipadressen als nummer opslaan natuurlijk. Maar ik denk dat de IPAdress class van .NET standaard wel de juiste hash implementeert.
Zo heel natuurlijk hoeft dat helemaal niet te zijn. Je kan natuurlijk ook een IP class maken die 4 bytes als waarde meekrijgt. En je kan die IP class weer zijn eigen hashcode geven. (die worden bepaald door de 4 bytes).

[edit] ik zie dat je inderdaad vermelding maakt naar een IPAdress class. Maar dan snap ik je opmerking niet.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Op donderdag 16 mei 2002 10:47 schreef jmezach het volgende:
Hmmz, het kan aan mij liggen maar 'k kan volgens mij maar 1 waarde in in die hashtable kwijt, en ik moet dus minstens 3 waarden opslaan.
Het ligt aan jou ;) Er kan dus veel meer in. Ik denk dat je iets fout doet met de hashkey berekening.

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Je kan de class IPAddress gewoon als key gebruiken in een hashtable. De GetHashCode is namelijk overriden:
public override int GetHashCode();

Return Value
An integer hash value.

Remarks
The GetHashCode method returns a hash code of the IP address. This value can be used as a key in hash tables.
Je kan dus iets doen als
code:
1
2
Hashtable list = new Hashtable();
list.Add(IPAddress.Parse("192.168.0.1"), 111209230);

Waarbij de value een timestamp is oid.

Verwijderd

Topicstarter
Hmmz, okeej, maar 'k moet dus nog een waarde opslaan, namelijk het aantal keer dat er geprobeerd is in te loggen, en eventueel nog een waarde. Hoe krijg ik die er bij dan? Of moet ik dan een soort van code maken voor alle data die ik er in wil hebben?

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Op donderdag 16 mei 2002 20:26 schreef jmezach het volgende:
Hmmz, okeej, maar 'k moet dus nog een waarde opslaan, namelijk het aantal keer dat er geprobeerd is in te loggen, en eventueel nog een waarde. Hoe krijg ik die er bij dan? Of moet ik dan een soort van code maken voor alle data die ik er in wil hebben?
Maak een class met daarin alle gegevens die je nodig wilt hebben en sla die op als value.

Verwijderd

Op donderdag 16 mei 2002 20:26 schreef jmezach het volgende:
Hmmz, okeej, maar 'k moet dus nog een waarde opslaan, namelijk het aantal keer dat er geprobeerd is in te loggen, en eventueel nog een waarde. Hoe krijg ik die er bij dan? Of moet ik dan een soort van code maken voor alle data die ik er in wil hebben?
'k denk dat het handig is je cursus programmeren nu toch maar eens uit de verpakking te halen en te gaan lezen . .
Pagina: 1