b lack jumbodog 運転と改造のすすめ
TRANSCRIPT
![Page 1: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/1.jpg)
BLackJumboDog 運転と改造のすすめ
2011.11.19 by sapporowroks
![Page 2: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/2.jpg)
自己紹介
• ハンドル SIN/古谷誠進
• Twitter @furuya02
• 仕事 某社でシステムサポートみたいな感じ
• 住居 札幌
• 年齢 アラフィフ
オヤジなので、新しいもの・・・
(SNS、スマフォ、F#などなど)よく分かりません。(悲)
![Page 3: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/3.jpg)
アジェンダ
• BJD紹介と設定の勘所 各種機能の紹介
3ステップ、Web、DNSサーバの設定例
•プログラムの構造と改造要領 SAMPLEサーバ・主要クラス
Socket、オプション、ログの使用方法
運転
改造
![Page 4: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/4.jpg)
BJD紹介と設定の勘所
![Page 5: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/5.jpg)
BlackJumboDogとは
BlackJumboDogとは、Windowsで動作するフリーの簡易サーバです。
Web、メール、プロキシ、FTP、DNS、DHCPサーバなどが利用可能です。また、リモートで制御・メンテナンスが行えます。
【利用の制限など】
営利外の場合は 制限なし。
営利目的の場合は、連絡下さい。
過去に悪質業者に無断利用され、問題になりました。
悪意がないと判断される場合、承諾させて頂いています。
![Page 6: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/6.jpg)
インストール
デフォルトで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 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/7.jpg)
ファイルの種類
BJD.exe 本体
BJD.exe.config アプリケーション構成ファイル
Option.def 設定のデフォルト値
*.ini オプション保存ファイル (削除で初期化)
*Server.dll 各種サーバ機能 (14種類)
*.Log ログファイル
named.ca ルートサーバ一覧(DNSサーバ用)
examlpe.pfx SSL証明書サンプル(Webサーバ用)
![Page 8: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/8.jpg)
DLLを削除すると
資源節約
脆弱性リスク軽減
![Page 9: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/9.jpg)
リモート制御
「BJD.exe 接続先アドレス」で起動する
リモート側で、BJDで行うすべての操作が可能になり、遠隔制御ができます。
※リモートサーバを使用する設定が、あらかじめ必要です。
![Page 10: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/10.jpg)
IPv6設定
IPv6がインストールされていれば、IPv6でbindできます。
IPv4とIPv6のデュアルスタックも可能
![Page 11: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/11.jpg)
トレース表示
サーバとクライアント間のデータを表示
SEND サーバ送信データ
RECV クライアント送信データ
![Page 12: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/12.jpg)
サービス起動
メニューからサービスの登録・起動などが可能です。
![Page 13: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/13.jpg)
設定の勘所(3ステップ)
サーバを使用する(必須)
ACL設定する(必須)
サーバごと必要なオプションを指定
STEP1
STEP2
STEP3
STEP3の設定で、必須のものが不足している場合は、明確なエラーが表示されますので、安心して使用してみて下さい。
![Page 14: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/14.jpg)
サーバを使用する
xxxサーバを開始するにチェック
STEP1
当該オプションを開く
![Page 15: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/15.jpg)
ACLを設定する
デフォルトでALL Deny
誰も接続できません
1.各サーバごとオプションの最後のページ「ACL」
2.アドレスを追加
3.指定のみを「許可」/「禁止」に設定する
STEP2
![Page 16: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/16.jpg)
サーバ毎の設定 STEP3
・Webサーバ ドキュメントルート、CGI、SSI、WebDAV、alias、認証・・・・
・FTPサーバ ユーザ作成、バナーメッセージ、SYST、仮想フォルダ
・DNSサーバ ルートキャッシュ、再帰要求、SOAレコード、リソース追加・・・
・HTTPプロキシサーバ 上位プロキシ、キャッシュ、URL制限、コンテンツ制限・・・
・リモート制御 パスワード、Listenポート・・・
・DHCPサーバ 配布するアドレス範囲、DNSサーバ、リース時間、MAC制御、WPAD・・・
必須は赤字のみ、その他は、取りあえずデフォルトのままでOK
![Page 17: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/17.jpg)
3ステップの例外
1つのサーバDLLで複数サーバを設定できる場合は、
「サーバの追加と削除」が必要
現在は、「Web」と「トンネル」のみ
![Page 18: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/18.jpg)
3ステップの例外(Webの例)
「追加と削除」で複数のサーバ
を作成できる
メニューが増減する
![Page 19: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/19.jpg)
設定のための参考
http://www.ssapporoworks.ne.jp/spw/bjd/support.html
![Page 20: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/20.jpg)
Web・DNSサーバの設定例
•デモ
![Page 21: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/21.jpg)
プログラムの
構造と改造要領
![Page 22: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/22.jpg)
コードの展開と再構築
bjd-src-x.x.x.zip ソース
開発環境が構築済の場合は、BJD.slnをダブルクリック
そのまま再構築(F5)
![Page 23: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/23.jpg)
NUnitの参照
テストプロジェクトは、nunit.feameworkを参照している
のでNUnitが無い場合、エラーとなります。
エラーとなるTestプロジェクトを 全部削除する。 BJDの構築には影響なし
NUnitをインストールする
![Page 24: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/24.jpg)
Sampleサーバ(雛形)
構築(F5)すると「SAMPLEサーバ(Z)」を見つけることができます。
SampleServer.dllを配布していないので、
バイナリ配布物では見えません
ソースコードにはSampleServerというプロジェクトが存在します。
![Page 25: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/25.jpg)
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 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/26.jpg)
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 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/27.jpg)
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 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/28.jpg)
主要クラス
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 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/29.jpg)
サーバスレッド
//Server.cs
partial class Server : OneServer {
//接続毎
override public void _subThread(SockObj sockObj) {
TcpObj tcpObj = (TcpObj)sockObj;
//切断
}
}
1接続単位の処理をここで記述する
接続先(クライアント)との処理はsockObjを使用する
![Page 30: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/30.jpg)
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 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/31.jpg)
ログ出力
//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 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/32.jpg)
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 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/33.jpg)
メニュー文字列
//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 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/34.jpg)
ACL有効・無効
public class Option : OneOption {
public Option(Kanel kanel, string path, string nameTag)
: base(kanel, path, nameTag, true/*ACL*/) {
![Page 35: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/35.jpg)
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 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/36.jpg)
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 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/37.jpg)
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 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/38.jpg)
必須オプション
//「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 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/39.jpg)
オプションの使用
//オプション値の取得
var aaa = (string)OneOption.GetValue("aaa");
//Option.cs
Add(new OneVal("test01", "サンプル",CRLF.NEXTLINE,
new CtrlTextBox("テストテキスト", 300));
全てのオプション値は、GetValue(“name”)で取得できる
データの種類によってキャストが必要
![Page 40: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/40.jpg)
オプションのキャスト例
//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 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/41.jpg)
Sampleサーバの修正
•デモ
![Page 42: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/42.jpg)
[付録]サーバ名の変更 (1)
SampleServerのフォルダをコピーして名前を変更
プロジェクトを開いて名前を付けて保存
(プロジェクト名を変更)
![Page 43: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/43.jpg)
[付録]サーバ名の変更 (2)
プロジェクトのプロパティで
「アセンブリ名」及び「既定の名前空間」を変更
Server.cs Log.cs Option.csの
名前空間を修正
![Page 44: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/44.jpg)
[付録]サーバ名の変更 (3)
プロジェクトを閉じて不要ファイルを削除
SampleServer.csproj
Sample.sln
Sample.suo
Option.csでメニューに表示される文字列を修正
![Page 45: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/45.jpg)
[付録]サーバ名の変更(4)
BJD.slnを開き直して作成したプロジェクトを追加する
再構築(F5)
![Page 46: B lack jumbodog 運転と改造のすすめ](https://reader031.vdocuments.mx/reader031/viewer/2022013102/55accf8a1a28ab0b2c8b4863/html5/thumbnails/46.jpg)
ご清聴ありがとうございました。
2011.11.19 by sapporowroks