C#&.NET Framework 4.0 で作り直した
簡易的な TFTP サーバです
2011/06/29
.NET Framework2.0 版(ver1.0.0.0) : 最初のバージョン
ver1.0.0.0 stftpnet.exe
2011/06/29
VB6/COM 版の最終バージョン(ver1.0.0.4) : COMがロードできない場合、起動しないようにした
ver1.0.0.1 sTFTPcom.dll
ver1.0.0.4 sTFTPs.exe
2008/05/24
GUI のアイコンを変更した
2007/11/08
sCOMmon.dll の再コンパイルに伴い再コンパイルした
2006/08/25
sCOMmon.dll のバグ修正に伴い再コンパイルした
2006/08/20
sCOMmon.dll の関数追加に伴い再コンパイル(sTFTPcom.dll)した
ReleaseMiniSize でコンパイルした時に、プリプロセッサ宣言の箇所で「_ATL_MIN_CRT」を削除した(sTFTPcom.dll)
sError.h での定義値の仕様変更
2003/08/23
致命的な各種バグの修正と、自分の IP アドレス指定をコンボボックスにした
レジストリ登録用のバッチファイルを同梱
ver1.0.0.1 sTFTPcom.dll
ver1.0.0.2 sTFTPs.exe
2003/03/25
最初のバージョン
ver1.0.0.1 sTFTPcom.dll
ver1.0.0.1 sTFTPs.exe
内容 (.NET Framework2.0 版)
単純な簡易 TFTP サーバです。
通常の TFTP では、以下のようになります。
TFTP サーバへのパケット (クライアント{high}->サーバ{UDP/69})
TFTP サーバからの応答パケット (サーバ{high}->クライアント{high})
後は、high - high ポート間の通信
この簡易 TFTP サーバでは、常にUDP/69 から応答を返すようにしています。
(または、別のポートを指定することも可能)
RFC 的には問題ありませんが、ちょっと特異な実装をしています。
旧版と異なり、exe 一本となりました。
ソースコードの使い方 (.NET Framework2.0 版)
sTFTPserver.lzh の net2.0\visualstudio2010 以下に MS-VisualC# のプロジェクトがあります。
免責など
著作権はとりあえず保持します。
このソフトを使用したことによって生じた、
いかなる損害についても責任は持ちません。
ソースコードについても、各自の責任において、
自由にいじってくれてもいいです。
DownLoad
(sTFTPserver.lzh as 132,365byte) (
sTFTPserver.lzh.base64
)
内容 (VB6/COM 版) (旧版)
単純な簡易 TFTP サーバです。
同時接続は、1ユーザに限定されています。
(複数ユーザも可能だけど、面倒なので...)
通常の TFTP では、以下のようになります。
TFTP サーバへのパケット (クライアント{high}->サーバ{UDP/69})
TFTP サーバからの応答パケット (サーバ{high}->クライアント{high})
後は、high - high ポート間の通信
この簡易 TFTP サーバでは、常にUDP/69 から応答を返すようにしています。
RFC 的には問題ありませんが、ちょっと特異な実装をしています。
TFTP についてのメモ
TFTP パケットの解析処理の大半は、同梱の sTFTPcom.dll が行なっています。
ファイル構成
sTFTPcom.dll
VisualC++ で書かれた COM で、TFTP パケットの処理を担当している
sTFTPs.exe
VisualBASIC で書かれた TFTP サーバのユーザインターフェイス部とネットワーク送受信を担当
source 以下
上記のソースコードが収められています
To DO List (VB6/COM 版) (旧版)
クライアントが指定するファイル名に「..\」を使う事で、ディレクトリ・トラバーサルというセキュリティ上の問題があります。
一時的な対策として GetFileName() を使って sTFTPcom.dll を用いる側で処理してください。
sTFTPs.exe では、処理していないです。
(どうせ、誰も使わないだろうから...気が向いたら対応しようかなぁ)
ASCII/BINARY モードに非対応
常に BINARY モードです。つまり、データには手を加えていない。という事です。
というか、サーバ側では改行変換しなくてもよさげな雰囲気(他の TFTP サーバの動作を見ていたら...)
まぁ、
PageBrowser
などでユーザが手動で処理してください。
同時接続ユーザは1ユーザだけです。
同時複数ユーザの接続もできないわけではないけど、....メンドイっす。
メソッド一覧 (sTFTPcom.dll) (VB6/COM 版) (旧版)
オブジェクト呼び出し
Set Obj = CreateObject("sTFTPCom.TFTP")
FirstPack(VARIANT vin, VARIANT vin1,signed long *lout)
第一引数 : 入力データ(バイナリの配列をラップした VARIANT 型である事を想定しています)
第二引数 : ルート・ディレクトリの絶対パス(文字列をラップした VARIANT 型である事を想定しています)
戻り値(第三引数) :
1: 読み取りモード
2: 書き込みモード
負数 : なにがしかのエラー
クライアントから受信した最初のパケットを第一引数に与えてください。
読み取りモードの場合、GetData() 関数で取り出せるメモリ領域に sTFTPcom.dll 自体がファイルを読み取り格納します。
書き込みモードの場合、sTFTPcom.dll は、次以降の SetDat() 関数によるデータ受信を待っています。
GetData(VARIANT *vout)
引数なし
戻り値(第一引数)
読み取りモード時の場合のファイル内容を受信(BYTE 配列)します。
sTFTPcom.dll の立場としては、後はそちら側で、制御しつつデータ送信してください。っ心境です。
適切に使わないと、UBound(戻り値) すると「-1」なんて値になります。
(例えば、読み取りモードでないのに、このメソッドを発行した場合など...)
SetData(VARIANT vin,signed long *lout)
第一引数 : 入力データ(バイナリの配列をラップした VARIANT 型である事を想定しています)
書き込みモードの場合、クライアントからの二番目以降のデータをSetData へ渡します。
データの型は、VARIAT 型でラップされた BYTE 配列です。
sTFTPcom.dll の立場としては、データをメモリ領域に格納していきます。
最後のパケットであると判断した場合(パケット長が 512 以下である)に、溜め込んだメモリ領域のデータをファイルへ書き出します。
GetFileName(VARIANT *vout)
引数なし
戻り値(第一引数)
読み取りモード、書き込みモード時のファイル名を返します。
VARIANT 型にラップされた文字列型で返します。
インストール方法 (VB6/COM 版) (旧版)
ここ
から sCOMmon.dll をダウンロードして、これをシステム・ディレクトリ(%SystemRoot%\System32)にコピーします。
ダウンロードしたファイルを解凍しします。
(LHAは、吉崎栄泰氏が、著作権を所有)
sTFTPcom.dll を任意のディレクトリにコピー。
コピーされたディレクトリで、regsvr32.exe を実行して sTFTPcom.dll をレジストリに登録。
(同梱されている regsvr32.bat を sTFTPcom.dll と同一ディレクトリにコピーして実行することでも可能。
以上で、
VBScript,JScript,VisualBASIC にて、この COM コンポーネントを利用可能。
最後に sTFTPs.exe を起動するだけです。
sTFTPs.exe の説明は、GUI なため、省略します。
必要な環境(sTFTPs.exe) (VB6/COM 版) (旧版)
MS-VisualBASIC6.0 SP5 でコンパイルしています。 ディストリビューション・ウィザードによると...
MSWINSCK.OCX
VB6ランタイム OLE オートメーション一式
VB6JP.DLL
VB6STKIT.DLL
WINSKJP.DLL
が必要なファイルだと、主張しているようです。
それと、sTFTPcom.dll(同梱) が必要です。
sTFTPcom.dll には、
sCOMmon.dll
が必要です。
アンイストール方法 (VB6/COM 版) (旧版)
RegSvr32 コマンドの /u オプションを用いて、sTFTPcom.dll をレジストリから削除して、sTFTPcom.dll と sTFTPs.exe を削除すればいいです。
sCOMmon.dll が不要ならそれを削除します。
ソースコードの使い方 (VB6/COM 版) (旧版)
sTFTPserver.lzh の source 以下に MS-VisualC++ ver6.0 SP5 の COM のプロジェクト と sTFTPs.exe の Visual BASIC ver6.00 SP5 のプロジェクトがあります。
mail to active@window.goukaku.com