Ik zal in deze “post thread” invulling gaan geven aan het nog te ontwikkelen “database browser concept”.
De naam die ik het database browser project noem is “foonsearch”.
Het zal iets generieks worden voor verschillende informatie bronnen (DM-CD, KVK-CD, Capimonitor, Isdnlog, Postcodepro, Carbase, Foondump, Map/Route info, Windows systeem loggingsinformatie, etc).
Het zou best kunnen dat als je in de Capimonitor database browst dat je specifieke applicaties in het Capimonitor browser scherm kan opstarten. Denk hierbij het bellen van een nummer die in de database browser ( “klapper Capimonitor”) scherm staat.
Eerst zal ik megafoon ‘pakken’ en deze gaan voeden met mysql (foondump2004) om een eerste invulling aan het database browser concept te geven.
Indien jullie commentaar, tips, of wensen, etc hebben gaarne reactie --)
Het gaat redelijk met het poorten. Ik heb de meeste source al in 1 file kunnen doen. In deze file ga ik mysql routines importeren.
Ik denk dat ik megafoon.exe naam instant laat voor het zoeken op de mysql foondump2004 database. Daarna de source poorten naar Capimonitor.exe om te grutten op de isdnlog database en Foondump2004. Mogelijk dat het 1 programma gaat worden.
Als ik meerdere programmatjes heb gemaakt voor de verschillende bronnen dan zal ik een generieke database browser maken die ik foonsearch.exe zal noemen.
Ik heb net in Megafoon een MySQL query kunnen executeren. Opzich denken jullie geen hoogtepunt, maar Megafoon is wel in MFC geprogrammeerd en in MFC werkt niet alles zoals gewoonlijk.
Ik moet nu de interface gaan programmeren. Moet niet al te moeilijk meer zijn, maar zal wel volgende week worden dat het (goed) werkt,
Wat ik erg goed van Megafoon vind is dat het gebruik maakt van threads.
Threads zal je moeten gebruiken voor alles wat langer dan 0.2 seconden duurt. Dit is ‘verplicht’ onder Windows omdat anders je programma ‘not responding’ wordt.
Op de info card staat vaak een hyperlink. Onderin Megafoon scherm staat momenteel ook een hyperlink die niet werkt (als je er op klikt).
Het klikken op hyperlinks is niet zo simpel als het lijkt in Visual Studio C.
Ik heb nu een versie die de records laat zien van Cdfoon2002 en Cdfoon2004 in 1 output scherm bij 1 vraag.
Ik ga nu beginnen Cdfoon2002 afhankelijkheid er uit te slopen. Ik wil ook zo veel mogelijk call back methode weghalen. Niet complexer maken dan noodzakelijk.
De versie zal vooralsnog wel iets minder kunnen. Denk aan het printen van de output records. Dit kan later wel weer worden aangekoppeld.
Vandaag begonnen met RSA en/decryptie. Ik heb de encryptie/decryptie testcode uit gnunetd gehaald en het schijnt te werken. Ik zie wel dat het gnunetd protocol erg veel sessionkeys ontcijfert zonder dat er een goede tussen zit. Het protocol moet veel beter worden. Een leuk uitdaging dus! Ik denk dat we beter BEEB/SOAP protocol kunnen gaan ‘gebruiken’.
Het vinden van peers werkt wel goed. Een andere project http://freehaven.net/tor/ wil ik ook naar gaan kijken. Ik heb testgnunetd.c gewijzigd in Foonsearchd.c
De concrete stappen waaraan ik werk:
Het omzetten van public keys naar mysql.
Het omzetten van libgmp procedures naar gewone C code.
Het poorten van Foonsearchd.c naar Windows Visual Studio C. Ik had al wat code uit mysqld gehaald. Enerzijds de service programmeercode en anderzijds de tcp/ip code.
In mijn beeld wordt “foonsearch demon” een samenspel tussen:
Foonsearchd.c; Hiermee kan je de buurtservers vinden via een rootserver. Je zou de (SQL) queries via een SOAP achtige protocol moeten kunnen stellen. Ik denk dat ik eerst de postcode pro database er in ga hangen als test case. Mogelijk hierna een (streepjes) code productdatabase. Je legt met een productdatabase een relatie tussen bedrijf (pink) en EAN-nummer.
Fcron op mysql gepoort; Dit is de job schedule. Bijvoorbeeld in mysql staat een job om de root peer foonsearch servers te halen. Of bij een entry de KvK gegevens halen via online search (Wget) methode.
Wget; Met deze code haal je een file/internetpagina op via http/https/ftp
Locate op mysql gepoort; Hier ga je alle files op (een lokaal) Linux/Windows systeem in mysql zetten. Key wordt de hash footprint. De files zouden weer opgezocht kunnen worden in Foonsearchd.c Je kan natuurlijk ook naar een andere server gaan en de files ophalen met ftp/http(s) en daarna de hash berekenen en opslaan in je eigen database. Andere peers weten dan ook dat de file te vinden is.
Met foonsearch (databasebrowser) ga je via de database naar de “foonsearch demon”. Het zal m.i. een merge van het volgende worden:
Het is mij gelukt om een public key in MySQL blob op te slaan. De gifjes kunnen opgelijksoortige manier worden opgeslagen.
Volgend weekend de libgmp afhankelijkheid er uit halen en proberen Filezilla client te gaan compileren. Filezilla is afhankelijk van andere project(en). Ik geloof crypto.
De vriendelijke Jan Marco
P.S. Ik sla nu ook log regels op in mysql:
date | time | program | message_number | message_type | message
Het is mij net gelukt om van libgmp af te komen. Ik zat vanmorgen al te kijken hoe ik gen_prime() moest gaan poorten. Ik kwam er achter dat we de gen_prime functie nog niet nodig hebben, want deze zit al in openssl.
De libgmp functies worden ook nog voor bepaalde type gnunet records (makeKblockKey) gebruikt, echter m.i. nog niet nodig voor het maken van een simpele framework.
Ik hoop vandaag alle data in MySQL onder te brengen. Er zal ook wel data in zitten die in het geheugen blijft staat, bijvoorbeeld de routing info. Deze zal ik nog niet gaan poorten naar MySQL.
Morgen beginnen met poorten naar Visual Studio --)
Ik heb de TCP en UDP servers aan het draaien gekregen. NAT protocol heb ik nog niet zo naar gekeken. Het crasht nog wel als je met een andere pc naar de TCP poort gaan met telnet.
RGJ, Kan je TCP en UDP ook op dezelfde poortnummer zetten? N.B. TCP en UDP gebruikt wel een andere thread voor afhandeling.
Momenteel krijg ik geen Helo’s in MySQL. Ik zie dat ik voldoend Helo’s binnenkrijg, dus ergens anders in de code de Helo’s aftappen. Ik kan nu ook van de key files afkomen, want ik hoef m.i. het origineel programma niet meer te gebruiken om de andere peers te vinden.
Ik heb de Ip adressen ook gevonden (bijvoorbeeld 128.10.19.51:2086) --)
Ik zal ze bij de Helo tabel gaan prutsen.
Voor de online variant heb al vijf tabellen in mijn hoofd:
peer {datum, time, type_GUID, GUID, PK, IP, NetworkMask, www., email}
Mysql werkt erg mooi. Ik ben een beetje bezig om procedures te maken die de gegevens direct in MySQL zet. Alle helo’s in MySQL zetten kon ik binnen 1 minuut uitvoeren omdat ik de procedure al had. Het er uithalen ben ik momenteel mee bezig. Als alle data in Mysql zit dan wordt het m.i. veel transparanter hoe het werkt.
Het hoofd ontvangst protocol verwerkt een viertal berichten:
p2p_PROTO_HELO:
Een helo is ontvangen. Ik zet alle helo’s direct in MySQL tabel ‘helo’ met IP en portnummer.
p2p_PROTO_SKEY:
/* establish session if slot not busy, challenge with (encrypted) ping!
*/ Ik zie hier encryptie op session keys. Moet nog meer uitzoeken hoe het precies werkt.
p2p_PROTO_PING:
Een ping is ontvangen en een pong zal worden teruggestuurd. Kan best over ander protocol worden verzonden. Bijvoorbeeld PING binnen gekregen via SMTP en teruggekoppeld via TCP.
p2p_PROTO_PONG:
/* this confirms a PING => add a HELO to knownhosts. */
Je hebt een PING naar een peer gestuurd en hierna komt een pong terug. Ik ga alle Helo in mysql zetten en een veldje toevoegen of hij daadwerkelijk een pong heeft teruggestuurd.
Ik wil het eerst aan de praat krijgen. Als het werkt dan een SOAP oplossing erin proberen te hangen.
Ik denk dat je het best kan uitleggen aan hand van de metafoor van een brief/postpakketje.
Stel dat de Telegraaf de “schaduw bouw boekhouding” anoniem wil krijgen.
De Telegraaf geeft ergens op internet aan dat ze deze boekhouding willen hebben.
Iemand die hem bezit zou de Telegraaf kunnen geven echter dat wil hij niet, want je zou problemen kunnen krijgen. Dus diegene (Ad Bos) die hem heeft pakt het in en geeft het aan een postpakket bezorgbedrijf (DHL, UPC, etc) met “anonimiteit service”.
Het postpakket bezorgbedrijf heeft in Nederland verschillende knooppunten/servicepunten. Elk servicepunt haalt de grotere doos er af en verpakt het weer in een nieuwe doos. Dit doet men TTL (Time To Live) keer voordat men het naar de eindbestemming de Telegraaf stuurt. Wel doet er een probleem op bij vaste TTL tijden, want dan kan een detective uitpluizen welk pakket waar is gebracht en wie de bron en bestemming is geweest. Men gebruikt bij Gnunet een TTL met een bepaalde kansberekening.
Even in een online voorbeeld uitgewerkt:
Stel Weerman wil een select * from white_subscriber; van mij hebben. Als ik Weerman vertrouw encrypt ik de output records uit bovenstaande SQL statement met de public key van Weerman. Daarna ftp ik de ge-encrypted file naar Weerman. Weerman decrypt de file met de secret key die alleen Weerman bezit.
Stel ik vertrouw Weerman niet dan wordt in gnunet de file in blokken gesplitst/gehakt. Blokken worden naar buurt peers servers gestuurd door de blok te encrypten met de public key van de buurpeerserver. Als deze buurpeerserver de blok krijgt gaat hij het decrypten met de secret key en weer naar zijn buurpeerserver sturen door het te encrypten met de public key van deze buurpeerserver. Iemand op internet kan dan haast niet zien dat de inhoud hetzelfde is want elk blok wordt met andere key ge-encrypt. Weerman peerserver krijgt alle blokken op den duur binnen en gaat de outputfile (white_subsciber records) weer samenstellen.
Ik ga mij nog verder verdiepen in de gnunet methode. Momenteel denk ik aan om alleen op vraag iets op te laten sturen. Diegene die het antwoord heeft het adres van diegene er in zetten die het gevraagd heeft. Met een stochastische verdeling naar andere servers sturen voordat je het naar de eindbestemming stuurt.
Ik denk dat queue technieken ook gebruikt kunnen worden. Ik weet dat momenteel MQ van IBM erg veel gebruikt wordt bij ondernemingen. Mogelijk kan ik iets van MQ leren om een queue-achtige protocol te implementeren.
Ben nu van de public key files af. Die zitten nu in MySQL in een blob veld.
Ik wil proberen om in de helo tabel een splitsing aan te brengen. De normale helo tabel bevat de actuele waarden. En een tabel met dezelfde velden heloarc (helo archive). Hierin ga ik de ouden waarden zetten om later na te kunnen zoeken met andere programma’s. Komt er bijvoorbeeld een nieuwe expirationTime van een Helo binnen dan zet in de nieuwe waarde in Helo en de oude in heloarc.
Denk hierbij aan een security programma die voeding aan “iptables” gaat geven. Als je deze splitsing niet gaat doen zal je altijd om de laatste waarde te krijgen eerst een SQL sort moeten doen. Mogelijk zou een SQL select en daarna een binary sort sneller zijn. Deze sort routine hoef je dus niet meer te doen bij mijn voorgestelde splitsing.
Ik heb ook nog een probleem met het NAT protocol. De ip nummers en poort nummer zijn random. Je hebt m.i. twee ip/port nummer adressen. De ene is gedefinieerd in het Helo protocol. De andere krijg je als je de Helo ontvangt. De laatste moet ik er nog er uit proberen te vissen.
De code werkt nog niet goed. Ik ga volgend weekend er mee verder. Ik weet waar de fout zit. De code om naar andere peers te gaan heb ik uitgezet. Als ik deze code aanzet crasht hij. Zal wel iets met mtu en malloc te maken hebben.
Alleen nog het “probleem” dat hij lang blijft wachten (>> 1 minuut) als de andere peer niet wil connecten. Vaak zijn dit ook locale ip adressen (192.168. range, etc.).
i = connect(sock, (struct sockaddr*)&soaddr, sizeof(soaddr));
RGJ, Is er een mogelijkheid om bijvoorbeeld 10 seconden te wachten. Indien binnen 10 seconden niet wil connecten dan gewoon weer verder met programma.
Ik ga de komende twee weken proberen om het aan de praat te krijgen. Moet nog meer uitzoeken. Het connecten naar andere peers gaat nog niet zo goed bij mij.
In de helo’s zou je ook het Operationsysteem, Database versie kunnen zetten.
Net als in de cdfoon heb je twee typen helo’s, namelijk Bedrijven en personen. Je zou in de helo een soort veld kunnen opnemen dat Funprice een “computer onderdelen verkoop bedrijf” is. Dynabyte is ook zo’n bedrijf. Gewoon de pink indeling “gebruiken”.
Je krijgt deze helo’s binnen via je internet verbinding of je gaat naar iemand die veel helo’s al heeft verzameld door onder water een sql op de helo tabel (“remote”) te doen.
Hierna ga je naar ‘de productbase’ van deze bedrijven als je naar de goedkoopste en dichtbij-ste verkooppunt van bijvoorbeeld HP IPAQ H2210 wilt vinden.