[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 05/09 19:49 / Filesize : 97 KB / Number-of Response : 416
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ネットワークプログラミング相談室 Port23



1 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 21:07:24 ]
主にソケットに関しての質疑応答スレッドです。

Programming UNIX Socket FAQ (日本語訳)
 www.kt.rim.or.jp/~ksk/sock-faq/indexj.html
Winsock Programmer's FAQ (日本語訳)
 www.kt.rim.or.jp/~ksk/wskfaq-ja/

関連リンクは>>2-10辺り
足りなかったら適当に付け足してね

前スレ
ネットワークプログラミング相談室 Port22
pc11.2ch.net/test/read.cgi/tech/1222603744/
関連スレ
Java ネットワークプログラミング 【教えて!】
pc11.2ch.net/test/read.cgi/tech/1086238859/

82 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 17:39:41 ]
>>81
WSACleanup()を呼ばなければならない。
main()で「return -1」とか、センスの悪そうなプログラムだね。


83 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 17:55:43 ]
呼ばなくてもOSがよろしくやってくれて問題起きることはなさそうだけどな。
malloc論争みたいなもんか。

84 名前:81 mailto:sage [2009/01/07(水) 18:12:54 ]
>>82-83
なるほど、ありがとうございます。
mallocについても調べてみます。

85 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 18:16:57 ]
MSDN的にはWSACleanup()は「must call」だそうだが、いまどきの
Windowsならたぶん実害はないっぽ。


86 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:06:17 ]
>>81
WSACleanup() はプログラム終了時に一度だけ呼べば良
いので(というか処理を継続するなら呼んではいけない
ので)、ソケット作成失敗とかそういう細々したエラー
では呼ばない方が良いと思う。

俺はアプリケーションデストラクタで呼ぶようにしてる。

87 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:11:20 ]
>>86
もとのコードを良く読みましょう。
main()からreturnしているのです。


88 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:29:36 ]
atexit

89 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:58:55 ]
どうせOSが開放するんだからWSACleanupは呼ばなくていいのでは?
なんかまずい事あるかな。

90 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:04:03 ]
呼ぶ必要はないと書かれてないなら呼んだ方がいいだろ



91 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 22:26:14 ]
>>86
> WSACleanup() はプログラム終了時に一度だけ呼べば良
> い

嘘書いてた(嘘って事でもないけど)。複数回
WSAStartup() を呼んだ場合は、同じ回数 WSACleanup()
を呼ぶ必要があるみたいだ(普通そんなことしないと思
うけどね)。

それからプログラムが通信処理継続中に WSACleanup()
がエラーを返すことがあるって書いてあるんだけど、こ
れは自前でソケットを管理して終了時に shutdown() し
て回った方がいいと思う。

92 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 23:27:17 ]
まあ現実的にはその辺の作法はWin16時代に必要とされていただけで
Win32だと、OSや他のプロセスに影響が出ることはまずないでしょ。
でも、malloc後のfreeは「しなければいけない」とは書いてないが
WSACleanupは「(Startupと同じ回数)しなければいけない」と書いてあるわけで
それに従わないのはナンセンスとしか言いようが無いわな。

>91
>普通そんなことしない
ライブラリの開発者が自身で呼ぶというのはあるよ。
ドキュメントに「このライブラリを使う前に必ずWSAStartupを呼べ」
と書いておくより良い、という判断で。

93 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 15:12:07 ]
プロセス終了時に一回呼び出すだけで良いんだから、
ぐだぐだ言わずに書いとけや、とも思うしね。それで困ることなんてないでしょ。

malloc/free は一プロセス内で何百・何千回も使われることも珍しくないし、
する必要がないものも全部freeしろ、ってのは確かにナンセンスな場合もあるわけなので、
malloc/freeと同一の議論はできないと思う。


94 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 17:48:29 ]
mallocの場合は自分でfreeするよりOSがごっそり切り離すほうが効率いいんじゃないの?と信じてあえて書かない

95 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 17:58:50 ]
終了前freeはまあモダンな仮想メモリ実装したOSじゃ意味ねーな

