UN Ⅸ便利帖 宮下イき甫 wget ( 2 ) WWW コンテンツを取得する 前回、 wget コマンドを用いて WWW サイトのミラー リングをおこなう際の問題点について述べました。 wget では、 HTML ファイルに言当されたリンク先のファイル を同時に取得することもできます。しかし、 JavaScript を用いて重加勺にロードされる画像のミラーリングは、 wget だけでは不可能なようです。そこで、解決策として以下の ような例を挙げました。 1. ミラーリングによって取得したすべての HTML ファ イルから、画像ファイル名をすべて抜き出す。 2. それぞれの画像ファイルについて取彳斉みかどうかを調 べ、取得されていなけれは個々に wget コマンドで取得 する。 今回は、この機能を実現するシェル・スクリプトを作成 してみます。ミラーリングする WWW サーバーのコン テンツの大部分を wget で取得したあとに、今回作成する シェル・スクリプトを使って、、落ち穂拾い " することにな 仕様の具体化 ります。 UNIX MAGAZINE 2001.11 の勤務している大学の WWW サーバーでは、すべてのコ とまりのなかでは共通していると思われます。たとえは型、 JavaScript の関数名は、関連する複数のコンテンツのま 実際には、動的に画像をロードするために用いられる 具体化していきます。 Script がどのように利用されているかを考えつつ、さらに めます。ここでの要求イ」嘛は前述のとおりですが、 Java- 成する場合には、要求される仕様を町寉にすることから始 ーイ殳に、シェル・スクリプトにかぎらすプログラムを作 ンテンツで、、 loadimage" という関数が使われているよう です。これを利用すると、上記の方法は次のようにすこし 以下で、それぞれの項目について詳しくみていきましょ ドを利用して取得する。 かを調べ、取得されていない場合は個々に wget コマン 2. それぞれの画像ファイルについてすでに取彳斉みかどう 像ファイル名を抜き出す。 イルから、 loadimage という単語とともに出現する画 1. ミラーリングによって取得したすべての HTML ファ だけ改良することができます。 これに続けるかたちで、シェル・スクリプト本体を作成 ROOTDIR=/www/mirror/$TARGET TARGET=www. f00. jp # ! /bin/sh す川ま、スクリプトの地部分は次のようになります。 クトリをシェル変数 $ROOTDIR にそれぞオび内すると GET に、取彳斉みのコンテンツが保存されているディレ す。ミラーリング対象のサーバー名をシェル変数 $TAR- . foo. jp というディレクトリにすでに取得しているとしま とし、そのコンテンツは自ホストの /www/mirror/www ミラーリングしたい WWW サーノヾーを www.f00.jp という名前にします。 作成するシェル・スクリプトは getmissingimages 前提となる王竟 は、目標となるシェル・スクリプトの動作工韆竟を定めます。 くつかの段階に分けて開発の過程を追っていきます。ます う。今回は、シェル・スクリプトの作成の練習も兼ね、い していきます。 123
特集ネットワークの基礎知識 0 に転送できたかどうかが分からない状況になることも少なくあ メールを送らないサイトか増えてきています。そのため、本当 がサイズ制限によってメールを捨てた場合も、送信者にエラー も効果があります。・職丘は、 MTA (Mail Transfer Agent) 況を考えてみてください。メール爆撃は手間カ功、からず、しか るメーリングリストに対し、 IOMB のメールを何回も送る状 簡単に溢れてしまうからです。組織内のユーサーから構成され を受けたときに、メールスプールのあるシステムのディスクが これは、制限しないとメール爆撃 (E-mail bombardment) ます。とはいえ、そういったサイトがないわけではありません。 電子メールのサイズ制限を実施しているサイトは減りつつあり ディスクの低価格化とネットワークの広帯域化にともない、 wget の入手方法 りません。 106 再帰的にアクセスするレベルを制限できます。 す。そのようなときは、以下のオプションを追加すると、 膨大な量のデータをダウンロードすることになったりしま ンクか張られていたり、再帰的にアクセスすると結果的に とします。しかし、指定した URL とは異なるサイトにリ % wget —-recursive U ん す。それには、 wget には、これをすべてダウンロードする機能がありま て、そこからのリンクによって : 料冓造ができあがります。 ので、ある URL で示される HTML ファイルを項点とし HTML て表現されているデータはハイバーテキストな ドするガ去を紹介します。 データからリンクされているすべてのデータをダウンロー な機能があります。そのなかから、ある URL て指定した wget には、 こまでに紹介したもの以外にもいろいろ ある URL 以下のダウンロード WWW サイトを調べてみるとよいでしよう。 バイナリ版が用意されていることもあるので、関連する 軽にインストールできます。プラットホームによっては Linux であれば、提供されているパッケージを用いて手 ンストールも簡単なはすです。 FreeBSD や NetBSD 、 に対応しているため、ソースコードからのコンパイル、イ からダウンロードできます。ほとんどの UNIX システム ・ http://www.gnu.org/software/wget/wget.html wget は GNU ソフトウェアに含まれていて、 ー level = れ社 7 れ 直接アクセスする部分はレベル 1 です。 num に 0 ま たは inf と指定すると無制限になり、 wget はすべてのリ ンクをたどり終えるまて再帰的にアクセスします。 recur- sive と level の 2 つのオプションをうまく指定すれは、あ る URL 以下のファイルがすべて得られます。 HTML で は、同しサイト内の資源を相対パスで表現する去力ヨ殳 的なので、このガ去でファイルをダウンロードすれば、そ の WWW サイトのファイル構造を再現できることにな ります。 UNIX MAGAZINE 2001.11 Lynx による WWW アクセスは日本語入力との整合性も サも本虫い人気をもっています。その 1 つが Lynx です。 くありません。そのためか、文字べースの WWW プラウ Emacs などのエデイタを用いた文字べースの仕事も少な まだたくさんあります。 UNIX 上で作業する場合には、 が多いのは事実ですが、文字情報を中心としたサイトも 最近は、画像を多用するきらびやかな WWW サイト Ly nx の利用 ション ( ー。 の URL から一気にデータを入手したいときにイ叫リなオプ は、 1 行に 1 っすっ URL を記述しておきます ) 。大量 れた URL からデータのダウンロードを試みます ( 川 e に -input-file=file オプションを使うと、 file に言当さ とよいでしよう。 まく使って HTTP で送られてくるサイズ情報を無視する このような事態を避けたいときには、このオプションをう が原因で、うまくダウンロードできないこともあります。 tent-Length の値を送るところも少なくありません。これ ションです。 WWW サイトのなかには、間違った Con- で送られてくるデータのサイズを表す値 ) を無視するオプ —ignore-length は、 Content-Length のイ直 (HTTP ファイルの再ダウンロードを防げます。 いる場合、このオプションを指定すると、すでに取得した し、関連するファイルをすべてダウンロードしようとして ができます。あるいは、同一の URL に何回もアクセス 既存のファイルに上書きしてしまうトラブルを避けること -nc ( または一 -no-clobber) オプションを指定すると、 その他の便利なオプション
連載 / UN Ⅸ便利帖ー② リスト 2 小さなループも追加した getmissingimages # ! /bin/sh TARGET=www. f 00 . j p ROOTDIR=/www/mirror/$TARGET cd $ROOTDIR for subdir 1n 'find do cd $subdir for imagefile in do grep ー loadimage * . html 2 > /dev/null ハ awk —F\ ' , for (field = 1 ; field く = NF; field + + ) if ($field ~ /(gifl jpglpng)$/) -type d —print ( } ' ー sort ー uniq print $field ( その $imagefile が未取得であれば取得する ) done cd $ROOTDIR grep ¯w loadimage *. html 2 > /dev/null ハ for (field = 1 ; field く = NF; field + + ) if ($field ~ /(gifljpglpng)$/) print $field このスクリプトによって、あるディレクトリに置かれて いるすべての HTML ファイルのなかから loadimage 関 数の引数になっている画像ファイル名を列挙する操作カ院 了します。この部分を加えた getmissingimages はリス ト 2 のようになります。 リスト 2 では、画像ファイル名の重複を避けるために、 上記のスクリプトの出力を sort コマンドて辞書順に並べ 替えたあと、 uniq コマンドで重複する行を削除する処理 を追加しています。さらに、このようにして列挙した画象 ファイル名をシェル変数 $imagefile に代入し、ループ内 部の処理に渡しています。 メインルーチン 最後に、 $imagefile にオ褓内されている画像ファイルが 釮 ( 得ならは陬得する、という部分を作成します。これは 基本的には、以下のようなスクリプトで実現できます。 if [ ! —f $imagefile ] then wget で $imagefile を取得する f i UNIX MAGAZINE 2001.11 つまり、 $imagefile というファイルがあるかどうかを test コマンド ( [ コマンド ) で調べ、なかったら wget コマンドで取得し、あれば何もアクションを起こさないと いうことになります。 wget コマンドは指定されたファイルをカレント・ディ レクトリに取得します。たとえは http://www.foo ・ jp/ loadimage(' ・・ /images/()l. gif')" と bar/baz. html に 書かれている場合、ディレクトリ $ROOTDIR/bar で単 純に、、 wget $TARGET/bar/.. /images/01. gif' など とすると、 ($ROOTDIR/images ではなく ) $ROOT DIR/bar に 01. gif を保存してしまいます。これを防ぐに は、あらかじめ $ROOTDIR/bar/.. / ・ lmages というディ レクトリに移動したうえで、上記の処理をおこなう必要が あります。 これを踏まえて、 getmissingimages に信己のスクリプ トを追加したのがリスト 3 です。ここでは、 $imagefile が釮得だった場合は以下の 3 行が処理されることにな ります。 cd 'dirname $imagefile wget ¯q http : //$TARGET/$subdir/$imagef ile cd $ROOTDIR/$subdir 1 行目では、 dirname コマンドで $imagefile のディレ クトリ部分を抽出し、 cd でそこへ移動しています。 2 行目 で目的の画像ファイルを取得していますが、 wget コマン 125
図 5 サイドバーに表示されるアクセス履歴 凵 0 し第上′をン 1 0 ↓ 0 を一よ・物ー」、 嚼“・朝物宀明イ、懿社′、 - 、な諸 ~ 。 4 第 40 当いイ、当い噌日、 0 懋ーこホートア 0 FAQ Server< br>lnstallation Cyrus IMAP 、、一に気ををよ製 イれ : 0 : ー刻 0 こ 4 p 、 : ま・、・ト F 、 0 ト Ⅱ材ぬ h ! 第 4 二新 0 マ川“、スツい贏市 FAQ 二。”要 m 亂」翳こ : : ! を、を ! : 当芝望を ・三みまをド、当 Con 、 け製、ヨれ上キ K ′ ) を一 - : 、マ「′れい第 - 、背 ( ごげ応 ) 新アに「′新、コ , 第第新 -0 ド当作 0- ・ 0- : 直、ド、、 0 す 15 Bugfixß& わ h この機能を利用すると、過去数日間にアクセスした URL に簡単に再アクセ スできる。 のアクセスかを表示しているウインドウがあります。 をクリックすると、過去にアクセスしたページにジャンプ することかできます。この履歴を言当求する機能は、なかな カイ叫リです。 WWW の利用パターンは、サイトによって 2 通りある ように思います。ます、去麒月間に何回も訪れ、その中身を 徹底して眺めて、それカ鮗るとアクセスしなくなるケース です。もう 1 つは、特定のサイトを定期的に訪れるケース です。後者の場合にはブックマークカ硬利ですが、前者の ようなサイトはわざわざブックマークに登録するよりも、 この履歴の機能を利用したほうがかえって使いやすくなる のではないでしようか。 ノート 6 MoziIIa や Netscape 6 のサイドバーの機能はよくで きていて、 WWW を利用するときにはなかなか便利です。 History の機能だけではなく、現在表示しているべージから キーワードを抽出し、検索エンジンに与えて得られた結果を 表示する、 What's Related" の機能や、ブックマークを表示 するサイドバーなど、快適に使うための機能力っています。 Netscape の WWW ページを見ると、サイドバーは情報を表 示するためのもので、最大の特徴は動酌に中身を構成すること だと書かれています。 ブックマークは一一一見便利そうですが、刊箋紙のような気分 でどんどん追加していくと、けっきよくは使わない、あるいは なんのために登録したのかさえ憶えていないようなものて溢れ てしまうことがあります。これを防ぐには、ありきたりかもし れませんが、ブックマークを定期的に整理する習慣をつけるの UNIX MAGAZINE 2001.11 カ立一番でしよう。 wget の利用 WWW サイトへのアクセスには、たいていの場合は WWW プラウサ、つまり Netscape Navigator や Mo- zilla を使っていると思います。しかし、これらのプラウ サは X ウインドウ・システム上でしか使えす、シェル・ プログラムのなかでうまく利用できるようなものでもあり ません。もちろん、プラウザとして起動したり、あるいは 特定のファイルを表示させることは可能ですが、もともと インタラクテイプに利用するツールとして作られているの で、コマンド行でのバッチ的な処理には不向きです。 そんなときに重宝するのが、 wget というツールです。 引数に URL を指定して wget コマンドを実行すると、そ のサイトに HTTP でアクセスし、必要なデータをダウン ロードしてくれます。 wget が便利なのは、たとえは WWW サイトに置いて ある大量のファイルをダウンロードするような場合です。 もちろん、プラウサで 1 っ 1 っクリックする方式でもか まいませんが、ファイルが多いとかなりの時間がかかり、 しかもそのあいだはすっとプラウザとにらめっこしていな け川まなりません。 % wget http : //www. isp ・ ne ・ jp/foo/bar/xx. html とすると、 xx. html というファイルをカレント・ディレ クトリにダウンロードすることができます。 ファイルを友人に渡す場合、よく使われるのはやはり 電子メールでしよう。しかし、数百 KB 程度ならまだし も、数 MB 、数 - ト MB のファイルを電子メールで送るの は得策ではありません。まず、配当響各にあるサイトで電 子メールのサイズを制限している場合は、相手に届きませ ん。そして、送れたとしても、中継サイトのスフ。ール領域 を消費することになってしまいます。 そこで、ファイルを WWW サーバーに置き、相手に 直接ダウンロードしてもらうガ去をとることが多くなって きました。この場合には、電子メールで URL だけを送れ はよいことになります。このような、 WWW サーバーを 用いたファイルの受け渡しも一ヨ勺になってきています。 こんなときにも、 wget コマンドを使うと目的とするファ イルを簡単に入手できます。 105
連載 / UN Ⅸ便利帖ー② リスト 3 完成した getmissingimages # ! /bin/sh TARGET=www. f00 . jp ROOTDIR=/www/mirror/$TARGET cd $ROOTDIR for subdir in Cfind do cd $subdir for imagefile in do grep ¯w loadimage * . tml 2 > /dev/null ハ awk —F\ ' for (field = 1 ; field く = NF; field + + ) if ($field ~ /(gifljpglpng)$/) print $field } ' ー sort ー uniq —type d -print ( if [ ! —f $imagefile ] then cd ( dirname $imagefile ( wget -q http : //$TARGET/$subdir/$imagefi1e cd $ROOTDIR/$subdir done cd $ROOTDIR ドに引数ー q を付けて wget のコメントが出力されないよ うにしています。そして最後に、もとのディレクトリへ戻 って次のループに備えています。ここでも pushd と popd が使えれは嬉しいのですが、前述したように sh では利用 できないため、やや分かりづらい実装になってしまったか もしれません。 条件変更への対処 以上で、目標としていたシェル・スクリプトか完成しま した。このシェル・スクリプトは以下のような牛て新川乍 します。いすれも、ごく一引勺な WWW サーバーのコン テンツに対してははは成り立っと思われます。 1. HTML ファイルのファイル名の末尾は、、 . htm にであ る。 2. 画像の動的ロードのための JavaScript 関数の名前は loadimage である。 3. 画像ファイルのファイル名の末尾は gif 、 jpg または png である。 4. 画像ファイルと loadimage 関数は同一行に出現する。 5. 画像ファイルは相対パスて指定されている。 126 これらのうち 1 ~ 3 の条件は、変更があってもスクリ プトをすこし書き換えれは対応できます。たとえば条件 1 か変わり、末尾が、、 . htm " のファイルも対象にしなけれは ならなくなったときは、小さなルーフ。の冒頭部分で grep コマンドに渡している引数を、、 *. html " から、、 *. html *. htm" に変えればよいだけです。 ただし、条件 4 や 5 に変更があった場合は、スクリフ トを大皜に改造する必要があります。 条件 4 が成り立たなくなったときには、 grep コマン ドで loadimage という単語を検索し、それに続く数行 を抽出する必要があるかもしれませんし、万全を期すには JavaScript の構文角財斤も必要になるでしよう。いすれに せよ、このときには対応方法をはじめから考えなおさなけ 川まなりません。 条件 5 が成り立たなくなった場合は、 $imagefile の先 頭の何文字かを調べそれカ斗目対パスか絶対パスかを判断 して、絶対パスの場合のルーチンを追加することで対応で きると思われます。 ( みやした・けんすけ京都女子大学 ) UNIX MAGAZINE 2001.11
CONTENT 2001 / 11 特集 28 92 連載 56 63 79 84 123 Starting Up IPv6 情報系新人のためのネットワークの基礎知識 ・ " 大江将史 既存のネットワークとの接続 活用・インターネット技術 (WWWC) データリンク層アドレスの解決 旧 6 の実装・・・・・・島慶ー 高性能サーバーを目指して UNIX Communication Notes ・・・・・山口英 ・ " 山口 範 新・倉敷芸術科学大学のネットワーク構築・ レイヤ 3 スイッチ Sum ⅶ t の基本設定 ( 7 ) シェルの魔術・・・・・・森島直人 バイプライン プログラミンク・テクニック・・・・・・多治見寿和 t net の全体構造 lnside Cygwin ・ " ・・・藤枝和宏 Windows にログインしたい ・ " 小林和真 フリー・ソフトウェアの小径・・・・・・おおっかまさひと Ogg Vorbis UN Ⅸ便利帖・・・・・・宮下健輔 wget ( 2 ) COVER, CONTENTS DESIGN ・ MORIYA, KAZUO (AUDREYTHE DESIGN)
SNMP によるネットワーク監視・・・ 1 回 図 1 SNMP GET マネーシャー GET 要求 GET 応答 UDP ポート 161 工ージェント 図 2 SNMP SET マネージャー 図 3 SNMP TRAP S ET 応答 SET 要求 UDP ポート 162 UDP ポート 161 工ーシェント ーバーになり、監視プログラムがクライアントとなって動 作します。 SNMP に対応した機能をもつ機器を、、 SNMP 工ージェント機能がある " とか、 、 SNMP 工ージェント が内蔵されている " などと表現します。 モテノレ SNMP の基本的な使い方には、以下の 3 不職頁のモデル 1. GET ( 図 1 ) があります。 72 ら ) 通知する " といった機能があったとしても、監視プロ 、 Ethernet ケープルが抜かれたら ( リンクがダウンした る Ethernet フレームのオクテット数 " を返す機能や、 たとえは、ルータに、、特定のインターフェイスを流れ の情報を共有する必要があります。 う点です。そして、マネージャーとエージェントはこれら をもっていて、どのような通知をする可能匪があるかとい いすれの場合も間題になるのは、機器側がどういう情報 則対象を知る で、間題か起きた瞬間にマネージャーに通知されます。 トラップ ) として通知します。ポーリングではないの ジェントからマネージャーに非同期イベント (SNMP 機器側で突Éfi 勺かっ緊急な出来事力起きた場合は、エー 3. TRAP ( 図 3 ) の変更や機器のリセットなどの際に使われます。 なんらかの設定をおこないます。これは、主として構成 マネージャーがエージェントに情報を送り、機器側に 2. SET ( 図 2 ) もいえます。 マネージャーしだいでイ壬意のタイミングで監視できると ん、データはポーリングの間隔でしか得られませんが、 ( ポーリング ) をおこなわなければなりません。もちろ 得します。糸Æ的に尉見するには、定期的に状態の取得 などのエージェント側へ要求を出し、機器の状態を取 マネージャーである監視プログラムからルータやホスト グラムがそれに対応していなければ処理できません。この 情報を共有する手段として、 MIB (Management lnfor- mation Base : 管理報べース ) という本咎はみが用いられ ます。 MIB については、あとでもうすこし詳しく説明し ます。 UDP を使う SNMP の通信には、 UDP のポート 161 番 (GET/ SET) および 162 番 (TRAP) が使われます。 UDP を 利用する以 E 、要求や応答カ蔀寉実に届くことは保証されま せん。この点が、監視という目的にそぐわないように思う 人もいるでしよう。しかし、 UDP を使うのはそれなりの 理由があります。 機器側のソフトウェアは、 UNIX のような立派なオペ レーティング・システムの上で動いているとはかぎりませ ん。小さな機器、たとえは温度言 t などでは、それこそ OS のないファームウェアだけでエージェント機能を実現しな ければならない場合もあります。 CPU が非力で、処理能 力もさほど期待できないこともあるでしよう。このため、 実装が上如勺簡単な UDP のほうか有利です。 さらに重要なのは、機器に問題か生していまにも、、死に そう " な状態であっても、それをマネージャーに SNMP トラップで通知しなければならないことです。このよう に、 TCP/IP スタックが正常に機能しているかどうかが 分からない極限状態でも通知できるようにするには、実装 カ吶単な UDP のはうか有利です。いつ完全に息の根が 止まるか分からない状態なので、とにかく通知だけはおこ なうコネクションレスな通信のほうか有利という面もあり ます。 UDP を利用すると、短いデータグラムで通信できるの も利点です。監視のための通信が、本来の通信の邪魔にな UNIX MAGAZINE 2001.11
、 , 信第第信第信信第信勢 : 第信第信第第第信第第信第信第信第信等第島勢第 % 信第第第勢第信第信第 ( 既信第第信第信第 手もある、シリアル端子に接続してドライバか専用 more ソフトを用意すれば、キーポード端子がないサウルスで も外付けキーポードを使えるのではないか、そのような 仕組みのものはすでにある (http://homepagel.nifty. com/trap/zau/index.html) 、ただし電知可路系の工作 が必要なのでちょっと敷居か高いかもしれない、それかで きそうな人に頼んで作ってもらうという手もある、といっ たフォローがきました。 ・今月の話題から ( 2001 年 9 月 20 日現在 ) Newsgroups: fj.unix. shells,fj. unix subject: Why "int main" returns " un]signed char" ? C 言語では main() 関数は int 型で宣言されるのに、 こオ功芍区すイ直をシェルの $ ? などて市忍すると [un]signed char になっているのはなぜなのでしようか。 man を見 ると wait(2) の仕様でこうなるようですが、なぜこんな に不便なイ兼なのでしようか、という質間記事です。 これに対して、擱則だが、 main() が 8 ビットの値しか 返せないのは、プロセス終了時に起重ル己が知りたい情報は たくさんあるが、複雑な 1 辭を返すときはほかの手段を使 えばよいので、 main() からは、、ステータス " のような小 さな情報だけを返せればよいという考え方があるからで はないか、実装の事については waitpid(2) あたり のオンライン・マニュアルを読むと分かるのではないか、 main() が int で宣言されているのは、受け手はけっきょ くレジスタの幅で受け取るはすなので、お互いがそのうち の何ピットが使われるかを知っていればよいという言 だからではないか、この場合の int には、、整数である " と いう意味しかないと思う、規格上は 8 ビット以 - ヒの幅が あればよいことになっていて何ビットなのかは保証され ていないが、整数値として一番無難な型の int を選んだ だけではないか、しかし、 wait4(2) 、 waitpid ではピッ ト幅を含めて規格カ鴃まっているので、実際には 8 ビッ ト幅になっているのだろう、そういう意味では main() の仕様として、、返り値の型は int だがその値として許さ れるのは 0 ~ 255 である " ということか明記されていれは よいのだろう、異常時の返り値については POSIX. 2 で 規定されているが、正常時の返り値をどう返すかはどこ で規定されているのか、特定の処理系内の仕様ではなく ANSI や POSIX レベルの共通イ土様としては、返り値の フォーマットまでは規定されていないようだ、といった フォローがきました。 Newsgroups: . OS. ms-windows. programming, . OS. ms-windows. miSC 月 . uniX Subject: Re: 2001 年 9 月 9 日問題 今年の 3 月末頃に、 1970 年 1 月 1 日からの秒数が 9 桁から 10 桁になるという、、 2001 年 9 月 9 日間題 " が ちょっと話題になりました。そのときは、 この問題を 起こすようなプログラムは普通は書かない " と思ったので すが、ファイルを日付順にソートする Perl の CGI で、 都合により cmp て時間を上交したために間題が発生して しまいました、という報告記事です。 これに対して、 FreeBSD では cvsup がこの間題に引 っかかったそうだ、 cvsup には Linux 版や SoIaris 版な ど各種の OS 用のものがあるので OS は関係ないはすで ある、 cvsup は http: 〃 people.freebsd.org/-jdp/slg/ で対策済みの報告があり、各 OS 用のバイナリが用意さ れている、 wget もこの問題に引っかかる、これは wget の問題ではなく HTTP サーバーや FTP サーバーのな かに SSLast-Modified: Thu, 01 Jan 1970 00 : 00 : 00 GMT " を返すものがあるためである、といったフォロー がきました。 Newsgroups: fJ.unix Subject: AlX5L で core ファイルを判断するには ? IBM の UNIX OS である AIX 5L で 61e コマンド を使って core ファイルを調べると、、、データまたは国際 言語テキスト " と表示されて core ファイルかどうかの判 仂ミできません。これを正しく core ファイルであると判 断するガ去はないのでしようか、という質間記事です。 これに対して、 LANG 環竟変数を、、 C " にしてみたら どうか、対象の、、 core ファイル " か本当に core dump で作成されたファイルかどうかを /etc/magic ファイル て市寉認してみるとよい、というフォローがあり、元記事 の投稿者から、 LANG を C にしても英語で同様のメッ セージカ咄るだけであり、問題のファイルはプログラム を実行して、、セグメンテーション・フォールト " になっ たときに新たにできたものなのでたしかに core ファイル だ、という報告がありました。 これからさらに、 file コマンドが、、データまたは国際 語テキスト " と表示するのは /etc/magic に該当する形式 第信第第第日第第第第第第第第 : 信第信第信 3 第 ? 3 第第す第に第第第す号第第にを第第信第第信第 162 UNIX MAGAZINE 2001.11
SNMP によるネットワーク監視・・・ 1 回 図 6 snmpget の実彳テ % snmpgetnext 192.168.100.1 secret system. sysContact. 0 図 7 snmpgetnext の実行 system. sysDescr. 0 = FreeBSD vmfbsd. xxx. yyy 4.2-RELEASE FreeBSD 4.2—RELEASE # 0 : % snmpget 192.168.100.1 secret system. sysDescr. 0 Mon Nov i386 system. sysName . 0 = xxx ・ yyy ・ zzz . com GET snmpget は、 MIB 名を指定してエージェント上の変 数を読み出す (GET) コマンドです。これは、次のように 使います。 snmpget ん OSt れ佖 7 れ e CO 〃れ社れリ 7 れ乞わゼ 07 、 ん os 佖 me にはエージェントのホスト名か IP アドレス を、 c 。 mm 盟リにはコミュニティ名を指定します。 mib- var 、には、読み出したい変数名を MIB 変数名または OID て指定します。 実行例を図 6 に示します。 MIB 名の指定で貭が、、 . " 以外の文字て始まっている 場合は、 .iso.org/dod.internet.mgmt.mib-2 が省略され ていると解釈されます。つまり、図 6 の例では、 .iso.org . dod. internet. mgmt. mib-2. system. sysDescr. 0 カ甘日疋 されたものとみなされます。 mib-2 直下の system て始まる MIB (system グルー プ MIB) は、おもにシステムの静的な情報を表すための ものです。代表的なものをいくつか挙げておきます。 ・ system(l). sysDescr(1) システムの言岩田 ・ system(l). sysUpTime(3) システムの稼重加間 ・ system(l). sysContact(4) システムに間題があった場合の叫各先 ・ system(l). sysName(5) システム名 ( ホスト名など ) ・ system(l). sysLocation(6) システムの物工勺設置場所 ところで、末尾の、、 .0 " は何を意味するのでしようか。 MIB 変数にアクセスするには、変数名に続けてインスタ ンスを表す、、 .0 " という OID をイ寸加する必要があります。 ある種の、、おましない " と考えておけはよいでしよう。 UNIX MAGAZINE 2001.11 GETNEXT ることです。これは、インスタンスそのものカ甘旨定した を表す、、 .0 " を付けないと、その変数そのものか表示され おもしろいのは、指定する MIB 変数にインスタンス 型 MIB を読み出すときに重要になってきます。 うになります。これは、次回にとりあげる予定のテープル を調べることなく、 OID ツリーのなかを往き来できるよ か。これを使うと、 MIB ファイルを角斤してツリー構造 しかし、そもそもなぜこのような機能があるのでしよう OID がエージェントから返されます。 示されています。このとき、次の ( 実際に表示されている ) (. 1.3.6.1.2.1.1.5.0 ) か有効なので、 sysName の値が表 sysContact (. 1.3.6.1.2.1.1.4.0 ) の次には sysName 実行例を図 7 に示します。 変数名または OID て指定します。 指定します。 rn 7 、には、読み出したい変数名を MIB 名か IP アドレスを、 c 。 mrnut リにはコミュニティ名を のように使います。ん。 s 佖 me にはエージェントのホスト snmpgetnext ん OSt れ佖 7 れ e CO ? れ 7 れ社れ 7 れを 6 ゼ、 マンドである snmpgetnext は、 数名の辞書的順序の、、次 " ではありません。そのためのコ いう、、次 " とは、 OID の数字上の、、次 " であり、 MIB 変 リー上の、、次 " の変数を読み出す機能があります。ここで GET の変形として、指定した MIB 変数の MIB ツ OID の次とみなされるからです。つまり、 の次は .1.3.6.1.1.4.0 とみなされるわけです。 snmpwalk というコマンドもあります。 snmpwalk hostname comm 社れリ rn 防ゼ 0 .1.3.6.1.1.4 これは、 のように使います。 GETNEXT の機能を利用して OID をトラバースし、すべての 1 辭長を表示します ( 図 8 ) 。 この図からも分かるように、 system に関する MIB が すべて表示されています。 77
SNMP によるネットワーク監視・・・ 1 回 るのでは本末転倒です。 SNMP の長短 ことを第一目標として言されています。 このように、 SNMP はすべてについて、、簡単 " である UNIX MAGAZINE 2001.11 とができます。組織内の LAN に限定して利用する場合は 乗ってそのままネットワークを流れるため、簡単に覗くこ す。コミュニティ名は SNMP バケットのペイロードに スト ( 平文 ) によるパスワード認証方式を基本としていま SNMP は、、、コミュニティ名 " という単純なクリアテキ SNMP で間題になりがちなのはセキュリティです。 セキュリティ 視しにくいといわれることがあります。 ます。そのため、 SNMP では遠隔地のエージェントを監 するように設定するといった工夫が必要になることもあり SNMP が使うポート番号への通信は特定のホストに転送 (NAT) や IP masquerade をおこなっている場合には、 ともあります。また、ファイアウォールでアドレス変換 途中にファイアウォールがあると、通信ができないこ 率か増すのは間違いありません。 つものルータを経由する場合、データグラムが失われる確 われるともいいきれません。しかし、遠い、すなわちいく ちろん、近いからデータグラムは失われない、遠いから失 あるいはネットワーク的に近くになければなりません。も SNMP のマネージャーとエージェントは同しセグメント、 ークの観点からみて ) 遠くの機器の監視には不向きです。 は覚語しなければなりません。したがって、 ( ネットワ UDP である以上、そのデータグラムが失われること 遠隔地の機器の監ネ肋ヾ難しい がありますが、簡単であるがゆえの矢可斤もあります。 こまでに述べたように、 SNMP にはさまざまな利点 リーのものから大規模な商用製品まで多種多様です。 ろん、これに対応してマネージャー・ソフトウェアも、フ は、 SNMP 工ージェントの機能を実装しています。もち チ、プリッジなどのほとんどすべてのネットワーク機器 られた業界標準の咎はみであることです。ルータ、スイツ SNMP のよいところは、なんといっても IETF で定め さはどでもありませんが、外部に接続しているルータなど では危険です。 この問題を鮹夬するため、 SNMP バージョン 3 (SN- MPv3) では認証機能か強化されました。しかし、現実に はまだ多くのサイトがコミュニティ名による認証方式を 利用しています。ただし、ほとんどすべての SNMP ェー ジェントには、アクセス元の IP アドレスによって SNMP 要求をフィルタリングする機能か備わっているので、これ と併用すれば安全生を高めることはできます。 このコミュニティ名には、なぜか伝糸勺に public" と いう名前がよく使われています。山も匠はなくなったようで すが、ひところの SNMP 工ージェントには、この public をデフォルトの設定として出荷されるものがかなりありま した。 SNMP を使わないユーザーが、この設疋を確認せ すにネットワーク機器を設置すると、誰でも SNMP で アクセスできるという悪夛のような状態になってしまいま す。石忍した慮えのない人は、ぜひ一度、調べてみてくだ さい。 GET て取得したり、 SET で設定できる機器側の情報 には、どんなものがあるでしようか。上に書いたように マネージャーはすくなくともエージェントがどういう情報 をもっていて、どういう情報を設定できるのかを知ってい る必喫があります。 工ージェント上の個々の情報は、、変数 " として捉えるこ とができます。 GET は変数値の読出し、 SET は変数へ の値の代入になります。たとえば、あるインターフェイス 上の入力オクテットを積算するカウンタが 1 つの変数に対 応つ、けられている場合、この変数に対して定期的に GET を実行して流量を調べることができます。あるいは、イン ターフェイスの up/down に対応した変数に対して SET をおこなえば、そのインターフェイスを up したり、 down したりといった制御も可能になります。値の書込みによっ てハードウェアをリセットする、といった 4 幇未な動きをす るものもあります。 この変数を、、、管理オプジェクト (Management Ob- ject ) " と呼びます。 MIB とは、エージェントカ甘是供する 管理オプジェクトの集合、またはその定義のことです。 1 MIB 73