システムプログラム(第6週): TCP/IP、NNTP


電子・情報工学系/システム情報工学研究科CS専攻
新城 靖
<yas@is.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~syspro/2007/No6_files/nntp.html
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~syspro/2007/
http://www.coins.tsukuba.ac.jp/~yas/

NNTP

NNTP(Network News Transfer Protocol) とは、ネットワーク・ニュースの記 事の転送や、記事の読み書きを行うためのプロトコルである。mnews や GNUS などのネットワーク・ニュースを読み書きするソフトウェアは、クライアント として NNTP サーバとの間に TCP/IP による通信路を開設する。そして、クラ イアントは、記事を要求する文字列や、ニュース・グループの一覧を要求する コマンドをサーバに送る。これに対してサーバは、要求された記事やニュース・ グループの一覧をクライアントに返す。表1に、クライアントからサーバへ送 られるNNTPのコマンド、表2に、サーバからクライアントへ返される応答を示 す。

表1 NNTPのコマンド

GROUP newsgroup
ニュース・グループnewsgroupを選択する。結果として、記事の数、記事の番号 の上限と下限が返される。
ARTICLE num
記事番号 num の記事の内容を得る。ニュース・グループが選択されている状態の 時に使える。
ARTICLE <message-id>
メッセージID <message-id>の記事の内容を得る。
LIST
ニュースグループの一覧を得る。
HELP
ヘルプ・メッセージの表示
QUIT
終了
POST
記事を投稿する。

表2 NNTPの応答

応答コード 説明
100 ヘルプのテキストが続く。
200 要求受け付け可能である(投稿可)。
201 要求受け付け可能である(投稿不可)。 
205 通信路を切断する。
211 ニュース・グループが選ばれた。記事の数、記事番号の上限、下限、ニュース・グループ名。
235 記事の転送は成功した。
335 記事を送れ。最後は、CR-LF . CR-LF 。
400 サービスを中断する。
411 そのようなニュース・グループがない。
421 もうそのニュース・グループには次の記事がない。
435 その記事は欲しくない。(もう既に受け取っている)
436 転送に失敗した。後でもう一度転送しB$iて欲しい。
437 転送に失敗した。もう転送するな。
500 コマンドが認識できなった。
501 コマンドの文法に誤りがあった。
502 アクセスが制限されている。

telnetコマンドによるNNTPサーバへのアクセス

以下に、telnet コマンドを利用して、NNTP サーバに接続した様子を示す。
% telnet $NNTPSERVER 119[←]
Trying 130.158.80.241...
Connected to gama.cs.tsukuba.ac.jp.
Escape character is '^]'.
200 gama.is.tsukuba.ac.jp InterNetNews NNRP server INN 2.4.1 ready (posting ok).
group fj.news.lists[←]
211 16 61 87 fj.news.lists
article 82[←]
220 82 <active-newsgroups.part1.20060415@fj-news.org> article
Path: gama.is.tsukuba.ac.jp!nadesico.cc.tsukuba.ac.jp!news-sv.sinet!newsfeed.mesh.ad.jp!newsgate1.web.ad.jp!news501.nifty.com!not-for-mail
From: committee@fj-news.org
Newsgroups: fj.news.lists,fj.news.group,fj.archives.documents
Subject: Active Newsgroups List of fj (2006/04/15)
Followup-To: fj.news.group
Date: Sat, 15 Apr 2006 17:26:14 +0900
Organization: fj Newsgroups Management Committee
Lines: 1091
Sender: tetsuzou@pop02.odn.ne.jp
Approved: committee@fj-news.org
Expires: 18 May 2006 00:00:00 +0900
Message-ID: <active-newsgroups.part1.20060415@fj-news.org>
Reply-To: committee@fj-news.org
NNTP-Posting-Host: nttkyo323082.tkyo.nt.ftth.ppp.infoweb.ne.jp
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit
X-Trace: news511.nifty.com 1145089578 8225 58.1.129.82 (15 Apr 2006 08:26:18 GMT)
X-Complaints-To: -
NNTP-Posting-Date: Sat, 15 Apr 2006 08:26:18 +0000 (UTC)
X-Posting-Software: WSNews 2.027
Xref: gama.is.tsukuba.ac.jp fj.news.lists:82 fj.news.group:89 fj.archives.documents:94

Archive-name: fj-news/active-newsgroups/part1
Original-author: saitoh@ics.es.osaka-u.ac.jp (SAITOH akinori)
Last-change: 2005/11/16 by tetsuzou@pop02.odn.ne.jp

