連載:世界のWebサービス
|
Code Redの話題で始めたのは、インターネットワームの脅威が去らない限りWebサービスの提供はおぼつかない、などと語るためではない。ログに残ったIPアドレス(つまりCode Redに汚染されたシステムだ)の行列を見ているうちに、いったいどこからアクセスが来ているのか、興味がわいてきたからだ。これはいい機会なので、Webサービスを利用してDNSクライアントを作成し、IPアドレスからドメイン名を調べて、Code Redによる汚染範囲を見てやろうというわけだ。もっとも、Windows NT/2000にはnslookupが標準装備されているので、わざわざ作るまでもないのだが、nslookupを持たないWindows 9xでも動作するので、まったく無意味でもない。それに、今回のサンプルを元にして、入力されたIPアドレス一覧を一気にホスト名に変換するツールなどを作ることもできる。いずれにしろサンプル・プログラムなので、深く追求しないことにしよう。
今回利用するWebサービスはShinka Technologies社によって提供されている、NSLookup Web サービスである(NSLookup Webサービスのページ)。このWebサービスは同社のShinka Integration Server上でホスティングされているもので、ホスト名またはIPアドレスにより、一方から他方を参照するDNSリゾルバをサービスしている。
ところで、前回「異なるツールキットで作成されたWebサービスを.NET Frameworkのwsdl.exeでインポートできない」と述べたが、このWebサービスもやはり素直にインポートできず、プロキシ・コードを生成することはできなかった。しかし、調べてみると、Webサービスと対になって提供されているWSDLファイルがバージョン1.0以前の古い仕様をベースに記述されていること、そして.NET Framework ベータ2が要求するWSDL 1.1ベースのWSDLファイルへと修正すれば、正常にWebサービスを呼び出せることが分かった。おそらくは、インポートに失敗していた大部分のWebサービスはWSDLファイルの修正だけで動作するだろう。しかし、このままでも利用できないわけではないが、WSDLへの理解がなければ修正は難しいはずだ。早くWSDL 1.1がスタンダードとなり、.NETと競うように多数登場してきているJavaやDelphi、Perlなどで開発されたWebサービスを、プラットフォームを越えて呼び出せる状態が当たり前になることを期待したい。
さて、少々面倒な手順を踏むことになったが、今回作成したサンプル・プログラムは次の画面に示すNSLookupである。ホスト名またはIPアドレスを入力して、検索ボタンをクリックすれば、画面に対応するホスト名とIPアドレスが表示されるだけの単純なものだ。
今回作成したサンプル・プログラムNSLookupの実行画面 |
検索ボタンをクリックすれば、画面に対応するホスト名とIPアドレスが表示される。 |
ただし、逆引き(IPアドレスからホスト名の名前解決)はできないことが多い。国内では逆引きを正しく設定しているプロバイダがほとんどのようだが、海外ではプロバイダがユーザーに割り当てているIPアドレスについては正引きしかできないところが多いようだ。このような場合には、NSLookupのホスト名にはIPアドレスがそのまま表示されるようになっている。ちなみに、DNSでは名前解決できないIPアドレスでも、whoisデータベースを活用すれば、そのIPアドレスを管理している組織を調べることが可能だ。これについては、いずれ取りあげるかもしれない。
WSDLファイルを修正してインポートする
前述したように、いつものようにwsdl.exeでDNS Lookup Serviceを直接参照してプロキシ・コードを生成することはできないので、次の手順で作業を行う。
1. WSDLファイルの取得
http://www.shinkatech.com/interop/NSLookup/Main.phtmlからhttp://www.shinkatech.com/interop/NSLookup/NSLookup.wsdlを自分のマシンにダウンロードする。
2. WSDLファイルの修正
ダウンロードしたNSLookup.wsdlの以下の箇所をテキストエディタで修正する。
- XMLスキーマ定義ファイルの変更(2箇所)
元 |
xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" |
新 |
xmlns:xsd="http://www.w3.org/2001/XMLSchema" |
- コンプレックス・タイプの書式変更(allエレメントの追加)
元 |
<complexType name="InternetAddress"> |
新 |
<complexType name="InternetAddress"> |
3. wsdl.exeの実行
NSLookup.wsdlを格納したディレクトリで、以下のコマンドを実行する。
wsdl /n:NSLookupClient NSLookup.wsdl |
以上の作業で、カレントディレクトリにNSLookup.csが作成されたはずだ。あとは通常どおり、次ページに示すNSLookupの本体であるNSLookupClient.csを用意すれば、以下のコマンドラインでビルドすることができる。
csc /t:winexe /out:NSLookupClient.exe NSLookupClient.cs NSLookup.cs |
INDEX | ||
[連載]世界のWebサービス―― 究極のWebサービスを求めて ―― | ||
第7回 Code Red感染サーバの国籍を探る | ||
1.NSLookup Webサービス | ||
2.サンプル・プログラムNSLookupClient | ||
「世界のWebサービス」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|