システムプログラム（第6週）: 


# システムプログラム（第6週）: ＴＣＰ／ＩＰ、ＮＮＴＰ

筑波大学 システム情報工学研究科
コンピュータサイエンス専攻, 電子・情報工学系
新城 靖
<yas@is.tsukuba.ac.jp>

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

## NNTP

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

表１　NNTPのコマンド

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

表２ 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により接続を試みている。続く３行は、telnet コマンドによる定
型的な表示である。通信路が開設されると、サーバは、"200"
という応答を返している。これは、NNTP で定義されている応答であり、サー
バが、要求を受け付け可能であり、かつ、要求としては投稿要求（POST）も受
け付けることを意味している。"200" 以降の文字列は、コメン
トである。

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

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

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

参考

RFC977 Network News Transfer Protocol
RFC1036 Standard for Interchange of USENET Message.
RFC822 Standard for The Format of ARPA Internet Text Messages
RFC2822 Internet Message Format

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

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

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

GROUP comp.sys.mac

次のように、部分的に与えることはできない。

GROUP comp
GROUP sys
GROUP mac

vin や mnews では、ニュース・グループを階層構造を持つものとして利用者
に提示している。しかしながら、NNTP のレベルにおいては、そのような階層
構造は存在しない。

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

### ★ NNTPクライアントの作成

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

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

% ./nncat host newsgroup number

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

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

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

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

Last updated: 2011/05/29 23:02:25