パケットをキャプチャする方法

今回はパケットをキャプチャする方法です。パケットキャプチャというとネットワークの専門家の専売特許であってネットワークのプロでないと見ても意味が分からない難しいもの…と敬遠してしまいがちですが、実はパケットを取得して中身を見る事自体はすごく簡単に行えます。最後の手段ではなく、最初の手段とすることをお勧めします。 最後の手段ではなく、最初の一手に 何かトラブルがおきた際には色々な切り分け方法がありますが、とりあえず取得する情報の1つとしてパケットの取得をお勧めします。もちろんネットワークが絡まない場合には取得の必要はないのですが、昨今のシステムでネットワークが絡まないものはほぼ無いので事実上頻繁に取得する事になると思います。 パケットを見て、そこからすべて原因を判明させるのではなく - 問題がどこにあるのかの切り分け - ネットワーク部分の問題かどうかの切り分け - 他にどこを調べるべきかの手がかり など、次につなげていくことができます。私は個人的にメールシステムのトラブルなどに対応することが多いので、文字化けの問題だろうと、滞留する問題だろうと、何でもとりあえずパケットを取得して状況を確認します。 何を使ってパケットを取得するか パケットを取得するソフトには色々ありますが、Windows 2000 ServerやWindows Server 2003の時代にはOSにNetwork Monitorが標準で付属していましたのでそれを使ってキャプチャすることが非常に多かったです。Server系だと外部のソフトウェアのインストールは禁止というお客さんが多いのですが、OSのコンポーネントの追加という形であれば許可が出やすいからです。この場合、[プログラムの追加と削除]の[Windowsコンポーネントの追加と削除]から追加する事ができました。 ですが、Windows Server 2008からはNetwork MonitorはOSには付属しなくなりました。なぜかはよく知りません(あまり興味ありません)。それでもやっぱりマイクロソフト製じゃないとServerへのインストールは許可していただけないお客様が多いので通常Network Monitorの最新版をダウンロードして持ち込み、インストールさせてもらう事が多いです。 Download: Microsoft Network Monitor 3.4 - Microsoft Download Center - Download Details 基本的なインストール方法やキャプチャの方法に関してはネット上にたくさん情報がありますので、以下のあたりを参照してもらえれば良いと思います。 Network Monitor 3 を使用したパケットの採取 - Ask the Network & AD Support Team - Site Home - TechNet Blogs また、以下は個人的なポイントです。 - Network Monitorインストール時には基本的にOS再起動は必要ない。 - [Temporary capture file] の [Size] 項目は必ず大きくしておく事。パケットを取得しているつもりでサイズの上限に達していて取得できていなかった!というのは痛すぎますので注意!! - サーバーへのインストールが許可されなかった場合にはスイッチのミラーポート設定にて別端末でパケットを取得する。この場合かならずプロミスキャスモード(自分宛のパケット以外も取得するモード)にしておかないと目的のパケットが取得できないので注意。(※昔は10MBpsのリピータハブをパケットキャプチャように常備しておいたものですが、最近ではそういうことはしなくなりましたね。) - ネットワーク上でパケットロストなども疑われる場合には1つのホスト上だけではなくて、通信相手でも同時にパケットをキャプチャし、両方を突き合わせて解析できるようにします。 キャプチャ後の解析 パケットをキャプチャした後は解析を行うのですが、この場合にはNetwork Monitorを使っても良いですが、別のものを使ってもかまいません。もちろんNetwork Monitorのファイル形式(pcap)が読める必要はあります。 ...

February 2, 2012 · 1 min · 胡田昌彦

PowerShellでOSの基本情報を取得する

今回はPowerShellでOSの基本情報を取得してみます。サーバー毎のパラメータシートやアプリケーションの設定情報をいちいちGUIで確認しながら、Excelのシートに落とし込み、設定変更するたびに履歴をつけて…なんていうくだらないことから開放されたいのです。そんなこと本来人間が管理すべきではないはずです…が、残念ながら私の知る範囲では当たり前に行われているようです。 昔もなんとか自動化してやろうとちょっと取り組んだことがあるのですが、結局取得する情報によっては難易度が高く、作りこむ時間がとれず中途半端になってしまいました。特に、OSは基本的に気にしなくていい情報、たとえばHDDアレイのHW側での構成情報などの取得が難しいです。メーカーを絞ればなんとかできるのですが、全メーカー対応するのも面倒だし…。でも、そういってるうちに仮想化の波がかなり押し寄せてきたので、OSから取れる情報だけきちんと記録しておくことに意味が以前より出てきた気がしますし、なんといってもサーバー製品がすべてPowerShellから制御できるものが出てきたのでPowerShellでの情報収集が現実的になってきた気がします。 とりあえず、取得した情報をどうやって加工するかは後回しにして、まずは、OSの基本情報の取得からいってみましょう。 どんな情報を取得しようかな まずはどんな情報が取得できるべきか考えてみます。 基本情報 ホスト名 - OSバージョン - ディスク構成 - ドメイン参加状況 - ネットワーク設定 - 役割情報 - 機能情報 - 適用済みセキュリティパッチ - インストール済みアプリケーション とりあえずこの程度でしょうか。別にPowerShellだから楽ってわけでもないものが多い気がしますが、いいでしょう。さて、うまくいくでしょうか? ホスト名 ホスト名は一番簡単にやるなら以下のコマンドで取れます。 - hostname 変数に格納するのもそのままでOKです。 - $hostname = hostname hostnameコマンドはDosコマンドですが、PowerShellではDosコマンドの結果も普通に取得することができるので、便利です。 OSバージョン OSのバージョンの取得はいろいろやり方があります。WindowsのAPIをたたくっていう手もありますが、せっかくPowerShellなのにこれはちょっとやりたくないです。 Windowsのバージョンの取得 environmentクラスを使ってしまうのが簡単でしょうか。environmentクラスは.net frameworkのクラスですが、こうやって.net frameworkに簡単にアクセスできるのもPowerShellの素敵なところです。 1 : P S C : \ > [ E n v i r o n m e n t ] : : O S V e r s i o n 2 : 3 : P l a t f o r m S e r v i c e P a c k V e r s i o n V e r s i o n S t r i n g 4 : 5 : W i n 3 2 N T 6 . 1 . 7 6 0 0 . 0 M i c r o s o f t W i n d o w s N T 6 . 1 . 7 . . . ディスク構成 ディスク構成も取得方法は色々ありますが、ここではWMIオブジェクトを呼び出してみます。こうやってWMIへのアクセスも一発でいけるのが素晴らしいですね。 ...

January 15, 2012 · 105 min · 胡田昌彦

telnetで日本語メールを送信する

