連載:世界のWebサービス
第7回 Code Red感染サーバの国籍を探る
2.サンプル・プログラムNSLookupClient
田口 景介
2001/08/10 |
|
以下に今回作成したサンプル・プログラムのソース・コードを示す。これはVisual Studio .NETベータ2を使用して作成したものだ。途中のコメントには自動生成されたものも含まれている。#region(55行目)や#endregion(148行目)も自動的に挿入されるものである。
プログラムの大部分はラベルやテキストボックスなどのユーザーインターフェイスに関するものだ。実際にWebサービスを呼び出している個所は、検索ボタンが押されたときに実行されるbutton1_Clickメソッドである(159〜175行目)。Webサービスの本体であるtranslateメソッドはInternetAddress型のオブジェクトを返す。これには、文字列型であるIPとHostnameがメンバとして含まれている。
1: using System;
2: using System.Drawing;
3: using System.Collections;
4: using System.ComponentModel;
5: using System.Windows.Forms;
6: using System.Data;
7:
8: namespace NSLookupClient
9: {
10: /// <summary>
11: /// Form1 の概要の説明です。
12: /// </summary>
13: public class Form1 : System.Windows.Forms.Form
14: {
15: private System.Windows.Forms.Button ButtonResolv;
16: private System.Windows.Forms.GroupBox groupBox1;
17: private System.Windows.Forms.TextBox IP;
18: private System.Windows.Forms.TextBox Hostname;
19: private System.Windows.Forms.Label label1;
20: private System.Windows.Forms.TextBox textRequest;
21: private System.Windows.Forms.Label label2;
22: private System.Windows.Forms.Label label3;
23: /// <summary>
24: /// 必要なデザイナ変数です。
25: /// </summary>
26: private System.ComponentModel.Container components = null;
27:
28: public Form1()
29: {
30: //
31: // Windows フォーム デザイナ サポートに必要です。
32: //
33: InitializeComponent();
34:
35: //
36: // TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。
37: //
38: }
39:
40: /// <summary>
41: /// 使用されているリソースに後処理を実行します。
42: /// </summary>
43: protected override void Dispose( bool disposing )
44: {
45: if( disposing )
46: {
47: if (components != null)
48: {
49: components.Dispose();
50: }
51: }
52: base.Dispose( disposing );
53: }
54:
55: #region Windows Form Designer generated code
56: /// <summary>
57: /// デザイナ サポートに必要です。このメソッドの内容を
58: /// コード エディタで変更しないでください。
59: /// </summary>
60: private void InitializeComponent()
61: {
62: this.ButtonResolv = new System.Windows.Forms.Button();
63: this.groupBox1 = new System.Windows.Forms.GroupBox();
64: this.IP = new System.Windows.Forms.TextBox();
65: this.Hostname = new System.Windows.Forms.TextBox();
66: this.label1 = new System.Windows.Forms.Label();
67: this.textRequest = new System.Windows.Forms.TextBox();
68: this.label2 = new System.Windows.Forms.Label();
69: this.label3 = new System.Windows.Forms.Label();
70: this.groupBox1.SuspendLayout();
71: this.SuspendLayout();
72:
73: // ButtonResolv
74: this.ButtonResolv.Location = new System.Drawing.Point(296, 32);
75: this.ButtonResolv.Name = "ButtonResolv";
76: this.ButtonResolv.TabIndex = 0;
77: this.ButtonResolv.Text = "検索";
78: this.ButtonResolv.Click += new System.EventHandler(this.button1_Click);
79:
80: // groupBox1
81: this.groupBox1.Controls.AddRange(new System.Windows.Forms.Control[] {
82: this.label3, this.label2, this.IP, this.Hostname});
83:
84: this.groupBox1.Location = new System.Drawing.Point(16, 64);
85: this.groupBox1.Name = "groupBox1";
86: this.groupBox1.Size = new System.Drawing.Size(360, 104);
87: this.groupBox1.TabIndex = 3;
88: this.groupBox1.TabStop = false;
89: this.groupBox1.Text = "検索結果";
90:
91: // IP
92: this.IP.Location = new System.Drawing.Point(104, 56);
93: this.IP.Name = "IP";
94: this.IP.ReadOnly = true;
95: this.IP.Size = new System.Drawing.Size(240, 19);
96: this.IP.TabIndex = 1;
97: this.IP.Text = "";
98: this.IP.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
99:
100: // Hostname
101: this.Hostname.Location = new System.Drawing.Point(104, 24);
102: this.Hostname.Name = "Hostname";
103: this.Hostname.ReadOnly = true;
104: this.Hostname.Size = new System.Drawing.Size(240, 19);
105: this.Hostname.TabIndex = 2;
106: this.Hostname.Text = "";
107: this.Hostname.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
108:
109: // label1
110: this.label1.Location = new System.Drawing.Point(8, 8);
111: this.label1.Name = "label1";
112: this.label1.Size = new System.Drawing.Size(112, 23);
113: this.label1.TabIndex = 4;
114: this.label1.Text = "ホスト名 or IPアドレス";
115:
116: // textRequest
117: this.textRequest.Location = new System.Drawing.Point(24, 32);
118: this.textRequest.Name = "textRequest";
119: this.textRequest.Size = new System.Drawing.Size(256, 19);
120: this.textRequest.TabIndex = 5;
121: this.textRequest.Text = "";
122:
123: // label2
124: this.label2.Location = new System.Drawing.Point(16, 24);
125: this.label2.Name = "label2";
126: this.label2.Size = new System.Drawing.Size(64, 23);
127: this.label2.TabIndex = 3;
128: this.label2.Text = "ホスト名";
129:
130: // label3
131: this.label3.Location = new System.Drawing.Point(16, 56);
132: this.label3.Name = "label3";
133: this.label3.Size = new System.Drawing.Size(64, 23);
134: this.label3.TabIndex = 4;
135: this.label3.Text = "IPアドレス";
136:
137: // Form1
138: this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
139: this.ClientSize = new System.Drawing.Size(392, 189);
140: this.Controls.AddRange(new System.Windows.Forms.Control[] {
141: this.textRequest, this.label1, this.ButtonResolv, this.groupBox1});
142: this.Name = "Form1";
143: this.Text = "NSLookup";
144: this.groupBox1.ResumeLayout(false);
145: this.ResumeLayout(false);
146:
147: }
148: #endregion
149:
150: /// <summary>
151: /// アプリケーションのメイン エントリ ポイントです。
152: /// </summary>
153: [STAThread]
154: static void Main()
155: {
156: Application.Run(new Form1());
157: }
158:
159: private void button1_Click(object sender, System.EventArgs e)
160: {
161: try
162: {
163: NSLookup nsl = new NSLookup();
164: InternetAddress ia = nsl.translate(textRequest.Text);
165: IP.Text = ia.IP;
166: Hostname.Text = ia.Hostname;
167: }
168: catch
169: {
170: IP.Text = "見つかりませんでした";
171: Hostname.Text = textRequest.Text;
172: }
173: }
174: }
175: }
|
|
NSLookupClient.csのソース・コード
|
|
※このプログラムのコンパイルおよび実行には.NET Framework SDKベータ2あるいはVisual Studio .NETベータ2が必要です。 |
こうして作ったサンプル・プログラムを使ってさっそくCode Redの感染システムを調べてみたところ、米国、韓国、中国が3強で、そのほかにも英国、フランス、ドイツ、オーストラリア、オーストリア、タイ、香港等、そしてもちろん日本からのアクセスが行われていることが確認できた。結局出た結論は「世界中」。
■
実は.NET Frameworkのクラス・ライブラリには、ホスト名とIPアドレスの相互変換を行うDNSクラス(System.Net.DNS)が含まれている。そのため今回紹介したWebサービスを.NET Framework環境から呼び出すことは、先にも述べたようにあまり意味がない。今回の話のポイントはむしろ、古いWSDLを持ったWebサービスを呼び出すところにある。
ところで報道によれば、8月に入ってからの6日間で、全世界でおよそ36万台のシステムがCode Redに感染したとされている。どの程度の割合でIISサイトが感染しているかは分からないが、相当にIISを採用するサイトが増えていると感じられる数字だ。そして、これはNetcraftによるマーケットシェア調査(http://www.netcraft.com/survey/)でも、はっきりと数字に表れている。何と、2001年6月には20.39%だったIISのシェアが、翌2001年7月には一気に25.88%にまで伸びているのだ。その要因として考えられるのは、やはりWindows 2000 SP2のリリースであろう。しかし、そのSP2を適用したシステムでもCode Redを阻むことはできなかった。今後の推移が気になるところだ。
Insider.NET 記事ランキング
本日
月間