Project: Webinterface II - Msgbase Structures: NNTP (3/3)

AMBROSIA60-Portal  Webinterface II Project
Siehe auch
» NNTP-Aufbau und Funktion (1) » NNTP-Header (2) » NNTP-Befehle & Codes (3)
 
© 2003, Daniel Bolege, http://www.bolege.de/nntp-befehle/

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

Befehle

»  ^
  • 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:

    1. 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.
    2. 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.
    3. 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.

Response-Codes

»  ^
  • 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.

© 2003-2024 by Ulrich Schroeter   00659