どうせプロセスが終了したらページごと剥がされるだけなのに
ヒープをちまちま弄くって、そのためにページフォルトを
わざわざひき起こしたりするのは馬鹿げている

まあ、C++のような言語では、好む、好まざるに関わらず
デストラクタによって無駄な後片付けが走ってしまうだろうがな

96 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 18:36:36 ]
終了時のfreeのせいでアプリのパフォーマンスに問題が出るケースなんてあり得ないので
全部freeする行儀の良いスタイルを身につけておくのが無難だと思うがなあ
# C++ではちゃんとdeleteしないとデストラクタが走らないので問題になるかもしれないし

本当にちゃんと解放処理をしっかり書ける上で
意図的にfreeをサボってるならまあ別にいいけれども


97 名前:96 mailto:sage [2009/01/08(木) 18:37:10 ]
スレタイをよく見たらスレ違い気味だったね、すまん

98 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 23:45:10 ]
>Winsock Programmer's FAQ (日本語訳)
>www.kt.rim.or.jp/~ksk/wskfaq-ja/

ここを読んでWinsockについて勉強しているのですが Winsock における
オーバーラップI/Oとは、どうゆう概念(仕組み?)でしょうか?

セッション毎にスレッドを作らなくても、数千〜数万のコネクションを効率的に
処理できると説明にあるのですが、どうゆう仕組みでそれが実現されているのか
いまいちイメージができないです・・・

99 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 01:59:17 ]
>>98
自己解決しました。(Winsock IOCPでGoogle検索したら
欲しい情報がいっぱい見つかりました)

100 名前:デフォルトの名無しさん [2009/01/09(金) 09:54:07 ]
boost::asioってここのスレ的にどうなの?全く話題に出ないが。
boostスレはともかくとして




101 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 19:19:07 ]
boostスレの方がよさげ

102 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 22:23:40 ]
ttp://www.nicovideo.jp/watch/sm5774030
このスレの住人的にはコレどうですか?

103 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 04:06:09 ]
さあ・・
ハードで作ったほうが面白いのでは

104 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 07:38:48 ]
ttp://jp.youtube.com/watch?v=SmHjQMki32E&NR=1
このスレの住人的にはコレどうですか?

105 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 08:32:38 ]
さあ・・
隣の芝生は赤かったってことでは

106 名前:デフォルトの名無しさん [2009/01/11(日) 20:10:55 ]
std::istream的なソケットストリームってなぜ作られないんですかね?

107 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:40:47 ]
使いにくいからじゃね?selectとかasyncとかしたいし。
そうでない単純なものなら自分でサクッと作れる(たぶん)し。

108 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 20:51:16 ]
>>106
非同期な操作ができないとsocketには向かない。
そういうクラスが欲しいならboost::asioとか調べてみるべし

109 名前:デフォルトの名無しさん [2009/01/11(日) 20:51:28 ]
原理的に不可能ではないってことですか?

110 名前:デフォルトの名無しさん [2009/01/11(日) 20:53:38 ]
>>108
近い将来32コア位が普通になるらしいので、むしろ非同期のほうが
ソケットに向かなくなるのかななどと思いまして。



111 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 21:01:58 ]
socketのようにいつデータが受信されるかわからないものを同期で組むのは面倒だぞ。


112 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 21:06:03 ]
>>110
1スレッド1コネクションでも問題は無いけどね。ネットワークプログラミングの難しさはエラー処理にある。

113 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 21:17:33 ]
>>109
可能だよ。現実にコネクションを標準入出力にリダイレクトするソフトがある。

114 名前:デフォルトの名無しさん [2009/01/11(日) 21:25:09 ]
boost::asioは調べてみたことがあるんですが、あれはパフォーマンスのために
非同期対応にしてるけど結果的にうまくいっていない感じでしたね。

115 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 21:28:19 ]
>>114
それってどういうこと?
非同期モデルは採用したが、それに見合うパフォーマンスが出ていないという話なのか
iostreamベースのラッパーとの相性が悪いという話なのか

116 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 21:29:02 ]
iostreamはともかく
stdioのFILEとして扱うのはそれなりには使われてるってば。

