B lack jumbodog 運転と改造のすすめ

46
BLackJumboDog 運転と改造のすすめ 2011.11.19 by sapporowroks

Transcript of B lack jumbodog 運転と改造のすすめ

Page 1: B lack jumbodog 運転と改造のすすめ

BLackJumboDog 運転と改造のすすめ

2011.11.19 by sapporowroks

Page 2: B lack jumbodog 運転と改造のすすめ

自己紹介

• ハンドル SIN/古谷誠進

• Twitter @furuya02

• 仕事 某社でシステムサポートみたいな感じ

• 住居 札幌

• 年齢 アラフィフ

オヤジなので、新しいもの・・・

(SNS、スマフォ、F#などなど)よく分かりません。(悲)

Page 3: B lack jumbodog 運転と改造のすすめ

アジェンダ

• BJD紹介と設定の勘所 各種機能の紹介

3ステップ、Web、DNSサーバの設定例

•プログラムの構造と改造要領 SAMPLEサーバ・主要クラス

Socket、オプション、ログの使用方法

運転

改造

Page 4: B lack jumbodog 運転と改造のすすめ

BJD紹介と設定の勘所

Page 5: B lack jumbodog 運転と改造のすすめ

BlackJumboDogとは

BlackJumboDogとは、Windowsで動作するフリーの簡易サーバです。

Web、メール、プロキシ、FTP、DNS、DHCPサーバなどが利用可能です。また、リモートで制御・メンテナンスが行えます。

【利用の制限など】

営利外の場合は 制限なし。

営利目的の場合は、連絡下さい。

過去に悪質業者に無断利用され、問題になりました。

悪意がないと判断される場合、承諾させて頂いています。

Page 6: B lack jumbodog 運転と改造のすすめ

インストール

デフォルトでC:¥BlackJumboDogに展開されます

公開ファイルは3種類

1.bjd-x.x.x.zip バイナリ

2.bjd-src-x.x.x.zip ソース

3. bjd-x.x.x.msi インストーラー

Page 7: B lack jumbodog 運転と改造のすすめ

ファイルの種類

BJD.exe 本体

BJD.exe.config アプリケーション構成ファイル

Option.def 設定のデフォルト値

*.ini オプション保存ファイル (削除で初期化)

*Server.dll 各種サーバ機能 (14種類)

*.Log ログファイル

named.ca ルートサーバ一覧(DNSサーバ用)

examlpe.pfx SSL証明書サンプル(Webサーバ用)

Page 8: B lack jumbodog 運転と改造のすすめ

DLLを削除すると

資源節約

脆弱性リスク軽減

Page 9: B lack jumbodog 運転と改造のすすめ

リモート制御

「BJD.exe 接続先アドレス」で起動する

リモート側で、BJDで行うすべての操作が可能になり、遠隔制御ができます。

※リモートサーバを使用する設定が、あらかじめ必要です。

Page 10: B lack jumbodog 運転と改造のすすめ

IPv6設定

IPv6がインストールされていれば、IPv6でbindできます。

IPv4とIPv6のデュアルスタックも可能

Page 11: B lack jumbodog 運転と改造のすすめ

トレース表示

サーバとクライアント間のデータを表示

SEND サーバ送信データ

RECV クライアント送信データ

Page 12: B lack jumbodog 運転と改造のすすめ

サービス起動

メニューからサービスの登録・起動などが可能です。

Page 13: B lack jumbodog 運転と改造のすすめ

設定の勘所(3ステップ)

サーバを使用する(必須)

ACL設定する(必須)

サーバごと必要なオプションを指定

STEP1

STEP2

STEP3

STEP3の設定で、必須のものが不足している場合は、明確なエラーが表示されますので、安心して使用してみて下さい。

Page 14: B lack jumbodog 運転と改造のすすめ

サーバを使用する

xxxサーバを開始するにチェック

STEP1

当該オプションを開く

Page 15: B lack jumbodog 運転と改造のすすめ

ACLを設定する

デフォルトでALL Deny

誰も接続できません

1.各サーバごとオプションの最後のページ「ACL」

2.アドレスを追加

3.指定のみを「許可」/「禁止」に設定する

STEP2

Page 16: B lack jumbodog 運転と改造のすすめ

サーバ毎の設定 STEP3

・Webサーバ ドキュメントルート、CGI、SSI、WebDAV、alias、認証・・・・

・FTPサーバ ユーザ作成、バナーメッセージ、SYST、仮想フォルダ

・DNSサーバ ルートキャッシュ、再帰要求、SOAレコード、リソース追加・・・

・HTTPプロキシサーバ 上位プロキシ、キャッシュ、URL制限、コンテンツ制限・・・

・リモート制御 パスワード、Listenポート・・・

・DHCPサーバ 配布するアドレス範囲、DNSサーバ、リース時間、MAC制御、WPAD・・・

必須は赤字のみ、その他は、取りあえずデフォルトのままでOK

Page 17: B lack jumbodog 運転と改造のすすめ

3ステップの例外

1つのサーバDLLで複数サーバを設定できる場合は、

「サーバの追加と削除」が必要

現在は、「Web」と「トンネル」のみ

Page 18: B lack jumbodog 運転と改造のすすめ

3ステップの例外(Webの例)

「追加と削除」で複数のサーバ

を作成できる

メニューが増減する

Page 19: B lack jumbodog 運転と改造のすすめ

設定のための参考

http://www.ssapporoworks.ne.jp/spw/bjd/support.html

Page 20: B lack jumbodog 運転と改造のすすめ

Web・DNSサーバの設定例

•デモ

Page 21: B lack jumbodog 運転と改造のすすめ

プログラムの

構造と改造要領

Page 22: B lack jumbodog 運転と改造のすすめ

コードの展開と再構築

bjd-src-x.x.x.zip ソース

開発環境が構築済の場合は、BJD.slnをダブルクリック

そのまま再構築(F5)

Page 23: B lack jumbodog 運転と改造のすすめ

NUnitの参照

テストプロジェクトは、nunit.feameworkを参照している

のでNUnitが無い場合、エラーとなります。

エラーとなるTestプロジェクトを 全部削除する。 BJDの構築には影響なし

NUnitをインストールする

Page 24: B lack jumbodog 運転と改造のすすめ

Sampleサーバ(雛形)

構築(F5)すると「SAMPLEサーバ(Z)」を見つけることができます。

SampleServer.dllを配布していないので、

バイナリ配布物では見えません

ソースコードにはSampleServerというプロジェクトが存在します。

Page 25: B lack jumbodog 運転と改造のすすめ

Server.cs (サーバ本体)

partial class Server : OneServer {

public Server(Kanel kanel, string nameTag, OneBind oneBind)

:base(kanel, nameTag,oneBind) { } //サーバ生成(BJD起動・設定変更)

public override void _dispose() { } //サーバ破棄(BJD停止・設定変更)

public override bool _before_loop() { return true; } //サーバ起動

public override void _after_loop() { } //サーバ停止

//接続毎

override public void _subThread(SockObj sockObj) {

TcpObj tcpObj = (TcpObj)sockObj;

//切断

}

}

1.接続単位のサーバ動作を記述

2.前処理等は、オーバライドメソッドを利用

Page 26: B lack jumbodog 運転と改造のすすめ

Log.cs (ログ文字列)

partial class Server {

public override string GetMsg(int messageNo) {

switch (messageNo) {

case 1:return kanel.Jp ? “日本語” : “English”;

//この形式でログ用のメッセージ追加

}

return “unknown”;

}

} 1.ログ出力文字列の定義 ログとして出力したい文字列を番号で指定する 基底クラス(OneServer)でLoggerを初期化する際、delegateとして渡される

Page 27: B lack jumbodog 運転と改造のすすめ

Option.cs (オプション設定)

public class Option : OneOption {

//メニューに表示される文字列

public override string JpMenu { get { return "SAMPLEサーバ(&Z)"; } }

public override string EnMenu { get { return "&Sample Server"; } }

public Option(Kanel kanel, string path, string nameTag)

: base(kanel, path, nameTag, true/*ACL*/) {

//「useServer」オプションは必須

Add(new OneVal("useServer", false, CRLF.NEXTLINE,

new CtrlCheckBox((kanel.Jp) ? "SAMPLEサーバを使用する" :

"Use Sample Server")));

{//PAGE 基本設定 ////////////////////////////////////////////////////////////////////////////////

・・・・・・・・・・・・・・・・・・・・・・・・

1.メニューの表示文字列

2.オプション設定ダイログ初期化

サーバ共通オプション

ページ構成

コントロール変化時の処理

Page 28: B lack jumbodog 運転と改造のすすめ

主要クラス

OneOption

オプション基底

Option

オプション

OneServer

サーバ基底

TreadBase

スレッド起停

Server

サーバ

ListOption

オプション一覧

karnel

BJDカーネル

-------------------

+o : ListOption

+s : ListServer

ListServer

サーバ一覧

*.dllを検索し

OneOptionを列挙する ListOptionを元にOneServerを列挙する

BJD.exe

SampleServer.dll

Page 29: B lack jumbodog 運転と改造のすすめ

サーバスレッド

//Server.cs

partial class Server : OneServer {

//接続毎

override public void _subThread(SockObj sockObj) {

TcpObj tcpObj = (TcpObj)sockObj;

//切断

}

}

1接続単位の処理をここで記述する

接続先(クライアント)との処理はsockObjを使用する

Page 30: B lack jumbodog 運転と改造のすすめ

SockObj クラス

SockObj

TcpObj UdpObj

//1行受信

byte [] LineRecv(…)

string AsciiRecv(…)

//1行送信

int LineSend(byte[] buf, …)

Int AsciiSend(string str,…)

//送信

void SendTo(byte [] buf)

//受信

Bool ReceiveFrom(…)

//接続元IP

Ip RemoteAddr

//接続元ホスト

String RemoteHost

TcpObj若しくはUdpObjにキャストして作業する

Page 31: B lack jumbodog 運転と改造のすすめ

ログ出力

//Server.cs

override public void _subThread(SockObj sockObj) {

TcpObj tcpObj = (TcpObj)sockObj;

Logger.Set(LOG_KIND.NOMAL, tcpObj, 1, "テストメッセージ");

//Log.cs

public override string GetMsg(int messageNo) {

switch (messageNo) {

case 1:return kanel.Jp ? “日本語” : “English”;

Page 32: B lack jumbodog 運転と改造のすすめ

Logger クラス

Logger

--------------------------

--------------------------

+Set ( )

//コンストラクタ

public Logger(…GetMsgDelegate getMsg)

//ログ出力

void Set(LOG_KIND logKid,SockObj sockObj,int messageNo,string detailInfomation)

LOG_KIND 種類 ERROR,NOMAL,DETAILset

messageNo メッセ―番号 GetMsg()で定義

detailInfomation 詳細情報(任意)

OneServer

サーバ基底

--------------------------

#Logger : Logger

Server

サーバ

基底クラスで定義されているLoggerを使用し、Logger.Set(…)で出力する

Page 33: B lack jumbodog 運転と改造のすすめ

メニュー文字列

//Option.cs

public class Option : OneOption {

//メニューに表示される文字列

public override string JpMenu { get { return "SAMPLEサーバ(&Z)"; } }

public override string EnMenu { get { return "&Sample Server"; } }

Page 34: B lack jumbodog 運転と改造のすすめ

ACL有効・無効

public class Option : OneOption {

public Option(Kanel kanel, string path, string nameTag)

: base(kanel, path, nameTag, true/*ACL*/) {

Page 35: B lack jumbodog 運転と改造のすすめ

Optionのコンストラクタ

public class Option : OneOption {

public Option(Kanel kanel, string path, string nameTag)

: base(kanel, path, nameTag, true/*ACL*/) {

Add(new OneVal()…);

{//PAGE 基本設定 ////////////////////////////////////////////////////////////////////////////////

Add(new OneVal()…..

}//PAGE 基本設定 ////////////////////////////////////////////////////////////////////////////////

Init();//ValListの初期化

}

OneValをAdd()してInit()する

値オブジェクトをリストに列挙して初期化する

Page 36: B lack jumbodog 運転と改造のすすめ

OneVal(値)クラス

OneOption

--------------------------

-ar : ListVal

--------------------------

-Add (OneVal )

ListVal

--------------------------

--------------------------

+ CreateCtrl()//Ctrl生成

//リモート対応

OneVal

--------------------------

+Name:string

+Value:obj

--------------------------

- ToReg() //保存

- FromReg() //読込

List<OneVal>

Option

オプション OneValの値として

ListValを保持できる

public OneVal(

string name,//名前

object defaultValue,//デフォルト値

CRLF crlf,//改行指定

OneCtrl oneCtrl) //コントロール

Page 37: B lack jumbodog 運転と改造のすすめ

OneCtrl(コントロール)クラス

OneCtrl

CtrlTextBox CtrlCehckBox Ctrlint CtrlMemo

CtrlTabPage

CtrlGroupBox public CtrlTextBox(string help, int width,bool hidden=false)

public CtrlCheckBox(string help)

public CtrlInt(string help, int len)

….

コントールの種類ごとにコンストラクタが違う

インテリセンスの言う通り・・・・

Page 38: B lack jumbodog 運転と改造のすすめ

必須オプション

//「useServer」オプションは必須

Add(new OneVal("useServer", false, CRLF.NEXTLINE

, new CtrlCheckBox("SAMPLEサーバを使用する"));

//「AppendServerOption」は必須

PROTOCOL_KIND protocolKind = PROTOCOL_KIND.TCP;

int port = 9999;//ポート番号

int timeout = 30;//タイムアウト

int multiple = 10;//同時起動数

AppendServerOption(list, protocolKind,port, timeout, multiple);

これらのオプションは、必ず存在するという前提で各種の動作が組み立てられている

Page 39: B lack jumbodog 運転と改造のすすめ

オプションの使用

//オプション値の取得

var aaa = (string)OneOption.GetValue("aaa");

//Option.cs

Add(new OneVal("test01", "サンプル",CRLF.NEXTLINE,

new CtrlTextBox("テストテキスト", 300));

全てのオプション値は、GetValue(“name”)で取得できる

データの種類によってキャストが必要

Page 40: B lack jumbodog 運転と改造のすすめ

オプションのキャスト例

//CtrlInt

var port = (int)OneOption.GetValue("port");

//CtrlCheckBox

var detail = (bool)OneOption.GetValue("detail");

//CtrlRadio

var authType = (int)OneOption.GetValue("authType");

//CtrlComboBox

var matching = (int)OneOption.GetValue("matching");

Page 41: B lack jumbodog 運転と改造のすすめ

Sampleサーバの修正

•デモ

Page 42: B lack jumbodog 運転と改造のすすめ

[付録]サーバ名の変更 (1)

SampleServerのフォルダをコピーして名前を変更

プロジェクトを開いて名前を付けて保存

(プロジェクト名を変更)

Page 43: B lack jumbodog 運転と改造のすすめ

[付録]サーバ名の変更 (2)

プロジェクトのプロパティで

「アセンブリ名」及び「既定の名前空間」を変更

Server.cs Log.cs Option.csの

名前空間を修正

Page 44: B lack jumbodog 運転と改造のすすめ

[付録]サーバ名の変更 (3)

プロジェクトを閉じて不要ファイルを削除

SampleServer.csproj

Sample.sln

Sample.suo

Option.csでメニューに表示される文字列を修正

Page 45: B lack jumbodog 運転と改造のすすめ

[付録]サーバ名の変更(4)

BJD.slnを開き直して作成したプロジェクトを追加する

再構築(F5)

Page 46: B lack jumbodog 運転と改造のすすめ

ご清聴ありがとうございました。

2011.11.19 by sapporowroks