Difference between revisions of "Nodes.dat file-de"

From AMule Project FAQ
Jump to: navigation, search
(Script added)
m (Corrected Umlauts)
Line 11: Line 11:
 
== Beschreibung ==
 
== Beschreibung ==
  
Diese Datei speichert Details über andere bekannte [[Kademlia-de|Kademlia]]-[[client-de|Client]]s (auch [[node-de|Node]]s, also "Knoten" genannt).
+
Diese Datei speichert Details über andere bekannte [[Kademlia-de|Kademlia]]-[[client-de|Client]]s (auch [[node-de|Node]]s, also "Knoten" genannt).
  
Sie wird für gewöhnlich dazu verwendet, um schneller einen erfolgreichen [[bootstrap-de|Bootstrap]] auszuführen.
+
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 Größe haben:
+
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 aufzuführenden Kontakte bestimmt wurde, listet die Datei sie auf. Jeder Kontakt besteht aus 25 Bytes, unterteilt in folgende Felder:
+
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-de|ClientID]] des Kontakts (16 Bytes)
 
*''ClientID'': Die [[ID-de|ClientID]] des Kontakts (16 Bytes)
 
*''IP'': Die [[IP|IP]] des Kontakts (4 Bytes)
 
*''IP'': Die [[IP|IP]] des Kontakts (4 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)
 
*''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-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-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 ü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)
+
*''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 35: Line 35:
 
''0200000012257425DBA4EDDBD097150757404486E55E04DE40123612021F64632587A31EC2FC8566C4A9BAB184E6E9B7D44012361202''
 
''0200000012257425DBA4EDDBD097150757404486E55E04DE40123612021F64632587A31EC2FC8566C4A9BAB184E6E9B7D44012361202''
  
In dem oben angeführten Beispiel kann man folgende Daten sehen:
+
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, 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 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 Löschen markiert sind, sollte in einer nodes.dat niemals einer davon auftauchen. Falls doch, wird der beim Auslesen der Datei einfach ignoriert.
+
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.
  
  

Revision as of 18:52, 27 August 2007

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