117 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 21:29:55 ]
>>116
それはブロッキングでやってfdopen()して
タイムアウトはalarm()でって古式ゆかしき方法だよな

118 名前:デフォルトの名無しさん [2009/01/11(日) 21:50:21 ]
>>115
重複IOを活かす為の苦心が感じ取れるが、複雑化してしまった感じ。

119 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 21:51:19 ]
>>118
ああ、早い話が綺麗じゃないってことか

120 名前:デフォルトの名無しさん [2009/01/13(火) 18:39:57 ]
socketでサーバライブラリ的なものを作ってます。
Accept後にThread作ってそこで受信応答を行うという、
ごく一般的な方法なのですが、
現状では、階層の一番深いところで受信した
データの解釈と応答データの作成が必要になってしまい、
ライブラリとして意味がなくなってしまいます。
ライブラリには送受信だけさせ、
受信データの解釈と応答バッファの作成は
もっと上の階層で行いたいのですが、
一般的にはどういう方法で行うのでしょうか?




121 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 19:40:06 ]
他人に通じる文章書くようにしましょう。

階層の深いところって何の階層だ?
ライブラリとして意味がなくなるのが自明みたいに書いてるが、
他人にはさっぱり

122 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 19:51:24 ]
サーバークラスなりが、コールバック動作をするコードになってないってことじゃね。

123 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 23:35:09 ]
>>120
こういうのを一般化する時の問題はデータの区切りの判定です。 
どこがデータの区切りで、どこまでデータを読んでから上層に渡せばいいかは
プロトコル依存だからです。 パケットのヘッダに長さが埋め込まれている場合、
CR/LFでメッセージの区切りが指定されている場合等、ひどい場合は階層構造の
データを深くパージングしないと切れ目が分からないなどと言う物も。

>>122
が言う様に普通はコールバックを上層が用意し、データの区切りの判断を
これらのコールバックを呼んで判断するという方法です。 区切りの方法によって
どういうコールバックのインターフェースを用意すればいいかは自分で考えましょう。

124 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 00:32:59 ]
コールバックって・・・
クラスって書いてんじゃん

125 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 00:51:22 ]
>>124
もしかしてプログラミング初心者?

例えばイベントハンドラで何か動作をさせる、という時に
イベント制御ルーチンにイベントハンドラを登録して
そのイベントハンドラに制御を移すことを「コールバック動作」と言うんだよ。

126 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 01:09:20 ]
例えばC++で書くなら
class EventLister {
virtual int OnAccept() = 0;
virtual int OnReveive() = 0;
...
};
class Server {
 EventListerner& handler;
 AsyncServer(EventListerner& handler) : handler(handler) {}
 void receiveexec() { // select後に呼び出される
  handler.OnReceived();
 }
};

のような造りがコールバック動作でしょ。
これで、EventListenerを継承して自分のやりたいことをやるものを作り
コンストラクタに渡すようにすれば、
必要なときにServerからコールバックされるように出来るでしょ。

127 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 01:17:13 ]
メッセージのクラスと応答のクラスを作ればいいんじゃね

128 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 02:57:49 ]
>>123
SOCK_STREAMじゃなくてSOCK_RAWを使ってるってこと?

129 名前:デフォルトの名無しさん [2009/01/14(水) 09:07:00 ]
ふぁひょふっへって、でへばいいべおいいんじゃねぇぇっぇええぇええの?

130 名前:123 mailto:sage [2009/01/14(水) 09:41:10 ]
>>124
あ、ごめん、 そうだね。 じゃ、C++的には長さ、区切り判定をするメソッドを
virtualで定義し、実装をサブクラスで行うのがいいですね。
>>128
TCP(SOCK_STREAM)という前提で私は話してました。 receiveで受け取ったデータはtcpの
データグラムと一致している保証もないし、データグラムが上位階層の送信単位と一致する
保証もないので切り分けは上位階層の知識が必要になります。 >>120さんはそこらへんの
必要性は分かっているという印象は受けました。



131 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 10:03:27 ]
>>126
え、それをコールバックって言っちゃうの?

