NNTP30, definiert in RFC 977, ist das für die Verbreitung von Usenet-Messages (News) zuständige Protokoll.
Auch wenn heute unter Lamer-Kreisen die Web-basierten Foren das Usenet immer mehr verdrängen, wird es doch noch von sehr vielen Leuten besucht und ist der erste Ort wo man fragen sollte falls zum Beispiel Computer31-Probleme auftauchen.
Um die Beispiele dieses Kapitels nachzuvollziehen kann man sich beim
CIS DFN auf http://news.cis.dfn.de/dnn/
kostenlos einen Account für die
Benutzung ihres News-Servers holen, auch wenn die Registrierung von Menschenhand
geprüft wird und es deswegen ein bis zwei Tage dauert, bis man dann die
Login-Daten in Händen hält.
NNTP ist ein meiner Meinung nach sehr geniales Protokoll, da es völlig dezentral orientiert ist:
Eine Usenet-Mail, hochgeladen auf irgendeinen Server des NNTP-Netzwerkes, wird
innerhalb von Stunden an die anderen Server weitergeleitet, sodass sie sehr
schnell erdweit abrufbar ist (siehe dazu ).
Bei NNTP besteht eine Message genau wie bei SMTP und POP3 aus einem Header und
einem Body (detailliert beschrieben ).
Ähnlich wie die bisher besprochenen Protokolle der Anwendungsschicht basiert NNTP auf ASCII, das heißt man kann ohne Probleme via Telnet Posten (Usenet-Messages versenden) und online lesen.
Zunächst verbinden wir uns zuerst mit dem News-Server, im Beispiel
news.cis.dfn.de
auf dem Standard-NNTP-Port 119
(TCP). Als Banner
erhalten wir
<200 The server welcomes 167.9-dial.\ < augustakom.net (80.81.9.167). \ < Authorization required for reading and posting.Wir folgen dem Aufruf des Banners und loggen uns ein:
>AUTHINFO SIMPLE blechschmidt p4ssw0rt <281 Authentication accepted. (UID=105138)
Jetzt könnten wir mit LIST NEWSGROUPS
alle auf diesem Server verfügbaren
Newsgruppen anzeigen lassen. Da dies wegen der Vielzahl von Gruppen lange
dauern kann, zeigen wir gleich die IDs der letzten Artikel der Newsgruppe
de.comp.os.unix.shell
an:
>LISTGROUP de.comp.os.unix.shell <211 Article list follows <14127 <14128 <14129 <14130 <14131 <.Wie bei SMTP und POP3 wird das Ende der Übertragung mit einem einzelnen Punkt auf einer Zeile für sich markiert.
Um nun die 14131. Message abzuzeigen, geben wir
>ARTICLE 14131 <220 14131 <bfjheg$c3$04$1@news.t-online.com> article <Path: uni-berlin.de!fu-berlin.de!!news.t-online.com!not-for-mail <From: Heiko Franz <heiko.franz@gmx.de> <Newsgroups: de.comp.os.unix.shell <Subject: Tastenfolge an Programm in virtuellem Terminal senden <Message-ID: <bfjheg$c3$04$1@news.t-online.com> <Xref: uni-berlin.de de.comp.os.unix.shell:14131 < <Hallo! < <Gibt es in der Bash eine Möglichkeit, eine Tastenfolge an ein <... <.ein. Auch hier wird das Ende der Nachricht (Syntax beschrieben
>HEAD 14131eingeben können. Wären wir nur am Inhalt interessiert, würden wir
>BODY 14131benutzen.
Um einen Artikel zu posten, wechseln wir zuerst in die Newsgroup de.test
mit dem schon erwähnten LISTGROUP
-Befehl und tippen dann
>POST <340 Ok, recommended ID <bfk1ac$f52tn$1@ID-105138. < news.uni-berlin.de> >From: Tester <test@test.com> >Subject: Test 1 >Newsgroups: de.test > >Only a test message. >. <240 Article posted <bfk1ac$f52tn$1@ID-105138.news. < uni-berlin.de>Hier könnten wir auch (wie im Beispiel gemacht) den Absender faken. Da allerdings bei den meisten NNTP-Servern die verwendete UID32 in den Header aufgenommen wird, ist das Zurückverfolgen sehr einfach, man muss nur in den Header der Nachricht schauen.
Zur Kontrolle schauen wir uns nun die Message an. Dazu verwenden wir wiedern
den ARTICLE
-Befehl, diesmal allerdings statt der Message-Nummer die
Message-ID als Parameter:
>ARTICLE <bfk1ac$f52tn$1@ID-105138.news.uni-berlin.de> <220 0 article <bfk1ac$f52tn$1@ID-105138.news.uni-berlin.de> <Path: uni-berlin.de!167.9-dial.augustakom.NET!not-for-mail <From: Tester <test@test.com> <Newsgroups: de.test <Subject: Test 1 <Date: 22 Jul 2003 18:55:45 GMT <Lines: 1 <Message-ID: <bfk1ac$f52tn$1@ID-105138.news.uni-berlin.de> <NNTP-Posting-Host: 167.9-dial.augustakom.net (80.81.9.167) <X-Trace: news.uni-berlin.de 1058900145 15895479 80.81.9.167 < (16 [105138]) <Xref: uni-berlin.de de.test:428175 < <Only a test message. <.Einige Header33 sind automatisch dazu gekommen, um das Funktionieren des Verbreitens der Message zu gewährleisten. Von wesentlicher Bedeutung ist die
Message-ID
. Diese ID
identifiziert jede Nachricht (Usenet-Mail und "`normale"' Mail) eindeutig. Die
Message-ID setzt sich üblicherweise aus zufälligen Zeichenketten, der aktuellen
Zeit und dem User-Namen des Posters zusammen.
Nun können wir die Verbindung schließen:
>QUIT <205 .
Hier noch mal die einzelnen Befehle, diesmal ohne Sever-Reply:
>AUTHINFO SIMPLE benutzername password >LISTGROUP gruppenname >ARTICLE nummer >POST >[(Usenet-)Mail-Header und -Body] >QUIT
Eine volle Beispielsitzung findet sich
NNTP geht jedoch über eine bloße Ansammlung von "`normalen"' Mails hinaus: Es gibt einige Header-Felder, die die Verteilung der Usenet-Mails regeln.
Über den Newsgroups
-Header wird festgelegt, ich welchen Gruppen die
Nachricht erscheint. Getrennt werden mehrere Gruppen (zum Beispiel beim
Cross-Posting34) durch ,
(Komma):
Newsgroups: de.comp.text.tex, de.comp.text.genuineword
Der Followup-To
-Header entscheidet, in welche Newsgroup Antworten gehen.
Dies ist insbesondere beim Cross-Posting nützlich (und wird im Allgemeinen auch
vom Poster erwartet), da alle Antworten gesammlt sind.
Besonders ist das Ziel poster
, in dem Fall gehen die Antworten direkt an
den Sender der Nachricht:
From: Ingo Blechschmidt <iblech@web.de> Subject: Suche XYZ Followup-To: poster
Bei moderierten Gruppen35 ist der Approved
-Header nötig, um
die Moderation zu umgehen. Mehr dazu siehe Google.
Besondere Usenet-Mails sind "`Control-Messages"'. Mit ihnen können zum Beispiel vorhandene Nachricht gelöscht ("`gecancelt"') werden, neue Newsgruppen angelegt und entfernt werden, etc.
Jede Control-Nachricht muss den Control
-Header besitzen. Um zum Beispiel
die (eigene) Nachricht mit der Message-ID <abc@host.org>
zu canceln, benutzt
man:
Control: cancel <abc@host.org>Dabei ist darauf zu achten, dass die "`Mail"' vom gleichen Absender verschickt wird, der
From
-Header muss also mit dem From
-Header des Postings, das
gelöscht werden soll, übereinstimmen36.
Mit Control-Nachrichten kann man auch neue Newsgruppen erstellen, mehr hierzu RFC 1036.
Bisher wurde noch nicht erklärt, wie eine Nachricht auf Server A
an alle
anderen Server weitergeleitet wird.
Server A
könnte sich natürlich als den Original-Poster ausgeben, zu jedem
anderen Server der Erde connecten und dort wieder via POST
die Nachricht
posten. In der Tat kommt jedoch ein sehr viel effizienteres Verfahren zum
Einsatz, IHAVE
:
Angenommen, jemand postet auf A
eine Mail mit der Message-ID
<r4ndom@host>
. Dann wird A
zu einem oder zwei anderen Servern connecten
und dort IHAVE
ausführen:
>IHAVE <r4ndom@host> <335 send article to be transferred. >From: ... > >Hallo, ... >. <235 article transferred okHat der Server den Artikel schon, kann
A
diesen Umstand an einer verändeten
Statusmeldung erkennen:
>IHAVE <r4ndom@host> <435 article not wanted - do not send it
Dieses Spiel führt jeder Server in einem bestimmten Intervall aus, so dass nach kürzester Zeit die Nachricht auf allen (an das Netz angeschlossenen) Servern verfügbar ist.
Befehl | Wirkung |
AUTHINFO SIMPLE user pass |
Login |
LIST NEWSGROUPS |
Zeigt Liste aller Newsgroups des Servers an |
LISTGROUP gruppenname |
Zeigt IDs einer Gruppe an |
LISTGROUP gruppenname |
Wechselt in die angegebene Gruppe |
GROUP gruppenname |
Wechselt in angegebene Gruppe |
ARTICLE nummer o. ARTICLE id |
Zeigt gewählte Nachricht an |
HEAD nummer o. HEAD id |
Holt den Header der gewünschten Message |
BODY nummer o. BODY id |
Holt den Inhalt der Usenet-Mail |
POST |
Sendet eine Message in die aktive Gruppe |
IHAVE msg-id |
Verteilt eine Nachricht |
QUIT |
Schließt die Sitzung |
Wie man sieht, ist NNTP trotz der sehr stark ausgeprägten Dezentralisierung
noch sehr einfach zu bedienen, Lesen und Posten von Usenet-News sollte jetzt
auch via Telnet kein Problem mehr sein. Zum Testen der neu erworbenen Kenntnise
sollte man allerdings Newsgruppen wie de.test
verwenden, um andere Leser
nicht mit falschen Headern zu stören ;-)...
Übrigens ist auch lynx
(mehr zu lynx ) ein einfach zu
bedienender Newsreader, was die Screenshots
X-Trace
-Header, der sowohl die IP
als auch (in diesem Fall) die User-ID des Posters enthält.
Sender
-Header überprüft, ist der nicht vorhanden wird zum From
übergegangen.