NNTP-Befehle und -Response-Codes (3/3)
Das Network news transfer protocol (NNTP) dient im Internet der
Verbreitung von Nachrichten im sog. usenet.
Dabei ist die Kommunikation zwischen einem News-Client (z.B. Outlook Express, Forte,
tin und viele mehr) und dem News-Server
durch Anfragen und Antworten darauf geprägt.
Dieser Artikel listet die notwendigen Befehle (also Anfragen) von Clients
und die möglichen Antworten (also
Response-Codes) des News-Servers auf. Ein Artikel über
den technischen Aufbau des usenet und
eine Liste der üblichen Header ist ebenfalls verfügbar.
Im Gegensatz zu HTTP ist NNTP kein zustandsloses Protokoll.
Ein Verbindung
wird also erst dann beendet, wenn der Client den QUIT-Befehl
sendet, der Server die Kommunikation z.B. mit
Response Code 502:
"You are not allowed to talk"
verweigert oder ein Timeout
zuschlägt, sich der Client also zu lange nicht meldet. Ein derartige
Unterhaltung zwischen einem Client und einem Server kann z.B.
so aussehen:
Client: Verbindet zu Server auf TCP-IP-Ebene
Server: 200 XYZ News Server v 1.0.0 ready
Client: MODE reader
Server: 200 Hello, you can post
Client: ARTICLE <han215@news.ruebezahl.de>
Server: 430 No such article found
Client: GROUP de.comp.lang.c++
Server: 211 42364 11235 53599 alt.test
Client: QUIT
Server: 205 Good bye.
Mit Hilfe des interkativen NNTP-Tests (Telnet Ziel-IP 119) können
Sie eine deartige Unterhaltung auch
live verfolgen. Die meisten News-Clients werden Ihnen die Details dieser Kommunikation
verschweigen, da sie für den
normalsterblichen Benutzer in der Regel ohne Interesse sind. Im Folgenden werden alle in
der entsprechenden Spezifikation
RFC 977 definierten Anfragen
von Clients und die möglichen
Antworten des Servers aufgeführt.
|
Die Befehle sind im einzelnen:
- HELP: Liste aller verfügbaren Befehl zeigen,
- SLAVE: Sich als News-Server ausgeben,
- MODE READER: Sich als News-Client ausgeben,
- LIST: Liste aller verfügbaren Newsgroups anfordern,
- NEWNEWS: Liste aller neuen Artikel-IDs anfordern,
- NEWGROUPS: Liste aller neuen Newsgroups anfordern,
- GROUP: Eine Newsgroup wählen,
- ARTICLE: Einen Artikel abfragen,
- BODY: Den Text eines Artikels abfragen,
- HEAD: Die Kopfdaten eines Artikels abfragen,
- STAT: Den internen "current article pointer" setzen,
- LAST: Den internen "current article pointer" auf die vorher
gehende Nachricht setzen,
- NEXT: Den internen "current article pointer" auf die nächste
Nachricht setzen,
- POST: Einen neuen Artikel veröffentlichen,
- IHAVE: Angeben, dass über einen Artikel verfügt wird und
- QUIT: Die Verbindung zum Server beenden.
Die Response-Codes sind im einzelnen
- Informative Codes 100,
- Bestätigungs-Codes 200, 201,
202, 205, 211, 215, 220,
221, 222, 223, 230,
231, 235, 240,
- Aufforderungs-Codes 335, 340,
- Spezifische Fehler-Codes 411, 412, 420,
421, 422, 423, 430,
435, 436, 437, 440 und
441,
- Allgemeine Fehler-Codes 500, 501, 502 und
503
|
| »
|
- HELP: Liste aller verfügbaren Befehle zeigen
Der HELP-Befehl veranlasst den Server, eine Liste aller verfügbaren Befehle zu übertragen. Je nach System kann diese
Liste kommentiert sein und darüber hinaus (spezielle) Kommandos enthalten, die in
RFC 977 nicht definiert sind. Der Server antwortet auf diese Anfrage
mit dem Response-Code 100 und schliesst die Liste mit einer Zeile, die nur einem Punkt enthält, ab.
- SLAVE: Sich als News-Server ausgeben
Mit
dem SLAVE-Befehl signalisiert der Client, dass er selbst auch ein
Server ist, und bittet den (anderen) Server, ihn bevorzugt
zu behandeln. Die meisten News-Server lehnen dieses Kommando ab, wenn
er nicht von einem System kommt, das sie als Server kennen;
andernfalls akzeptieren sie diesen Modus und antworten mit
Response-Code 202.
- MODE READER: Sich als News-Client ausgeben
Mit dem MODE-READER-Befehl gibt sich der Client als Client aus. Da dies dem Standard entspricht, ist dieser Befehl
nicht erforderlich. Er ist auch nicht in RFC 977
definiert. Im Erfolgsfalle liefert der Server einen der Response-Codes 200 und 201.
- LIST: Liste aller verfügbaren Newsgroups anfordern
Der LIST-Befehl verlangt vom Server eine Liste aller verfügbaren Newsgroups. Im Erfolgsfall liefert der Server diese Liste
mit dem Response-Code 215 und in
dem Format "[group] [last] [first] [posting]" und schliesst sie wie üblich mit einer Zeile, die nur einem Punkt
enthält, ab. Dabei bedeutet "group" den Namen der Gruppe, "last" die interne ID des letzten
(also neusten) Artikels in dieser Gruppe und "first" entsprechend die interne ID des ältesten Artikels in
dieser Gruppe (zu den internen IDs siehe auch LIST-Befehl). "posting" ist "y", wenn grundsätzlich Postings, also
das Veröffentlichen von Nachrichten, erlaubt sind, andernfalls "n". Allerdings kann im Einzelfalle der
Server Postings auch bei der Angabe "y" verweigern, etwa wenn der Client nicht zu seinen akzeptierten Systemen
gehört. Beispiel für die Reaktion eine Servers auf den LIST-Befehl:
215 List of newsgroups follows
fr.soc.histoire.moderne 0000000046 0000000001 y
school.pupils 0000000000 0000000001 y
school.subjects.humanities 0000000000 0000000001 y
sfnet.viestinta.tv.digi 0000000002 0000000001 y
.
- NEWNEWS: Liste aller neuen Artikel-IDs anfordern
Ein Client chached in der Regel die Nachrichten, die er vom Server bereits erhalten hat, damit er beim Aufruf einer Gruppe
(siehe GROUP-Befehl) nur noch die Nachrichten laden muss, die nach der letzten entsprechenden Verbindung zum
Server veröffentlicht wurden. Mit dem NEWNEWS-Befehl erhält er vom Server den Response-Code
230 und eine Liste der Message-IDs
der neuen Nachrichten, die mit einem Punkt in einer einzelnen Zeile abgeschlossen wird.
Der NEWNEWS-Befehl folgt der Syntax "NEWNEWS newsgroups timestamp".
"newsgroups" bedeutet dabei die Angabe, von welcher Newsgroup die neuen Artikel geladen werden sollen. Mit Hilfe des
Sternchens * können auch mehrere Gruppen angegeben werden, z.B. "de.comp.lang.*" oder "*.comp.*".
Der "timestamp" gibt an, ab wann Nachrichten für den Client als neu gelten; in der Regel ist dies also der
Zeitpunkt der letzten Abfrage. Zum Format von "timestamp" siehe NEWGROUPS-Befehl.
Beispiel:
newnews de.comp.lang.php 030405 12:31:57 GMT
- NEWGROUPS: Liste aller neuen Newsgroups anfordern
Mit dem NEWGROUPS-Befehl fordert der Client die Liste aller Newsgroups an, die seit einem angegebenen Zeitpunkt neu
auf den Server hinzu gekommen sind. Ähnlich wie beim NEWNEWS-Befehl muss der Client so
nicht bei jeder neuen Verbindung die Liste aller Newsgroups laden.
Der NEWGROUPS-Befehl folgt der Syntax "NEWGROUPS newsgroups timestamp".
Der "timestamp" gibt an, ab wann Newsgroups für den Client als neu gelten; in der Regel ist dies also der
Zeitpunkt der letzten Abfrage. Das Format von "timestamp" lautet "YYMMDD hhmmss", wobei YY die zweistellige
Angabe des Jahres, MM die zweistellige, numerische Angabe des Monats, DD die zweistellige Angabe des Tages, hh die Angabe der
Stunde (von 00 bis 24), mm die zweistellige Angabe der Minute und schliesslich ss die zweistellige Angabe der Sekunde
darstellt. Grundsätzlich gilt für die Angabe des Zeitpunkts die Zeitzone des Servers! Dies kann man verhindern, indem man
"GMT" anhängt, dann gilt die Greenwich Mean Time, also die sog. mittlere Greenwich-Zeit.
Eine erfolgreiche NEWGROUPS-Anfrage beantwortet der Server mit dem Response-Code 231 und einer Liste
der neuen Newsgroups, abgeschlossen mit einer Zeile, die nur einen Punkt enthält.
- GROUP: Eine Newsgroup wählen
Mit dem GROUP-Befehl wählt der Client eine Newsgroup aus. Der Server weiss dann, auf welche Gruppe sich
folgende Aktionen, z.B. POST, beziehen. Der GROUP-Befehl folgt der Syntax
"GROUP newsgroup", wobei "newsgroup" den Namen der Newsgroup darstellt.
Der Server liefert bei Erfolg den Response-Code 211 und eine Zeile in dem Format
"[number] [first] [last] [newsgroup]".
"[number]" gibt dabei die Anzahl aller momentan verfügbaren Nachrichten in dieser Gruppe,
"[first]" die interne ID des ältesten Artikels und
"[last]" die interne ID des neusten Artikels auf diesem Server an.
"[newsgroup]" wiederholt den Namen der entsprechenden Newsgroup. Beispiel:
211 21534 251 21283 alt.test
- ARTICLE: Einen Artikel abfragen
Der ARTICLE-Befehl fordert vom Server eine Nachricht an inkl.
der Header an. Es gibt ihn in drei Varianten:
- ARTICLE <Message-ID>
Wenn als Parameter eine Message-ID, eingeschlossen
in
<spitze Klammern>, angegeben ist, gibt der Server, falls möglich, den entsprechenden
Artikel zurück.
- ARTICLE interne ID
Ein Parameter ohne spitze Klammern wird als interne ID des Artikels betrachtet, der dann,
falls möglich, zurück gegeben wird. In diesem Fall muss der Client zuvor mit dem
GROUP-Befehl eine Newsgroup gewählt haben, da die internen IDs
im Gegensatz zu den Message-IDs nicht über alle
Newsgroups
eines Servers eindeutig sind.
- ARTICLE
Fehlt ein Parameter, so wird der Artikel zurück gegeben, auf den der interne "current
article pointer"
(siehe STAT-Befehl) zeigt.
Im Erfolgsfall antwortet der Server mit dem Response-Code 220 und dem Artikel inkl.
der Header. Die Ausgabe wird, wie üblich, mit einer Zeile abgeschlossen, die nur einen Punkt enthält.
Andernfalls werden die Response Codes 412 (Keine Newsgroup gewählt, nur für den zweiten Fall) oder
423 bzw. 430 (Artikel nicht vorhanden) geliefert. Beispiel:
220 4526 <aoohd1$1c8$1@xyz.ruebezahl.de> follows
Path: news.siberius.com!news-mue1.dfn.de!xyz.ruebezahl.de
From: "Jonathan Dillmann" <jd@web.de>
Newsgroups: de.soc.recht.misc
Subject: Re: Diebstahl eines Rades
Date: Fri, 18 Oct 2002 10:45:11 +0200
Organization: XYZ GmbH, Germany
Lines: 8
Message-ID: <aoohd1$1c8$1@xyz.ruebezahl.de>
References: <hjm4$dk631@mamenchi.zrz.TU-Berlin.DE>
NNTP-Posting-Host: xyz.ruebezahl.de
Hallo,
> gibt es eigentlich eine zentrale Datenbank für gestohlene
> Fahrräder? Ist eine präventive Frage.
Siehe mal http://www.bikefinder.de
Gruss Jonathan
.
- BODY: Den Text eines Artikels abfragen
Der BODY-Befehl entspricht dem ARTICLE-Befehl mit dem Unterschied, dass statt des
ganzen Artikels nur der Nachrichtentext angefordert wird. Bei Erfolg wird der Response-Code 222
mit zurück gegeben, andernfalls einer der Codes 412,
423 bzw. 430.
- HEAD: Die Kopfdaten eines Artikels abfragen
Der HEAD-Befehl entspricht dem ARTICLE-Befehl mit dem Unterschied, dass statt des
ganzen Artikels nur die Header angefordert werden. Bei Erfolg wird der Response-Code 221
mit zurück gegeben, andernfalls einer der Codes 412,
423 bzw. 430.
- STAT: Den internen "current article pointer" setzen
Der STAT-Befehl setzt den internen "current article pointer" auf den angegebenen Artikel. Als Parameter muss entweder,
eingefasst in <spitze Klammern>,
die Message-ID
oder die interne Artikel-ID benannt sein.
Der "current article pointer" ist ein "Lesezeichen" des Servers auf einen Artikel in einer
Newsgroup. Dieser Verweis gilt nur für die jeweilige Client-Server-Verbindung. Alle Befehle, die die Angabe einer
Message-ID oder einer internen Artikel-ID erfordern, beziehen sich,
wenn diese Angabe fehlt, auf die Nachricht, auf die dieses Lesezeichen momentan gesetzt ist. Siehe auch
NEXT-Befehl und LAST-Befehl.
Als Response-Code liefert der Server bei Erfolg 223, andernfalls 412,
423 bzw. 430. Beispiel:
STAT <aoohd1$1c8$1@xyz.ruebezahl.de>
- LAST: Den internen "current article pointer" auf die vorher gehende Nachricht setzen
Das LAST-Kommando setzt den internen "current article pointer" (siehe STAT-Befehl)
auf die vorher gehende Nachricht der aktuellen Newsgroup. Handelt es sich bei der Nachricht, auf die der
"current article pointer" momentan zeigt, um bereits den ersten Artikel auf dem Server, so wird ein Fehler in
Form des Response-Codes 421 geliefert; andernfalls gibt der Server den Code
223 zurück. Siehe auch: NEXT-Befehl.
- NEXT: Den internen "current article pointer" auf die nächste Nachricht setzen
Das NEXT-Kommando setzt den internen "current article pointer" (siehe STAT-Befehl)
auf die nächste Nachricht in der aktuellen Newsgroup. Handelt es sich bei der Nachricht, auf die der
"current article pointer" momentan zeigt, um bereits den letzten Artikel auf dem Server, so wird ein Fehler in
Form des Response-Codes 422 geliefert; andernfalls gibt der Server den Code 223 zurück.
Siehe auch: LAST-Befehl.
- POST: Einen neuen Artikel veröffentlichen
Mit dem POST-Befehl wird die Veröffentlichung eines neuen Artikels eingeleitet. Der Client sollte zuvor
prüfen, ob der Server die Übertragung von neuen Artikeln überhaupt akzeptiert: Dies ist zum einen
vom Server bzw. seinem Verhältnis zum Client (siehe Response-Codes 200 und 201)
und zum anderen von der aktuellen Newsgroups (siehe GROUP-Befehl) abhängig.
Akzeptiert der Server diesen Befehl nicht, so antwortet er mit dem Response-Code 440.
Anderfalls wird der Code 340 geliefert, und der Server erwartet
den Artikel inkl. der Header. Als Abschluss fungiert auch hier wieder eine Zeile, die nichts ausser einem Punkt enthält.
Bei Erfolg liefert der Server schliesslich den Code 240, andernfalls 441.
Beispiel:
Client: POST
Server: 340 Send article, end with "." on a line by itself
Client: From: newsmaster@ruebezahl.de (ruebezahl.de news system)
Newsgroups: de.test
Subject: Test please ignore
Das ist ein Test.
.
Server: 240 Article received
- IHAVE
Angeben, dass über einen Artikel verfügt wird
Mit dem IHAVE-Befehl (Syntax: "IHAVE [<Message-ID>]") gibt der Client an, dass er
über den Artikel mit der benannten
Message-ID
verfügt. Der Server kann dann sagen, ob er diesen Artikel auch haben möchte.
Der IHAVE-Befehl dient dem Austausch von Nachrichten zwischen News-Servern und wird in der Regel zurückgewiesen,
wenn es sich bei dem Client um einen "News-Reader" und nicht um einen anderen Server handelt. Will der
Server den Artikel haben, so antwortet er mit dem Response-Code 335 und erwartet ihn
wie unter POST beschrieben. Andernfalls lehnt er den Artikel mit einem der Codes
435, 436 oder 437 ab.
- QUIT: Die Verbindung zum Server beenden
Mit dem QUIT-Kommando beendet der Client die Verbindung zum Server, und der entsprechende Socket wird geschlossen.
Der Response-Code des Servers ist 205.
|
| »
|
- 100 help text follows
Wird bei erfolgreichem HELP-Befehl mit dem Hilfetextes geliefert.
- 200 server ready - posting allowed
Wird bei erfolgreichem Verbindungsaufbau zum Server zurück gegeben. Das
Veröffentlichen von Nachrichten wird (grundsätzlich) erlaubt.
- 201 server ready - posting NOT allowed
Wird bei erfolgreichem Verbindungsaufbau zum Server zurück gegeben. Das Veröffentlichen von Nachrichten ist nicht erlaubt.
- 202 slave status noted
Wird bei erfolgreichem SLAVE-Befehl geliefert.
- 205 closing connection. Goodbye.
Wird bei erfolgreichem QUIT-Befehl geliefert.
- 211 [number] [first] [last] [newsgroup] group selected
Wird bei erfolgreichem GROUP-Befehl geliefert. Erläuterungen der Parameter siehe dort.
- 215 list of groups follows
Wird bei erfolgreichem LIST-Befehl mit der Liste der Newsgroups geliefert. Erläuterungen der Parameter siehe dort.
- 220 [id] [<message id>] article retrieved - head and body follow
Wird bei erfolgreichem ARTICLE-Befehl mit der angeforderten Nachricht (inkl. der Header) geliefert. Erläuterungen der Parameter siehe dort.
- 221 [id] [<message id>] article retrieved - head follows
Wird bei erfolgreichem HEAD-Befehl mit dem angeforderten Nachrichten-Header geliefert. Erläuterungen der Parameter siehe dort.
- 222 [id] [<message id>] article retrieved - body follows
Wird bei erfolgreichem BODY-Befehl mit der angeforderten Nachricht (ohne Header) geliefert. Erläuterungen der Parameter siehe dort.
- 223 [id] [<message id>] article retrieved
Wird bei erfolgreichem Umsetzen des "current article pointer" nach einem
STAT-, LAST- oder NEXT-Befehl
geliefert. "[id]" gibt dabei die interne ID (siehe STAT-Befehl) des Artikels an.
- 230 list of new articles by message-id follows
Wird bei erfolgreichem NEWNEWS-Befehl mit der Liste der für den Client neuen Artikel geliefert.
- 231 list of new groups follows
Wird bei erfolgreichem NEWGROUPS-Befehl mit der Liste der für den Client neuen Newsgroups geliefert.
- 235 article transferred
Wird bei erfolgreicher Übertragung eines Artikels an den Server geliefert, wenn der ihn nach einer
IHAVE-Mitteilung angefordert hat.
- 240 article posted ok
Wird geliefert, wenn die Veröffentlichung einer neuen Nachricht erfolgreich verlaufen ist (siehe POST-Befehl).
- 335 send article to be transferred, end with "." on a line by itself
Wird geliefert, wenn der Server einen Artikel, der ihm per IHAVE-Mitteilung angeboten wurde, haben will.
- 340 send article to be posted, end with "." on a line by itself
Wird geliefert, wenn der Client die Veröffentlichung per POST-Befehl beantragt und der
Server dies genehmigt hat. Der Server ewartet nun die Nachricht (siehe POST-Befehl).
- 411 no such group
Wird geliefert, wenn der Client per GROUP-Befehl eine Newsgroup gewählt hat, die der
Server nicht führt. Siehe auch LIST-Befehl.
- 412 no newsgroup has been selected
Wird geliefert, wenn der Client einen ARTICLE-, HEAD-,
BODY- oder STAT-Befehl ohne Parameter, die eine Nachricht kennzeichnen,
absetzt, und ohne zuvor per GROUP-Befehl eine Gruppe gewählt zu haben.
- 420 no article has been selected
Wird geliefert, wenn der Client einen NEXT- oder LAST-Befehl
absetzt, der "current article pointer" jedoch momentan nicht gesetzt ist (siehe auch
STAT-Befehl).
- 421 no next article found
Wird geliefert, wenn der Client einen NEXT-Befehl
absetzt, der "current article pointer" jedoch bereits auf die letzte Nachricht zeigt.
- 422 no previous article found
Wird geliefert, wenn der Client einen LAST-Befehl
absetzt, der "current article pointer" jedoch bereits auf die erste Nachricht zeigt.
- 423 no such article number in this group
Wird geliefert, wenn der Client einen ARTICLE-, HEAD-,
BODY- oder STAT-Befehl absetzt und dabei als Parameter
eine interne ID angibt, die der Server nicht kennt.
- 430 no such article found
Wird geliefert, wenn der Client einen ARTICLE-, HEAD-,
BODY- oder STAT-Befehl absetzt und dabei als Parameter
eine Message-ID angibt, die der Server nicht kennt.
- 435 article not wanted - do not send
Wird geliefert, wenn der Server einen Artikel, der ihm per IHAVE-Mitteilung angeboten wurde, nicht haben will.
- 436 transfer failed - try again later
Wird geliefert, wenn die Übertragung eines Artikels, den der Server per Response Code 335 angefordert hat,
fehlgeschlagen ist. Der Server bittet um die erneute Übertragung zu einem späteren Zeitpunkt, die dann jedoch
wieder per IHAVE-Mitteilung initiiert werden muss.
- 437 article rejected - do not try again
Wird geliefert, wenn dem Server ein Artikel, der ihm per IHAVE-Mitteilung angeboten wurde und den er bereits
per Response-Code 435 abgelehnt hatte, trotzdem gesendet wurde. Der Empfang des Artikel wird abgelehnt, ein
wiederholtes und wiederholt ungewünschtes Versenden soll unterlassen werden.
- 440 posting not allowed
Wird geliefert, wenn der Client die Veröffentlichung per POST-Befehl beantragt und der
Server dies abglehnt
- 441 posting failed
Wird geliefert, wenn eine per POST-Befehl initierte Übertragung einer neuen Nachricht fehgeschlagen ist.
- 500 command not recognized
Wird geliefert, wenn der Server einen Befehl des Clients ohne nähere Angaben ablehnt.
- 501 command syntax error
Wird geliefert, wenn der Server einen Befehl des Clients aus syntaktischen Gründen nicht versteht.
- 502 access restriction or permission denied
Wird geliefert, wenn der Server die Kommunikation verweigert.
- 503 program fault
Wird geliefert, wenn der innerhalb des Servers ein Fehler aufgetreten ist.
|