132 名前:120 [2009/01/14(水) 10:12:36 ]
みなさん回答ありがとうございます。Cっぽくコールバックでやろうと思ってましたが
>>126を参考にしたいと思います。

133 名前:120 [2009/01/14(水) 10:23:30 ]
デリミタだけは確定しているため、そこだけはスレッドの中でやってしまうつ
もりです。デリミタが来たら受信を終了しコールバックで解釈、応答バッファを作成しも戻ってきたところで、sendさせます。

134 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 10:27:04 ]
>>131
ja.wikipedia.org/wiki/%E3%82%B3%E3%83%BC%E3%83%AB%E3%83%90%E3%83%83%E3%82%AF_(%E6%83%85%E5%A0%B1%E5%B7%A5%E5%AD%A6)#.E5.AE.9F.E8.A3.85

135 名前:デフォルトの名無しさん [2009/01/14(水) 13:45:30 ]
Java臭がする糞ースだと思った。

136 名前:デフォルトの名無しさん [2009/01/14(水) 16:52:06 ]
この問題なんですが、解答あってるでしょうか?

msgbox "変数aの値は" & a & " , 変数bの値は" & b

この文を先頭から2つ目の&までとその後の部分に分け、正しく2行で記述しなさい。
また、変数a,bの値がそれぞれ10,20である場合に、実行したときに表示される
メッセージボックスの中の記述内容を書きなさい。

解答。

msgbox"変数aの値は" & a &
msgbox"変数bの値は" &b

変数aの値は  10
変数bの値は  20



137 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 16:55:56 ]
誤爆か

138 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 21:15:59 ]
ウンコマン

139 名前:デフォルトの名無しさん [2009/01/15(木) 10:24:38 ]
ネットワークプログラミングの究極の目的は
自分のPCにソフトをインストールしない
ということでしょうか?
つまり自分のPCにエクセルが入ってなくてもネットワーク経由でエクセルがつかえる
のように。
しかし、エクセルの入ってないPCと入っているPCをLANでつないでもエクセルは操作できませんでした。
ところが、詰将棋ソフトはPCに入ってなくてもLAN経由でできました。
これはどういうことなんでしょうか?

140 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 11:42:25 ]






















    






141 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 11:44:48 ]



























142 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 12:45:19 ]
>>139
>ネットワークプログラミングの究極の目的は
>自分のPCにソフトをインストールしない
>ということでしょうか?
>つまり自分のPCにエクセルが入ってなくてもネットワーク経由でエクセルがつかえる
>のように。

それはただのクラウドコンピューティングの一環。
ネットワークプログラムそのものに目的はないんじゃないか。
目的を達成する手段の一つとしてネットワークプログラミングがあるだけで。


>しかし、エクセルの入ってないPCと入っているPCをLANでつないでもエクセルは操作できませんでした。
>ところが、詰将棋ソフトはPCに入ってなくてもLAN経由でできました。
>これはどういうことなんでしょうか?

知るか。
ソフトの仕様による。
どうしても操作したけりゃRealVNCでも突っ込んどく?
チェケラッチョ
ttp://www.vector.co.jp/soft/win95/net/se324464.html

143 名前:デフォルトの名無しさん [2009/01/15(木) 22:00:55 ]
誰かWinsockでUDPで音声を送信して、受信して再生するプログラムのCかC++の
サンプルソースください。
ボイスチャットみたいなものを作ってみたいのです。

UDPで音声データを送信〜受信的なところまでは分かるのですが、
受信したものをどうやって再生するんだよ!という状態です。

1回ファイルに書き込んでそれを再生というのも冗長な気もしますし、
だからと言ってPlaySoundでもメモリ上から〜というのも
エンドレスで受信されるデータにどう対応して良いか分かりません。

ググっても、『音声や動画のようなものにはUDP!』というところまでしか出てきません。

ヒントでも参考URLでも良いのでお願い致します。

144 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 22:11:36 ]
「voice chat 使用言語」でググればいっぱい海外サイト出る