telnetでメールを送信する方法について以前紹介しました。 - [コマンドプロンプトだけでメールを送信する | WindowsServer管理者への道](https://windowsadmin.ebisuda.net/2009/03/26/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%81%A0%E3%81%91%E3%81%A7%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%92%E9%80%81%E4%BF%A1%E3%81%99%E3%82%8B/) 今回はtelnetから日本語でメールを送信する方法を紹介してみようと思います。もちろん実用性はほぼ無いのですが、メールの仕組みを理解するためには結構良い練習になると思います。是非この記事を見ながら、自分のアドレスにメールを送信してみてください。 (※注意※ 昨今はSPAM対策でプロバイダによってはそもそもSMTPでの接続を許可していないところが多いです。初めのメールサーバーへの接続の段階でうまく接続できなかったら残念ですが、別途勉強のためにSMTPサーバーを立ててそこに対してメールを送信してみるなどしてみてください。) とりあえず日本語で入力してみる まずはtelnetでメールサーバーに接続します。(ここでは私の自宅のメールサーバーに接続しています。) 前回紹介した方法で、メールの送信元、送信先を入力します。 まず、ヘッダ部分を入力します。メールヘッダとメールボディの間には空行が1行必要です。 さて、ここで日本語を入力してみましょう。Alt + 全角半角キーを押して、えいやと。「日本語のテストメールです。」と入力してみます。 おや?なんだか、入力しているそばから文字が化けていきますね…。 とりあえず送信を完了します。送信の最後は「.」です。「改行.改行」ですね。 さて、とりあえずメールは送ってみました。どうなったでしょうか?着信したメールをgmailで確認してみます。 おお!文字化けせずにきちんと日本語が見えますね。本当は記事を書く前にはここでは文字化けすることを想定していたのですが、Windows7からgmailへの送信では化けませんでした。gmailは優秀ですね! gmailでは化けませんでしたが、結構な数のメールシステムではこの送信方法では文字化けが発生すると思います。自分のシステムで試してみてください。 到着したメールのチェック せっかく文字化けせず送信できましたので、中身をもうちょっと見てみましょう。gmailではメッセージのソースを見ることができます。ソースを見てみましょう。 ソースの状態でもきちんと日本語が見えてますね。それではこの状態でエンコードを確認してみます。 ちょっと見づらいですが、Shift-JISになっていることがわかると思います。これで確認できましたが、先ほどは日本語をShift-JISで送信したのでした。そして、メール本文をShift-JISで記述してそのまま送信するのはRFC違反であり、文字化けする可能性が結構高くなってしまいます。 日本語をメールで送信する際には文字コードにJIS(ISO-2022-JP)を使用するのがお約束になっており、これであればまず文字化けしません。なので、telnetから日本語メールを送信する場合もJISで送信すべきです。(このあたりの細かい話はまた別エントリで…) telnetのcodesetを設定する さて、それでは今度はきちんとtelnetの設定をおこなって、RFC的に正しいメールを送信してみましょう。 まず、telnetを起動します。引数無しでtelnetだけですね。 まず、現在の設定を確認してみます。displayコマンドを入力します。 codeset = 漢字コードセット は設定されていない状態になっています。helpを表示するとset codesetコマンドで漢字コードセットの設定ができることがわかりますので、JIS Kanjiに設定しましょう。 この漢字コードセットの設定は保存されますので、一度telnetを終了しても再度設定する必要はありません。さて、それではこの状態でもう一度メールを送ってみましょう。openコマンドで接続を開始できます。 今度は telnet上でも日本語がきちんと見えるようになりましたね。(※ただ、終端の改行.改行が意図したとおりになりませんでした。これは私も原因がよくわからない…というか.になってないからなのは確実なのですが、ちょっと変な挙動のように思います。telnetのバグ?) とりあえずgmail側で確認してみましょう。 今度もきちんと日本語が表示されました。ソース、文字コードも確認しましょう。 ソース上では日本語がそのままは読めません。エンコードはShift-JISになっています。これを「日本語(ISO-2022-JP)」に変更します。 きちんと日本語が読めるようになりました。これできちんとJISで送信できていたことが確認できました。この形式であればほぼ間違いなく、すべての日本語メール環境でメールが読めるはずです。 細かいところはひとまずおいておきましょう。メールでは日本語はJIS(ISO-2022-JP)で送るという事をまずは抑えておいてもらえればと思います。

January 4, 2012 · 1 min · 胡田昌彦

Windowsサーバー管理者のための情報検索テクニック

今回は情報検索テクニックについて書いてみたいと思います。全てを予め知っているなんていうことは絶対にありえないので、目的の情報を正確に見つけることができるかどうかは非常に重要です。「どこで、どのように情報を探すのか。」この方法論も、管理者歴の長い方程確立されているのではないかと思います。 私のおすすめの手法を紹介します! ### まずはMicrosoftのナレッジベースの検索 情報検索といえばまずgoogle…ということが多いのですが、Windowsサーバー管理者としてはやはりWindowsに関連する情報検索をする機会が圧倒的に多いと思います。その時に、世の中に無数ある個人ブログ等の情報をふくめたインターネット全体の情報よりも、やはりマイクロソフトが出している情報をまず確認すべきです。これは情報の正確性ということもありますが、結局のところ「マイクロソフトがどのように言っているか」が現場で実際に重要視されるからです。 例えば、トラブルがあってその解決方法を調べている時に個人ブログにそれらしい情報がかいてあるのを見つけたとしましょう。でも、それをお客さんにそのまま伝えて、やってみて・・・というわけにはなかなかいかないですよね。いや、実際にはそれをやるべき時も多々あるのですが、「マイクロソフト様」の言う事しかやらせてもらえないケースが多々ありますので、まずはメーカーの情報に当たるべきということです。 というわけで、まずは以下のサイトに行きましょう。 - [マイクロソフト ヘルプとサポート](http://support.microsoft.com/search/default.aspx) ### 日本語は無視 次に検索ボックスに単語を入れて検索するわけですが、ここで私からの強いお勧めがあります。それは「日本語で検索せずに、英語で検索すること」です。 日本人なんだから日本語で検索したいですよね?その気持はよくわかりますが、本当に日本語情報ははじめから無視したほうがいいです。これは私の経験から確信を持って言えます。 - そもそも英語にしか存在しない情報がかなりある(今は自動翻訳でごまかしてますが、日本語がむちゃくちゃなのであてになりません。) - 英語の方が更新が早く、日本語の情報に含まれていないことが書かれていることが多々ある。 - 日本語記事は英語記事の翻訳なので、翻訳が不正確なことが多々あり、ミスリードされる。 「いや、英語苦手だから読めない…」という声も聞こえてきそうですが、KBの英語はかなり簡易なものなので、英語学習も兼ねて挑戦した方がいいと思います。どうしても…という時には、まず英語で検索し、それらしい記事を見つけた上で日本語版を確認するようにするといいと思います。 トラブルの時には、エラーコード、エラーメッセージ、イベントID、イベントソース 次にどのような単語で検索すべきかですが、これもコツがあります。特にトラブルの時には、実際に起きた事象を単語で書いていくようなことはおすすめできません。それよりもまずエラーコードやエラーメッセージ、イベントID、イベントソースなどの「同じトラブルが起きたときに必ずあらわれる文字列」を検索すべきです。 これは検索結果のページの内容をよく想像してもらえば明らかだと思うのですが、そのページには「現象」がかかれていて、記録されるコード、メッセージ等が書かれているはずですよね。であればそういう「確実に含まれているであろう情報」からたどるのが近道です。 これで出てこなければ次に狙うのは記事のタイトルに含まれていそうな単語あたりですね。 トラブルの時を例に出しましたが、どのような情報をさがすときにも「目的のページに必ず含まれている文字列」をかならず意識するようにすると良いです。 ナレッジベースになければtechnet library ナレッジベースは特にトラブル対応の時に活躍するのですが、提案段階、設計段階、実装段階によくおせわになるのがtechnet libraryです。 - [ライブラリ | Windows コマンド 技術情報 | TechNet](http://technet.microsoft.com/ja-jp/library/default.aspx) - [TechNet Library Home](http://technet.microsoft.com/en-us/library/default.aspx) こちらもまずはマイクロソフトの情報からさがそうという趣旨です。 ですが、technet ライブラリの検索は性能が悪いんですね。明らかにgoogleに負けていると思います。というわけで、私はいつも「googleでtechnet libraryの情報のみを探す」ということをします。これはgoogleで検索するときに「site:http://technet.microsoft.com/ja-jp/library/」と付け加えてあげるだけで簡単にできます。英語版なら「site:http://technet.microsoft.com/en-us/library/」を付け加えればいいです。 ちなみにここでもやはり「英語版にしか情報が存在しない」ということがありますので、英語版の利用をおすすめしておきます。 google検索をするときのTipsを押さえておく ここまでやっても情報が見つからなければ、インターネットの情報の洪水のなかに飛び込んでいくことになります。ここでのおすすめはやはりGoogle。そしてGoogleで検索するときのTipsをきちんと押さえておくことが重要です。以下にまとめてあるので参照してください。 - [google検索tips [ebiWiki]](http://ebi.dyndns.biz/dokuwiki/google%E6%A4%9C%E7%B4%A2tips) フレーズ検索程度は必ず使わないと情報をまともに探しだせませんのでぜひ確認しておいてください。 やはり英語 そして、ここでもやはり「英語の方がはるかに情報が多い」ということを理解しておく必要があります。私個人の感覚的には日本語の10倍程度は情報があるように思います。日本語のフレーズは分かるけど、それに対応する英語のフレーズがわからないときには、ナレッジベースやtechnet libraryで該当のフレーズを含む日本語のページを見つけて、そのページに対応する英語のページを確認すると良いです。これによって英語の正確なフレーズがわかるので、それを使って検索しましょう。 というわけで、今回は検索のお話でした。もしもこれ以外にもみなさんが普段使っているテクニックやノウハウ等あればコメント欄で教えていただけると嬉しいです!

May 10, 2011 · 1 min · 胡田昌彦

NAPT

ここまでNAT関連で以下のエントリを書きました。 - [NAT(Network Address Translation)の基本](https://windowsadmin.ebisuda.net/2011/01/12/natnetwork-address-translation%e3%81%ae%e5%9f%ba%e6%9c%ac/) - [1対1 NAT](https://windowsadmin.ebisuda.net/2011/01/19/1%e5%af%be1-nat/) 1対1NATではシンプルに2つのIPが相互に変換される動きをみました。シンプルですが、IPアドレスが沢山必要になってしまうという欠点もありました。今回はより「よく使われているNAT」であるNAPTを見ていこうと思います。 ### ブロードバンドルータ経由で複数のPCがインターネットに同時に接続する [![](https://windowsadmin.ebisuda.net/wp-content/uploads/2011/02/image_thumb6.png)](https://windowsadmin.ebisuda.net/wp-content/uploads/2011/02/image6.png) 上記のような環境を考えてみます。家庭内にPCが2台あって、同時にインターネットに出るようなイメージですね。PC1,PC2が同時にWeb Serverに対してWebサイトの閲覧を行おうとしたとします。 WEBサーバーへの通信を開始するので、以下のパケットを生成します。WEBサーバーを想定していますので宛先のポート番号は80番。送信元のポート番号はランダムなポートになりますがここでは1024番にしておきます。 PC1が生成したパケット PC2が生成したパケット 上記パケットがブロードバンドルーターまで届きました。ここでNATが行われます。まず、前回解説した通り宛先IPアドレスは変更されませんし、宛先のポート番号も変更されません(Web Serverの気持ちになってみれば、これは当然です)。送信元IPアドレスはブロードバンドルーターの持っているグローバルアドレスになります(ほかにグローバルIPアドレスはありませんので)。問題はこのときの送信元ポート番号を何番にするか、ということです。どのようにすべきかちょっと考えてみてください。複数のPCが存在していることを考慮してみてくださいね。 ・・・。 ・・・。 ・・・。 考えてもらえましたでしょうか。正解は1つではないです。結局送信元のポート番号はランダムに選ばれていますので、基本的には何番でもかまわないからです。ただ、以下のことは考慮しないといけません。 - 送られてきたパケットと同じ送信元ポート番号を使うことにした場合、他のPCからも同じ送信元ポート番号のパケットが送られてきたときの考慮が必要。(同じ送信元ポート番号を使うと、どちらのPCにひもづいた通信なのかわからなくなってしまう。) - ブロードバンドルーターからも通信を開始する可能性があり、そのときの通信とも重複しないようにする必要がある。 通信が混ざる、混ざらないということに関しては、TCPのコネクションの概念を理解していないと理解できないです。このあたりの理解が難しければ、以下のエントリを参照してもらえればと思います。 - [レイヤ4 -トランスポート層- ポート番号](https://windowsadmin.ebisuda.net/2009/10/06/%e3%83%ac%e3%82%a4%e3%83%a44-%e3%83%88%e3%83%a9%e3%83%b3%e3%82%b9%e3%83%9d%e3%83%bc%e3%83%88%e5%b1%a4-%e3%83%9d%e3%83%bc%e3%83%88%e7%95%aa%e5%8f%b7/) TCP/IPでは宛先IP、宛先ポート番号、送信元IP、送信元ポート番号の4つの要素の組み合わせで通信を区別します(ソケット)。今考えている環境ではブロードバンドルーター自体と複数のPCが(インターネットへの通信に関して)同じIPアドレスを共有しているのでポート番号でしか区別できなくなっています。なので、ポート番号は(インターネットに出るときには)かならず重複しないようにしなくてはいけないわけです。 このようにポート番号まで書き換えるNATのことをNAPTといいます。 ここまで理解できれば、ブロードバンドルーター上でNATを行ったときに管理表が必須になることがわかると思います。どのパケットをどのように変換すればいいのか、という管理表です。俗にNATテーブルと呼ばれます。 NATテーブルをまで意識しながら通信の流れを見てみましょう。 プライベートIPからグローバルIPへの変換 グローバルIPからプライベートIPへの変換(戻りパケット) どうでしょうか?このようにNATの変換表に、IPとポート番号の情報まで盛り込むことで、1つのグローバルIPのみを用いて複数の端末がプライベートLANからインターネットにまでアクセスできるようになりました。 この際、NATでポート番号まで管理、変換していますのでNAPT(Network Address Port Translation)と呼ばれます。ちなみに、「IPマスカレード」という単語で呼ばれることもありますが、これはLinuxにおけるNAPTの実装の名前が「IPマスカレード」であったために、このように呼ばれるそうです。Linux上の実装は今現在はiptablesに変わっていますので、技術の名称と実装の名称は区別して呼んだ方がよい個人的には思います。 さて、これで一応NAT関連の基礎的な部分は解説を終えたことになります。ここまで理解できればあとはバリエーションの問題ですので、考えれば思いつけるようになると思います。 NATの説明の中ではレイヤ3、レイヤ4にのみ注目しましたが、それぞれレイヤ2レベルでのやり取りも説明できる状態にしておくのが重要だと思います。上記の図にレイヤ2レベルの情報を書き込めるでしょうか?難しければ以下のエントリを再度読んでみてからトライしてみてください。 - [レイヤ2 –データリンク層- 宛先はMACアドレス](https://windowsadmin.ebisuda.net/2009/02/12/%e3%83%ac%e3%82%a4%e3%83%a42-%e3%83%87%e3%83%bc%e3%82%bf%e3%83%aa%e3%83%b3%e3%82%af%e5%b1%a4-%e5%ae%9b%e5%85%88%e3%81%afmac%e3%82%a2%e3%83%89%e3%83%ac%e3%82%b9/)

February 9, 2011 · 1 min · 胡田昌彦

ドメインの取得について

今回は独自ドメインの取得についての話です。Webサイトを立ち上げるにしても、メールを利用するにしても必ず必要になってくる話です。 企業であれば独自ドメインを取得しないということはほぼ考えられませんので、ここではサーバー管理者を目指す人が個人のスキルアップ、あるいは個人の趣味のためにドメインの取得を行うべきかどうかを考えてみます。 ### ドメイン取得のメリット まず、独自ドメイン自体を取得するメリットについて考えてみます。 - サイト、メールアドレスについて覚えてもらいやすいものを利用することが出来る。 - ドメインを取得しておけば、そのインフラを乗り換えた場合(プロバイダの変更、レンタルサーバー業者の変更、クラウドへの移行等)でも、利用者にそれを気づかせないことが出来る。特に、Webサイトに外部からリンクを貼ってもらった場合にそれを有効に保つことが出来る。 ### ドメイン取得のデメリット - 費用がかかる - DNSサーバーの用意、管理が必要(ただしDNSサーバー自体をレンタル可能なサービスもある) - 固定IP前提のものも多いため、その費用も必要となる事が多い ### 費用について ドメインの取得には費用がかかります。ドメイン名の取得については、ドメイン名取得サービス業者を利用する事がほとんどです。例えば、ドメイン取得代行業者として有名なお名前.comの取得費用、更新費用はこちらにあります。 - [ドメイン取るなら お名前.com:料金一覧](http://www.onamae.com/service/d-price/) これをみると、ドメインによってかなりの金額の違いがありますが、月あたりの費用としては100円未満のものから高くても1000円程度と、たいした金額では無い事がわかります。 ドメイン名を取得するメリット、取得しない場合のデメリットを比較した場合に、企業であれば独自ドメイン名を取得しない理由はほぼ無いと言えるでしょう。 個人でもこの程度であれば払おうという人も多いとは思います。 ダイナミックDNSサービス 個人の勉強のためであれば、特に独自ドメインを取得せずとも、自宅にサーバーを立ち上げる際に、ダイナミックDNSサービスを利用者するという選択肢もあります。これであれば、費用を全くかけないことも可能です。 ダイナミックDNSサービスには以下のようなものがあります。 - [DynDNS.com - Free Domain Name, Managed DNS, Email Services](http://www.dyndns.com/) - [Dynamic DO!.jp - ダイナミックDNS -](http://ddo.jp/) - [無料ダイナミックDNS(DDNS)サービス - ieServer.Net](http://ieserver.net/) これらは、ドメイン名こそは決められたものしか利用できませんんが、その中でホスト名を自由に選択でき、そのレコードに対してのIPアドレスを任意で設定できます。 これを使えば、固定IPを持っていない普通のインターネットプロバイダの普通のプランでも、サーバーを立ち上げたうえで、ホスト名でのアクセスが可能となります。追加費用無しで簡単にサーバーを立ち上げるにはこの方法が1番簡単です。 ちなみに、このようなダイナミックDNSの仕組みを提供している、ドメイン名取得業者も存在します。 私の場合 実は、このサイト自体もアドレスバーのホスト名をみてもらえばわかるとおり、dyndns.comの無料サービスを使っています。使い始めてもう9年ほどになります。(dyndns.comさんありがとう。) インターネットの契約プランも固定IPのものではないごく一般的なものです。特に追加費用もかけずに、サーバー用のPCを1台用意するだけで、Webサーバーをはじめとした様々なサーバーを立ち上げています。(この部分すら無料で済ませることも可能です。) 個人の勉強であれば、費用もかからず、お手軽なこの方法を私はおすすめします。ただ、この方法のリスクとしては、「利用しているサービスが終了してしまった場合に影響が大きい」というものがあります。 無料サービスを利用するリスク 無料サービスを利用する場合、もちろん自分が取得したドメイン名ではないので、そのサービスが終了してしまうと、そのドメイン名を使い続けることができない可能性が非常に高いです。 この場合、外部からリンクをを貼ってくれているサイトのすべてに連絡くしてリンクをを書き換えてもらうわけにも行かないでしょうから、過去の外部からのリンクをかなりの部分で諦める必要が出てきてしまいます。これにより、検索エンジンからの評価がかなり低くなることは避けられません。また、新しいドメイン名に変更になることで、検索エンジンからの使用期間に応じた評価も低くなります(検索エンジンは長く使われているドメインを高く評価します)。 このように、サイトに対して集客をしたい、特にこれにより、検索エンジンからの評価がかなり低くなることは避けられません。また、新しいドメイン名に変更になることで、検索エンジンからの使用期間に応じた評価も低くなります(検索エンジンは長く使われているドメインを高く評価します)。 このように、サイトに対して集客をしたい、特に何か収益を上げるようなことをしたい場合にはリスクを避けるためにはじめから独自ドメイン名を取得しておくと良いと思います。

February 2, 2011 · 1 min · 胡田昌彦

1対1 NAT

今回は前回に引き続いてNATについての話です。前回の記事を読まれていない方は先によんでおいていただくことをお勧めします。 - [NAT(Network Address Translation)の基本 | WindowsServer管理者への道](https://windowsadmin.ebisuda.net/2011/01/12/natnetwork-address-translation%e3%81%ae%e5%9f%ba%e6%9c%ac/) ここまではTCPのポート番号には注目しませんでした。今回はTCPのポート番号まで意識して動きを見ていきます。 NAT 以下は前回のおさらいです。IPアドレスにだけ注目して以下のような変換が行われることを説明しました。 ここにポート番号も書き加えてみます。本当は様々なバリエーションがあるのですが、以下ではNATが書き換えるのはIPアドレスのみとします。 単純にTCPのポート番号を書き加えただけですが、大丈夫でしょうか。PC1から見た宛先サーバーのポート番号はWEBサーバーですので80番となり、ソースポートに関しては、ランダムに選ばれますが、ここでは1024番としてあります。WEBサーバーからの戻りのパケットはソースとデスティネーションのポート番号が入れ替わっています。 複数台のNAT それでは、ここでさらにPCがもう一台ある環境を考えてみましょう。 PC1とPC2が同じブロードバンドルーターの下にある状況です。 TCPでは送信元ポートはランダムに選ばれます。なので「PC1とPC2が同じサーバー(宛先IP)の同じサービス(宛先ポート番号)に同じ送信元番号をつかって接続する」ということは普通に起こりうることです。同一LAN内であればこれは以下のように区別することが可能です。 - 宛先IP:宛先ポート番号 - PC1のIP:送信元ポート番号 - 宛先IP:宛先ポート番号 - PC2のIP:送信元ポート番号 PC1のIPとPC2のIPが異なるので当たり前に区別できるのですが、これが上記の図の中で、同じWEBサーバーに対して接続をしようとし、その時の送信元ポート番号がたまたま同一で、さらにそのパケットがNATされた時にはどうなるでしょうか? 変換前パケットには送信元IPしか違いがなかったのに、それをどちらもGlobal IP Aに変換してしまっては区別がつかなくなってしまいます。これでは通信が混ざっていしまい、うまくいきません。 これを解決するにはどうしたらいいでしょうか。色々やり方はありますが、TCPポートは書き換えずに実現可能な方法を考えてみて下さい。 ・・・・・・。 ・・・・・・。 ・・・・・・。 思いついたでしょうか。正解は「ブロードバンドルータにPC1、PC2に対応するグローバルIPをそれぞれ割り当てる」ということです。以下のように、グローバルIPとプライベートIPの対応を作ってしまう訳です。 プライベートIP グローバルIP 192.168.1.1 Global IP A 192.168.1.2 Global IP C こうする事でインターネットとプライベートネットワークとで相互に通信出来ます。 1対1 NAT この様にグローバルとプライベートのIPを1対1で対応付けするNATを1対1NATと呼びます。 注目すべきは、プライベートネットワーク(PC1, PC2が存在するプライベートIPをつかった192.168.1.0/24のネットワーク)からインターネットへの通信のみならず、インターネットからプライベートネットワークへの通信もきちんと対応付ける事が可能な事です。(実際に通信させるかどうかは別問題ですが、「対応づけを矛盾なく行うことができる」ということです。) そして、グローバルIPアドレスが沢山必要になってしまう事も特徴です。 このNATはインターネット上に複数(WEB、MAIL等々)のサービスを提供するサーバーの公開の時に使われる事が多いです。グローバルIPアドレスが沢山必要になるので、一般家庭ではめったに使われない形態ではあります。 今回は1番シンプルなNATロジックである1対1NATを説明しました。次回以降はTCPのポート番号まで書き換える形態のNATを説明しようと思います。お楽しみに!

January 19, 2011 · 1 min · 胡田昌彦

NAT(Network Address Translation)の基本

今回はNAT(Network Address Translation)について書きます。NATはほとんどのネットワークで、もっと正確にいえばネットワークの接続部分に使われているとても重要なものです。一番身近なところでは、自宅のPCのIPアドレスはプライベートIPアドレスなのに、インターネットの世界に接続できている、さらに言うと複数のPCが同時にインターネットに接続できているという方が多いのではないでしょうか。こんなことができるのはNATのおかげなんです。 NATを理解するにはIPアドレスとTCPのポート番号の理解が必ず必要ですので、まだこのあたりの理解が怪しい場合には先に以下のエントリを参照してもらえればと思います。 - レイヤ3 -ネットワーク層- IPアドレス - レイヤ4 -トランスポート層- ポート番号 NATは何をするものか NATはその名の通りアドレスを変換するものです。具体的にはパケット内のIPアドレスやTCPのポート番号を書き換えます。その書き換えパターンによって様々なバリエーションがあり、呼び方や目的が変わってきます(一部同じものもありますが)。よく耳にするのは以下のようなものです。 - 1対1NAT - NAPT(Network Address Port Translation) - IPマスカレード(IP masquerade) - DNAT(Destination NAT) - SNAT(Source NAT) それでは具体的な利用シーンを想定しながら動きを見て行きましょう。 (NAT無し)自宅PCからインターネットにアクセスする まずは理解を容易にするためにNATを使用しない状態から解説します。以下のような接続を考えます。 - PCがグローバルIPを持っている - PCからゲートウェイまで直接通信する これでなんの問題もなく世界中と通信出来る訳ですが、同時に世界中の誰からも自由にアクセスされる状態にもなっている事がポイントです。NATを考える時には「どこにアクセス出来るか」に加えて「どこからアクセスされるか」が重要になってきます。 因みに、本当にこのように「PCを直接インターネットに接続する」のは非常に危険なので行わないようにして下さい。恐らく数分で攻撃される事になります。 ブロードバンドルータ経由でインターネットに接続する 次に一般家庭でよくあるように、まずブロードバンドルータがインターネットに接続し、その下にPCを接続する構成を考えます。 また、説明のために、インターネットの向こう側にWEBサーバーがある場合を考えてみます。 - PCはプライベートIPを持っている - PCはデフォルトゲートウェイとしてブロードバンドルータを利用する - ブロードバンドルータはグローバルIPを持っている この接続は一般的なもので、PCからインターネットに接続する事ができます。 「プライベートIPはインターネット上では使用できない」ということを知っていれば、「なぜプライベートIPしか持っていないPCがインターネットにアクセスできているのか?」という疑問が出てきます。ここでNATが使われているのです。 簡単にいうと、「PCがインターネットにアクセスしようとする時に、ブロードバンドルータからのアクセスという事にする」ことでアクセスできるようにしています。 この時の動きをIPアドレスに注目してパケットレベルで詳しく見てみましょう。 まず、PCからWEBサーバーに接続要求が出されます。送信元IPアドレスは192.168.1.1, 宛先IPアドレスはGlobalIP Bになります。 このパケットはまず、デフォルトゲートウェイであるブロードバンドルーターに届けられます。ブロードバンドルーターはそのままルーティングするのではなく、送信元IPアドレスを自分自身のグローバルIPに変換して送信します。宛先IPアドレスはGlobal IP Bのまま、送信元IPアドレスはGlobal IP Aになります。 この時、パケット内のIPアドレスが書き換えられています。これこそがNATです。通常のルーターであれば、IPアドレス部分は参照するのみで書き換えることはしません。NATはIPアドレス部分を書き換える(※TCPポート番号まで書き換えるタイプのNATもあります)ここがポイントです。 それでは続きを見てみましょう。 パケットは途中いくつものルーターを経由して、WEBサーバーにまでパケットが届きます。この時WEBサーバーにしてみると、通信をしてきたのは単にブロードバンドルーターであるように見えます。PCの存在はWEBサーバーにはまったくわかりません(わかる必要もありません)。ここも1つのポイントです。NATが行われる場合実際の送信元、送信先とパケット上の送信元、送信先が異なることが多いです(NATの種類にもよります)。 ...

January 12, 2011 · 1 min · 胡田昌彦

管理者権限を持たないユーザーに管理者ユーザーのIDとパスワードを教えずに管理者権限を持たせる方法

ものすごく長いタイトルになってしまいましたが、今回は管理者権限を持たないユーザーにどのように管理者権限を持たせるか、というお話です。 実際の案件の中では以下のような状況が頻繁にあります。 - エンドユーザーの端末にソフトウェアをインストールさせたい、あるいは管理者権限が無いとできない設定変更をさせたい - でも、エンドユーザーのアカウントには管理者権限がない - エンドユーザーに操作をしてもらうことは可能だけど、管理者のID、パスワードは教えたくない(セキュリティ上の問題) やりたいことは簡単なんですけど、「エンドユーザーには教えずに」ということを実現させようと思うと中々大変です。 理想の状況 このようなことは頻繁にあるものなので、これらを簡単に実現するツールが全端末に仕込まれている状況が理想的です。これを実現する製品は多数存在しています。有名なところだと以下のようなものでしょうか。(私が仕事でよく扱っているものなので、偏ってるかもしれません。) - [System Center Configuration Manager : ホーム](http://www.microsoft.com/japan/systemcenter/configmgr/default.mspx) - [IT資産管理 ツール QND Plus | クオリティ](http://www.quality.co.jp/products/QND/) - [LanScope Cat6 トップページ](http://www.motex.co.jp/cat6/index.html) - [BigFix, Inc. | Faster, Smarter Systems Management](http://www.bigfix.com/) もっとも、これらの製品は総合的な管理ツールになっているので、今回話題にしていることだけをしたいような時に導入するようなものでもないです。お値段も結構しますし…、ということでこういった製品が導入されていない企業も数多くあります。特に日本企業には多い印象です。話で聞くところによると米国企業はほとんどなにかしら導入しているらしいですけれども。 Active Directoryのグループポリシーを使う方法 製品が導入されていない状況でこれを実現する方法として、まずADのGPOを使う方法があります。 ソフトウェアインストール 例えばソフトウェア配布なら「ソフトウェアインストール」を使うことができます。 ただ、これがなかなか曲者でして、以下の制限事項があります。 - インストールできるのはmsiパッケージのみ(setup.exeなどは無理) - 「コンピューターの構成」-「ソフトウェアインストール」で構成した場合ローカルのSYSTEM権限で実行される - 「ユーザーの構成」-「ソフトウェアインストール」で構成した場合ログオンユーザーの権限で実行される(今回の場合使えない) - インストールに成功したのか、失敗したのか、どの程度の進捗なのか等を管理者が把握できない 1.の制限により、そもそもこの機能では配布できないことが結構あります。2.の制限があるのでパッケージの置き場所はドメインユーザー以外もアクセス可能にしなくてはいけませんし、都合の悪いことにそもそもSYSTEM権限ではインストールが成功しないソフトウェアが結構存在します。そして、4の制限があるので、トラッキングができません。 というわけで、やってみてうまく動けばそれでいいのですが、結構なケースでこの方法が取れないことがあります。 スタートアップスクリプト 「ソフトウェアインストール」が使えない場合、あるいはそもそもソフトウェアインストールではない場合にはスタートアップスクリプトを使うこともできます。 これであれば自分でロジックを作り込めるのでsetup.exe等の実行ファイルであってもキックすることができます。また、成功、失敗等の把握はどうにでもできます。簡単にやるなら、例えばインストールログを共有フォルダに保存させるようなロジックにしてしまえばいいでしょう。 ですが、以下の制限事項は同じです。 - 「コンピューターの構成」-「ソフトウェアインストール」で構成した場合ローカルのSYSTEM権限で実行される - 「ユーザーの構成」-「ソフトウェアインストール」で構成した場合ログオンユーザーの権限で実行される(今回の場合使えない)コンピューターの構成に仕込んでみて、ローカルのSYSTEM権限のみでうまく行くことを祈ることになります。 このようにADを使う方法はどのパターンでも確実に成功するわけではありません。そして、そもそも論としてはADに参加しているクライアントでなければこの方法は取れないわけです。 その他の方法 他の方法としては以下のようなものがあります。どれも完全なソリューションではないですが・・・。 ...

October 21, 2010 · 3 min · 胡田昌彦

「サポート」という言葉の意味を誤解してませんか?

今回はよくある「サポート」という言葉の意味について考えてみたいと思います。結局サポートなんてあってもあんまり意味ないんじゃないの?という話です。 ※以下は一般的な考えとは本人も思っていません。あくまでも1エンジニアの個人的な意見ということでお読みください。 よくある勘違い 仕事をしている上で、特にソフトウェアに関しての話なのですが、「サポート」という言葉の意味を例えば電化製品でいうところの「保証」と同じような意味で考えている人がとても多いと感じています。 「メーカーの保証があるから安心。万が一動かない不良品だったら、きちんと動くものと取り替えてもらえる。」 電化製品などであれば上記のことが成り立つと思いますが、これがソフトウェアであったらどうでしょうか。ソフトウェアに電化製品などとおなじような意味合いでの「保証」はあるのでしょうか?デジタルの世界に「動かない不良品」ということがあり得るでしょうか?きちんと動くものと取り替えるようなことがあるでしょうか?・・・。そんなはず無いですよね。こっちのDVDからインストールしたら、なんだかちょっと動きがおかしくて、交換してもらったDVDからインストールしたら直る、なんてのはありえません。 保証ではなくサポート まず、ソフトウェアの世界では「保証」ではなくて「サポートが受けられるかどうか」という話になります。そもそも考えてみて欲しいのですが、ソフトウェアに関して「きちんと動くことを保証する」なんていうことはできっこないです。電化製品などであれば一つ一つの部品からなにから全部メーカーが選択して、完全にコントロールできるのですが、ソフトウェアに関してはそれを動かすハードもバラバラ、OSもバラバラ、共存するソフトウェアもバラバラ。どんな環境でも「絶対に動く」なんて神様だって約束できません。 それに、意図した動作をさせられた(開発環境、テスト環境と条件が一致していた)としても、ソフトウェアにはバグや脆弱性がつきものです。ある程度の規模のソフトウェアでバグや脆弱性が無いものなんてありえません。これは人間が人間である以上かならず過ちを犯す、ということと同じレベルで確実なことです。だから「かならず動作することをあらかじめ保証する」なんていうことはそもそもできっこないし、したとしても嘘になります。 「サポート」の意味 では、「サポート」とはどういう意味なのかと言うと、これは結局「サポートする構成であるならば、なにかしら問題が起きたときに『対応します』よ」ということだと私は理解しています。ちなみに有償無償はまた別の話です。 - ソフトウェアだから、サポートしている構成でも動かないこともあります。その時には動くように直します。(そりゃすぐにってわけにはいかないけど・・・) - ソフトウェアだから、脆弱性が見つかることがあります。その時には脆弱性を修正します。(なるべく早くやります。五月雨でだしちゃうとたいへんだろうから月に1回とかまとめてだそうかな・・・なんてところも。) - 動くはずのものが動かないのであれば、調査させてもらいます。(時には無料で。場合によっては費用もらいますけど・・・) 実際はこのような形です。これが現実ですけど、これ以上も望めないですよね。 「サポート外」の意味 では逆に「サポートしない」というのはどういう意味なんでしょうか。それは「サポートする」の反対なので「サポートしない構成であるならば、なにかしら問題が起きたときに『対応しないこともありますよ』」ということだと私は理解しています。 - 動かないことがわかったときに、それがサポートしていないOS上での動作であれば、そのOSへの対応版はつくりません。(ビジネスなので、こっちが対象OSをふやすかもしれないですけどね。) - 脆弱性が見つかっても、サポートしていない環境でのみの問題であれば直しません。あるいはサポート期限がきれているなら修正モジュールはつくりません。(でも、本気でやばい脆弱性で、実際に多く使われているなら社会的責任を考えて修正モジュール作ることもたまにあるけど・・・。) では、サポートしない構成であることが分かっている場合を考えてみましょう。例えばWindowsならWindowsのバージョンはSPのバージョンがサポート外だった場合で、それでも動いてしまっている場合。あるいはサポートされていないレジストリの直接的な操作を行っている場合。サポート外だから全く動かないならややこしくないのですが、それでも動いちゃうことっていうのは往々にしてあります。この場合、例えば有償の問い合わせ窓口に相談したら、門前払いされるのでしょうか?それとも対応、調査してくれるのでしょうか? で、これは実際にはケースバイケースだと思います。企業によってポリシーも異なると思います。私の体験した範囲では、門前払いされたケースというのは一度もありません。それどころか、サポートされない構成であるということを分かっていてもなお、いつもどおりの対応をしてくれた上に、修正モジュールを作成してくれたケースすら有りました。ただ、もちろん多額の費用請求をされましたので、結局世の中お金だ、ということなのかもしれません。 やってはいけないこと 私がおもうやってはいけないことは、「サポート」と「保証」を取り違えてしまうことです。 - 今回の構成は特殊な構成だけど、検証してみたら全部きちんと動いて問題なかった。でも、メーカーがサポートしないかもしれないからメーカーに確認しよう。 一見おかしくもなんともないと思います。実際にこのように考えている人が「サポート」という言葉の意味を理解して使っているなら間違いでも何でもないです。でも、以下のような意味で使っている人がいると思います。 - 今回の構成は特殊な構成だけど、検証してみたら全部きちんと動いて問題なかった。でも、メーカーが動作を保証しないかもしれないからメーカーに確認しよう。 これはそもそも前提を間違えていると思うんですね。そもそもメーカーが動作を保証するなんていうことはできないはずです。確認をお願いされたって、それはメーカーにしてみたって、実際に同じ環境をつくってみて、動きを試してみるしかないです。そして、それはすでに自分でやったことなのです。だとすると、いちいちメーカーにお金をはらってすでに自分が自分自身でやって確認したことを確認してもらうことの意味はこれっぽっちもないと思うのです。 この時期待されるのは実際には以下のようなもののはずです。 - 問題があったときに、調査協力してくれるか(門前払いされないか) - どうしてもうまく動かず、原因が分からないときに、「特殊な構成をやめてくれ」という回答だけにならないか。(特殊な構成で動くように修正モジュールを作成してくれる道が閉ざされていないか) - これらのソフトウェアに対して今後の修正版、アップデート版をだしてくれるか 1に関しては、場合によっては確認が必要かと思いますが、メーカーがどのような対応をとるのかすでにわかっているなら毎度毎度聞く必要はありません。 2に関してはそもそも動いているのだから今更聞いてもあまり意味がありません。やってみたら動かなかったのなら聞いてみないといけませんが、同じことをやれば動かないという結果になるだけなので、これまた聞くまでもありません。お客さんの要望を満たした上で実現できる別解、あるいは回避策を探しましょう。 3に関してはOSレベルソフトウェアレベルでは、修正版、アップデート版がでることは大抵の場合すでに決まっているわけですから聞いても意味がありません。 というわけで、私には意味があることとは思えません。 さらにいうと、動かなかったときに修正モジュールを作ってもらって…なんていう道はありえるようで実際にはほぼありえません。企業にもよりますが、大体修正モジュールまでつくるためにはしっかり調査をして原因を特定して、モジュールを作って、それをテストして…と、かなりのステップを踏まなくてはいけませんし、大企業になれば開発部隊は日本にはいないことが多いです。となると、日本の担当者と本国の担当者でのやりとりが発生し、文化の違いにより重要性がうまく伝わらず…など、相当時間がかかります。企業によるでしょうけど、長いところでは半年から1年コースになることもあります。 で、半年も1年も待ってられるのかというと、待ってられるはずがないケースがほとんどだと思います。そう考えると、サポートされる構成だから最悪直してもらえる、なんていうのは意味がないことも多いです。 さらにぶっちゃけると、サポートされてる構成でだって、問題はでるし、それをメーカーに伝えても原因がわからず問題が解決しない。そしてそれなのにサポート費用をとられるなんていうのはよくある話です。まず間違いなく製品の問題なのに。本当にひどい話ですが、これはまた別の時に書きましょう。 結局 というわけで、突き詰めて考えると - もちろん明確にサポートされるような安全な構成で進めるのがいい - でも、必要があるなら特殊な構成にするのはしかたがない - テストしてうまく動いてるならサポートの有無なんて気にしても意味が無い - 問題があったとしても回避策があったならそれですすめればよくて、それによってサポート云々なんて言い出しても時間の無駄 ということになると思います。というか私の中ではそうなっています。 異論反論などは多数あると思います。私も自分の考えが正しいとは思っていません。ただ、現実としてこうなってしまう、とは感じています。 私はSIerのエンジニアなので、その立場としては、メーカーがどう言っていようとも、お客さんが必要としていて、それを自分たちの工夫で実現できるのであれば実現し、きちんとシステムの最後まで面倒をみられればそれでいいのだと思っています。メーカーのサポートがなくても、そのリスクをお客さんとも共有し、飲んだ上でSIerがサポートする、というのはあっていいことだと思います。逆に、それができないからSIerである意味ってどこにあるんですかね?アメリカみたいに企業が直接構築して、メーカーとやりとりすればいい、ということになってしまうと思います。 と、思うのですが、皆さんはどう思いますか?

September 2, 2010 · 1 min · 胡田昌彦

標準コマンドで楽をしよう - csvde

今回は「標準コマンドで楽をしよう」ということでcsvdeコマンドを取り上げます。大量のオブジェクトを属性付きでテキストに出力し一括で比較したい、あるいは大量のオブジェクトを一括で作成したい。しかし、スクリプトをかくスキルあるいは時間がない・・・。そんなときにcsvdeを知っていると非常に楽をすることができます。 csvdeとは csvdeはcsv data exportの略・・・だと思います(きっと)。ActiveDirectoryに対してcsv形式でデータを出力したり、入力したりできるコマンドラインツールです。CSV形式なので、Excelなどで簡単にデータを閲覧したり、作成したりできるので、非常に使い勝手がよいです。Windows 2000 Server以降のサーバーOSであれば基本的に使用できますが、バージョンによって微妙にコマンドラインオプションが異なったりしますので、つどヘルプを読むようにするのがいいと思います。ヘルプの読み方に関しては「コマンドラインヘルプの読み方」(※次に書く予定です。書いたらリンクを張ります。)を参考にしてください。 コマンドラインヘルプ 以下はWindows Server 2008 R2に標準で搭載されているcsvdeのヘルプです。 CSV Directory Exchange 汎用パラメーター -i インポート モードにします (既定ではエクスポート モードです) -f ファイル名 入力ファイル名または出力ファイル名 -s サーバー名 結合先のサーバー (既定ではコンピューターのドメインの DC) -v 詳細モードをオンにします -c FromDN ToDN FromDN を ToDN で置き換えます -j パス ログ ファイルの場所 -t ポート ポート番号 (既定値 = 389) -u Unicode 形式を使います -? ヘルプ エクスポート固有 -d RootDN LDAP search のルートです (既定では名前付けコンテキスト) -r Filter LDAP search のフィルターです (既定では “(objectClass=*)”) -p SearchScope 検索範囲 (Base/OneLevel/Subtree) -l list LDAP search で検索する属性の一覧 (コンマ区切り) -o list 入力から省略する属性の一覧 (コンマ区切り) -g ページされた検索を無効にします。 -m エクスポートで SAM ロジックを有効にします。 -n バイナリ値をエクスポートしません。 ...

June 8, 2010 · 2 min · 胡田昌彦

コマンドプロンプトだけでWebサイトを閲覧する

今回はWeb、その中でもHTTPの部分の話です。世の中にはさまざまなブラウザがあり、非常に高機能なものが多いです。でも、それらが提供している機能のうち一番の基礎となる通信部分に関してはかなりシンプルです。 HTTPとは まず、はじめにHTTPとは何か?という点に関してです。HTTPはHyper Text Transfer Protocolの略で、Hyper Textを転送するための手続きだ、というわけですね。Hyper Textというのはテキストを超えるものだ、ということです。そして、Hyper Textを書く手段がHTMLで、そのHTMLを伝える手段がHTTPなわけです。このあたりはWikipediaに説明を譲ります。 - [Hypertext Transfer Protocol - Wikipedia](http://ja.wikipedia.org/wiki/HTTP) - [ハイパーテキスト – Wikipedia](http://ja.wikipedia.org/wiki/%E3%83%8F%E3%82%A4%E3%83%91%E3%83%BC%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88) - [HyperText Markup Language – Wikipedia](http://ja.wikipedia.org/wiki/HyperText_Markup_Language) 要は世の中に沢山あるWebサーバーから情報をひっぱってこようとおもったら、HTTPでおしゃべりすればいい、ということです。 Webページを取得してみる それでは実際にやってみましょう。やってみると簡単ですよ。簡単なページが良いので、いつものようにGoogleのページを引っ張ってきてみましょう。 まずは、googleのWebサーバーであるwww.google.co.jpに接続します。WebサーバーはTCPの80番で動作していますので80番に接続します。 1 : C : \ > t e l n e t w w w . g o o g l e . c o . j p 8 0 接続に成功すると何も表示されない状態になります。それで正常です。この状態でWebサーバーに対してページを要求します。以下のように入力します。 1 : G E T / H T T P / 1 . 1 ...

November 1, 2009 · 1 min · 胡田昌彦

マルチホーム構成時の注意

今回はマルチホーム構成時の注意点についてです。マルチホームというのは要するにNICが2つ以上あって、複数のネットワークに足を出している状態のことです。結構な頻度でマルチホーム構成を選択し、やってはいけない構成でトラブルに遭遇するケースを見ています。しっかり抑えておきましょう。 デフォルトゲートウェイは1つだけ まず、一番初めに理解してほしいのは「デフォルトゲートウェイを2つ以上設定してはいけない」ということです。よく理解していない人は多くのケースで2つNICがあったら2つゲートウェイを設定してしまうようです。 でも、ちょっとよく考えてみてください。デフォルトゲートウェイというのは、自分が所属していないネットワークに向かって通信するときにパケットを投げる相手ですよね?それが2つ設定されていたら、どっちに投げたらいいんでしょう?困ってしまいますよね? どっちに投げてもきちんと相手まで届く構成であれば問題がおきないこともあるでしょうけれども、やはりこれはよくない構成です。場合によっては通信できないことになるでしょう。 - デフォルトゲートウェイは1つだけ設定する(1つのNICだけで入力し、ほかのNICでは空白にしておく) - 必要な経路に関してはスタティックルートを記述する このようにしておかなくてはいけません。 スタティックルートを記述 スタティックルートの記述・・・といってピンとこない方も多いかもしれませんね。基本的にNICが1つであれば必要ない設定ですから。でも2つ以上になったら、「このネットワークアドレスに向けての通信は、こっちの足からあのルーターに投げる」ということをしっかりと記述してあげる必要があります。 Windowsではこの設定は「route」コマンドで実施できます。経路の追加はroute addコマンドです。コマンドの説明は例のごとく@ITにお願いしちゃいます。 - [route - ルーティングテーブルの表示/設定を行う](http://www.atmarkit.co.jp/fnetwork/netcom/route/route.html) 注意点としては、再起動しても消えないように設定するには-pオプションをつける必要があることです。route printコマンドで経路情報を表示した際に、きちんと追加した経路が「Persistent Routes」として表示されることを確認しておきましょう。そうでないと、うまくいったと思っていたら1月くらいたって再起動したらまたおかしくなったなんていうことになってしまいます。 DNSを2つ以上設定しない またデフォルトゲートウェイの次に気をつけてたいのはDNSの設定です。特にInternet側とIntranet側なんていうようにNICが分かれていた場合、Internet側のNICにはインターネットの名前解決ができるDNSを、Intranet側のNICには社内のDNSを設定したくなる人も多いかと思います。 でも、よく考えてみてほしいのですが、両方に問い合わせるわけにはいきませんよね。もしも両方のDNSに同じドメインが存在したりしていたうえに異なるレコードが登録されているような場合には(これはありえないことではありません)、通信しようとするたびに名前解決の結果が異なるようなことにもなってしまいます。これはやはりだめです。 DNSに関してはどれが正解ということはないです。そのホストの必要に応じて、正しいDNSを参照させる必要があります。「両方のDNSを参照したい」と思ってしまうのなら、それはDNSの設計、構成が間違っている可能性があります。場合によってはhostsファイルを併用してもいいでしょう。 DNSへの登録に気をつける マルチホームの場合にはDNSへの登録にも気をつけてください。特に何も考えないと、ホストについている2つ以上のIPアドレスをすべて登録して、ラウンドロビンになってしまいます。特にDCでこれをやってしまうとかなりクリティカルな障害にもつながってしまいますので、特に気をつけてください。 DCに関してはマルチホーム時のマスタブラウザの問題もあるのでそもそもマルチホームにしないほうが良いです。でも、それでもどうしてもDCをマルチホームにしたいのであれば、Aレコードの自動登録をやめさせる必要があります。DCはNetlogonサービスが定期的に自身のDCとして動作するためのレコードをDNSに定期的に登録に行くようになっているからです。このあたりの手順は以下のKBを参考にしてください。 - [Active Directory communication fails on multihomed domain controllers](http://support.microsoft.com/?scid=kb%3Ben-us%3B272294&x=7&y=17) その他まだまだありますが・・・ 今回紹介したこと意外にもマルチホーム構成の時の注意点は色々あります。特にDMZとLANに足をだしていて、DMZ側のIPでサービスを提供しているようなときに、入力と出力で使うNICが異なるようになってしまったりとか・・・。2つ経路があるときに意図的に片方のネットワークを使わせようと思ってもうまくいかなかったりとか・・・。バックアップ専用のネットワークを作ろうとしたりするときとか・・・。 このあたりはちょっと複雑になりすぎるので、また機会を改めて解説させてもらおうと思います。とりあえず今回紹介した注意事項が基本中の基本ですので、まずはここから気をつけていってみていただければと思います。 参考URL - [マルチホーム コンピュータのデフォルト ゲートウェイ設定](http://support.microsoft.com/kb/157025/ja) - [[NT]同一ネットワークに複数のアダプタを接続した場合の障害](http://support.microsoft.com/kb/175767/) - [マルチホーム化されたブラウザに関する問題](http://support.microsoft.com/kb/191611/ja)

October 30, 2009 · 1 min · 胡田昌彦

レイヤ4 -トランスポート層- ポート番号

今回はTCP/IPのレイヤ4、トランスポート層の、「ポート番号」についての話です。IPアドレスまでは知っていても、TCPのことはよく知らないという人が多いはずです。この層より上の層ははかなりアプリケーションに依存した話になりますので、ネットワークを抑える意味ではこの層が理解の要になります。しっかり理解していきましょう。 どうやってアプリケーションを区別するのか まず、考えてもらいたいことがあります。たとえばブラウザを2つ開いているとします。1つのブラウザではyoutubeでAという動画を再生しています。もうひとつのブラウザではyoutubeでBという動画を再生しています。 さて、このとき自分のPCとyoutubeのサーバーとの間には(少なくとも)2つの通信が確立されています。この2つは「どうして混ざってしまわないのでしょうか?」。どちらも同じブラウザですし、相手も同じyoutubeのサーバーです。不思議だと思いませんか? 通信にはIPアドレスを使っているはずです。仮に自分のPCのIPアドレスをIP1、youtubeのサーバーのIPをIP2としましょう。以下の2つの通信が確立されているはずです。 - IP1 – IP2 - IP1 – IP2 うーん。どう見ても区別できませんね。これは当然のことで、「IPアドレスだけで通信の確立がなされているわけではない」のです。IPアドレスだけではなくてそのPCの中で「どのプログラムと関連づいているのか」、より正確に言うと「どのプロセスと関連づいているのか」ということが管理されているわけです。これが「ポート番号」です。 超有名なポート番号として「HTTP = 80番」というものがあります。ブラウザで接続する時にはHTTPサーバー(Webサーバー)の80番ポートに接続するわけです。 - IP1 – IP2:80 - IP1 – IP2:80 うーん。これでもまだ見分けがつかないですね。普段ポート番号はサーバー側だけが意識されることが多いですが、「クライアント側のポート番号」も意識する必要があるのです。 それでは、クライアントのポート番号は何番になるのかというと、これはもう「何番でもいい」わけです。少なくとも他とバッティングしなければ。このようにクライアント側が接続のために一時的に使用するポート番号のことをエフェメラルポートといいます。 - [エフェメラルポートとは 【ephemeral ports】 - 意味/解説/説明/定義 : IT用語辞典](http://e-words.jp/w/E382A8E38395E382A7E383A1E383A9E383ABE3839DE383BCE38388.html) ここでは適当に1024と1025番だったとしましょう。 - IP1:1024 – IP2:80 - IP2:1025 – IP2:80 うん。これできちんとそれぞれの通信が区別できるようになりました。このようにサーバー、クライアントのIPアドレスとポート番号をつかって接続の状態を表し、これをソケットといいます。 - [ソケットとは 【socket】 - 意味/解説/説明/定義 : IT用語辞典](http://e-words.jp/w/E382BDE382B1E38383E38388.html) このように、プログラムが通信をする際には、それぞれの動的なポート番号が割り当てられるので、混ざることが無いわけです。 繰り返しになりますが、サーバー側のポート番号だけではなく、クライアント側のポート番号も意識していきましょう。 接続の状態を確認する ここまで理解できたら、実際に自分が使っているPCの現在の接続の状態を確認してみましょう。接続を確認する方法は沢山ありますが、Windowsの標準コマンドということでいうとnetstatコマンドがあります。コマンド自体の解説は@ITに譲ろうと思います。 - [netstat - ホストのネットワーク統計や状態を確認する](http://www.atmarkit.co.jp/fnetwork/netcom/netstat/netstat.html) 私がよく使うオプションを紹介しておきます。実際に試しながら見てみてください。 netstat –an いつも何も考えずに使うのは -anオプションです。-aで接続状態に加えて、待ち受けているポートの状態を表示しています。「状態」が「LISTENING」になっているものが待ち受けているものです。いわゆるサーバーですね。 ...

October 6, 2009 · 1 min · 胡田昌彦

ユーザープロファイル

今回はユーザープロファイルの話です。ユーザープロファイルはWindowsを使っていく上で非常に重要なものです。何といっても個々人の情報、データがすべて詰まっているものですので。 ユーザープロファイルとは何か まず、ユーザープロファイルとは何で、何のためにあるのかを理解しましょう。私はこれは「複数のユーザーが同じWindowsを使用しても問題無いようにするもの」として理解しています。 AさんとBさんが1台のPCを共用していたとして以下のようなニーズは当然あるものと思います。 - デスクトップの壁紙やスクリーンセーバーなどは自分が設定したものを使う - マイドキュメントやデスクトップなどに自分のファイルを置く - IEのお気に入りは自分で管理する - 自分の設定は変更されたくない、自分のファイルは他人に見られたくない このようなことが「ユーザーごとに個別のプロファイルを持つ」ことで実現されています。 ユーザープロファイルの場所 ユーザープロファイルの場所はWindowsのバージョンによって異なります。以下のようになっています。 Windows 95/98/ME C:\windows\Profiles<ログイン名> Windows NT C:\Winnt\Profiles<ログイン名> Windows 2000/XP/2003 C:\Documents and Settings<ログイン名> Windows Vista/7/2008 C:\User<ログイン名> 「95/98/ME/NT」と「2000/XP/2003」と「Vista/7/2008」で場所が異なる、ということですね。 ちなみにプロファイルの場所は%userprofile%という環境変数に格納されていますので、以下のように確認すれば自分のプロファイルの場所を確認できます。 C : \ > e c h o % u s e r p r o f i l e % C : \ U s e r s \ m e b i s u d a Windows Vista/7/2008では下位互換性を保つために「C:\Documents and Settings」が「C:\Users」に対応するようにジャンクションとして設定されています。これによってWindows XPにしか明示的に対応していないようなプログラムでもたいていの物は動作するようになっています。 ...

September 9, 2009 · 2 min · 胡田昌彦

Volume Activation 2.0

今回はVolume Activation 2.0について書きます。Volume Activation2.0以前のライセンス認証は、結局のところ「やるべきこと」はシンプルだったので、ある意味やりさえすればよかったのですが、Volume Activation 2.0では事実上「設計」、「運用」のタスクが認証に関して発生しています。 このあたりをよく理解せずに「とりあえず動いているから」といって客先にサーバーを納品してしまったりすると、しばらくして「使えなくなった!」と連絡が来てしまうなんていうことにもなりかねません。しっかりと動作を理解しましょう。 対象 まず、Volume Activation 2.0の対象を抑えましょう。対象は2009年9月7日現在では以下のものだけです。 - Windows Vista - Windows7 - Windows Server 2008 (R2) 要するにWindows Vista移行のOS(クライアント、サーバー共に)のみ、ということですね。 目的 次に、目的を理解しましょう。Volume Activation 2.0はアクティベーションを容易にしつつ、不正利用を防ぐための方法なのです。 Windows XP, 2003より前のOSではアクティベーションは必要ありませんでした。基本的にインストール時にキーは必要ですが、それを入力さえすればあとは何もする必要がありませんでした。 Windows XP, 2003ではアクティベーションが導入されました。これは製品の不正利用を防ぐために導入されました。インターネットに接続できるならアクティベーションのウィザードを実行するだけです。基本的にインターネットや電話でアクティベーションを実施しないと、OSが使えないようにする仕組みが備わったわけです。個人のPCであればこの方法で問題ありません。 しかし、企業用のPCとなると、数百、数千、数万台になります。これに対して一台一台すべてアクティベーションを実施して回るのは現実的ではありません。そこで企業向けには「ボリュームライセンスメディア」と「ボリュームライセンスキー」というものが存在しています。「ボリュームライセンスメディア」を使ってインストールし、インストール時に「ボリュームライセンスキー」を入力すると、アクティベーションの必要がなく使い続けられるわけです。この仕組みのおかげで企業のシステム管理者は大量のクライアントのアクティベーションを個別に実施しなくて良かったわけです。 しかし、この方法には問題点があります。企業向けのボリュームライセンスメディアとそのキーが外部に漏れてしまえば、アクティベーション無しでOSが不正使用し放題になってしまうからです。 そこで、企業向けのボリュームライセンスに関してもアクティベーションを行うようにするための仕組みがVolume Activation 2.0で、Windows Vista移行とりいれられたわけです。 なされるべきこと 企業向けのクライアントを全部アクティベーションさせようというわけですから、何らかのうまい仕組みが必要になります。「全部のクライアントで都度アクティベーションさせる」というのはもちろんNGなわけですから、自動化の仕組みが必要です。必ずしもインターネットに接続できるわけではないので、インターネットに接続できなくても問題ない仕組みも必要です。さらに長期間出張にノートPCを持ち出す…なんていうケースもあるでしょうから、そこへの対応も必要です。 このあたりをうまく解決するソリューション…なかなか難しそうですよね。マイクロソフトも単一の方法だけでは実現できないと判断したようで、出した答えはKMSとMAKという2つの方式の組み合わせです。以下、見ていきましょう。 KMS KMSはKey Management Serviceの略で、これがVolume Activation 2.0の本命です。要は社内に認証サーバー(KMSホスト)を立て、ボリュームライセンスメディアでインストールされたクライアントは自動的にその認証サーバー(KMSホスト)をみつけて、アクティベートしてもらう、という仕組みです。 管理者はKMSホストにのみKMSキーの入力を行い、あとはボリュームライセンスメディアでOSをインストールしておけば、あとのことは裏で勝手にやってくれるわけです。KMSホストのみがInternet経由でMSのアクティベーションセンターと通信を1度だけすることになります。 ポイントは一度認証されたら、ずっと使い続けることができるわけではなく、定期的に更新が必要な点です。この間隔は180日に設定されています。つまり、常に社内ネットワークに接続されているデスクトップPCや、外に持ち出しはするけれども、最低でも数カ月に一度は社内ネットワークに接続されるような端末がKMSの対象になるわけです。 一度だけ社内でセットアップ、認証しておいて、家に持って帰って自宅でずっと使う…ということはできないようになっているわけですね。 MAK MAKはMultiple Activation Keyの略で、ひとつのMAKキーで複数台のアクティベーションを行うことができます。これは結局今までのXP, 2003時代のアクティベーションとほぼ同様です。1台1台個別にキーを入力し、Internet経由あるいは電話で認証させます。期限も無期限です。 この方式はつまり、KMSでは管理できないクライアントのために残されている、というように理解するのがよいと思います。認証のための手間はかかりますが、MAKキーを入れておけばずっと使い続けられるわけです。 基本的な設計 これらのことから基本的な設計としては以下のようになると思います。 - まず、社内にKMSホストを構築する - 社内ネットワークに接続するクライアントにはボリュームライセンスメディアにてインストールする - 社内ネットワークに接続されない状態で半年以上利用し続ける可能性のあるクライアントにはボリュームライセンスでインストール後、MAKキーをセットする - KMSとMAKの切り替えを行う必要が出てきた場合には都度入れ替えを行う KMSであろうと、MAKであろうと、MSのアクティベーションセンターは台数の情報をきちんと把握することができるため、不正利用の心配はなくなります。(Volume Activation 2.0自体の機構が破られない限りは) ...

September 7, 2009 · 2 min · 胡田昌彦

PowerShell上でコマンドを実行する場合の注意点(式モードとコマンドモード)

今回はPowerShell上でコマンドを実行する場合の注意点に関してです。PowerShell上で色々な作業を行う便利さに慣れてくると、コマンドプロンプトは全く使わずにPowerShell上で作業を完結させるようになってきます。が、このときにちょっとした落とし穴があります。 私がはまったのはwbadminコマンドの利用時でした。wbadminコマンドはPowerShellのコマンドレットではない、純粋なコマンドプロンプト上で動作するプログラムです。Windows Server 2008のバックアップを行うことができます。 PowerShell上からwbadminコマンドを実行しようとしたところ以下のような現象が発生しました。「きちんと入力しているのに、文法ミスと言われてしまう」というものです。 1 : P S C : \ W i n d o w s \ S y s t e m 3 2 > w b a d m i n s t a r t s y s t e m s t a t e b a c k u p - b a c k u p t a r g e t : f : ...

July 27, 2009 · 7 min · 胡田昌彦

レイヤ3 -ネットワーク層- IPアドレス

今回はレイヤ3、ネットワーク層のIPアドレスのお話です。 IPアドレスはTCP/IPで通信をする際に必ず設定されるもので、よく「住所」にたとえられます。ネットワーク上の住所がIPアドレスで、ネットワーク上のデータはIPアドレスを宛先として届けられるんだよ、と。 この説明は全く間違いではないのですが、あえて言うならIPアドレスは「レイヤ3での宛先」です。すでに説明したように「レイヤ2での宛先」はMACアドレスなわけです。つまり - 同一ネットワーク内の通信であればMACアドレスが宛先となる(レイヤ2) - 別ネットワークへの通信であればIPアドレスが宛先となる(レイヤ3) というわけです。つまりIPアドレスは「宛先のホストが存在するネットワークへ送り届ける」という目的で主に使用されています。 たらいまわす IPアドレスを宛先とした通信の特徴は「たらいまわし」にすることです。例えば自分のPCのTCP/IPの設定を見てみると、基本的に以下のものしか設定しません。 - IPアドレス - サブネットマスク - デフォルトゲートウェイ 「IPアドレス」と「サブネットマスク」があれば、宛先のIPアドレスが同一ネットワークかどうかは判別がつきます(詳細はレイヤ3 -ネットワーク層- サブネットマスク参照)。しかし、それ以外に関してはどこからどのように繋がっているのかということは全く関与していません、単純に「デフォルトゲートウェイにお願いしておけば届けてくれるんでしょ?」程度の認識です。で、デフォルトゲートウェイに届けることを依頼します。 では、デフォルトゲートウェイとなっているルーターでは、宛先ネットワークを全てしっているのかというと、大抵の場合そうではありません。ルーターはいくつかのネットワークの宛先は知っていますが、「その他」に関しては特によくしらず、ルーターもさらに上位の「ゲートウェイ」に届けることを依頼します。 で、同じようなことが何段も続くわけです。たらいまわしです。「とりあえずあの人にお願いしておけば大丈夫でしょ」的な。 で、いつかは誰かがきちんと「このネットワークであればこっち」という判断をしなければいけません。これはISPのなかでも大規模なところが世界中のネットワークを理解しているルーターを管理してくれているので、そこで行われます。 そうすると今度は逆に世界の中心的な場所から末端の端末まで通信が行われるわけですが、ここではルーターはさすがに「自分が管理しているネットワーク」がどのようなものかは理解しているので、届く、というわけです。こうして世界中で繋がるわけです。

July 13, 2009 · 1 min · 胡田昌彦

レイヤ3 -ネットワーク層- サブネットマスク

今回はサブネットマスクの理解です。私も「255.0.0.0」、「255.255.0.0」、「255.255.255.0」以外のサブネットマスクだとすぐにはピンとこないのですが、理屈を抑えておけば理解は簡単です。是非仕組みを理解しましょう。 サブネットのマスクである まず、そもそも「サブネットマスク」という言葉ですが、これは『「ネットワーク」を複数の「サブネットワーク」に分割するための「マスク」』というように私は理解しています。 ネットワークは分割される TCP/IPのネットワークは大きく扱うこともできるのですが、ブロードキャスト(同一ネットワーク上の全てのホストに対してパケットを送る)が数多くとびかってしまい、これがネットワーク全体のパフォーマンスを下げてしまったり、ホストに対しても負荷をかけてしまったりするため、適当な大きさに「分けて」使うということをします。同時に、セキュリティ上の理由からも複数のネットワークに分けておき、ネットワークの分け目の部分でパケットのコントロールを行うようなこともあります(ファイアウォール)。 とまぁ、このようなわけでネットワークを分割するニーズがあります。 クラス、CIDR 昔はネットワークの分割方法としては以下の5つだけでした。 - クラスA(0.0.0.0-127.255.255.255) - クラスB(128.0.0.0-191.255.255.255) - クラスC(192.0.0.0-223.255.255.255) - クラスD(224.0.0.0-239.255.255.255) - クラスE(240.0.0.0-255.255.255.255) ですが、これだとちょっと粒度が大きすぎるということで、CIDRという手法が一般的に用いられるようになりました。これはルーターがルーティングする際の情報を集約できるようにするための手法なのですが、これがそのままホスト上のTCP/IPの設定にも反映されているわけです。これによって、サブネットマスクのビット長は可変になりました。 うん。ちょっと良くわからない説明になってきてますね。今回はルーターの話は省略して、ホスト上のサブネットマスク周りの話に焦点を絞って、もうちょっと具体的に説明しようとしてみます。 IPアドレス、サブネットマスク、ネットワークアドレス IPアドレスがあります。 - IPアドレス1 - 192.168.1.1 - IPアドレス2 – 192.168.1.130 唐突ですが、問題です。「2つのIPアドレスは同一ネットワーク上にあるでしょうか、それとも別ネットワークにあるでしょうか?」 昔なら(5つのクラスしかなかったときならば)答えは「同一ネットワーク」でした。ですが、今現在としては「サブネットマスクが提示されていないからわからない(どちらでもありうる)」ということになります。 それでは具体的にサブネットマスクを提示してみます。 - パターン1 IPアドレス1 - 192.168.1.1 / 255.255.255.0 - IPアドレス2 – 192.168.1.130 / 255.255.255.0 - パターン2 IPアドレス1 - 192.168.1.1 / 255.255.255.128 - IPアドレス2 – 192.168.1.130 / 255.255.255.128 - パターン3 IPアドレス1 - 192.168.1.1 / 255.255.255.192 - IPアドレス2 – 192.168.1.130 / 255.255.255.192 それぞれのパターンで同一ネットワークか別ネットワークにあるかわかりますでしょうか?判別するには「IPアドレスをサブネットマスクでマスクしてあげて、ネットワークアドレスを求め、それを比較する」ことが必要です。また、コンピューターの中では全て0,1で計算されているので、このあたりは2進数に変換すると非常に理解しやすくなります。2進数にしてから考えて見ます。 ...

July 7, 2009 · 2 min · 胡田昌彦

タスクスケジューラーで定期的に処理を実行させる

何をするものか? タスクスケジューラーはWindowsの標準機能であり、決まった日時、時刻にプログラムを実行するためのものです。1度きりの実行をさせることもあれば、くり返して何度も実行させるようなことも可能です。 プログラムが起動できるということは結局なんでもできるということです。想像力を膨らませて運用を楽にしましょう。 どのように設定するのか? タスクスケジューラーは以下の場所からアクセスします。 [すべてのプログラム] - [アクセサリ] - [システムツール] - [タスク](※Vista, 2008では「タスクスケジューラ」) すると、実際に設定されているタスクの一覧が表示されます。Windows XPや2003以前は規定の状態では特に何も設定されていませんが、Windows Vista, 2008では規定の状態で大量にタスクが登録されています。 どちらが良い、悪い、ということもありませんが、びっくりしないようにしましょう(笑。 タスクの作成方法(XP, 2003) タスクの作成はウィザードに従っていけばいいだけなので、簡単です。 まず、「スケジュールされたタスクの追加」を実行します。 ここで、実行するプログラムを選択します。多くの場合は「参照」ボタンを押して、バッチファイルを起動することになるでしょう。 ここで、タスクの実行単位を選択できます。コンピューター起動時やログオン時などにも実行できますが、このあたりは他にも実行手段があるので、主に使うのはその他の選択肢だと思います。 この選択肢だけを見ると、「最小単位でも”日”だから1日に何度も実行させるようなスケジュールは組めないんだな」と思ってしまいがちですが、そうではありません。きちんとそういうこともできます。が、まずはウィザードを進めていきましょう。 上記は「日単位」を選択した場合の画面です。毎日実行するのか、平日のみにするのか、数日おきに実施するのか、開始日をいつにするのか等を選択します。 次にコマンドの実行アカウントの指定画面が出てきます。ここできちんと実行する権限のあるユーザーとパスワードを入力しておかないとうまく動きませんので注意。 より細かい実行スケジュールのコントロールをしたければ「詳細プロパティを開く」ようにチェックボックスをつけておきましょう。もちろんここでチェックをつけなくてもあとから詳細プロパティを開き、設定変更することができます。 ここでは、「ログオンしている場合にのみ実行」ということをコントロール可能です。 「スケジュール」タブが実行感覚のコントロールの肝になってきます。「詳細設定」を押します。 この項目の「タスクを繰り返し実行」というのが1日単位よりも細かく実行させるための設定になります。わかりずらいですが、上記の設定であれば、6月30日以降の毎日23時00分になったらタスクが実行されるのですが、タスクを10分間隔で1時間実行する設定になっているので、具体的には以下の時刻に合計6回プログラムが実行されることになります。 - 23時00分 - 23時10分 - 23時20分 - 23時30分 - 23時40分 - 23時50分 - 24時00分(※この最後の1回が実行されるのかどうかはちょっと自信が無いです。実際に確認し、Updateします。) 本当に1日中10分おきにずっとプログラムを起動し続けたいなら、継続時間を「24時間」にしておけばいいわけですね。 ちなみに、裏技チックですが、タスクの詳細画面からだと、ウィザードでは出てこない「アイドル時」に実行させるという選択肢も選べます。 設定し終わったら、必ず「タスク」にて意図した設定になっているかを確認すると良いと思います。また、パスワードのうち間違いなどの可能性もありますので、必ず「タスクの実行」を選択し、意図したとおりに起動することを確認しておくと良いと思います。 タスクの作成方法(Vista, 2008) Vista, 2008ではXP, 2003よりもはるかに高機能になっています。まず、「新しいタスクの作成」を行います。 ...

June 30, 2009 · 1 min · 胡田昌彦