Difference between revisions of "Nodes.dat file-de"
(german) |
Vollstrecker (Talk | contribs) m (Adjusted Links) |
||
(3 intermediate revisions by 2 users not shown) | |||
Line 11: | Line 11: | ||
== Beschreibung == | == Beschreibung == | ||
− | Diese Datei speichert Details | + | Diese Datei speichert Details über andere bekannte [[Kademlia-de|Kademlia]]-[[client-de|Client]]s (auch [[node-de|Node]]s, also "Knoten" genannt). |
− | Sie wird | + | Sie wird für gewöhnlich dazu verwendet, um schneller einen erfolgreichen [[bootstrap-de|Bootstrap]] auszuführen. |
== Format == | == Format == | ||
− | Wie man sehen kann, werden alle Felder ohne irgendwelche Trennzeichen gespeichert. Dies kann man deshalb so handhaben, weil alle Felder eine genau vorbestimmte | + | Wie man sehen kann, werden alle Felder ohne irgendwelche Trennzeichen gespeichert. Dies kann man deshalb so handhaben, weil alle Felder eine genau vorbestimmte Größe haben: |
*''Anzahl der Kontakte'': Anzahl der Kontakte, die aufgelistet werden (4 Bytes) | *''Anzahl der Kontakte'': Anzahl der Kontakte, die aufgelistet werden (4 Bytes) | ||
− | Nachdem die Anzahl der | + | Nachdem die Anzahl der aufzuführenden Kontakte bestimmt wurde, listet die Datei sie auf. Jeder Kontakt besteht aus 25 Bytes, unterteilt in folgende Felder: |
− | *''ClientID'': Die [[ID|ClientID]] des Kontakts (16 Bytes) | + | *''ClientID'': Die [[ID-de|ClientID]] des Kontakts (16 Bytes) |
− | *''IP'': Die [[ | + | *''IP'': Die [[IP_address-de|IP]] des Kontakts (4 Bytes) |
− | *''UDP Port'': Der [http://www.ietf.org/rfc/rfc768.txt UDP]-[[port|Port]], zu dem beim Versuch, den Kontakt zu erreichen, [[connect-de|verbunden]] werden soll (2 Bytes) | + | *''UDP Port'': Der [http://www.ietf.org/rfc/rfc768.txt UDP]-[[port-de|Port]], zu dem beim Versuch, den Kontakt zu erreichen, [[connect-de|verbunden]] werden soll (2 Bytes) |
− | *''TCP Port'': Der [http://www.ietf.org/rfc/rfc793.txt TCP]-[[port|Port]], zu dem beim Versuch, den Kontakt zu erreichen, [[connect-de|verbunden]] werden soll (2 Bytes) | + | *''TCP Port'': Der [http://www.ietf.org/rfc/rfc793.txt TCP]-[[port-de|Port]], zu dem beim Versuch, den Kontakt zu erreichen, [[connect-de|verbunden]] werden soll (2 Bytes) |
− | *''Typ'': Dies gibt den [[type-de|Typ]] des Kontakts an, was bedeutet, inwieweit dieser Kontakt | + | *''Typ'': Dies gibt den [[type-de|Typ]] des Kontakts an, was bedeutet, inwieweit dieser Kontakt über längere Zeit sicher verfügbar ist (eine Skala von ''0'' bis ''4'', wobei ''0'' der beste, und ''4'' der schlechteste Wert ist). (1 Byte) |
Sobald diese Daten zusammengesetzt sind, werden sie in der little-endian-Schreibweise gespeichert. | Sobald diese Daten zusammengesetzt sind, werden sie in der little-endian-Schreibweise gespeichert. | ||
Line 31: | Line 31: | ||
== Beispiel == | == Beispiel == | ||
− | Nachfolgend der Hexdump einer angenommenen '' | + | Nachfolgend der Hexdump einer angenommenen ''nodes.dat'' : |
''0200000012257425DBA4EDDBD097150757404486E55E04DE40123612021F64632587A31EC2FC8566C4A9BAB184E6E9B7D44012361202'' | ''0200000012257425DBA4EDDBD097150757404486E55E04DE40123612021F64632587A31EC2FC8566C4A9BAB184E6E9B7D44012361202'' | ||
− | In dem oben | + | In dem oben angeführten Beispiel kann man folgende Daten sehen: |
*Anzahl der Kontakte: ''2'' (In Hex: ''02000000'', man beachte die [[little endian]]-Schreibweise) | *Anzahl der Kontakte: ''2'' (In Hex: ''02000000'', man beachte die [[little endian]]-Schreibweise) | ||
Line 53: | Line 53: | ||
== Extra == | == Extra == | ||
− | Weil das Feld ''Anzahl der Kontakte'' 4 Bytes lang ist, | + | Weil das Feld ''Anzahl der Kontakte'' 4 Bytes lang ist, beträgt die Höchstanzahl der in dieser Datei speicherbaren [[node-de|Node]]s 4294967296 (~4300M), was mehr als ausreichend sein sollte. Jedenfalls, weil diese Anzahl so hoch ist, haben [[aMule-de|aMule]], [[eMule-de|eMule]], und alle anderen Clients die Anzahl der speicherbaren Kontakte im Programmcode begrenzt (Die fest einprogrammierte Obergrenze beim [[aMule-de|aMule]] beträgt ''5000''). |
− | Weil es sich bei Kontakten vom ''Typ 4'' um diejenigen handelt, die zum | + | Weil es sich bei Kontakten vom ''Typ 4'' um diejenigen handelt, die zum Löschen markiert sind, sollte in einer nodes.dat niemals einer davon auftauchen. Falls doch, wird der beim Auslesen der Datei einfach ignoriert. |
+ | |||
+ | |||
+ | == Skript zum Erzeugen eines Auszuges der nodes.dat == | ||
+ | |||
+ | Hier ein kleines Skript zum Erzeugen eines Speicherauszuges der Datei ''nodes.dat'': | ||
+ | |||
+ | <pre> | ||
+ | #!/usr/bin/env python | ||
+ | # this code belongs to public domain | ||
+ | |||
+ | import struct | ||
+ | nodefile = open('nodes.dat', 'r') | ||
+ | (count,) = struct.unpack("<I", nodefile.read(4)) | ||
+ | |||
+ | print ' idx type ip address udp tcp' | ||
+ | for i in xrange(count): | ||
+ | (clientid, ip1, ip2, ip3, ip4, udpport, tcpport, type) = \ | ||
+ | struct.unpack("<16s4BHHB", nodefile.read(25)) | ||
+ | ipaddr = '%d.%d.%d.%d' % (ip1, ip2, ip3, ip4) | ||
+ | print '%4d %4d %-15s %5d %5d' % (i, type, ipaddr, udpport, tcpport) | ||
+ | nodefile.close() | ||
+ | </pre> |
Latest revision as of 16:43, 17 January 2008
English | Deutsch
Contents
Datei
Name: nodes.dat
Speicherort: ~/.aMule/
Beschreibung
Diese Datei speichert Details über andere bekannte Kademlia-Clients (auch Nodes, also "Knoten" genannt).
Sie wird für gewöhnlich dazu verwendet, um schneller einen erfolgreichen Bootstrap auszuführen.
Format
Wie man sehen kann, werden alle Felder ohne irgendwelche Trennzeichen gespeichert. Dies kann man deshalb so handhaben, weil alle Felder eine genau vorbestimmte Größe haben:
- Anzahl der Kontakte: Anzahl der Kontakte, die aufgelistet werden (4 Bytes)
Nachdem die Anzahl der aufzuführenden Kontakte bestimmt wurde, listet die Datei sie auf. Jeder Kontakt besteht aus 25 Bytes, unterteilt in folgende Felder:
- ClientID: Die ClientID des Kontakts (16 Bytes)
- IP: Die IP des Kontakts (4 Bytes)
- UDP Port: Der UDP-Port, zu dem beim Versuch, den Kontakt zu erreichen, verbunden werden soll (2 Bytes)
- TCP Port: Der TCP-Port, zu dem beim Versuch, den Kontakt zu erreichen, verbunden werden soll (2 Bytes)
- Typ: Dies gibt den Typ des Kontakts an, was bedeutet, inwieweit dieser Kontakt über längere Zeit sicher verfügbar ist (eine Skala von 0 bis 4, wobei 0 der beste, und 4 der schlechteste Wert ist). (1 Byte)
Sobald diese Daten zusammengesetzt sind, werden sie in der little-endian-Schreibweise gespeichert.
Beispiel
Nachfolgend der Hexdump einer angenommenen nodes.dat :
0200000012257425DBA4EDDBD097150757404486E55E04DE40123612021F64632587A31EC2FC8566C4A9BAB184E6E9B7D44012361202
In dem oben angeführten Beispiel kann man folgende Daten sehen:
- Anzahl der Kontakte: 2 (In Hex: 02000000, man beachte die little endian-Schreibweise)
- Kontakt #1:
- ClientID: 12257425DBA4EDDBD097150757404486
- IP: 222.4.94.229 (In Hex: E55E04DE, man beachte die little endian-Schreibweise)
- UDP Port: 1240 (In Hex: 4012, man beachte die little endian-Schreibweise)
- TCP Port: 1236 (In Hex: 3612, man beachte die little endian-Schreibweise)
- Type: 2 (In Hex: 02)
- Kontakt #2:
- ClientID: 1F64632587A31EC2FC8566C4A9BAB184
- IP: 212.183.233.230 (In Hex: E6E9B7D4, man beachte die little endian-Schreibweise)
- UDP Port: 1240 (In Hex: 4012, man beachte die little endian-Schreibweise)
- TCP Port: 1236 (In Hex: 3612, man beachte die little endian-Schreibweise)
- Type: 2 (In Hex: 02)
Extra
Weil das Feld Anzahl der Kontakte 4 Bytes lang ist, beträgt die Höchstanzahl der in dieser Datei speicherbaren Nodes 4294967296 (~4300M), was mehr als ausreichend sein sollte. Jedenfalls, weil diese Anzahl so hoch ist, haben aMule, eMule, und alle anderen Clients die Anzahl der speicherbaren Kontakte im Programmcode begrenzt (Die fest einprogrammierte Obergrenze beim aMule beträgt 5000).
Weil es sich bei Kontakten vom Typ 4 um diejenigen handelt, die zum Löschen markiert sind, sollte in einer nodes.dat niemals einer davon auftauchen. Falls doch, wird der beim Auslesen der Datei einfach ignoriert.
Skript zum Erzeugen eines Auszuges der nodes.dat
Hier ein kleines Skript zum Erzeugen eines Speicherauszuges der Datei nodes.dat:
#!/usr/bin/env python # this code belongs to public domain import struct nodefile = open('nodes.dat', 'r') (count,) = struct.unpack("<I", nodefile.read(4)) print ' idx type ip address udp tcp' for i in xrange(count): (clientid, ip1, ip2, ip3, ip4, udpport, tcpport, type) = \ struct.unpack("<16s4BHHB", nodefile.read(25)) ipaddr = '%d.%d.%d.%d' % (ip1, ip2, ip3, ip4) print '%4d %4d %-15s %5d %5d' % (i, type, ipaddr, udpport, tcpport) nodefile.close()