145 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 22:47:31 ]
>>144
ありがとうございます!
母国語以外を無意識に避けていて気付きませんでした!
私のような愚か者がいるから日本の国力が低下するのですね!
これからは他のことでも進んで他国語からも情報を得る努力をします!
1人でも国力底上げしてやるぜYEAH!!!!

146 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 13:24:15 ]
YEAH!!!!

147 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 19:14:35 ]
ふつーwave〜系APIとか、DirectSoundとか
DirectShowとか使うと思う。というか、受信した
データをどうするかはスレ違いか。

148 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 23:05:49 ]
>>143
>>102 javaだけどね。

149 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 23:14:56 ]
なにを言ってるんだ

150 名前:デフォルトの名無しさん [2009/01/17(土) 13:05:27 ]
質問です
WindowsのVC++でネットワークのアプリを作成しているのですが、通信速度を制限して通信する方法ってありますか?
例えば最大でも30kbpsまでしか速度を出さないように送受信するにはどうすればよいでしょうか?



151 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 13:12:15 ]
>>150
1秒毎に4kバイトずつsendを呼べばいいんじゃね?

152 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 13:14:18 ]
1. ネットワークドライバを作る
2. 例えば最大でも30kbpsまでしか速度を出さないように送受信する
3. そんなの作らずにあるもの使えばいいじゃん

153 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 13:35:52 ]
ダウンロードならBITS使うという手があるんだがなー

154 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 01:24:29 ]
>>151-153
d

155 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 15:38:38 ]


156 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 01:28:32 ]
なんかCやC++で作成してる人が多いみたいだけど、
サーバーで送受信部分をPHPとかで作ってる人って居ないの?

157 名前:デフォルトの名無しさん [2009/01/21(水) 10:25:56 ]
PHPでやる意味がない。

158 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 11:23:26 ]
そういやレンタル鯖にperlの串置いて踏み台にするとか昔流行ったな
まあphpは板違いだな

159 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 19:54:19 ]
パケットキャプチャしてみたがIPフラグメントがされてない
あきらかに64kb以上のデータを取得しているのにどうしてなんだ!

160 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 21:56:16 ]
1パケットって何バイトだった?




161 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 22:04:02 ]
バケラッタ!

162 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 22:28:43 ]
TCP送信に関して以下の認識でOK?

「デーーーーーーーータ」

データを分割
「データ」、「データ」、「データ」

IP付けて送信
IP head+TCP Head+「データ」 , IP he〜〜〜


それと、
IP head+TCP Head+「データ」から「デーーーーーーーータ」に
再構築するソース教えてくれ

163 名前:デフォルトの名無しさん [2009/01/21(水) 22:55:22 ]
「デーーーーーーーータ」

データを分割
「デーーー」 、「ーー」、「ーーータ」

IP付けて送信
IP head+TCP Head+「データ」 , IP he〜〜〜

受信
「ーーータ」、「ーー」、「デーーー」


164 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 23:04:55 ]
TCPはスライド窓だからターデはありえない


165 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 23:16:05 ]
http〜 001.zipをダウンロードしているとき(web閲覧時も
IPヘッダみてもFlagが分割不可になっているのはなぜ?
パケットの取得方法は、PacketFilterExtensionPtr関数。

166 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 00:19:29 ]
皆さん如何されているかアイデアを聞かせてほしいんですが

たとえば、不特定多数が使用するクライアント・サーバ型のソフト(MMO等)を作るとして、
データのやり取りはUDPで行うとします。
不正なデータを送られたり、受信したデータから不正な処理をされないためには
データを暗号化して通信する必要がありますが、そのキーを何処に隠すとよいと思いますか?

クライアント側で暗号化したデータをサーバで復号する、またその逆の場合、
クライアントはサーバと通信する為に、鍵を持っている必要がありますが
コード上やリソース上に持たせてしまうと、バイナリエディタなどからバレてしまう可能性があります。

ここで、脅威の対象を仮に
・28歳 男性 独身
・趣味はネトゲ(botツール常習者)
・プログラミングの知識は大学で習った程度、逆アセンブルなどは出来ない
・バイナリエディタなどでパラメータを触った経験はあり
とします。この人にクラックされない仕組みを作りたいです。