fjのニュースグループの一覧とその解説

・現在 fj にあるニュースグループ 411 個の名前と説明文です。

・この文書は「JUNET利用の手引 (第1版)」に由来するもので、
  現在はfjニュースグループ管理委員会(committee@fj-news.org)が
  維持管理を担当しています。

  出所 (題名と日付) を明示する限りにおいて、引用、転載、複製等は、
  著作者等に断りなしに、自由におこなって構いません。
  文書の一部を他の著作物に流用する等の利用は、完全に自由とします。

・fjのニュースグループは、NGMP (NewsGroup Management Protocol) に
  基づき、fjニュースグループ管理委員会が中心になって管理しています。

  ほとんど使われなくなってしまったニュースグループも少なくありません。
  何がほしいという要望と共に、統合や廃止をして、現状にあった、
  皆が使い易い構成にしていきましょう。

・憲章中の“(直接投稿できない)"という表記は、
  そのニュースグループがmoderated groupsであることを意味しています。
  moderatedについての詳細は、以下のWebサイトでご参照いただけます:
	http://www2s.biglobe.ne.jp/~kyashiki/fj/moderated.html

・古くから存在する一部のニュースグループには日本語憲章が付加されて
  いないものがあります。
.
quit[←]
205 .
Connection closed by foreign host.
% []
ここで、強調で示した部分が、キーボードからのタイプである。 この例では、ホスト $NNTPSERVER のポート番号119(nntp)のポート に、TCP/IPにより接続を試みている。続く3行は、telnet コマンドによる定 型的な表示である。通信路が開設されると、サーバは、"200" という応答を返している。これは、NNTP で定義されている応答であり、サー バが、要求を受け付け可能であり、かつ、要求としては投稿要求(POST)も受 け付けることを意味している。"200" 以降の文字列は、コメン トである。

接続されると、"group" というコマンドをサーバに送っ ている。これに対して、サーバは、"211" という応答に続けて、 記事の数、記事番号の上限、下限、ニュース・グループ名を送っている。

次に "article" コマンドを送っている。これによ り記事が転送されている。記事の最後には、"." からなる行が ある。これが、articleコマンドに対する応答の終 りを示している。

最後に "quit" というコマンドをサーバに送ってい る。これにたいして、サーバは、205 という応答を返し、続いて TCP/IP の通 信路を切断している。その下の Connection closed... は telnet コマンドが生成したメッセージである。

参考

★ telnet コマンドによる NNTP サーバへのアクセス

telnet コマンドを使って、NNTP サーバ orchid-c にアクセスし、 ネットワーク・ニュースの記事を画面に表示させなさい。その記事のニュース・ グループ、ニュース・グループ内の番号、記事の先頭の20行程度を報告書に添 付しなさい。このとき、表1に示したコマンド、GROUP と ARTICLE を使うと よい。

注意すべきこととして、GROUP コマンドでは、ニュース・グループ名を一度に 与えることがあげられる。たとえば、comp.sys.mac というニュース・グルー プならば、次のように、一度に全部のニュース・グループ名を与える。

GROUP comp.sys.mac
次のように、部分的に与えることはできない。
GROUP comp
GROUP sys
GROUP mac
vin や mnews では、ニュース・グループを階層構造を持つものとして利用者 に提示している。しかしながら、NNTP のレベルにおいては、そのような階層 構造は存在しない。

その他の NNTP のコマンドを使ってみなさい。NNTP の定義は、RFC977 という ドキュメントにある。

★ NNTPクライアントの作成

NNTPサーバから記事を1つ得るプログラムを作りなさい。そのプログラムの名 前を、nncat とする。

nncat コマンドは、次のように3つの引数を与えて利用するものとする。

% ./nncat host newsgroup number [←]
ここで、host は、NNTPサーバが動いているホストの名前、newsgroup は、ニュー ス・グループ、number は、記事番号である。NNTP プロトコルで用いられる標 準のポート番号は、119(nntp) である。getservbyname() で調べるとよい。

報告書には、作成した nncat コマンドの動作例を示しなさい。

NNTP では、本来、サーバからの応答を確認てから処理を進める必要がある。 この課題の範囲では、サーバからの応答を確認しないで命令を送ったとしても、 動作する可能性もある。

プログラムをつくる時には、行末の扱い(CR-LF)に注意し ないさい。


Last updated: 2007/05/22 13:13:46
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>