Nodes.dat file-de

From AMule Project FAQ
Jump to: navigation, search

English | Deutsch

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()