色々考えましたが堂々巡りです。

案1)通信確立用のキーをクライアントのコード上、またはリソース上に持たせ、
  通信確立はそのキーで行う。その後はサーバで新たなキーを発行する。
→そもそも通信確立用のキーがクラックされれば全く意味が無い

案2)時刻をパラメータに定期的にキーを生成する。
→クライアント・サーバで完全に時刻を同期する必要あり。実現不可能

案3)暗号化部分をdll化し、さらにそのdllを暗号化し、コード上で復号して呼び出す。
  dllを暗号化したキーはリソース化し、リンク
→トレースされたら意味なし

よいアイデアお待ちしてます。

167 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 00:26:50 ]
暗号についての教科書でも読め

168 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 00:30:47 ]
>>166
普通に非対称鍵暗号使えばいいんじゃ

169 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 00:32:48 ]
共通鍵方式であれ公開鍵方式であれ鍵の扱い方は教科書には載ってない

170 名前:166 mailto:sage [2009/01/22(木) 00:40:06 ]
>167-169

『コード上に載っている鍵をバイナリエディタなどで不正に読み出し、
正規とは別のデータを暗号化し、サーバからみたら「正常な」データを送りつける』のが
BOTツールだと思うので、対象鍵であれ非対象鍵であれ、
暗号化に使う鍵がばれてしまう事自体が問題だと思うんですが。

というか、世に出回っているネットワークプログラムは、どういう対策をとっているのだろうか・・



171 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 00:40:23 ]
>>166
通信確立用のキーがクラックされることを考えるなら、
復号直後のデータを抜かれるクラックも想定が必要ということ?

いずれにしても通信経路上の他人に隠すならともかく、
PCの所有者にその想定で隠すのは無理と思う

172 名前:166 mailto:sage [2009/01/22(木) 00:44:55 ]
>>171
幾ら対策してもMMOにBOTツールやアカウントハックが無くならないのはやはり仕方がないのでしょうか。
どれだけ厳重な金庫にお金を隠しても、金庫の鍵がそこにあれば泥棒は簡単に取っていけますからね。


173 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 00:50:25 ]
通信の傍受は防げてもプログラムのクラックはいたちごっこだな

174 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 03:48:20 ]
>>166
正規なクライアントだけが持っている情報は一切全く無い、と仮定
するけど、正規なクライアントだけ通信できるようにしたい、ってのは
原理的に不可能だと思う。

ただ、MMO なら、ユーザごとにアカウントとパスワードで接続してるので
それを秘密キーにすれば、正規クライアントかどうか判定はできるんじゃないかな

現実的には案1で十分だと思う。クライアントソフトのクラックは別途対策する
(nProtectとか)ことが多いかと


175 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 11:13:02 ]
中間者攻撃というのがあってだな…。

昔P2Pで適当なループ作って署名付けて二回回すってのを考えたけど
結論覚えてないや(w

176 名前:175 mailto:sage [2009/01/22(木) 11:14:40 ]
思い出した。↑の方法でも中間者攻撃対策にはならないんだった。

177 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 11:25:02 ]
正規のクライアントがクラックされてクローンを作られるのは防ぎようがないかな。

どうしても防ぎたければB-CASカードみたいな対タンパ性のあるハードウェアを
使うとか。

178 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 19:16:30 ]
>>168
ここで答え出てるだろ。
クライアントでランダムな非対称鍵作って
暗号化用の鍵を相手に渡す。

179 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 21:43:51 ]
MMOみたいな延滞厳禁な物に対して
暗号化を施すのも正直どうかと思うけどな

180 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 22:00:40 ]
暗号化コストなんて送受信に比べたらカスみたいなもんだろ



181 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 23:33:12 ]
共通鍵にしろ公開鍵にしろ
強度を高めようとしたら結構負荷がかかるぞ

そもそも暗号と高速化は相反する物だし

182 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 10:01:21 ]
暗号化コストは結構でかいよ。
LANでギガビットイーサ+SSHだとネットの性能に暗号処理がおいつかない。

性能が必要ならストリーム暗号かね。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<97KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef