1 :
デフォルトの名無しさん :
2005/09/30(金) 22:54:08
うんこ
3 :
デフォルトの名無しさん :2005/10/01(土) 01:26:18
10 :
4-9 :2005/10/01(土) 01:38:55
パタリロ〜クックロビン音頭 リンク切れだよ?
あ、そういえばその指摘前スレでもあったね。 次回からはテンプレから抜くべき?
コアラ
コアラ大将のTCP/IP入門のこと? 懐かしいなあ。俺も最初はあれ読んでプログラムしたよ。 ググると今でも見つかるんだね。 でも今みると <sys/file.h> とか bzero()/bcopy() とか errno != 14 とか gets() とか、ちといろいろ古い。 accept() の第3引数を初期化してなくて後で気づくのも、 入門にはどうなのかなあ。
(つづく)
と、発表しようと思っていた矢先、
errnoって古いのか? 今でもガンガン使ってるんだけど ナニがどう古いのかナニが今のトレンドなのか 教えてくれよ
errno != EFAULT
getsだけはやめたほうが良いと思うな
(σ・∀・)σ gets!!
>>18 errno じゃなくて != 14 の 14 がまずいんだべさ
>>22 なんだ、そっちか。安心したよ。
これでぐっすり眠れるぜ。
それが彼の最期の言葉となった
25 :
デフォルトの名無しさん :2005/10/03(月) 18:17:21
質問です。 TCP/IPではビッグエンディアンで送ることが定められているらしいのですが、 変換する処理時間が気になるので、リトルエンディアンで送受信しようと考えています。 これはアリでしょうか? 答えテンプレート @勝手にしろ A絶対駄目
>>25 ・変換する処理時間なんか通信時間に対して誤差程度
・ネットワークバイトオーダーに従っていちいち変換するコードで作っておくほうが
他のプラットフォームにそのプロトコルを実装したくなったときに話が速い。
・まあそれいったらバイナリでやるよりテキストにして転送するほうが安全ではある
27 :
25 :2005/10/03(月) 18:53:18
>>26 ありがとうございます。
参考にさせていただきます。
28 :
デフォルトの名無しさん :2005/10/03(月) 18:53:53
.Net Framework の System.Runtime.Remoting に関する質問はここでいいですか?
よくないです
えー
WSAAccept()で返ってきたソケットにWSA_FLAG_OVERLAPPED属性を 持たせたいんだけど、どうやるの?
属性はlistenするソケットのコピーじゃなかったか つーかOVERLAPPEDはデフォだったような
>>25 > TCP/IPではビッグエンディアンで送ることが定められているらしいのですが、
そんなことはない。
IETFでは、決めうちならばbigにすることが多いというだけ。決まってはいない。
TCPやIPのヘッダの整数部がそうだからね。
プロトコルで、最初に、相手のendianを聞いて、
変換が必要ならどちらかが変換する方法でもいい。
DCE RPCはこの方法(送り側が変換)。Sun RPCはbig決め打ち。
LAN内のリモートコンピュータをシャットダウン出来るソフトとかありますよね。 あれって、どういう関数を使ってるのでしょうか?
システムごとに違う。
ビッグエンディアンはpentium
リトルエンディアンはpentium
私はpentium
エンディアンは嘘つかない
40 :
デフォルトの名無しさん :2005/10/06(木) 05:20:04
DNSサーバーのBINDって何言語でかかれてるんですか?
なんでもいいじゃんか
42 :
デフォルトの名無しさん :2005/10/06(木) 05:25:34
Cじゃないの
自分でソース見ろよ Googleに BINDのソース って入れてやるだけだよ?
44 :
デフォルトの名無しさん :2005/10/06(木) 19:03:37
yahooのフリーメールのPOP3サーバーについて、 APOPには対応していないようですが、 パスワードのセキュリティはどうやって確保してるかわかりませんか?
そもそもセキュリティを確保っていうのはどういうことを期待してるの?
46 :
デフォルトの名無しさん :2005/10/06(木) 19:15:35
>pass mypassword とかのプレーンテキストではなくて MD5等で隠したいだけなんですが。
47 :
デフォルトの名無しさん :2005/10/06(木) 21:59:56
WinsockでTCPの特定ポート特定IPのデータをキャプチャーしたいんだけど RAWで取ってIPとポート番号解析せんと駄目?
>44 チャレンジドレスポンス で具具って見たら?
>>47 connectとrecv、sendをフックすれば?
そういうことではないのかえ?
>>48 チャレンジドwww
チャレンジ・アンド・レスポンスだろ
というか、プログラミング関係ないじゃん。 Yahoo!メールの提供しているサービスの内容なんて。
52 :
デフォルトの名無しさん :2005/10/07(金) 18:44:23
メールクライアントを作ってる・・・
+ + ∧_∧ + (0゚・∀・) (0゚∪ ∪ + と__)__) +
>>44 APOPに対応しないことで、セキュリティを確保している。
つまり、httpsつかえってことか(w
サーバー管理者がパスワードを覗き見する危険性と、 通信経路で覗き見される危険性。 どちらがより危険かを判断した結果なわけだ。
kqueueとepollどっちがオススメですか?
/dev/poll
>56 なるほどなぁ。Yahooなんかだと納得出来過ぎる orz
>>57 OSが既に決まってるなら、OS選んだ時点でどちらが
使えるか確定するので、悩む必要なし。
API的にはkqueueの方が強力。
61 :
デフォルトの名無しさん :2005/10/08(土) 18:06:29
WinSockでhostentのメンバやgethostbyaddrのような関数引数で FAR*というキーワードがついていますよね。 これはどんなことに配慮してそうなっているのですか? FARとすることの効果ってあるのですか?
64 :
デフォルトの名無しさん :2005/10/08(土) 22:40:59
delphiで簡易telnetサーバーを作りたい クライアントソフトなら、pop、ftp等はつくったことがあるけど、サーバーとなると、まったくわからない だれかサーバーの基礎からわかるほーめぱーげを教えてちょんまげ
>>63 > TCP/IPではビッグエンディアンで送ることが定められている。
しょうがねえなあ、糞e-wordsは。
>>64 Delphiスレいった方がいいよ。ライブラリがDelphi特有だから。
e-wordsが言ってることは
>>33 と全く同じで、
TCPやIPのヘッダ部分のことでしょ。
まあ誤解させる書き方してるe-wordsも悪いが、
この後におよんで、悪あがきしている
>>63 は
もっとみっともない。
大体
>>33 にあるDCE RPCが、
on TCP/IPでbig/littleどちらも許容だしね。
>>60 了解。OS決めてないのでBSDに決めました。どもす。
BSDって・・・どのBSDだよ
FreeBSDだろ?
MonaBSDです。
FreeBSE
74 :
デフォルトの名無しさん :2005/10/10(月) 05:04:21
そうですか。
Winsock2+IOCompletionPortを使った大規模サーバの サンプルソースどこかに落ちてない?
>>77 俺のマシンに自分で書いたサンプルが落ちてる。
残念ながらライセンスしてるソースなもんで、ばら撒けないけど。
79 :
76 :2005/10/10(月) 05:51:04
むう、それは残念
>>76 確かそのものズバリの内容が、随分前のMSDNマガジンに出てたような・・・。
.netの出荷前の特集かなんかしてる号だったと思う。まだ手に入るんでない?
>>76 はどのくらいシリアスのなのかしらんが、
俺はスケーラビリティのチェックが一番大変だった。
プロファイルすると変ってくるからね。
サーバのコードよりも、テスト用クライアントのコードの方が多かったな。
83 :
76 :2005/10/10(月) 11:55:54
>>80-82 情報サンクス
とりあえず>81のリンク先を参考にしながら勉強してみます。
1000クライアントぐらいは問題なく捌けるようにしたいなぁ
>>81 ,82
やっぱりその辺のチェックは大変なのね・・
84 :
デフォルトの名無しさん :2005/10/10(月) 15:42:13
最近のブロードバンドルータは255.255.255.255宛てのパケットは通さないんですか? LAN側でね。 ブロードバンドルータ使ってるエロイ人、教えてください。
状況が良くワカランが、WAN側のportは除いて、 LAN側のport同士で、255.255.255.255を通すかどうかということ? それはルータとして? それともHUB機能の話? ルータとしては大昔から通さないのが基本だが。
86 :
84 :2005/10/10(月) 17:00:12
>>74 のHPを見てブロードキャストキャストが届かないのかな・・・?っ手思っただけです
>>86 当然だけど他にも以下のことをチェックしておくべきだね。
・NIC が Wake On LAN の機能を持っていること
・ドライバで Wake On LAN の機能を有効に設定していること
ドライバ?
質問させてください。 クライアントがconnect関数でサーバーに接続した場合、 たまにWSAETIMEDOUT(10060)が発生します。 WSAETIMEDOUT(10060)が発生した場合は、何度か再度接続するようにしたのですが、 一度現象が発生してしまうと、再度connectしても繋がりません。 しばらく時間をおくと繋がったりするのですが… 何か考えられる原因や回避策があれば教えて頂けないでしょうか? 開発環境はWindows2000、VC++6SP4です。
>89 サーバ側でacceptした後に、forkなり、別スレッド作るなり してないとかないでしょうか? サーバ/クライアント側共に、以上終了時にsocketをshutdownしてないとか。
>>84 普通は通さない。もし通すとネットワークが輻輳して素敵な事になる。
92 :
デフォルトの名無しさん :2005/10/15(土) 21:01:37
C/C++の宿題を片づけます 51代目 からネットワーク関係のスレがいいのでは、とり割れてこのスレにきました。 どなたか、以下のプログラムを作っていただけませんでしょうか? ホスト名を入力し、ファイルリストのからホスト名を元にIPアドレス、 GW、サブネット、DNSを設定させるプログラムを作るのにどうしたらよろしいでしょうか? また、ホスト名が正しくない場合、エラーで通告して IPアドレスなどが、正しく設定されたら、 設定を反映させるために再起動を実行させるプログラムを実行さえたいのですが、 プログラムがわかりません。どななた作っていただけませんでしょうか。
宿題スレに帰れ。
> ホスト名を入力し、ファイルリストのからホスト名を元にIPアドレス ここ以外ネットワーク関係ないし、ここは作るスレじゃあない つまりgethostbyname関数使え以外言うことは無い
95 :
デフォルトの名無しさん :2005/10/16(日) 00:52:31
WSAWaitForMultipleEvents()でPostThreadMessage()の メッセージのイベントって拾えるのでしょうか。 要はソケットとメッセージのイベント両方を待ち受けしたいのですが 他にいい方法があれば誰か詳しい方ご教示願います。 他にWaitForMultipleObjects()などもありますが今ひとつ使い方が よく分かりません。よろしくお願いします。
>>95 MsgWaitForMultipleObjects()
WSAWaitForMultipleEvents()とWaitForMultipleObjects()というのは、基本的には同じ。
ごっちゃにするのは好ましくないけれど。
もちろん、WSACreateEvent()の代わりに、CreateEvent()でも、ちゃんとソケットに使える。
97 :
96 :2005/10/16(日) 02:33:58
マルチか……。
なあ、PHPとPerlどっちを勉強しておいた方がええ? どっちもって言うなら先に勉強した方がええのはどっち?
>>98 perl
PHPはまだまだ仕様がどんどん変わるから
どっちを先に勉強したらいい? なんて質問を
するような生ぬるいやつは今後も仕様が堅い方を
やっとけばいい。
習得の難しさとか、そんなのは関係ない。
>>98 どっちもやるならPHPを先にしる。
どっちかしか選ばないならperlを薦める。
理由についてはスレ違いなので省略する。
>>99 >今後も仕様が堅い
そうとも限らんぜ。
理由についてはスレ違いなので省略する。
>>100 つまり、あなたは理由が説明できないんですね。
ここではな。
ここではな。
板違いじゃド阿呆って言うのはなし? #ド阿呆のほかに糞ボケもあるよ
つまり、根拠は無いんですね。
つまり、根拠は無いんですよ。 終了
で、理由は?
ここでは言えません。
ネタはもういいから理由書けよ
は?説明しなきゃわからないほどの低脳揃いですか、ここは
勝利宣言するしか能がない低脳だったようだ。
114 :
100 :2005/10/16(日) 18:04:02
お前ら俺のことで争わないでください! ここは良スレだから荒れるのを見るのは忍びない。 でも、マジでスレ違いだから理由は割愛するけどな。
116 :
デフォルトの名無しさん :2005/10/16(日) 22:27:25
>> 96 ありがとうございます。 MsgWaitForMultipleObjects()で出来ました。
perlもPHPもソケット作れるから かろうじてスレ違いではない なんて言ってみる
気持ち悪い奴らだな。
121 :
98 :2005/10/17(月) 06:07:52
>>99-115 お前ら俺のことで争わないでください!
回答してくれた方はありがとうございました。
122 :
デフォルトの名無しさん :2005/10/17(月) 21:06:54
証券会社が提供してるQUICKのリアルタイムの株価データを 秒ごとに保存したいんですけど、 どういう感じで取ればいいのでしょうか? Java、C++などのネットワークプログラミングの 書籍を読みちらしても全然検討がつきません。 指針を教えてもらえるとうれしいです。 ネットワーク的に取得しなければいけないのか? などもおねがいします。
通信プロトコル、データ形式の仕様を作れればおいらが造ってもいいよ。
金払わんと営業には使わせて貰えないだろ。
126 :
デフォルトの名無しさん :2005/10/18(火) 01:12:30
1000円て 小学生のお小遣いですか
1000円とは、なかなかゴージャスですね。
40万なら
>>126 Javaアプレットで同サイトの*.csvを取得してグラフ化しているだけのページです。
*.csvの作成方法は全く分かりません。
131 :
126 :2005/10/18(火) 02:13:14
どうやってデータが流れてきてるのかが 分からないんですよ。 それが分かれば少しは進展すると思うのですが・・ ちなみに、自分jは大学1年でプログラム暦は浅いです。 株価が変化したとき、たぶん全体でなくその部分だけ 更新されるとおもうので、そこらへんも全然分からないん ですよね。
132 :
126 :2005/10/18(火) 02:17:00
3000円までならいいです
134 :
126 :2005/10/18(火) 02:22:40
ほんとに誰か作ってくれません? 5000円までならマジで出します。 金ないんですよ。服とか買いすぎちゃったし。
136 :
126 :2005/10/18(火) 02:35:18
一応秒速データのcsvファイルを作成できることが 目標です。 各証券会社が提供しているリアルタイムのデータは 自分でブラウザの更新ボタンを押さないと更新されません。 ですからそのページに一秒に一回とかスクリプトでアクセスすると 証券会社の方から注意がくると思います。 それと違ってQUICKのページでは自動で更新されますから 全然大丈夫なわけです。ですが、その自動で更新されるデータを どうやってとるかが問題なわけです。
だから40万だせば完璧にやってやるって
そうね。40万なら妥当かな。
お前に組めたとして、5000円もらったら見知らぬ奴にも組んでやるのか? 人をバカにするのもたいがいにしとけ。 そもそもデイトレで貴様が儲けるために作りたいんだろうに
貧乏人にデイトレは無理。 きっとパパにでも「作ってやるよ」って大見得切っちゃったんだろうよ。 今ならまだ間に合うぞ。土下座して謝って来い。
csvの作り方て、、、 もしかして、聞いてる事って、 「カンマで区切る」が答え程度の事なのか?
5000円かぁ。学生の金銭感覚が懐かすぃ。 それなりのネットエンジニアに頼むんだったら、1日4〜5万出さないと無理だよ。最低でも3万。 俺だったら2万でや(ry
143 :
デフォルトの名無しさん :2005/10/18(火) 12:39:52
144 :
デフォルトの名無しさん :2005/10/18(火) 12:41:02
ヒントだけでも教えてもらえませんか?
ヒントか。 じゃぁ、5000円で。
ワロス
教えてやるから二度と来るな。約束するか?
約束か。 じゃぁ、5000円で。
>>126 その自動で更新されてるQUICKのページを教えてくれ。
QUICKか。 じゃぁ、5000円で。
5000円か。 じゃぁ、5000円で。
任意のIPアドレスからのTCPコネクションを外部プログラムから 切断する方法はありますでしょうか?
ファイアウォールでフィルタすれ。
>>153 プログラムから切断する方法はやはりありませんでしょうか?
>>154 パケットダンプして該当セッションのTCPシーケンスを覗き、
TCPシーケンスを合わせて相手にTCP RSTを送る
がんばるなあ
ICMP port unreachableでもいいんじゃないか?
159 :
デフォルトの名無しさん :2005/10/18(火) 18:21:12
160 :
149 :2005/10/18(火) 19:06:32
>>126 >>159 >ですからそのページに一秒に一回とかスクリプトでアクセスすると
>証券会社の方から注意がくると思います。
>それと違ってQUICKのページでは自動で更新されますから
>全然大丈夫なわけです。
何故、君は「QUICKのページでは自動で更新されますから全然大丈夫」と思い込んだのかな?
良く分からないんだけど、、、
> 一秒に一回とかスクリプトでアクセスすると証券会社の方から注意がくる
この法則からすると、QUICKからも注意が来ると思うよ。
1分毎とかなら、更新チェックするツール知ってるんだけどなぁ。
161 :
126 :2005/10/18(火) 19:31:25
>>160 こちらがわが更新するのではなく
サーバー側の方が意図的にJavaScriptか
なんかでロードさせているからです。
162 :
149 :2005/10/18(火) 19:42:23
>>126 俺もあまり詳しく無いから、突っ込まれそうで怖いw
サーバー側はデータベースを自動で更新する作りになってるだろうね。
でもクライアント側では、理由はどうあれデータを引っ張ってこなきゃいけない。
つまり毎秒引っ張ってくる必要がある。
毎秒君がF5押すのと変わらない気がするよ(´・ω・`)
163 :
126 :2005/10/18(火) 20:01:30
ajaxみたいので非同期通信してるような
感じがしてきた・・
IEのソースでは見れないところもアップしときます
http://khcttm.hp.infoseek.co.jp/source2.html それによると、更新されるデータはINPUTタグの中に
含まれてて、value=10320(インボイスの現在値です)みたいに表示されてます。
<INPUT
style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; FONT-WEIGHT: bold; BACKGROUND: none transparent scroll repeat 0% 0%; MARGIN: 0px; BORDER-LEFT: 0px; WIDTH: 100%; CURSOR: default; BORDER-BOTTOM: 0px; HEIGHT: 14px; TEXT-ALIGN: right"
readOnly value=10320 name=P1_DPP>
164 :
126 :2005/10/18(火) 20:04:29
165 :
149 :2005/10/18(火) 20:30:04
>>126 「サーバー管理者の事なんてどうでも良い。俺はあくまで毎秒取得したいんだ。」
って事でしょうか?
それとも、、、
あっ、わかった。
小泉が靖国参拝したから、対中国用兵器として田代砲に続(ry
Ajaxは単にHTTP通信をしているだけなので、サーバサイド側にとっては 違いは無いよ。 XMLHTTPRequestってのが、ノンブロッキングライブラリとして実装されている というだけの話。
168 :
126 :2005/10/18(火) 21:01:28
>>165 サーバー管理者に迷惑をかける、高頻度の更新
は避けるつもりです
たしかに中国はうざい
マーケットボードプロはActiveXをつかってます、ってかいてあるけどなー。
JavaScriptでリロードしようがF5でリロードしようが一緒なんだよ、と
このスレってなかなか面白いですね。 はっはっは
174 :
126 :2005/10/18(火) 22:37:08
ありがとうございました! 他スレでまた聞いてみます
175 :
デフォルトの名無しさん :2005/10/18(火) 22:57:51
証券会社のデータは取引所のリアルタイムデータだから たとえば、マーケットスピードとか Hyper E*Trade なら パケット解析からはじめないとどうしようもないだろうな。
OpenSourceのツールのソース読めばいい。公開しているところもあるしね。 いずれにせよ、秒単位ともなるとアカウント持たないとサーバを利用できない。
177 :
126 :2005/10/18(火) 23:19:41
>176はすまんが>126を連れて>171のスレにいってもらえんだろうか 質問に向こうで答えてやってほしい。
179 :
126 :2005/10/18(火) 23:47:00
迷惑かけました。もうきません Live2chから削除しまう
何このウザさ
自分で何も調べようとしない時点で終わってるな、クズ。
俺は対価1000円っていう常任離れした感覚に痺れた。
俺、今の職場からは明らかに労働基準からぶっぱなれた酷使のされようなのだが 未だに先月の給料貰ってないぞ・・・・ ぶっちゃけ千円でも欲しいぜ・・・・・・ つーか、会社潰れるんじゃないかなあqswでfrtgtyhじゅjくい
イ`
>>183 給料を運用してもらってから受け取るんじゃないの?
元本は保証しませんとか書いてあったら嫌すぎる。
>>183 どこぞに訴えて給料だしてもらえよ
こういっちゃ悪いが、反日キムチの国みたいな職場だな
て言うか、仕事忙しいんなら 2ch なんぞしてないで、寝ろよ。 体休めないと、ほんとに壊れるぞ。
もう壊れてる
ちゃんとした返事ができるうちはまだ大丈夫だ‥‥が、気をつけろよ
191 :
デフォルトの名無しさん :2005/10/21(金) 02:55:35
MFCのCSocketがコンソールアプリで使えないのって常識? 派生クラスでOnAcceptが来ない… サンプルは画面あるやつばかり… # Winsock Programmer's FAQでは使うなと言ってるし
自分でメッセージループ回せば動くんでないの? 知らんけど。
MFCのCScoket自体コケてるから使わん方がええよ
194 :
デフォルトの名無しさん :2005/10/21(金) 09:21:50
>>191 コンソールアプリに限らず、CSocketは使わないのが常識。
CSocketは互換性のために残っているだけでしょ。 新たに書き起こすのは考えられない。
196 :
デフォルトの名無しさん :2005/10/21(金) 22:01:52
インターネットにダイアルアップルータでつながっているPCが複数台あるとしますよね? そのときにある一台からWebサーバにHTTPリクエストを投げるとします。 これがWebサーバに飛んでいくのは分るんですがなぜ応答がダイアルアップルータまで 戻ってこれても、そこから、HTTPリクエストしたPCに届くのですか?
ルーター上に、一定時間経路表が残るからです。
198 :
デフォルトの名無しさん :2005/10/21(金) 22:54:21
>>197 さんありがとうございます。
そうするとUDPでもずっと流し続けるなら大丈夫なのですか?
UDPでもコネクション型というのがあると思うのですがこれも同様に大丈夫なのでしょうか?
いったんクライアントからサーバに接続してそこからガンガンマルチメディアを流すようなことを想定してます。
プログラムでルータのルーチングテーブルを強制的に リセットすることってできないの?
>>198 切れる/届かないかもしれない事を想定の範囲内とすれば問題無い
>>199 どこのルータの話なのやら
> UDPでもコネクション型というのがあると思うのですが 何でそんなことを思うんだろうか…。 まあ、NAT が使える大抵のルータ UDP もサポートしているから、 君が思うようなことはできると思う。
>>201 UDPのコネクション型というのはなんかで読んだ気がしたのですが多分デタラメです。
ゴメンナサイ。
基本的にはユーザにポートフォーワーディング機能とかでUDPの何番ポートはどこに割り当てて、、
とかいった難しい設定なしに、インターネットが使える環境で即、できるとうれしいです。
インターネットでラジオとかもあるので可能だと思うのです。
>>199 できるやつもあれば、できないやつもある。
>>202 インターネットラジオを使った時のパケットを Ethereal
とかでキャプチャしてみたらいいんじゃないか。
>>202 了解です。案ずるより・・ということでやってみまつ。では
>>202 UDPのコネクション型というのは、
UDPソケットをコネクション指向のスタイルでプログラミングする
プログラミングスタイルのことを勘違いしているんだろ。
プロトコル的には全く同じだよ。
ただコネクション指向の場合、src/dstのport番号が同じままになってるわな。
つまりUDPプロトコルの使い方がチョト違う。
>>204 キャプチャする前にNATの勉強しなよ。
ルータは自分が持っているNATテーブルをどう使っているか。
これあんまりプログラミングに関係ないけどな。
> ただコネクション指向の場合、src/dstのport番号が同じままになってるわな。 > つまりUDPプロトコルの使い方がチョト違う。 詳しく説明願う。
ここはプログラミング以前のネットワーク知識のスレですね
秋厨真っ盛りだな ハゲワラ
あぷせとねでぶの暗唱からだな
211 :
デフォルトの名無しさん :2005/10/22(土) 16:36:06
7層すべてを覚えるのは簡単だけど理解するのは難しいorz
ageちまった
返事用のインターフェイスをつくり port 0 をバインドし sendto で送信、 返事がくるまで recvfrom をループさせて待てばいいんだろ。
214 :
191 :2005/10/22(土) 17:28:10
>>214 いや、いいクラスがあれば使えばいいが、CSocketは糞なんだ。
>>215 わかりました。
>>216 あれば、っていうことは、まだいいクラスは無いって感じなんでしょうか。
需要ありそうですけど…
218 :
デフォルトの名無しさん :2005/10/23(日) 00:16:51
>>213 インタフェースというのはなんのことですか?
あと0番のポートにバインドするとどういうことが起きるんですか?
219 :
332 :2005/10/23(日) 00:45:51
ソケットをポート0番号でbindしておくと短命ポートで受信できる、 インターフェイスは知らんが、相手に短命ポートに接続してもらうことで ルータで弾かれないようにする工夫のことだろう。
0番にbindすると、何か特殊なことでもあるの?
>>217 「あれば」=「きみが見つけたら」
そらいいライブラリはいくつかあるよ
217じゃないけど > そらいいライブラリはいくつかあるよ ちょっとで良いので挙げてみて頂けないかな いくつか見てみたけど、どうせ学ぶなら有望そうなのが…みたいな逡巡が boost::socketがあればなぁ…
223 :
デフォルトの名無しさん :2005/10/24(月) 11:12:50
winsockを使ってリアルタイム音声通話ソフトを作ろうと思うんだけど、 send関数を使うとwinsockの内部の送信バッファにデータがたまるんだよね? で、winsockが回線速度に応じて順次データを相手に送信するんだと思うんだけど、 たとえば56kbpsの回線なのに20KB/sでデータをsend関数に流し込んだとき、 回線速度が不足しているとおもうけど、音声の遅延だけでなくどんな問題が起こる?
224 :
デフォルトの名無しさん :2005/10/24(月) 12:54:31
>223 音声送信の問題に限定して答えるけど ■UDPとTCPで挙動が違います ■この場合の音声遅延は使い物にならないぐらい致命的です ■クライアントの音声出力バッファの関係でタイミングを 考えないと遅れまくります ■とりあえず音声バッファ処理してください
56kbpsなら5kb/sくらいしか送れないんだよな? 毎秒15kbたまるとwinsockの内部の送信バッファとやらは破綻するとおもうが その前にsendでWOULD_BLOCKが返るか
xpなどのクライアントOSでのbacklogの上限値はいくつなんでしょうか。 googleすると上限は5というのが見つかるのですが、 実際に実験すると5以上いけました。
WinSock.h:#define SOMAXCONN 5 WinSock2.h:#define SOMAXCONN 0x7fffffff WinSock2 で、実際にいくつになるかは知らない。
Winsock2の同期ソケットプログラミングについて質問です。 ワーカスレッド内部のAcceptで処理がブロッキングされてる状態で そのワーカスレッド外部からブロッキング処理を中断させる方法は何が最も妥当なのでしょうか。 現在はスレッド外部からAccpectしているソケットに対してclosesocketしています。
>>226 ハーフオープンコネクションの数とかライセンスの数と間違えてるんだろ
TCP/IPによるconnect()のネットワーク負荷をシュミレーションしたいのですが、 なにかいいツールはご存知ありませんか? connect()を何度も行うことによってconnect()側、accept()側と ネットワークにどれくらいの負荷がかかるのか検証したいのです。
232 :
デフォルトの名無しさん :2005/10/26(水) 22:50:10
JavaでSocket.closeを起動した時にTCPが相手に送信するフラグについて調査しています。
1. 何も指定しなければ、FIN。
2. SO_LINGERを設定(Socket.setSoLinger(true ,0))していれば、RST。
と言うことは分かったのですが、SO_LINGERを設定していない時にも、
FINではなくRSTを送信することがありました。その時の環境と条件は、
以下の通りです。
環境:OS:Red Hat Enterprise Linux 3
JDK:J2SE1.4.2_08(SunVM)
条件:SO_LINGERを設定していないSocketのcloseを起動。この時、該当コネクションのTCPの受信バッファにデータが存在する。
調査した結果、以下のページを見つけました。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/net/articles/connection_release.html このページの"問題の説明"の最後("問題の回避方法"の直前)に書いてある部分に該当すると考えています。(このドキュメントは5.0から追加されたもののようでした)。
Googleで検索したのですが、この様な状態に関するページが、上記の
1件しか見つけることができず、この動作が一般的な動作なのかが不明です。
JavaでSO_LINGERを設定していないSocketでcloseを起動したときに、
FINではなくRSTが送信される条件をご存知の方がいらっしゃったらご教示ください。
>>231 connect/accept の CPU 負荷とハンドシェイクで発生するパケットの負荷を求めたいってこと?
今会社でこっそりプロミスカスモードでパケット集めて遊んでるんだが 結構楽しいよねこれ。最近はバイナリ列からどのフォーマットか瞬時に判断 できるようになったせいで、仕事中に他人が何してるか100%把握できるようになった。
237 :
どっぴん ◆uSuQC0Pfo6 :2005/10/27(木) 06:29:23
初めまして。 僕はC#を覚えたので、手作りでビデオ・ボイスチャットを作ろうと 思ってます。 だけど、検索したり本屋に行ったりして調べようと思ったのですが 該当のものが見つかりません。 ご存知の方いらっしゃいましたらよい情報や方法そのものを教えていただければ嬉しいです。
いきなり凄いハードルを用意するなぁ
>233 そうです。 特に詳しくパケットの量を知りたいと思っています。 ネットワークをシュミレーションできるソフトがあればいいのですが・・・
立派なご趣味でいらっしゃいますわね。
s i m u l a t i o n な s h u m i r e i s h o n じゃないぞ
242 :
どっぴん ◆uSuQC0Pfo6 :2005/10/27(木) 15:07:03
ハードル高いですか。はは。 何事もまず第一歩からってな事でご存知の方お願いします。
あれだろ。 C/C++で企業の第一線でネットワークばりばりやってて、趣味でC#をはじめたけど資料がないと。
>>243 何事も第一歩を他人に手取り足取り教えてもらわないと踏み出せないのにそれはありえない
方法そのもの。 ビデオ部分:キャプチャ→圧縮→send 音声部分:キャプチャ→圧縮→send 何か質問あるか
>>239 実際にaccept/connectする単純な二つのプログラム作ってセッション張ったり切ったりすりゃいいんじゃない?
パケットの数はetherealで見るかwinpcapでキャプチャする単純なアプリを作ってみる。
>>242 取り合えず、どっかのページにある動画ファイルをHTTPで取得して、再生してみたら?
248 :
232 :2005/10/27(木) 23:16:31
>>236 Socket.close起動で、ソケットへのインタフェースをクローズ(ソケット自身は
まだクローズされているとは限らない)されます。ソケットへのインタフェースが
クローズされるため、ソケット自身の受信バッファに残っているデータは
アプリケーションまで通知されないことになります。
これを送信側に通知させるためにRSTを使用していると言うように理解(想像)しました。
ありがとうございました
>>234 今会社でこっそりミニスカを・・・までよんだ
>>249 おまえなぁ…ふざけてないでちゃんと読めよ!
パイズリ列まで
>>230 > Winsock2ならそれでOK
これ MSDN とかに公式見解として載ってます?
まあ、今それで動いているんだけど、公式見解
があれば、ちょっとは安らかに眠れるかも。
>>234 > 仕事中に他人が何してるか100%把握できるようになった。
と言うことは、おまえが何してるか情報システム部門は
100% 把握してるわけだ。
明日、帰りにフロムエーでも買っといた方がいいんじゃな
いか。(w
>246氏 etherealというパケットキャプチャツールがあったのですね。 恥ずかしながら私は知りませんでした。 このソフトを使ってパケットを調べてみたいと思います。 ありがとうございました。
みんな嫌なやつのパケットはよく見るよね? 上司にこっそり報告しちゃったりしてさ 俺って悪い奴?
>>251 closesocketの説明に
> Any pending blocking, asynchronous calls issued by any thread in this process are
> canceled without posting any notification messages.
と書かれてるがこれじゃ不足か?
現在のMSDNからは見つけ出せなかったが、記憶が正しければ
Winsock 1.1では保証されてなかったはず
あ、よく見るとMSDNのブロッキングで非同期の場合か
>>257 スイッチだろうと、
ARP突っ込めばman-inthe-middleで見れる。
(゚Д゚)ハァ?
WSAAsyncGetHostByNameなんですが、MSDNには次のように書いてありました。 >The WSAAsyncGetHostByName function is not designed to provide parallel resolution of several names. >Therefore, applications that issue several requests should not expect them to be executed concurrently. 訳に自信ないんですけど、一度に複数発行できるけど並列に動作しないよ(順番に処理されていく?) ってことでいいんでしょうか?
>>254 おお、ほんとだ。
ありがとう、これでやっと安らかに眠れるよ。
>>258 もう、寒くなってきたから、つりはほどほどにな。
>>260 Excite 翻訳によると、
> WSAAsyncGetHostByName機能は、いくつかの名前
> の平行な解決を提供するように設計されません。
> したがって、いくつかの要求を出すアプリケーション
> は、それらが同時に実行されると予想するべきではあ
> りません。
だから、大体あってると思う。順番がどうなるかはよく
わからんが。
WSAStringToAddressの第一引数がLPCTSTRでなくLPTSTRなのは何故でしょうか? 文字列を変更する可能性があるのでしょうか?
>>260 要するにMT-Safeでないということだね。
マニュアル文章としては良くないね。
「並列に実行するな」と書けば済むことを、グダグダ書いてある。
# というか「not MT-Safe」、これだけで済むこと。
WSAAsync...系のAPIをマルチスレッドで呼び出す?? メッセージループを動かしているスレッド以外で、使う事あるの?
ちなみに、MSDNのWinsock2の説明では 別スレッドでなんかした時にどうなるとかは、ちゃんと「thread」という単語を使って解説されています。
>>264 は根本的な勘違いをしている希ガス……。
そもそもこれは、スレッドセーフなどの問題ではないような……。
最初に、名前解決できないホスト名を渡す。
↓
次に、名前解決できるホスト名を渡す。
↓
メッセージが飛んでくるのを待つ
↓
しばらくたってから、最初の名前解決ができなかった旨を示すメッセージが飛んでくる。
↓
名前解決できた、次のメッセージが飛んでくる。
もし並列に実行できるなら、こうなるはず
メッセージが飛んでくるのを待つ
↓
二番目に渡したホスト名の、名前解決ができたことを伝えるメッセージが飛んでくる
↓
タイムアウトになって、最初のホスト名が名前解決ができなかったことを示すメッセージが飛んでくる。
てゆーか、そもそも、 排他処理等を行って「1つのスレッド以外は待たされる」というものはいくらでもあるが そういうのを「非MT-Safe」とは言わないのだが。
そ。MT-Safeかどうかと 並行実行時の効率の良し悪しはまったく別の話
>>263 LPCTSTRは CONST TCHAR* でLPTSTRは TCHAR* なのですが・・・
入力パラメータなのにconstが付いてないのはおかしいと思うのです。
constがついてないということは それは変更されるかも知れないというだけ
おかしいのは
>>263 と
>>270 でFA
std::stringやCStringを直接渡せないな。 一時バッファ作らなきゃならんのか。マンドクセ('A`)
絶対この関数を使わなきゃならんのか?
getaddrinfoもWSAStringToAddressも名前が解決できるまでブロックするみたいだけど WinsockでIPv6アドレスの解決中にブロックを中断したいときはどうしたらいいの? UNIXならシグナルが使えそうだけど
>>274 >名前が解決できるまでブロックする
これマジっすか
確かにブロックするかも
まずいなぁ・・・まずいよ
スレッドで実行させればいいじゃん。
>>274 WSAStringToAddressって単なる文字列処理じゃないの?
>>276 名前解決でブロック中のスレッドを外から止められないのは一緒でしょ
TerminateThreadは後始末してくれないからサーバーアプリには使えない
クライアントなら終了すればいいけど
>>277 そのようだ。ボケてた。getaddrinfoだけに置き換えて読んでちょ
GET "〜〜"を送信してファイルをディスクに保存するとします。 その何も加工されていないファイルには、例外無くヘッダ情報が含まれますよね。 そのヘッダ情報を削除したい場合、どのようなプログラミングの手法が取れるでしょうか? 自分はヘッダに含まれるLengthを調べて、ヘッダファイルを取り除いていたのですが。 Lengthが存在しない場合などの時には、ヘッダが削除できなくなってしまいます。
CR LF CR LFが来るまでがヘッダ。
えっと今バイナリエディッタで、ヘッダ情報を含むページを見てるのですが。 CR LF CR LFという文字列が見つからないのですが・・
283 :
デフォルトの名無しさん :2005/10/29(土) 21:45:51
>>282 がんばれ
視点を変えればすぐに見つかる
バイナリエディタで検索せずに、自分の目で見るんだ
>>282 申し訳ないけど、君、技術者に向いてないよ。
100歩譲って CR LF とか知らないのは、しょうがない
としても、例えば html cr lf ぐらいでぐぐってみる
とか、本屋に行って HTML 関係の本を片っ端から立ち読
みするとかできないようだと、これから辛いよ。
↓お前はこれから奴にRFC読めと言う
空気読めればそれでいいじゃん
CR=キャリッジリターン。ANSIコード0x0d LE=ラインフィード。ANSIコード0x0a
わざわざすみません
ブラウザで拾った(既にヘッダが取り除かれた)html見てるんじゃないだろうな?
えっと今バイナリエディッタで、HTML情報を含むページを見てるのですが。 RFCという文字列が見つからないのですが・・
RFCも知らないプログラマ… 温室育ちかな?
釣りかどうかは別として たまに基礎が欠落している人がいるわけだが そういう奴らがどこから情報を得ているのか気になるよな
ドカチンプログラマーには、たいした情報いらんだろ。
298 :
デフォルトの名無しさん :2005/10/30(日) 14:49:54
localhostのMACアドレスを取得するには どのようなコードを書いたら良いでしょうか?
127.0.0.1にMAC層なんてあるのですか?
300 :
デフォルトの名無しさん :2005/10/30(日) 14:58:31
きっと、自分のコンピュータから手に入れたいってことだろう。
LANカードじゃね?
127.0.0.1 に LAN カードなんてあるのですか?
>296
でもさ、俺らだって本当の基礎はあんま理解してないじゃん? IPパケット読めって言われたって、本見ながらアーとかウーとか 唸りながらじゃないと宛先ひとつ取り出せないじゃん? LANの信号って何ボルトだったっけ?
俺ら…
0V. 光ケーブルに電気は流れないよ。
>>304 大学へいけ。ちゃんと教えてくれるから。
>>298 Windowsならレジストリから読む
UNIXなら・・・しらんLinuxなら/procとかそこらへんじゃねーの
WindowsはlocalhostにMACアドレスなんかついてるのか? けったいな。
310 :
デフォルトの名無しさん :2005/10/31(月) 23:00:26
やっぱりこのスレにネットワーク分かる人いないんですね。 ネットワーク知ってると言ってWindowsだけだとお話になりませんよ。
Windows以外だとlocalhostにMACアドレスがついているのですか? 298=300=310さん。
電撃ネットワークも知ってるお。
TMネッt(ry
平和より自由より正しさより〜
あむうえ
316 :
デフォルトの名無しさん :2005/10/31(月) 23:40:50
>>311 付いてるよ。普通に。
キサマはWebアプリしか作ったことないだろ?
ヘタレだな。
loなifにmacなんて付いてるの? 初めて知った…。
>>316 =310=300=298のネットワークに詳しい有能な技術者様へ
NICを持ってないPCでも、localhostを持っていて
127.0.0.1相手に通信できるなんて、そんなわけないもんね。
ネットワークに詳しくないヘタレは、↑みたいな勘違いしてるから
localhostがMAC持ってるなんて知らないんだよ。
>>318 書いてることがよくわからない。も少し分かりやすくお願い。
よくわからんが、 localhostからって言ってるから、 ここ数年流行のTomcatでlocalhost相手に Webアプリを作ったことあるだけのネットワーク知った気取りが ループバックに噛みついてんじゃないの? 自分のパソコンの って言えばいいじゃん。
そんなメソッドはありません。 って言い出すんだろ。どうせ。
>>322 ネットワークスレらしく、パケット解析してから発言してるのか?
>>322 まったくよくわからん。結局このスレじゃ答えは出ないってことか?
まぁloがmac持ってようがいまいが仕事するのに影響ないからいいか。
なにここ。 これほどあからさまな皮肉を、皮肉と感じられない人しか居ないの?
326 :
デフォルトの名無しさん :2005/11/01(火) 00:33:55
ヒント:ARP
localhostにMACアドレスがついてる一族は別の世界の住人なんだろう。 どっか他所でやってくれ。たいして面白い見世物でもなかったので飽きた。
うちのMacのMACアドレスはどうやって調べたら良いんだ?
郵便番号から検索できるぞ
自分のパソコンのMACアドレスだったらどうなんだ?
最近は電話番号からでも住所調べられる世の中になったんだってな?
2chもレス番からでも住所調べられる世の中になったんだってな?
ダイアルアップルータによってインターネットに接続しているLANがあるとします。 このLANの上には複数PCがあるとし、そのうちの一台からHTTPの要求をWebサーバに送信します。 Webサーバが返した応答はルータを介してHTTPを投げたPCに返しますよね。 このときルータがその経路を覚えていてくれることはTCPの働きによって (例えば、TCPが内部でEthernetのパケットを絶えずやり取りして経路を失わせないとか) 保障されているのですか? つまりTCPのコネクションとは何によって確立しているのでしょう?
断片的な知識を勝手に繋ぎ合わせて奇妙奇天烈な理解をしてそうな奴が来たな。 TCPのコネクションと経路は関係ない。
335 :
デフォルトの名無しさん :2005/11/01(火) 01:32:43
>>333 TCP/IPスタック
簡単に言うとメモリにIPテーブルを保存している
336 :
デフォルトの名無しさん :2005/11/01(火) 01:39:11
>>333 TCPコネクションとは、接続元と接続先によって確率されてます。はい。
では経路はどのように保たれるのですか?
338 :
デフォルトの名無しさん :2005/11/01(火) 01:58:10
ヒント:ARP
339 :
デフォルトの名無しさん :2005/11/01(火) 01:59:09
>>337 ルーティングテーブル
tracertというコマンドがあるから
コマンドプロンプトかシェルでためしてみるとイメージがわかるだろう。
ルーターやFWがICMPをブロックしてるなら使えんが
するとUDPでも絶えず流していれば経路は保たれるのでしょうか?
人の話を全然聞いてねーなこいつ。
保障はないが保たれる
TCPとUDPについて入門書で勉強したほうがよくない? 今はネットにも情報転がってるしさ。ここで答え出るの待ってたら 時間浪費なだけだよ。 釣りとは思ってるけどさ。
>>342 保障が無いけど保たれるというのは、どういうことでしょう?
ある時そのルーティングテーブルをルータがリセットしちゃったらもう届かなくなる。
そしてルータはそういうことをしてはいけないというルールは無い、とか?
345 :
デフォルトの名無しさん :2005/11/01(火) 02:33:07
保証を保障と各
IP層のルーティングと、
NATの接続管理を混同している。
ちなみに「自ホストのMACアドレスうんぬん」、Windowsなら
>>1 UNIXならstevensでも読んでね。
>257-259 遅レスだが、偽ARP送れば大抵のスイッチ、OSの組み合わせで、 通信覗き見るのは可能だろ。 ARP poisoning防げるOSなんてあるの? 全ポート802.1xならスイッチで防げると思うけど。
>>347 今時のOSなら故意か偶然かIPアドレスが衝突したことくらいはわかる。
メッセージ出るよ。
>>348 IPアドレスの衝突は関係ないだろ。
ターゲットとなる2つのホストに、第3者が、それぞれ他方を偽るARPを送るだけだから。
>>350 ローカル側でのタイミングのみ意味がある
=リモート側の処理のタイミングとは無関係
という意味では?
つまり、Client side の場合、
(1) と (5) の間にこの処理が発生するけれども、
(2),(3),(4)の処理のタイミングとは無関係、という意味。
>>351 ああなるほど、納得しました。
ありがとうございました。
353 :
デフォルトの名無しさん :2005/11/01(火) 23:12:01
>>350 タイミングw
NICチーミングの話だよ。
>>349 その arp をいつ送るかを考えてごらん。
>>349 IT用語辞典並の知識しかなさそうに見えるぞ。
ARPというプロトコルについて勉強したまえ。
356 :
デフォルトの名無しさん :2005/11/02(水) 01:43:21
>>355 その考えだと、すべての技術の詳細を厳密に把握してないと
設計できないことになるね。
少なくとも、よい設計者は君のようなことは言わない。
>>354-355 念のため聞きたいんだが、ARP Poisoning Attack については理解してるんだよね?
どうみてもわかってないのはそっちの方にしか見えないんだが。
念のため聞きたいんだが、 お ま え ら た だ の 土 管 屋 ?
>>353 NICチーミングって、俺は NIC Teaming のことしか知らないんだが、他にもあるの?
今日はarpかよ。
この調子だと明日はpingだな。
頭大丈夫か?
363 :
デフォルトの名無しさん :2005/11/02(水) 05:58:10
ツールの話ししてどうする icmpの話しだろ 明後日はripの話しで温く盛り上がろう。
>354 考えたが、答えは「割り込む直前」ぐらいしか思いつかん。 正解があるんなら教えてくれ。 偽ARP投げて、自分に流れはじめたEthフレームをフォワードするだけだから、 ARP Poinsoningで通信に割り込むには、IPアドレス振る必要もないわけだが。
unreachable を通知する icmp を無視するソケットオプションってありませんか?
自分で戻りを無視すれば良いだけでは……
>>356 > その考えだと、すべての技術の詳細を厳密に把握してないと設計できないこ
> とになるね。
どう曲解したらそんな結論が導き出されるんだろう…。
少なくとも、アフォな設計者しか君のようなことは言わない。(w
>>357 ⇒
>>362 >>364 自分の IP アドレスは要らんけど、、偽装する IP アドレスは指定するだろ。
通信相手の MAC アドレスが変わったらログを取る OS は別に珍しくないよ。
ところで、普通の実装だと arp-request を投げてないのに arp-reply が来る
と arp テーブルを更新してしまうものなのか?
>>366 UDPソケット作っててdestが受信体制にない場合のunreachableを無視したいんですよ。
すればいいじゃん。 recvfromの返り値をチェックするだけだろ。
>>368 何したいんだか分からんが、unreachableを受信したらOSがそれをメモってて、
いつ届くようになるか分からんからキャッシュを無効にしたいって事かな?
>>370 recvが反応する(エラーを返す)のを無効にしたいんですよ。
いやだから、反応したって、エラーコードみて自分で無視すれば いいじゃないか。
なんか、最近のお子ちゃまプログラマは自分が必要な機能はすべてOSが持って ると思っているんだろうか…。
思われたくなかったら全ての要素にアクセスさせろ
> 通信相手の MAC アドレスが変わったらログを取る OS は別に珍しくないよ。 後学のために教えて欲しいんだが、例えば? >ところで、普通の実装だと arp-request を投げてないのに arp-reply が来る >と arp テーブルを更新してしまうものなのか? する。 でないと、(特殊ケースだけど)VRRPが切り替わったときとか、やたらと時間がかかるようになる。 そもそも、ターゲットのarpエントリがエージアウトされるまで我慢して待って、 requstが飛んだときに偽replyを返せばいい。 受ける側は、2つの異なるreplyが返ってきたとき、なんかおかしいということはわかっても、 どちらが正しいかなんて、知る方法はない。 古き良き時代のプロトコルであるarpは性善説で成り立ってるから、 悪意あるホストの存在なんて、仮定されてない。 ってことで、1年ぐらい前試したときは、LinuxでもFreeBSDでもSolarisでもWindowsでも、 その手のツールが吐く偽arpを、ホイホイ信じてた。
> 後学のために教えて欲しいんだが、例えば? 君が使ってた、FreeBSD でも取るよ。(少なくとも、4.3R では。) 一年ぐらい前に、試した時に Syslog とか見たことないの? > でないと、(特殊ケースだけど)VRRPが切り替わったときとか、やたらと時 > 間がかかるようになる。 なんで? 仮想 MAC アドレスも引き継げば、arp テーブルの更新なんかは必要 ないと思うんだけど。 > どちらが正しいかなんて、知る方法はない。 arp (に限らず、初期のネットワーク設計) が、性善説でなりっていると言う のは理解してるつもり。 まあ、ポリシーの問題だろうけど、こういう世の中になったんだから、どっち が正しいかわからないんだったら、両方信じないと言う実装もありかなぁ。
>>375 アホは逝ってよし。
スルーの方向で。> ALL
378 :
デフォルトの名無しさん :2005/11/03(木) 23:31:31
>>371 そのタイムロスを無くしたいから無視したかったんですよ。
まあそんなもんないってことが分かったんで、あきらめてエラーコード見ます。
プログラミングの話題でなくていいなら、 ipfilterあたりのフィルタリングで弾くとかな。 けど結局リトライしなきゃいけないんだから、 > エラーコード見ます。 みて、どういうリトライするかロジック組んだ方がいい。
380 :
デフォルトの名無しさん :2005/11/03(木) 23:48:42
Ethernetの質問なんですが 1514byteより多くのパケットを送るのはジャンボフレームを使わないと無理なの? WindowsSize=64Kbyte とか指定できてもそれじゃ意味ない気がするんだけど。
381 :
デフォルトの名無しさん :2005/11/03(木) 23:53:24
>>379 エラーコードは見てますよ。
ただWaitFor〜、readが反応する時間がもったいないだけです。
>>380 MTU
382 :
357 :2005/11/03(木) 23:56:47
>>367 > ところで、普通の実装だと arp-request を投げてないのに arp-reply が来る
> と arp テーブルを更新してしまうものなのか?
普通にする。だからこそ ARP Poisoning が問題になるんだが…
悪い点だけでなく積極的に使う例が冗長クラスタリングの切替だ、というのは
>>375 が書いている通り。
>>376 > なんで? 仮想 MAC アドレスも引き継げば、arp テーブルの更新なんかは必要
> ないと思うんだけど。
VRRP以外にも、仮想MACを使ってない、仮想IPを使った冗長クラスタリングの
システムだって普通にあるよ。そういう場合 Unsolicited ARP を投げて
近隣ルータのARPキャッシュを更新して切替時間を短くする。
arping コマンドの -U とか -A オプションとかがまさにそれだけど。
ttp://linuxcommand.org/man_pages/arping8.html
>>382 > 普通にする。
なるほど。
ただ、そうしないといけない理由は、冗長クラスタリン
グの他にあるのか?
> 仮想MACを使ってない、仮想IPを使った冗長クラスタ
> リングのシステムだって普通にあるよ。
仮想 IP で、実 MAC と言うこと?
なんか中途半端な構成だな。
ちなみに、どういうシステムがあるか例を教えてくれないか。
>>383 382ではないが、自分の実装した例ではpppでリモートのホストにLAN内のサブネットのアドレスを与えた時
仮想的にLAN上に存在しているように見せるためにpppをターミネートしているローカルなホストがリモートの
IPアドレスでgratuitous arpをした。 いわゆるRemote Access Serverと呼ばれるたぐいはこういうことを
するんじゃないかな。
>>381 再送のこと考えたら、少々の待ち時間は必要だろ?
それともICMP来たらすぐに再送して帯域食い潰すつもりか?
386 :
357 :2005/11/04(金) 04:44:25
>>383 > ただ、そうしないといけない理由は、冗長クラスタリングの他にあるのか?
「そうしないといけない」かどうかじゃなくて、
「現実にはそういう実装が普通にある」って言ってるだけなんだがな。
で、RFC 826 を今読み直してみたけど、素直に実装すればそういう動作になると
思うんだが、俺の読み方間違ってる?
> 仮想 IP で、実 MAC と言うこと?
> なんか中途半端な構成だな。
> ちなみに、どういうシステムがあるか例を教えてくれないか。
普通に ifconfig で仮想 IP 割り当てたらそういう状態にならないか?
まあOSによって違うかもしれんが、少なくとも Linux ではそうなる。
冗長クラスタリングシステムの例では UltraMonkey とか。
(以下の「高可用性」の節あたり読んでみて)
ttp://ultramonkey.jp/papers/lvs_tutorial/html/ その他の商用の高可用化製品でも同じことやってると思うけど。
俺はむしろ仮想MACまで使うシステムの方をあまり見たことが無い。
387 :
384 :2005/11/04(金) 05:50:26
>>382 ちょっと手元のLinux 2.4のソース(net/ipv4/arp.c)見てみたらこうあったのでデフォルトでは
そういうことはないようだ。
#ifdef CONFIG_IP_ACCEPT_UNSOLICITED_ARP
/* Unsolicited ARP is not accepted by default.
It is possible, that this option should be enabled for some
devices (strip is candidate)
*/
if (n == NULL &&
arp->ar_op == htons(ARPOP_REPLY) &&
inet_addr_type(sip) == RTN_UNICAST)
n = __neigh_lookup(&arp_tbl, &sip, dev, -1);
#endif
ちなみに自分はunsolicited arpとgratuitous arpをごっちゃにしてた。ごめん。
普通冗長クラスタやプロクシ・エージェント(RAS)が普通使うのはgratuitous
arpでunsolicited arpではない。 Gratuitous ARPはソースとリクエストのアドレスが
同じARPリクエスト。
388 :
デフォルトの名無しさん :2005/11/04(金) 10:01:20
390 :
デフォルトの名無しさん :2005/11/04(金) 10:29:58
アクセスした後、一時の間(30秒くらい)反応がなく その後↓のようなエラーが出ました。 エラーです。 2005/11/04 10:16:01 org.apache.commons.httpclient.SimpleHttpConnectionManager re leaseConnection 警告: SimpleHttpConnectionManager being used incorrectly. Be sure that HttpMeth od.releaseConnection() is always called and that only one thread and/or method i s using this connection manager at a time. DelphiのIndyコンポーネントという やつではアクセスできるんですが・・。 なにしろDelphiはあまり詳しくはなく、 Javaでやりたいもんで・・。 たぶんサイトの方がスクリプトからのアクセスを 禁止してるみたいで、 Header偽装とかでやれるのかなあ とかも考えてみたのですが、 Header偽装でやれるんでしたら、その本を見て 勉強します。
391 :
357 :2005/11/04(金) 15:57:06
>>387 > ちょっと手元のLinux 2.4のソース(net/ipv4/arp.c)見てみたらこうあったのでデフォルトでは
> そういうことはないようだ。
これなんだけどさ、「新規にARPキャッシュに追加することはしないけど、
既に存在するARPエントリは更新される」っていう動作になると思うんだ。
ロジックを追っかけてもそう思えるし、実際に試してもそうなった。
(RedHat EL4(2.6) で確認。ちなみに Windows XP SP2 も同じ動作だった)
> Gratuitous ARPはソースとリクエストのアドレスが同じARPリクエスト。
これ、俺が知ってる使い分けとは違うんだけど、明確な使い分けの定義
ってあるのかな? 人によっては区別しないで使ってるように思うんだけど…
俺の知ってる使い分けの例はこれ。
ttp://linux-ip.net/html/ether-arp.html つまり ARP Request されてない ARP Reply のことが Gratuitous ARP。
ソースとリクエストのアドレスが同じARP Request が Unsolicited ARP。
いろいろぐぐってみると、両者を含めて Unsolicited って言ってると
思われる文章もあるし(arping のマニュアルとか)、Stevens の「詳解
TCP/IP」では前者の記述は無くて Gratuitous ARP って書いてあるね。
# 「根拠のないARP」って一瞬なんだかわからんかったぞ。>詳解TCP/IP
# 「余計なARP」とか「押し付けARP」とかそんな感じじゃないかな。
gratuitousというのは、 与えられられたが、その根拠はない、その両方の状態のこと。
質問です。 Linuxだと、IPヘッダ構造体はインクルードすれば利用できるんですが、 winsockの場合だと、自分で定義しなきゃダメですか?
395 :
デフォルトの名無しさん :2005/11/04(金) 23:49:10
土管屋の集落。だな。 技術者気取りやがって。 OSI 2階層のバカ共めが。
>>395 なんだなんだ、いきなり。
話についていけなくなって嵐に走ったのか?
>>395 かなり的を射ている。彼らは土管屋なのだ。
右から左へ。左から右へ。双方向リストくらいの知能しか持ち合わせていない。
だからマリオが好きなのか
おいらはL7のもの作るよりL2〜L4のもの作ってるほうが楽しい。
簡単だからな。ドカタ的な「ノリ」で作れちゃうもん。ルータなんて。
資材運びみたいなもんだろ
ARPポイズニングなんてハッカーきどりのリア厨ぐらいしか興味ないよ そういう話はセキュリティ板か初級ネット板(旧ハッカー板)でどうぞ
>>404 で、チミはどんな高度な話題を振ってくれるんだ?
自分でちょっと勉強がてらパケットフィルタ自作してみようと思っているんですが、 今蟹とマベのDualLAN用意して、 蟹-->マベに生パケットそのまま転送するところまで作ったので、 パケットフィルタを今度は実装しようかと思ってます。 参考文献などあったら教えてください。 とりあえず、目標は、仕事場に転がってる10GBpsのネットワークで 大域98.9%維持しつつフィルタリングできるようになりたいです。
407 :
デフォルトの名無しさん :2005/11/05(土) 01:35:00
>>406 蟹って・・・ギャグ?
OSは?
フィルタリングならカーネルレベルで動作しないとパフォーマンス悪いと思うぞ
snortとかWin/Unixでソースも公開してるんじゃないか?
Winの場合デバドラキットを買わないといけないが
1GB/s*2ってどんなインターフェースだyo
いや目標なので今はまだ使っていない10GBPSのネットワーク載せてみたいだけですよ 今は会社に転がっていたパーツ組み合わせた即席Linux鯖作ってそこで勉強中です
>>406 10GBps なんて云うあまり聞いたこともない通信速度だし。
98.9% なんて、中途半端な仕様だし。
まあ、釣りやね。
>>410 蟹とかマベとか意味わかんないし、DualLANってオレ用語だけど、
ほんとに職場に10GbE NICが転がってて、それをアピールしたかったんだろうよ。
415 :
デフォルトの名無しさん :2005/11/05(土) 19:15:33
時間切れとかの判定のタイマーって sleep() 使うのが普通なのですか?
知らん
>>415 ウェイトハンドルかタイマー(シグナル)
タイマーってSleep() と同じ割り込みつかってなかったか?
421 :
デフォルトの名無しさん :2005/11/06(日) 02:36:01
ARPってDoSしやすいよね。 物理的に繋げられれば確実に勝てる。 つーかおまいらルータ屋なのか?
> 物理的に繋げられれば この時点で
423 :
デフォルトの名無しさん :2005/11/06(日) 13:53:33
今とあるアプリを作っていて、その機能を独立させたいので アプリへはローカルからソケット経由で情報のやり取りができるようにしようと思っています。 で、通信その相手はUIです。WindowsのGUIだったり、CGIだったり。 質問は通信プロトコルに関してなのですが、多くの人に扱いやすいプロトコルは、 テキストベースとバイナリベースだと、テキストベースと思ってよいでしょうか? テストベースの場合どのようなものが扱いやすいでしょうか? ここでの扱いやすいというのは、 1.さまざまなプログラムから扱える 2.複雑な処理を必要としない(複雑なフォーマットをものすごいアルゴリズムで解析したりしない) そこで、、個人的には、要求はライブラリの多いHTTPベースで、応答はCSVかなと思っていますが、 もっとよいものありますか?
425 :
デフォルトの名無しさん :2005/11/06(日) 14:21:19
>>423 XMLは考えていたのですが、ライブラリがないと自分でパーザ書くのは敷居たかいかなと思いました。
ちなみに自分はDでこれ作っているのですが、標準ライブラリにXMLがないです。
YAMLとかもいいのですが、同じ理由で。
ちなみに、ぱっとライセンスに制限されずにXMLが扱えるプログラミング言語って何があります?
java、C#、VB.NET...
426 :
423 :2005/11/06(日) 14:22:49
GPLならいくらでもありそうだけど・・
427 :
デフォルトの名無しさん :2005/11/06(日) 14:26:02
428 :
423 :2005/11/06(日) 14:40:26
あ、失礼。使えそうなものをあげました。 使えなさそうなもの(別途自分でライブラリを用意しないといけないもの) C, C++, D, HSP(-_-), VB6.. 案外あるものなんです?XMLのライブラリ。 画面くらいしか作れない!と言い切るような方でも簡単にXML使えますでしょうか。
XMLは5年後には滅亡するよ
XML SUCKS, SEXP RULES!!
XML SUCKS, SSTP RULES!!
XML SUCKS, SEX RULES!!
433 :
デフォルトの名無しさん :2005/11/06(日) 16:46:24
>>423 どのレイヤーのプロトコルを作ろうとしてる?
ちなみに要求をHTTP、応答はCSVなんて言っちゃってるけど
もう少しお勉強してから作った方が良いのでは?
今のまま作らせると要求応答、HTTPでやるんでしょう、どうせ。
HTTPより上層のプロトコルを決めようとしてるの?
今日のまとめ SEXはSOAPにしろよ
>>428 CもC++もXMLライブラリくらいある。
「画面くらいしか作れない」ってどういう意味?
個人的にはXML-RPCかSOAPを推す。
>436 428をよく読め
selectでfd_setを指定しますよね?read/writeは分るんですがexceptってなんでしょうか? 帯域外データって奴ですか?それともエラーですか?
エラー
440 :
423 :2005/11/07(月) 01:17:14
>>433 ああ、すみません。
HTTP上でデータ部が絶対にCSVであること保障するって意味です。
441 :
423 :2005/11/07(月) 01:20:30
できるかぎり敷居を下げたいので、いろいろと悩んでいたのですが、 TCP上に独自のプロトコルを定義して、ライブラリは要求に応じてこっちで作ることにしました。 それが一番敷居を低くできるかなと。
>>441 敷居下げるんならSOAP使った方がいいと思うんだけどな。
ま、HTTP/App鯖で実行するアプリケーションならHTTPでもSOAPでもいいだろうけど
そうではないようだから、
>>441 が楽じゃないの。
HTTP鯖の機能を自前で実装するのは面倒くさいでしょ。
ま、Windows限定なら、そういうのはCOMサーバにしちゃうのが普通な気もするが。
445 :
デフォルトの名無しさん :2005/11/07(月) 04:00:35
結局はまたソケットの話になるのかよ・・・
WSAEventSelectで、FD_CONNECTが起きる前にFD_READ, FD_WRITEが起きることはあるのでしょうか?
ない
UDPの場合とか?
今スタティックコントロールを使用していてどうしたらいいか不明な点があるので教えてください。 Win32オンリー非MFCです。 スタティックコントロールに文字列を表示しているのですが CreateWindowする際のウィンドウスタイルで SS_WHITEFRAME SS_BLACKFRAME SS_GRAYFRAME SS_SUNKEN SS_ETCHEDFRAME のいずれかを指定すると文字列が表示されなくなっていまします。 これらを指定した状態で文字列を表示するにはどのようにしたらよいでしょうか?
450 :
449 :2005/11/07(月) 19:31:06
あ、スレ違いでした・・・ Win32API質問箱スレとおもって書き込んでました。 失礼しました。
socketの質問で申し訳ありませんが、 selectでFD_ISSET(s,&fdread)のときにrecvをしないでFD_CLR(s,&fdread)としても 受信内容は失われませんよね? 次にまたselectしたときにまたFD_ISSET==TRUEになりますよね。
はい。
さんきゅ
454 :
デフォルトの名無しさん :2005/11/08(火) 04:03:47
>>451 出た。ソケット。やっぱり来るんだよな。
前スレ見ろ
またソケットか
わざわざ&fdreadとやってるのに
>>451 はなんで受信内容が失われると考えたのだろうか
winsockを使っているんですが、 recv(sock1, buf, BUFSIZE, 0); recv(sock2, buf, BUFSIZE, 0); と受信しようとすると、sock1で受信してからsock2で受信することになるんですよね。 いつどちらからデータが送られてくるのか予想できないので、 sock1,sock2とも両方から同時にrecv()をしたいのですが可能なのでしょうか? 事情があって、同一スレッド内で処理をしないといけません。
select関数使うとか?
設計が糞
457の書いたソース読むの怖いな。
>>460 書き直すと、
FD_SETでfdreadにセットしたのだから、FD_CLRはfdreadをクリアする
何故受信バッファ云々を考えたのだろうか。
CLeaRだけに、安易に使うとプログラムも消えちゃうよ! (注意)
WSAEventSelectで(FD_CONNECT | FD_READ | FD_WRITE | FD_CLOSE) としているのですが 自分がshutdown(SD_SEND)した場合、これ以降FD_WRITEイベントは起きないことは決まっているのでしょうか?
NATはどんな影響があるのでしょうか? ソケットで言うと、 TCPの場合、NAT内からconnect()することはできるが、accept()できない。 UDPの場合、sendto()はできるがrecvfrom()ができない。 ということでいいのでしょうか?
>>468 できないってことはない
acceptはUPnP, SOCKS, あるはい静的NATやDMZのどれかでもあれば出来る
recvfromはsendtoで送った相手からなら一定時間はできる(そうでないと通信にならない)
>>457 > sock1,sock2とも両方から同時にrecv()をしたいのですが可能なのでしょうか?
せめて、別々のバッファにしとけよ。
非同期ソケット(ストリーム)のテストプログラムを作っていて クライアントはデータを送信し、サーバはそれを受信しサイズを表示する を繰り返す単純なものです。 ところが、クライアントがsendに渡すデータサイズが232912バイト(1024*227+256+128+64+16)を1バイトでも超えると SOCKET_ERRORが返り、WSAGetLastErrorはWSAECONNABORTED(10053)が返ります。 送信できるサイズを超えた場合は、送信できる分は送信してくれてそのサイズを返す、と思っていたのですが違うのでしょうか? 232912バイト以下なら正常に送信できてます。
WSAEMSGSIZEじゃないのか? まあWinsockだから諦めた方がいいかも。 そもそもSO_MAX_MSG_SIZEをgetsockopt()してそのサイズで切った方がいいし。
>>473 そうなんですか・・・面倒くさいですね。
>WSAEMSGSIZEじゃないのか?
デバッガで見てもprintfでも10053でした。
サーバ・クライアント共に同一マシン上で動かしてるのは関係ないですよね?
WSAEMSGSIZEが返るときなら、 プロトコルスタックがギブアップした時だから、 関係あるかも知れないけれど、 接続切れちゃうなんてバグ(MS的には仕様か?)でしょう?
>>472 OSはなに?2kだとそんな問題起きないが
477 :
デフォルトの名無しさん :2005/11/11(金) 17:44:23
初めての入門には、winsockとunixのソケットのどちらから先に学ぶのが良さそうでしょうか? unixでは、open,close,writeを*FILEの代わりに使ってファイル入出力ができます。 windowsでは、コピペでつくったプログラムを少しいじれる程度でしかありません。
479 :
デフォルトの名無しさん :2005/11/11(金) 18:21:34
自分で調べると、ネットワークの書籍はどれも値段が高いので慎重です
ならばやめてしまえ
482 :
デフォルトの名無しさん :2005/11/11(金) 18:30:45
もういいや。今まで通り、両方やります。
そして、今まで通り有益な情報は出さないようにします
>>477 aio_*()のあるやつならUNIXでもいいんじゃない?
シリアスなアプリやサーバでオープンソースなものが多いから参考になるし。
定番書籍は、
>>5 の
>UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI
485 :
デフォルトの名無しさん :2005/11/11(金) 18:52:11
ネットワークってUNIX(BSD)が元祖の所が有るからなあ。 各OSの方言から入ると苦労するかも。
Winsock2の独自APIにもいいのがあるけれど、 実装の制限が多くていろいろ苦労が多いからねえ。
無料で配布して後から勝手に使うなと文句をいう それがBSDクオリティ
488 :
京子 :2005/11/11(金) 20:21:22
あのー心理テストのHP作りたいんですけど、結果のところで答えを いくつかに分けなきゃいけないじゃないですか?やり方が分からないので誰か教えて頂けませんか? どこで聞いたらいいか分からないので・・お願いします!
490 :
477 :2005/11/11(金) 20:27:00
>>484 さん
ご親切にありがとうございます。
unixの定番の書籍の方を検討してみたいと思います。(値段は高いスけど ^^;)
明日本屋へ探しに行ってみます
491 :
477 :2005/11/11(金) 20:30:32
皆さんも貴重なご意見を、有難うございました。
商用UNIXこそが本流だよ。 まがい物にだまされないように。
本物はソラリスだけ でも最近無料とかオープンソースとか下品なことやってるので心配
MMO作ろうと思ってんだが、とりあえずマルチスレッドで複数クライアントでチャットが出来るようにしたい。 サーバーはDOSプログラムの方がいいよな? スレッドの種類はとりあえず、接続・受信・送信スレッドでいいよな 1対1の通信は出来たんだが、複数人でチャットするにはどうすればいい? 非同期だから、select使うのはわかるが・・・
>>487 むしろ日本人のフリーソフトにそういうの多くないか
BSDライセンスだけど転載のときは連絡をするのが「礼儀」だとか
だったらライセンスに書いとけと
498 :
デフォルトの名無しさん :2005/11/12(土) 02:57:30
GPLだけどソースは公開しないし、望外な値段でなら見せるよって所も多い悪寒。 だったらGPLって言うな。
そんな事は無いから。馬鹿は黙ってろ。
ライセンスの話は専用のスレで。
日本人はライブラリに弱いからな 改良は得意だけど本流を作る能力がないってのが原因か。
.NET 2.0(Visual C# 2005 Express)でソケット通信のサーバプログラムを非同期式に書こうと思っています。 イメージとしてはGUI(Form)アプリケーションのStartやStopボタンで制御するWebサーバのようなものです。 メインのクラスではBindしてListenしたSocketに対し、コールバック関数を指定してBeginAcceptとしています。 コールバック関数ではEndAcceptして処理してShutdownしてCloseしてからBeginAcceptとしています。 ここでお聞きしたいのですが、メインのクラス側からこのサーバを停止させたいと思うのですが、 そのままメインのクラスでShutdownしてCloseしようとするとコールバック関数のEndAcceptで例外が発生します。 既に閉じられたSocketに対してEndAcceptするからだと思います。 このようなケースではどのようにするのが定石なのでしょうか。
え?コネクション毎にListeningSocket閉じてるの?
504 :
デフォルトの名無しさん :2005/11/13(日) 19:14:03
>>502 そのようなケースでは貴方が業界から去ることが定石です。
>>494 > とりあえずマルチスレッド
お前みたいなヴォケがいるから
糞スレになるんだよ
506 :
デフォルトの名無しさん :2005/11/13(日) 19:39:17
>>505 お前みたいに釣られる屑がいるから
糞スレになるんだよ
お
508 :
デフォルトの名無しさん :2005/11/14(月) 12:14:39
>>501 ヲレライブラリを作ると、車輪の再発明とか逝って叩こうとする風習が有るのも問題。
なんか天才じゃないとライブラリ作っちゃダメみたいなところはあるよな。
日本発のソフトなんてことごとく批判されるし、育たない。
亜米利加人が適当に作ると、すぐ日本語化対応されて広まるのとは対象的。
>>508 日本のはただのラッパー
メインルーチン隠しておまけにいくつかの機能潰してそれが何かの役に立つわけ?
汎用ですよー、速いですよーって機能縮小してなにをいってるんだか
向こうはSocketでもDirectXでも機能を付け足していってるのに
日本は元APIに無いからそんな機能は無理ですってアフォだろ
アメリカなんて叩かれることすらなく消えていくのがほとんどなのに
ちょっと注目集めたらすぐに放り出してギャラリーのせいにする
方向性がボケてるから外野の声に惑わされるんだよ
>>510 「日本のはただのラッパー」というラップの歌詞かと思った
Yo! Yo! 日本人! Yo!
>>510 > 向こうはSocketでもDirectXでも機能を付け足していってるのに
> 日本は元APIに無いからそんな機能は無理ですってアフォだろ
SocketのIPv6拡張は日本人の貢献も大きいんだが?
IPv6「拡張」って言ってる時点でオリジナルではない希ガス
>>514 > オリジナルではない希ガス
>>510 > 機能を付け足していってるのに
> 日本は元APIに無いからそんな機能は無理です
そもそもIPv6に日本人の寄与があるって書くと、v6だからオリジナ(ry
Windows上でIPv6に対応したLinuxのようなtraceroute(UDP撃ってICMP受ける)を作りたいのですが、 IPv4はできたのですが、IPv6がうまいこといきません。 WinsockでIPv6のRAWモードソケットってちゃんと使えるのでしょうか? やっぱりWinPCapが必要なのかな...
AF_INETソケットだと、IPv4しか取得できない。 UNIXの場合は、socket(2)の第三引数にIPPROTO_RAWを指定すると何でも取得できる。 WinPcapはlink-layer network accessを使っている。
とりあえず、XP以降じゃなきゃ無理だとは想ったけど
IRCの通信内容の概要とかを分かりやすく解説したサイトってないでしょうか RFCの日本語訳を読んだんですがさっぱりで。
522 :
520 :2005/11/18(金) 23:43:51
>>516 IPv4にインスパイアされてアドレス空間を増やしてみましたが
IPv4の使用を制限するものではありません
むしろIPv4から派生したIPv6が有名になっていくことに IPv4の方々が喜んでくれるのではとも思っていました
そこは「インスパイヤ」と書かないと
inspiya
528 :
デフォルトの名無しさん :2005/11/19(土) 21:55:09
WSARecvで非同期で受信する方法としては何がありますか? CompleteRoutinもWSAOVERLAPPEDのhEventも使わず、 WSAGetOverlappedResutも使わない場合、他に受信する手だてはありますか? Winsok2はどうもわけがわかりません。
他に(winsock非標準ながら)IOCPにする手も無くはないが、 意味的にはGetOverlappedResultと大差ないし。 つーか、自分で挙げた手段では何が不満なの?
530 :
デフォルトの名無しさん :2005/11/19(土) 22:19:30
IOCPってI/O completeってやつですか? そこらへん解説してる本とかってありませんか? WinsockやWinowsのI/Oの仕組みが全然わかってないので、 どういう方法で通信が出来るのかが知りたいのです。 Winsock FAQを読むと、もっと効率の良い方法があるのかなと思いまして。
つまり、自分で調べる気も勉強する気もないと。
ここで聞いたら簡単に勉強できるかなと思いまして
自分で調べるの面倒なんですよ
「Win32ネットワークプログラミング」にだいたい書いてあった気がする
535 :
530 :2005/11/20(日) 09:04:07
そんなに教えて君な書き込みだったでしょうか。
当然、531,533は偽者です。
IOCPに関して書いてある書籍でもあれば買って
それを読んで勉強しようと思っています。
どうも"complate"とか"port"とか一般的な単語のせいで
いまいちgoogleでの検索ヒットも芳しくありません。
もしよろしければ、せめて幾つかお薦めの検索キーワードだけでも教えていただけないでしょうか?
>>534 読んでみるとします。
IOCP CTRL+F
537 :
517 :2005/11/20(日) 09:18:52
>>518 AF_INET6を指定すれば、IPv6のパケットを拾える、
ということではないのでしょうか?
MSDNヘルプには出来るとも出来ないとも書いてないもので。
>>519 実行環境はXPのSP2です。
開発環境はVisual Studio .NET 2003 + Platform SDKです。
ttp://mzweb2.econ.doshisha.ac.jp/1998/Study/tuusin/tera.html ここにあるソースをコンパイルして実行すると、
java.net.BindException: Permission denied
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:331)
at java.net.ServerSocket.bind(ServerSocket.java:318)
at java.net.ServerSocket.<init>(ServerSocket.java:185)
at java.net.ServerSocket.<init>(ServerSocket.java:141)
at Receiver.mainproc(Receiver.java:123)
at Receiver.main(Receiver.java:137)
このようなメッセージが出てきて実行できません。
このエラーメッセージはMacOSのターミナルからの場合ですが、LINUXマシンからもpaermission系のエラーで動かないようです。
とりあえずこのプログラムを走らせてみたいのですがどこをどう設定すればいいのかよくわからないのです。
ものすごく初歩的な質問だとは思うのですが、どなたかお答え頂けませんか?
1024より下のポートにbindするには特権が要る。 Linuxなら、rootか。MaxOSは知らんが、基本がUNIX系なら、 同じように管理者系の権限が要るはず。
540 :
538 :2005/11/21(月) 00:30:25
>>539 LINUXではrootログインで解決できました。ありがとうございます!
MacOSではrootログインの仕方がよくわからないので調べてみます。
>>540 > MacOSではrootログインの仕方がよくわからないので調べてみます。
sudo
winpcap 3.1b4のドライバってカスタムハックドライバだよな? なんかウイルスがどうのこうのとか出るときあるんだがこいつ raw socketでも見にいってるのか?ちなみにWin2000でもwinXP SP1でもSP2 でもそうなる。怪しいよな
543 :
538 :2005/11/22(火) 18:13:22
>>541 実行できました。ありがとうございます。
winpcapは悪用されることも多いのでウィルスとして検出されがち
Winでネットワークのドライバを作りたいのですが資料となるものを 集めたいのですがどこから手をつけたらいいのか教えてください。
現在マルチスレッドにて通信プログラムを作成しているのですが、 IOスレッドとaccept()スレッドに分かれており、ユーザーの入力に より任意のタイミングでaccept()スレッドを終了させたいのですが、 accept()ではずっと待ち状態になってしまっているのでどうしたら よいのかが皆目見当もつきません。 何かいい案はないでしょうか?
connect()
select系でソケットと一緒にパイプやEventを待つ
close()で抜けて来るようにお願いする
close()さん抜いてください。
552 :
デフォルトの名無しさん :2005/11/29(火) 00:37:33
553 :
デフォルトの名無しさん :2005/11/29(火) 07:58:56
>>540 linuxでもsudoの癖付けた方がいいよ。
運用ではroot権限でなんて怖くて動作させないだろうし。
>>547 接続をaccept()でなく、select()→accept()で待つ。
「TransmitPacketsが使える環境なら使う」を同一実行ファイルでやろうとする場合、 LoadLibrary+GetProcAddressではなく、WSAIoctlにSIO_GET_EXTENSION_FUNCTION_POINTERを渡すのが 正統で保証されたやり方なのね。 前者だと、自動的にリンクされるものと同じDLLを複数回ロードすることになって 両方を経由しての呼び出しで整合性が保証されるのか、若干の不安があるし。
>>552 最後のプロセスがcloseすると手放しちゃうからな
それは会社としてまずい
557 :
デフォルトの名無しさん :2005/12/02(金) 00:39:30
SetSockOpt()でSO_RCVBUF(受信バッファ)を32KBに設定したんですが イーサリアルでwindow sizeを見ても64240(←デフォルト?)から 変更されてませんでした。 GetSockOpt()で取得すると32KBとなってます。 ソケットに対して設定はされているようですが 適用されていないような感じがします。 どなたかなにか分かる人いますか? [WinXp VC6 MFC CAsyncSocket] ちなみにレジストリをいぢる(追加する)とちゃんと window sizeがかわってました。
>>557 もう一回勉強しよう。
答え:バッファサイズとウィンドウサイズは関係がない。
>答え:バッファサイズとウィンドウサイズは関係がない。 初耳だ。
560の講釈を拝聴するスレになりました
コネクション成立後にSetSockOptを呼んだに一票。
566 :
デフォルトの名無しさん :2005/12/03(土) 00:06:49
557です。
>>558 自分は
受信バッファ≒window size
ぐらいに思っていたので全く関係がないことはないと
思っているのですが、いかがでしょうか?
ちょっとして根本的になにかまちがってます?自分...
>>562 さすがにそれはないですw
567 :
デフォルトの名無しさん :2005/12/03(土) 00:41:02
An Interdisciplinary Approach to Designing Fast Networked Devices これ読んで勉強しているのだがイマイチプログラム書き方がわからない 何か他にいい本紹介してくれないか?
568 :
デフォルトの名無しさん :2005/12/03(土) 00:45:08
>>567 >プログラム書き方がわからない
”3日で覚えるC言語”みたいな本から始めたら?
カッコつけて難しい本読まなくていいじゃん。
569 :
デフォルトの名無しさん :2005/12/03(土) 01:05:03
>This is unrelated to SO_MAX_MSG_SIZE or the size of a TCP window. これはSO_MAX_MSG_SIZEとは関係なくて、TCP windowのサイズです。
>>569 >>564 のリンク先に
>DefaultReceiveWindow
>値の種類 : REG_DWORD
>既定値 : 4096/8192/8192
>説明 : フロー制御を適用する前に AFD が接続上でバッファに格納する受信バイトの数。
>アプリケーションによっては、この値を増やすと、パフォーマンスが若干向上することがあります。
>ただし、リソースの使用率が大きくなります。
>アプリケーションからこの値をソケット別に変更するには、SO_RCVBUF ソケット オプションを使用します。
って書いてあるけど、これは大嘘?
>>571 お前はTCPの"window"って概念を理解してないんだから、
せめて
>>569 の挙げてくれたURLを精読するまで発言するな。
>>570 これはSO_MAX_MSG_SIZEにもTCP windowのサイズにも関係ありません。
>>564 のページの
> 受信ウィンドウのサイズを特定の値に設定するには、次の 2 通りの方法があります。
> ・"TcpWindowSize" レジストリ パラメータ (「付録 A」参照)
> ・Windows Sockets の "setsockopt" 関数 (ソケット別の設定)
は間違いな。
前者は「提示可能な TCP 受信ウィンドウ の最大サイズ」(動作中小さくなりうる)
後者は「内部バッファの合計サイズ(送受別)」
>>572 >Windows Server 2003 では、アドバタイズした TCP 受信ウィンドウの既定サイズは、以下の要因に依存します。
>なお、これらの要因は優先度の高い順に示してあります。
>1.接続の SO_RCVBUF WinSock オプション。
>2.インターフェイス別の TcpWindowSize レジストリ設定値
>3.グローバル TcpWindowSize レジストリ設定値
>>573 以下の3人は関係がないと思っているようですが。
>>558 >答え:バッファサイズとウィンドウサイズは関係がない。
>>563 >関係があるって聞いた覚えもないなw
>>572 >これはSO_MAX_MSG_SIZEにもTCP windowのサイズにも関係ありません。
>>575 「関係」って単語でレス抽出するんじゃなくて、内容よく読んだほうがいいよ。
最後のやつなんてmsdnそのまま訳しただけじゃん。msdnに文句言いたいの?
パフォーマンス改善には関係あるけど、直接には関係ないでしょ。 バッファとウィンドウって別の物だし。
UNIX 系 OS だと、SO_RCVBUF と、受信ウィンドウの最大値は同じだよ。 Windows 系がそうじゃなくて、SO_RCVBUF よりも大きな値になるって ことの方が驚いた。
> バッファとウィンドウって別の物だし。 受信ウィンドウってのは、あとどれくらい受けとれるかを通知する値。 だからバッファサイズよりも受信ウィンドウが大きいというのは、変。 もちろんウィンドウが開ききるまでは バッファの空きサイズ>受信ウィンドウ ということはありうる。でも バッファサイズ<受信ウィンドウ ってことはありえない。 というのが UNIX のソケット実装での常識。
581 :
デフォルトの名無しさん :2005/12/03(土) 23:14:07
OSはLinux、コンパイラはgcc。 struct sockaddr_in構造体を使用する前にmemset(3)でゼロクリアしてる 例をよくみかけますが、なぜゼロクリアしているのですか? /* 例 */ struct sockaddr_in to; memset(&to, 0, sizeof to); /* ゼロクリアしてるのはどうしてなぜ? */ to.sin_addr.s_addr = inet_addr(ip); to.sin_family = AF_INET; to.sin_port = htons(port);
sin_addr.s_addr, sin_family, sin_port 以外のフィールドにも 意味があるかもしれない、あるいは今は意味がなくても、将来 拡張されて意味があるようになるかもしれないから。 ゼロクリアしておけば、そういう場合でも互換性が保障される。
予防的措置。 memset後の3行が全体を覆うという保証があるならいいけど、 Linuxのような紛い物のunixだとそうはいかない
584 :
デフォルトの名無しさん :2005/12/03(土) 23:23:05
>>581 そのようなコーディングをよく見かけます。
個人的には、memset関数などによるゼロクリアは好きではない。
あまりお勧めしません。
構造体を初期化するなら、各々のメンバー変数ごとに、初期値を代入すべきであろう。
初期化する必要のないメンバー変数は、初期化する必要もなかろう。
memset関数などによるゼロクリアの利点をあえて挙げるとすると、メモリダンプしたとき、
見やすいということはある。
> Linuxのような紛い物のunixだとそうはいかない 別にLinuxに限らず、あの3行で struct sockaddr_in の 全てを多うOSなんてないのでは? もしあったら、OSの 名前とバージョン、struct sockaddr_in のコピペきぼん。
586 :
デフォルトの名無しさん :2005/12/03(土) 23:25:52
俺はさ、sockaddr_inをバイナリで扱う処理系があるから0クリアしろって覚えたんだけど。
> 構造体を初期化するなら、各々のメンバー変数ごとに、初期値を代入すべき > であろう。 現在存在しないメンバー変数が、将来拡張されて増えるという可能性 もある。そういう場合、初期値の代入は、やりたくてもできない。 > 初期化する必要のないメンバー変数は、初期化する必要もなかろう。 ゼロクリアしておかないと、将来メンバーが増えたときに困る。 実際、*BSD では 1990年頃に sin_len というメンバー変数が増えたわけだし。
> sockaddr_inをバイナリで扱う処理系があるから 言ってる意味が分かんない。 sockaddr_in はバイナリで扱う処理系しかないと思う。 たとえばテキストとして扱う処理系があるならお目にかかりたい。
589 :
デフォルトの名無しさん :2005/12/03(土) 23:36:27
>>587 >ゼロクリアしておかないと、将来メンバーが増えたときに困る。
どう困るんだ?
具体的な例をあげてほしい。
591 :
デフォルトの名無しさん :2005/12/03(土) 23:50:23
>>590 それは例えば、sin_lenが適当な値(256とか)なら問題が発生し、
0ならその問題を回避できるという意味ですか?
sin_len の場合は、メンバーが増えた例として挙げただけで、 ユーザランドからカーネルへのインターフェースとしては使わ れてないと思う。だから、ゴミが入ってても大丈夫な筈… ちなみに *BSD の sin_len は 1 バイトなので、世にあるほと んどのマシンでは 256 にはなりえないと思う。 でもどのメンバーでも、将来的にこういう保障が成り立つとは 限らないので、アドレス構造体はゼロクリアしておいた方が 安全じゃないかなー。
ハナシの流れを読まずにレス 初期化されていないフィールドをアクセスする行為は実装バグ だとおもいますが、バグに耐えられるように初期化して置けと いうことですか?なんかおかしくないですか?
いや実装バグうんぬんじゃなくて、API の仕様として、ゼロクリア することが求められているかどうかって話だと思う。 特定の OS に限って言えばゼロクリアしてなくても大丈夫な筈 だけど、OS によってはフィールドが増えてることもあるし、 そういう OS では、そういうフィールドに意味があるかもしれない。 *BSD の場合には意味がないみたいだけど、全ての OS で意味が ないかどうかは分からないでしょ。ゼロクリアしておけば、知らない OS でも無変更で動くことを期待できるんじゃないかってこと。 OS 限定なら、ゼロクリアしなくても大丈夫でしょ。きっと。
仕様では、リザーブされた引数やメンバ変数は0セットしとけ、というのが多いね 拡張したときに、0だったらこれまでどおりの挙動にするということだろう 明示されてるのがベストだが なくても暗黙の了解ってことで0にするなあ なんかC言語スレっぽいね
596 :
デフォルトの名無しさん :2005/12/04(日) 00:23:15
>>595 >仕様では、リザーブされた引数やメンバ変数は0セットしとけ、というのが多いね
ほう、そうなのですか。ゼロクリアは仕様なのですか!?
ルータ側でパケット圧縮効率がよくなるからでは?
文盲?
*BSD の socket のドキュメントがゼロクリアしてるから、
もともとは仕様だったんじゃないかなあ。
>>597 sockaddr_in 構造体そのままで、ネットワークに送ることは
ないから全く関係ない。送るのは sin_addr.s_addr と
sin_port の部分だけ。
スティーヴンス本くらい読んでおこうね。
Stevens は bzero() しているから、あの本で勉強した人は みんなゼロクリアしてるだろうね。
ゼロクリア処理は処理が重くなるの?
そういう話ではない。 ユーザに分かるレベルでは重くならない。
604 :
デフォルトの名無しさん :2005/12/04(日) 01:42:49
チアリーダー部門(女性3名)、広報担当(女性1名)
慰安部門(女性4名)
>>580 だからさ、バッファサイズを32KBに増やしたからって、通常の使い方で受信ウィンドウがいきなり大きくなったりはしないでしょ。
タイムシェアリングである間隔で定期的にしか取りに逝けない時に、取りこぼすのを回避したくてバッファサイズを増やすのに、受信ウィンドウも連動して大きくなったら増やしたのに取りこぼしてしまって意味無いじゃん。
>>607 そうじゃなくて、バッファが32KBしかないのに、
受信ウィンドウサイズが64KB近くもある(
>>557 )
のが変だって言ってるの。
バッファサイズ以上に受けとれるわけないでしょ?
なんかUNIX板某スレの422に誤爆した香具師がいるような気が
俺もそれ見てここの誤爆と思った>spamとWordについて話し合うスレ
>>609-
>>611 はFreeBSDユーザなのよん
DirectPlayまじいらね
バイナリとして扱う云々ってあれじゃね バイトオーダのみ逆で実行バイナリは互換という環境。
ゼロウィンドウって何やってるのよ 通信できるかどうかピンポンダッシュしてるの?
>>608 バッファサイズ32KBにしてもウィンドウサイズ64KBのままだった
↓
関係ない(→から変わるわけがない)
↓
「関係ないなんて初耳だな」(こっから話がずれ始める)
サイズが連動して変わらない理由として「関係がないから」と言ってるのを読まず、
「いやこういう関係がある」と別の話をしだして話をこじらせてる人がいるのです。
言葉の不足につけこんだ揚げ足取りですね。
580は補足のつもりだったんだろうけど、「初耳だな」の人のせいで、反論のつもり
だったと勘違いされたんですよ。ID出ない板ではレスに注意が要りますね。
Linuxでデフォルトゲートウェイを取得するCプログラムを作りたいと思っています。 一応Rubyでこんな感じでやれば良いということは解ったのですが… IO.foreach('/proc/net/route') do |x| a=x.split(/\t/) if a[1] == '00000000' p a[2].scan(/../).collect{|i|i.hex}.reverse.join('.') end end これをCで実現するにはどうしたら良いのか… なにか良い/proc/net/routeの解析方法は無いでしょうか。
このスレには時々英語のできない人と日本語のできない人が 偉そうにレスするから話がこじれるんだろ
俺は英語も日本語もできるけどな
>>618 Ruby環境を入れることが出来ない制約条件があるので…
Cオンリーで書かなくてはいけなかったり。
字句解析をCでするのは大変そうだなぁ…
>>617 君の日本語もおかしいけど、意味は通じる。
寛大な俺は許してやるよ。
>>620 netstat -rのコード頂いちゃえば?
>>622 routeコマンドを参考にして、こんな感じで出来ました。ありがとうございます。
FILE *route;
char g[MAX_VAL][MAX_LEN];
char gwc1[3],gwc2[3],gwc3[3],gwc4[3];
int gw1,gw2,gw3,gw4;
route=fopen("/proc/net/route","r");
if(route == NULL){
return -1;
}
while(fscanf(route,"%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",
&g[0],&g[1],&g[2],&g[3],&g[4],&g[5],&g[6],&g[7],&g[8],&g[9],&g[10]) != EOF){
if(strcmp(g[1],"00000000") == 0){
gwc1[0]=g[2][6]; gwc1[1]=g[2][7]; gwc1[2]='\0';
gwc2[0]=g[2][4]; gwc2[1]=g[2][5]; gwc2[2]='\0';
gwc3[0]=g[2][2]; gwc3[1]=g[2][3]; gwc3[2]='\0';
gwc4[0]=g[2][0]; gwc4[1]=g[2][1]; gwc4[2]='\0';
gw1=strtol(gwc1, NULL, 16); gw2=strtol(gwc2, NULL, 16);
gw3=strtol(gwc3, NULL, 16); gw4=strtol(gwc4, NULL, 16);
printf("%d.%d.%d.%d\n",gw1,gw2,gw3,gw4);
}
}
fclose(route);
ムズス
625 :
デフォルトの名無しさん :2005/12/07(水) 01:23:04
MFCスレかもしれんけど CMySocket : public CSocket { hoge... } ってかんじでCSocketから派生させたクラスCMySocket。 あるスレッドで、 CMySocket *aaa = new CMySocket(); と、インスタンスを生成して、 別スレッドから CMySocket.CreateだとかConnectだとか呼び出すと、もれなく挙動不振になる。 CSocketは同じスレでしか使えないとかいう厳しい掟でもあるの・・・??
MFCなんてうんこ使うなよ
628 :
デフォルトの名無しさん :2005/12/07(水) 02:22:24
>>625 MFCのクラスオブジェクトを共有するマルチスレッドセーフなコーディングはややこしいから、
MFCのクラスオブジェクトはスレッド間で共有しない!(それじゃあ、回答にならんか)
ていうか、実用的には CSocketはメッセージループが動いているスレッド以外使い物にならないと思った方が良い。 より正確には CSocketは[メッセージループが動いているスレッド以外]使い物にならない[と思った方が良い]。 だが。
要するに CSocket は使い物にならない!
Windowsで組むんならWinSock直叩きが基本だろ
632 :
625 :2005/12/07(水) 08:56:04
サンクス…。まじやる気なくすわ。 どうも見ても糞ライブラリです。 本当にありがとうございました。
何か良いライブラリはないのかなと思っていたけど、Winsock直叩きが基本なのか。 もっともやる事って、繋いでsendするだけに見えるけど、甘いんだろうな…。
>>633 sock直叩きしなくても済む良いライブラリを作って公開してくれ。
繋いでsendする以外に何かすることあったっけ
かなりデカいけどACEとかいうライブラリがあるよ。 使ったことある人、いる? まあちょっとした仕事なら、socket直叩きでいいだろうし、その簡単なラッパーぐらいは 必要に応じて皆作っているとは思うがね。 MFCのSocketラッパーは糞ってのは常識っす。
638 :
デフォルトの名無しさん :2005/12/07(水) 23:02:33
低レベル関数なんだから、いろいろ制御できるんじゃね? accept,bindとかもあるじゃん。
639 :
デフォルトの名無しさん :2005/12/07(水) 23:03:24
>>636 漏れACE使った。詳細は社外秘のため教えられない。
上に出たソケット関数は覚えるべき サーバとクライアントが繋げられるのを理解するのにもね そういうのを知ってると後々イメージを広げられるよ
ふつーにTCPを使う場合はsendとrecv サーバーも考慮すればbindとlistenとaccept 本質的にはこれだけなんだけど こいつらはブロックするという特徴があって それを回避するため、あるいは効率よく動かすために 覚えないといけないことが、環境依存なものも含めててんこ盛り。
ノンブロッキングIOしか使ったことねーや・・・
パケットのフィルタ作ろうと思うんだけどね unsiged char *でデータ見ていって 該当offsetのデータだったらね if(daga[4] == 0x44)とかやってるけどなんか遅いのね もっと高速化する方法おちえて
644 :
デフォルトの名無しさん :2005/12/08(木) 01:20:23
>>642 パフォーマンスの悪いシステムをお作りになられてるのですか?
>>644 高スケーラビリティ確保のために、1スレッドで複数ソケットに
対する多重監視をする仕組みにしておく、という手法は、あり
がちだと思うのですが。
あなた、10000ユーザ同時接続のサーバーの稼動に10000スレッド
割り当てるんですか?
ノンブロッキングI/O ≠ 非同期I/O
>>644 は、非同期I/Oを使えやゴルァ
といいたいのかもしれない
>ノンブロッキングI/O ≠ 非同期I/O ノンブロッキングI/Oって非同期I/Oの実現手段じゃないっけ。
648 :
デフォルトの名無しさん :2005/12/08(木) 01:36:49
>>645 10,000スレッドの解決策が多重監視のみだと言ってる気がしてならんのだが?
今一歩考えを深めたまえ。
649 :
デフォルトの名無しさん :2005/12/08(木) 01:37:51
>>647 Stevens本でも嫁
>>645 preforkとかthreadpoolってしってる?
>>650 おいおい、非同期I/Oって、ノンブロッキングだけじゃないぜ。
Windowsで普通に使われている完了待ちも、非同期I/Oの一つだろ。
もちろん、Unix系でもaioとして、Stevens本でも触れているはずだが?
それに、Stevensを読むまでもなく
1接続1スレッド/プロセスという形態の非効率さは
ちょっと考えるだけでもわかりそうなものだが。
652 :
デフォルトの名無しさん :2005/12/08(木) 02:02:04
間違ったスレッドプールの設計を何度も見てきた。
653 :
デフォルトの名無しさん :2005/12/08(木) 02:04:19
>>651 だから何言ってんだよって。
要件に応じて設計するんだから、お前の言ってる一般論での
効率・非効率なんて変わるだろそんなもん。
一般論だけで決めつけるなよ。
654 :
デフォルトの名無しさん :2005/12/08(木) 02:05:39
何を求めてるかをハッキリさせずに、ちょと考えるだけでもと考えることが 考え早まりすぎ。お前、すぐコーディングに取りかかる性質だろ?
と、最初に
一般論どころか、パフォーマンスが悪いものと決めつけて
>>644 を書いた人が申しております。
説得力抜群ですな。
以上、ジサクジエンデシタ。
必要条件と十分条件の違いすら分からない人が居るようですね
会話が全くかみあってない気がするんですが。
お祭りワショーイ?
660 :
デフォルトの名無しさん :2005/12/08(木) 03:05:08
ま、パフォーマンスの問題は宗教論争に近いからな。
662 :
しぃ :2005/12/08(木) 11:09:27
質問なんですがmoteでセンサネットワークを作ってデータをPC側に 送信したいんですけど、何から手をつけていいかまったくわかりません。 そこら辺に詳しい方がいましたら連絡頂けるとうれしいです。
663 :
デフォルトの名無しさん :2005/12/08(木) 11:40:28
メールを大量に送るメールボムをプログラムしたいんです。どうやればよろしいでしょうか?力を貸してください。
通報しました。
665 :
デフォルトの名無しさん :2005/12/08(木) 12:00:47
まさか自分に送るのも違法?
はい。モード: プロミスキャスですから〜!
667 :
デフォルトの名無しさん :2005/12/08(木) 12:16:24
よくわかんないけどダメなんだ… 変な事聞いてごめんなさい。
ジョークにジョークで返したつもりだったが。 例えば、インターネットを使って離れた「自分の」PCに送りつける。 これはネットワークに負荷がかかり、プロパイダや他人の迷惑。 ウィルスを送る場合なら、盗聴している人が感染する。 どっちもよくないかと。 そのパケットがマシンから外へ全く送られないならいいんじゃね?
アホは無理して回答側に回らなくていいよ
あなたはアホではないのですね
672 :
デフォルトの名無しさん :2005/12/08(木) 13:07:03
>>663 自分に向けてメッセージを送るなら、こうだ。
for(;;) SendMessage(hWnd,rand(),rand(),rand());
673 :
デフォルトの名無しさん :2005/12/08(木) 13:08:36
学校でメールはごくたまに届かない事がある。と教わったので、実験してレポートとして出してみようと思いまして…。メールボムを使うのが調べるのにちょうどいいと思ったんです。 1つ1つ送るのは流石にダルくて…他にいい案ありましたら教えてください。
ローカルでメールサーバ立てて スクリプトでメール送信しまくれ
無闇にトラフィックを激増させるな。 他の生徒や担当しているシステム管理者に迷惑だ。 そういうことすると、フィルターで弾かれるぞ。 つか、それ自体が十分、要因になるじゃないか
>他の生徒や担当しているシステム管理者に迷惑だ。 ヒント:テスト専用のスイッチングハブにぶら下げるだけ
いや、学校鯖へ送るのかと思ってた。 >ヒント:テスト専用のスイッチングハブにぶら下げるだけ レイヤ3スイッチ?
>>673 1. 自分でMTAの動いているサーバを立ち上げる。
2. メールを送る。
3. メールをPOPで取得する前にサーバのハードディスクを破壊する。
というわけで、板違いです。
spam業者の案件でも取ったのか? 「特定電子メールの送信の適正化等に関する法律」違反で摘発されるのがヲチ。
681 :
デフォルトの名無しさん :2005/12/08(木) 16:27:48
DNSサーバのソースコードが載っているページを教えて下さい。 BIND以外のもので。
>643 もっと詳しく書いてくれないと無理
>>681 sf.netで、DNSで検索すればいいじゃん。
2ちゃんねる的にはMaraDNSがお勧め。
684 :
デフォルトの名無しさん :2005/12/08(木) 17:09:43
>683 そのページは知りませんでした。 返信ありがとうございます。
ルートサーバーって何使ってるんだろ? BIND?
プログラマの先輩がネットワークの知識がまるでないのに無茶な要求ばかりする件についてどう思いますか
日々勉強。今質問してる間もだ。 まずはスレッドを2,3常駐させ、それぞれがselectで処理する鯖を作ってみよう。
689 :
デフォルトの名無しさん :2005/12/10(土) 22:41:35
UNIXネットワークプログラミング は非常にいい本なんだが いたるところに必ず出てくるオレ関数がうっとおしい それに目を瞑れば、多分世界一わかりやすくてためになる
必ずラップするところか?
性善説はよくないというポリシーがあったんだろうな。
海外でもいいんで誰かMMORPG用のサーバプログラム解説してるとこしらないですかね
MMO用のって決め付ける必要がそもそも無いでしょ 大規模なチャットをどう捌くかとかそういう路線だから
なんかそういう本をつい最近本屋でみかけたな。 著者が韓国の人で、韓国のなんちゃらってゲームの人。 全然知らないけど。
FTP→FPS ファイル転送プロトコルはこの際関係ないね
シングルラインテキストでパケット作るならどんな仕様がオススメ? command<Base64>とか考えてるんだけど、もっとヨサゲな規格があったらおせーて。
パケットっていいかたは変か。メッセージ?
700 :
デフォルトの名無しさん :2005/12/11(日) 00:44:08
ここマジレスありですか?
ありあり
勇者と変体はマジレスOK それいがいはだめ
703 :
デフォルトの名無しさん :2005/12/11(日) 00:47:57
質問していいですか?2chもcgiも初心者です。
704 :
デフォルトの名無しさん :2005/12/11(日) 00:53:41
フリーで配付されてるFLASHのSWFファイルとHTMLファイルありますよね OSはFedora4でapacheでcgi-binにperlのスクリプト内に配布されてるHTMLをコピペで貼り付けたのですがうまく動作しません。 /var/www/htmlにファイルを置くと正常に動作するのですが? 要はFLASHをperlスクリプトで動かしたいのですが? 何か御教授いただけませんか?
ですが?って半疑問系攻めは先鋭的だな Flashはサンドボックスの一環でドメイン制限があるからそっちじゃね? サブドメイン間でしか一緒で居られないはず。
つーか、Webprog板の方が適切だと思うよ。
Base64って解凍速度速いの?
708 :
デフォルトの名無しさん :2005/12/11(日) 01:06:30
うーーーわかりません。。。 FLASH サンドボックスでグぐってみたのですが。。。。 何かセキュリティーが関係ありそうですね? つまりスクリプトでFLashを動かすとセキュリティー上問題ありという事なのでしょうか?
>>709 何を基準にしたら良いのか・・・
URLのescape文字と比べて。
どっちも簡単な処理だし、ほとんど違いないと思う。
・文字種の使用制限を受けない ・というかデータ全般の形式に制限を受けない ・コンバートのAPIが簡単に手に入る ・高速 とまあ、データ量4/3倍のデメリットなんて微々たるものだよね
不思議なくらいにプロトコルと圧縮を誤解してるのか? むしろ、Base64は"解凍"するとデータ量が小さくなるんだが。
ん?氷だってそうじゃん
716 :
デフォルトの名無しさん :2005/12/11(日) 02:28:35
>>714 便宜的に解凍という言葉を使っているに過ぎない。
>>716 なら、便宜上、もうその表現はやめた方がいいな
デコード=解凍だろ、何が問題あるんだか
>>718 今後は デコード=復号 という表現に切り替えるんだな
円滑なコミュニケーションを取りたかったらな
おっと、キレるなよ? これはお前に対する愛の忠告だぜ?
円滑なコミニュケーションはとれてるじゃん
まあ、少なくとも一般的には 解凍というのはextractを指す言葉で、decodeを指す言葉ではないな。
アーカイブを圧縮ファイルと訳すのも問題あるし 圧縮ファイルを複合するのを解凍と訳すのも問題ある 問題は山済みだがフィーリングで分かればどうということはない
723 :
デフォルトの名無しさん :2005/12/11(日) 03:06:14
結局は便宜上じゃねーか
日本語を説明するのに英語を持ち出す必要がある訳ですね
>>722 圧縮すらされていないファイルを復号するのを”解凍”と呼ぶのはさらに問題あるだろ
726 :
デフォルトの名無しさん :2005/12/11(日) 03:59:11
アーカイブするという日本語がないな。これが混乱の元か。 「書庫に入れる」というのが本来の意味なんだけどね。
GUIの弊害ともいえるのではないかと思うのだが、 (窓OSの見かけとか立派だもんなあ) 利用者はコードや内部が何をしているかはどうでもいい。 解凍だろうと復号だろうと同じ。 便宜上という言葉が出たが、いいたいことは話の流れからわかるだろうけど、 新しい別の話になるようならオレはそれなりの説明がほしい場合があるな。
>>727 >利用者はコードや内部が何をしているかはどうでもいい。
>解凍だろうと復号だろうと同じ。
ここはプログラム板だ
おまえのようなヤツはパソコン一般板へ行け
>>728 利用者がコードや内部で何をしているかを意識しないといけないプログラムを書くのか?
この板で「利用者」と言えば「プログラム書かない香具師」のことでは?
>>729 そんな話はしてない。プログラマ同士のコミュニケーションにどんな言葉を使うか、だよ
てす
日本語が不自由なようだが 頭も不自由らしいな。
interface 暗号化 { 復号化(); }; interface 圧縮 implements 暗号化 { 解凍(); }; 圧縮は復号化でも解凍でもできるが、暗号化は復号化しかできない。 こんな感じ?
ところでおまいらBase64は暗号化じゃないぞw
細かいが、暗号化の反語は復号だよな。非対称なのが美しくないが
暗号化のとこを符号化とでも読んでくれくれ(;´Д`)
符号化 ⊇ 暗号化 だから厳密には同じではないな。 Base64は符号化はされているが暗号化はされていない例として挙げられるな。
お前らマ板行けよ。
interface 暗号化 implements 符号化 {
741 :
デフォルトの名無しさん :2005/12/11(日) 12:10:49
interface A implements B って A ⊇ B だよね class A extends B みたいに
742 :
デフォルトの名無しさん :2005/12/11(日) 15:31:05
俺便宜上とかいった奴だけど 一晩寝て目覚めた どうでもいい・・
目冷めなくていい 一生寝てて欲しい
744 :
デフォルトの名無しさん :2005/12/11(日) 15:38:29
Javaで表現するのは止めようぜ。馬鹿になる。
>>744 がバカということだけ証明できるレスだな
プログラマは言語を選ばない
バカはお前だ。適した言語を選べ。
JAVAってどういうスクリプト言語なんですか?
749 :
デフォルトの名無しさん :2005/12/11(日) 15:52:26
じゃあ744が厨と認めたようなので再開
つーかスレ違い
>>747 スレ違っただけなの私たち。ここで扱っているのはJavaです。
pc8.2ch.net/test/read.cgi/tech/1132601948/l50
かJavaスクリプトならWebProg板で訊きなおすことを勧めます。
バカはWebProg板逝け 戻ってくるな
へいへい、馬鹿騒ぎはその辺にしておいてくれ ところで質問よろしいか?
どうぞ
ではあらためて JAVAってどういうスクリプト言語なんですか?
unix系で使うalarm()と同じ機能の関数をvcでも使いたいのですが、 なんという名前の関数なんでしょうか?
んじゃ、お言葉に甘えて Rawソケットを使ってPingプログラムを作ろうと思っているのですが WinXP SP2ではRawソケットが廃止されたと聞きました だったら、ICMPヘッダはどうやって作ったらいいのでしょうか?
自称中級者の巣窟2chム板で聞いていい内容じゃないな
もうこのスレダメポ
まともな会話が出ない
スレ違い、もしくはたまに出る本線の話題をも茶化す。
>>761 自分でヘッダ作るのは諦めれ
Pingは専用のがあるでしょ
>758 ブロックコールを中途脱出させる目的でのalarmの同等品は、 Winsockには無かった気がする。 EINTRはブロッキングフックの絡みしか無いはずだし。
>>761 まじ?
Rawソケット廃止されたのは随分前なんだが
それでもあの方法を使えば出来ていた
ひょっとしてその方法も禁止されたという意味?
あの方法 その方法 どの方法?
icmpsendechoとか
>763,>765,>767 わかりました XP SP2に関しては自前でヘッダ作らずにAPIに任せることにします どうも、ありがとうございました
でも、icmp.dllは将来的にwindowsから消される…とか見たことがあるけど。
windows捨てればおkwwww
それを捨てるだなんてとんでもない!
772 :
758 :2005/12/11(日) 22:58:48
ソケット管理スレッドを立てることにしました。 struct tag { SOCKET sock; DWORD t; }; struct tag foo; 構造体にソケットを含めておいてrecv()を呼び出す直前に foo->t = timeGetTime(); にて時間を取得。 管理スレッドにてソケットが有効かつtimeGetTime() - foo->t > 10 * 1000 ならば障害が発生したとしてclosesocket(foo->sock)とする。 こんな感じで解決しました。 お騒がせいたしました。
773 :
デフォルトの名無しさん :2005/12/11(日) 23:40:00
>>758 ない。
自分の場合は、ノンブロッキング方式にして、自分でタイムアウト監視をした。
select関数様には本当にお世話になりっぱなしで、ええもう
Winsock2での送受信に限るなら、SO_RCVTIMEO、SO_SNDTIMEOとかあるけどね。
>>772 それ使えば、connect()を中断…タイムアウトを変えることも可能かな?
ノンブロッキングで思い出したが 昔おれは、「ノンステップバス」を「ノンストップバス」だと本気で勘違いして 怖くて絶対乗らないようにしてた。なんであのバス事故らねーんだ? と 周りが危険視して避けるせいかな? とか思ってた。
ちゃんと信号では止まるよ 基本的にバス停に止まらないだけ
>776 できましたよ。 個人的にはconnect()のタイムアウト時間を変える必要性がわかりませんが・・・
connect()のタイムアウト設定に
>>772 みたいな回りくどいことするのか。。
要は着信がなかったらタイムアウト処理すればいいんだろ? select関数でソケット監視するのが簡単じゃね? WinならWSAAsyncSelect関数使うとか
758とは別人だが... WSAAsyncSelectもひとつの手だがサービスにしたい場合、 メッセージポンプ回してウインドウハンドルを扱うのはちと抵抗がある。 権限渡せば動くんだろうけどさ。 Windowsってサービスまでウインドウハンドル扱うの普通なのかな
>>782 仕事でWSA系の関数使う機会なんてないよ
そういう意味で
> Windowsってサービスまでウインドウハンドル扱うの普通なのかな
否
TCP WinSock2 WSASendで、 重複IOを使って送信した場合、指定したバッファの全てが送られた時に、完了通知が発生するのでしょうか? それとも、1度のWSASend で、何度かに分かれて完了通知が送られてくることがある? 英語読めませんorz
読めない、と読もうとしないのではいつまでたっても読めない 一通り目を通して、自分の解釈があってるかどうかを聞くぐらいならわかるが
Sendは全部完了しないとダメ Recvは途中で完了通知がくる
788 :
デフォルトの名無しさん :2005/12/13(火) 01:36:00
windowsのコンソールアプリで、acceptをタイムアウトさせたいんですけど、どの方法が一番良いでしょうか?
どの方法が一番いいかってどんな状況を想定してるのかわかんねぇ。
790 :
デフォルトの名無しさん :2005/12/13(火) 01:41:53
791 :
デフォルトの名無しさん :2005/12/13(火) 02:03:29
acceptしてから、10秒間接続が来なかったら、 acceptをやめて別の処理に移ろうとしています。 acceptで接続が確立されてからは、 同期、非同期どちらの方式で通信しても構わないと思っています。 また、connectも行いますが、 acceptと同一の方法でタイムアウトしたいと考えています。
792 :
デフォルトの名無しさん :2005/12/13(火) 02:15:13
>>791 >acceptしてから、10秒間接続が来なかったら、
>acceptをやめて別の処理に移ろうとしています。
11秒目に接続要求がきたらどうするんですか?
別の処理とはなんでしょうか?
>また、connectも行いますが、
>acceptと同一の方法でタイムアウトしたいと考えています。
connectはタイムアウトを考えなくてよいのでは。
794 :
デフォルトの名無しさん :2005/12/13(火) 02:23:35
> 11秒目に接続要求がきたらどうするんですか? 接続を受け付けません。 > 別の処理とはなんでしょうか? すでに確立されている別のtcpソケットでメッセージを送信します。 > connectはタイムアウトを考えなくてよいのでは。 そうでした。すみません。
795 :
デフォルトの名無しさん :2005/12/13(火) 02:47:51
>>794 >>793 さんも指摘されているように、
>>772 の監視スレッドを作成して、その監視スレッド
で所定時間が経過したら、socketを強制的にclosesocketするでどうでしょうか?
無理にconnectを中断させなくても、 別スレッドで動かして放置すればいいと思うのだが。 Listenで5ぐらい指定しとけば、 忙しくない鯖じゃ、さしつかえないと思う。
selectとか、AsyncEventとかAcceptExとか
798 :
デフォルトの名無しさん :2005/12/13(火) 22:41:13
レスどうもありがとうございます。 ちなみに、accept中のソケットに対して、別スレッドからcloseという行為は、 winsockの仕様上問題無いでしょうか?
connect時のハンドシェイク途中で、相手側がselect使ってて 何秒かACKがこないままとまる様な場合ってのはよくあることなんだろうか?
SYN+ACKに対する返事のACK? それにはselectは関与しないはずだけど。
開いてないポートにconnectすると、仕様で何度もSYN送りつけて、相当時間がかかるから タイムアウトを変更する事が全く無意味とは思わないけど…そうでもないの?
SYNフラッシングとかするツール作ってるの?
何が馬鹿なんだ?
connectやacceptでなんで別スレッドが必要になるんだ selectでタイムアウトできるじゃあないか
806 :
デフォルトの名無しさん :2005/12/13(火) 23:57:44
807 :
デフォルトの名無しさん :2005/12/13(火) 23:59:59
>>805 レス見逃して書き込んでしまいました。
selectで良いですよね?
>>806 問題ないかどうかは要求仕様しだいなんじゃあないの?
>>806 一般保護エラーのことじゃない? (General Protection Error)
Winsockは実装の問題としか思えないものが仕様となっていたり、
バージョン違いで振る舞いが違ったり、問題が多いから、
出来るだけジェントルに処理した方がいいよ。
Winsock FAQ(
>>1 )より
2.14 - How can I change the timeout for a Winsock function?
>>805 acceptはselectでいいとしても、
connectは多くの場合タイムアウトの方が自然な実装だと思う。
>>810 connectもselectでタイムアウトを実装しないと
結構面倒な場面が多いよ
> connectは多くの場合タイムアウトの方が自然な実装だと思う。 connectは多くの場合タイムアウトを設定しない方が自然な実装だと思う。 こうだな
まぁ俺はどっちもselectで実装してる。
よく見かけるのは他のスレッドからいきなりcloseksocketするようなソース。 たいていはもうぐっちゃぐちゃで直す気にもなれない そんな時もし他のスレッドからclosesocketしても問題ないと誰かが言ってくれたら 飛びつきたくなる気持ちはわかる。
>>811 selectだとnon-blockingになっちゃうしなあ。
>>815 基本はノーブラだから問題ない
オレの場合、ブロッキングありでの実装のときはそもそもselect使わないしなぁ
TCPのヘッダのバージョンで4以外のもって 今どれくらい使われているのでしょうか? また、5になることってありますか?
connectで10分とか待たされてようやく失敗に なったりするのでconnect放置実装は危険と 思ったり
今ものすごいオヤジを見た( ゚Д゚)
>>816 問題ないかどうかは状況しだいなんじゃあないの?
821 :
817 :2005/12/14(水) 03:14:34
すみません、ちょっと調べたところ、 どうやら僕の言ってるバージョン4というのは IPヘッダのことっぽいです そしてIPのデータ部に TCPヘッダとそれに続くHTTPなどの プロトコルのTCPデータが乗ることが解かりました。 ネットワークっておもろいっすね。
822 :
デフォルトの名無しさん :2005/12/14(水) 08:42:24
select-acceptで取得したソケットはnon-blockingですか? 又、selectでnon-blockingになったソケットは、blockingにすることはできませんか? 要は、aaceptの時だけselectでタイムアウトしたいので、 他の処理では、blockingで構わないのです。
だめでづ
acceptはブロッキングのままいけるよ あと一般の環境ではselect使ってもnon-blockingになることはないと思う
connect()だけnonblockで通したあとselectで見張らないとダメなだけ。 accept,recv,sendはblockingのままselectする。
827 :
デフォルトの名無しさん :2005/12/14(水) 10:15:50
windowsのイベントでソケットを処理すると、 コネクションが相手に閉じられた時、 1回だけしかそのイベントが発生しませんが (ソケットでその1回を見逃したら2度とイベントが来ないので、イベント待ちで固まってしまう)、 selectの場合はどうなるのでしょうか? 例えば、相手にコネクションを閉じられて、 selectで1度その情報を取得したソケットに対して、 もう一度selectすると、固まっちゃいますか? それとも、もう一度、コネクションが閉じられた情報を取得できますか?
readを二回やって読み出しエラーとかではだめなん?
>>827 > selectで1度その情報を取得したソケットに対して、
取得したらその時にちゃんと処理すればいいじゃん。
830 :
デフォルトの名無しさん :2005/12/14(水) 16:49:23
質問です。 VBでつくったプログラムとUDPにてVC(CAsyncSocket)で通信をしたいです。 VBどおしではBindをやっただけで通信が可能になるのことは確認しています。 ですがVCではどのようにプログラムしたらいいかわかりません。 現在偶然と思いますがVC側で受信のみできています。 TCPでは通信を作ったことがあります。 サンプルなどを見るとBindの後にConnect もしくは Listenをとかいてありますが、 VBではConnectなどは必要なく通信が出来ているのでConnectはかえってきません。
832 :
830 :2005/12/14(水) 18:30:12
よみました。いろいろわかりましたが解決に至っていません。 受信は出来ますが、送信が出来ません。 CAsyncSocketの場合、BindはCreate内にあったので、Createの前に SetSockOpt( SO_BROADCAST, &iOptionValue, sizeof(BOOL), SOL_SOCKET); を入れ、Connectなどもしていませんが、状況は変わりません。
たぶんWSAStartupしてないとかじゃない?
>>830 UDPでしょ?
CAsyncSocketとかいう糞は使ったことが無いが、
基本的には
1. bind() → recvfrom()/sendto() (相手が不定の場合)
2. bind() → connect() → recv()/send() (相手が固定の場合)
でいいはずよ。
835 :
デフォルトの名無しさん :2005/12/15(木) 02:39:10
簡易proxyサーバを作っています。 accept→forkしてごにょごにょ、てな流れなんですが、 accept時にforkしなくて済むようなpreforkというやり方があると聞き調べていました。 が、イマイチどういうモノなのか分かりません。 acceptするプロセスをたくさん作っておき、それらがforkせずにそのまま処理するだけの話なんでしょうか? そうすると同時最大接続数=accecpt待ちしてるプロセス数? 同時最大接続数を越えた場合は待ちが発生するという感じ? pgpoolなんかも読んではみたんですがいまいち理解には至らず。 良いサイト等あれば教えて下さい。
その理解でおk
835じゃないんですが、 通常acceptしてからforkするのを bind→fork→accept という位置にもってきたということかな?
>>835 ミックスすれば、
> そうすると同時最大接続数=accecpt待ちしてるプロセス数?
とは限らないが、プロセス間で処理中かどうか情報を共有する必要があるね。
空いているプロセスが減ってきたら、acceptしてからfork。
いずれにせよ、最大接続数制限は必要になるだろうから、
諦めるというのも一つの考え方。
839 :
835 :2005/12/15(木) 08:29:01
レスどうもです。
>>837 そうっす。listenまでやってからforkして子プロセスを複数つくり、
それらがacceptして待ちます。
>>838 ミックスかぁ。なるほどなあ。
apacheは子プロセス当たりの処理数を設定して、その数だけこなすとそのプロセスは
終了するんですね。
このヘンを上手く組み合わせれば、混んでる時にはプロセスが沢山出来て、
空いて来たらプロセスが減っていく、という流れができるんですね。
それで最大接続数制限も必要になってくるわけか。
各プロセスの状況を共有するのはやっぱり共有メモリになるんですかね?
>>839 > apacheは子プロセス当たりの処理数を設定して、
> その数だけこなすとそのプロセスは終了するんですね。
モジュールのメモリ管理がいい加減でも、
サーバのデータ領域が肥大化するのを防ぐことができる。
javaでネットワーク層での通信がやりたいのですが可能でしょうか? なぜかといいますと、SMTPサーバでパケットのトンネルをさせて、 特定メールアドレスにメールが来たときに処理を実行する プログラムを動かしているのですが、 これだと、greylistingするときにIPアドレスがローカルホストになってしまい greylistingの意味がなくなってしまっているのです。 ネットワーク層でIPパケットのヘッダを元のIPアドレスに変えて、 転送してあげればgreylistingできるかなと思ったわけなんですが・・・
と思ったけどチェックサムでIPチゲーよってはじかれそうですね。
チェックサムも書き換えればいい
>>843 まさしくそのとおりですね。
>>844 最初は僕もパケットをスニファして動かせばいいと思ったんです。
そのライブラリは試してみたんですが、
windows版はパケットをTCPに変換する処理でVM落ちちゃうし、
unix版はJNI用のso作るコンパイルができないしで、
なんかあんまり使えたものじゃないんです。
sourceforgeにある奴に至ってはキャプチャできない。
javaでないといけないの? 自分ならcで書いてJNI通すかな
ethereal使え つーか点プレくらい読んで来い
ネットワークのテストで、遅い(負荷の高い)状態でテスト したいんですが、意図的にそういう状態を高い専用機材を 使わずに作り出したいんですが、良い方法ないでしょうか?
それプログラミング関係ないですから。
852 :
830 :2005/12/16(金) 10:52:20
CAsyncSocketの中身のソースを見ることに成功し、 なんとかなりました。ありがとうございました。 CAsyncSocketは使いたくないんですが 前任者がつくったソースを改造しろと言われて四苦八苦です。
イーサネットエミュレータ Linee
でぐぐってみて
>>850
こういうとこ時間かけたくないからGUIのやつがほしい
このスレは、作ったプログラムのテスト方法等に関しては議論してはいかんのかな…
>>853 ありがとう
>>855 うんこは氏ね
JavaのJMeterってのは使えんの?
>>858 > このスレは、作ったプログラムのテスト方法等に関しては議論してはいかんのかな…
じゃあどういうプログラムなのかくらい書けよ。
>>850 じゃ、「ネットワークのテスト」だろ。
>>860 ネットワークのプログラミングすればいいと思うよ
> グラはファミコン以下ですが、 グリはスーパカセットビジョン以下です
実際のIPパケット長と IPヘッダの total length の値が違うときってありますか?
ICMPでそういう攻撃が昔あった。 だから、ありますか?という問いの答えとしてはある。
サンクス。 正常な通信としてはありえないってことですね。 うーん、解析ミスかな。
mswsock.dll内のアセンブラ命令 int 3 ってどういう命令なのでしょうか? 現在相互通信アプリを作っているのですが、 なぜか上記の部分でエラーが出てしまい実行がとまってしまいます。
869 :
865 :2005/12/17(土) 23:09:35
870 :
865 :2005/12/17(土) 23:24:12
嘘です、やっぱり発生しました。 サーバからの応答でパケット長が40バイトのときのみ なぜか46バイト送られてきます。 なんなんでしょ? ちなみに多い6バイトは一定ではないです。
どんな通信のときか分からないのは私だけだろうか。
872 :
865 :2005/12/17(土) 23:52:35
64バイト以下のイーサパケットでpaddingされるのはいいよな?
875 :
865 :2005/12/18(日) 15:11:57
>>874 !!!!
マジですか?
でもそうだとしたら、
TCPデータなしのパケットの場合、
イーサヘッダ(14byte)+IPヘッダ(20byte)+TCPヘッダ(20byte) = 54byte
で10byteパディングされそうなんですが、どうなんでしょ?
>>875 CRC 4バイトとかは?
Ethernetはコリジョン検出のために最低送信時間が決められてるため
64バイト以下のパケットは送信できない。
AのグローバルIPをgA、送受信ポート番号をpA BのグローバルIPをgB、送受信ポート番号をpBとすると、 UDPホールパンチングって 1.AがgB:pBに適当なパケットを送信(Bのルーターで破棄) 2.Aが同じポート番号で受信待機 3.BがgA:pAに対して適当なパケットを送信 4.Bの送ったパケットをAが受信 5.その後双方向にUDPパケットを投げ合える だと思うんだが、Aが何回かBにパケット送ってから同じポート番号でBからのデータを待機してもBが送ったデータが来ない。 根本的に間違いをしているように思うんだがどこが間違ってるんだろう?
878 :
865 :2005/12/18(日) 18:20:09
>>876 --------------------
MACソース 6 byte
--------------------
MACディスト 6 byte
--------------------
タイプ 2 byte
--------------------
IPパケット
TCPの場合最低 40 byte
--------------------
CRC 4byte
--------------------
ってときだと 6+6+2+40+4=58
このとき最低パケット長に達していないために
"IPパケット部分末尾"にパディングが足されるってことでしょうか?
>>877 >だと思うんだが、Aが何回かBにパケット送ってから同じポート番号でBからのデータを待機してもBが送ったデータが来ない。
ちゃんとBはAのグローバル(WAN)のポートにデータ送ってるの?
881 :
デフォルトの名無しさん :2005/12/18(日) 23:04:22
はじめまして インターネットからデータをロードしようとしております。 通信に時間がかかることとUI的に動作を俊敏にするためにマルチスレッドを用いております。 _beginthreadを使ってスレッドを作成し、 InternetAttemptConnect 、InternetCrackUrl、InternetOpen、InternetConnect、HttpOpenRequest、HttpSendRequest とWinINet関数を使って通信しております。 このとき、ソフトウェアファイヤーウォールがインストールされている環境では、 この自分のプログラムに対して通信を許可するかどうかというダイアログが表示される場合があります。 そこで、ダイアログをの返答をユーザが行わない状態で、自分のプログラムを終了しようとすると、 ソフトウェアファイヤーウォールによってロック状態となり、 プロセスが残って停止させることが出来ません。 たとえばZoneAlarmではユーザがダイアログに答えるとロック状態が解除されプロセスを 終了させることが出来ます。 これをロック状態でもプロセスを終了させる方法は無いでしょうか? 要約すると、ソフトウェアファイヤーウォールのロック状態にはどのように対応すればよいのでしょうか? よろしくお願い致します。 開発:VisualStudio.net 2003 OS:WindowsXp SP2
882 :
877 :2005/12/18(日) 23:28:37
AのグローバルIPをgA、送受信ポート番号をpA BのグローバルIPをgB、送受信ポート番号をpBとすると、 C#で書いてるんだが、 ホストA: System.Net.Sockets.UdpClient udpa1 = new System.Net.Sockets.UdpClient(pA); udpa1.Send(sendbytes, sendbytes.Length, gB, pB); udpa1.Close(); System.Net.Sockets.UdpClient udpa2 = new System.Net.Sockets.UdpClient(pA); System.Net.IPEndPoint ipe = null; byte[] recvbytes = udpa2.Receive(ref ipe); 上記の後(udpa.Receiveでブロック中)ホストB: System.Net.Sockets.UdpClient udpb = new System.Net.Sockets.UdpClient(pB); udpb.Send(sendbytes, sendbytes.Length, gA,pA); とやってもAには何も届いている様子がない。 どちらもちゃんと相手のグローバルIPを入れてるはずなのになあ…
まずはNATを通さなければ繋がることを確認しる。 あとはBのパケットが届くまでAも送信し続けてみれ。 それでもだめならルーターを変えてみれ。 実はルーターの特性によって結構違ってノウハウがある。 けど仕事内容に抵触するので詳細は言えん。
>>881 ロック状態というのがいまいちよく分からん。
プロセス側でreturn 0した場合にそこで止まるってことか?んん?
あ、分かった。 スレッドがconnect()とかで止まってるんだろ。>プロセスが残る 終了時にそのスレッドを_endthreadすればえーんちゃうの
886 :
881 :2005/12/19(月) 02:09:03
>>884 >>885 わかりにくかったと思います。
申し訳ないです。
HttpSendRequest でリクエストを出すとブロック状態となります。
ダイアログに回答するとHttpSendRequestが終了し、プログラムを続けることが出来ます。
つまり_endthreadしようにも、ブロック状態で出来ません。
そこで、TerminateThreadでスレッドを終了しようとしたのですが、
スレッドを終了することが出来ませんでした。
ユーザが回答してくれれば正常に動作しますが。。。
>>881 InternetSetOptionでタイムアウト時間を指定しても無理かな?
888 :
865 :2005/12/19(月) 04:46:18
>>879 レスありがとうございます。
ぐぐっては見たんですけど、
わかったのは自端末発のデータは46byteに満たなくても
tcpdumpで見ている時点ではデータの付け足しはされない
ということで、これは、合計64byte以上にするのはインターフェースの責任で、
インターフェースを通過していないデータだから64byteに満たなくてもそのまま。
ってことなんです。
ネットワーク層のデータに付加されるって言うのは見当たらないんです。
削ってもきちんとデータの整合性が取れているので、
おそらくこれが46byteにするために追加された物っぽいんですが、
どうも気持ち悪い感じです。
取り急ぎお礼を申し上げます。
ありがとうございます。
889 :
881 :2005/12/19(月) 11:02:37
>>887 レスありがとうございます。
試してみます。
> つまり_endthreadしようにも、ブロック状態で出来ません。 好奇心。どんなエラー返るのー? あとTerminateThreadも_endthreadもたぶん中身同じだよ
ソケットをつかってデータ通信をしたいのですが、クライアントがそれぞれA,Bと2つで受信サーバが1つ この状態でAとの通信で受け取ったソケットはbuff1に格納、Bから受け取ったソケットはbuff2に格納という具合にしたいのですが クライアントAとBを区別するにはどうすればいいでしょうか? OSはLinuxでC言語を使っています。
TCPならacceptしたソケットハンドルそのものが別だし、 UDPならrecvfromしたとき一緒にに貰うsockaddrで判別できる。 しかし、この質問にはデジャブを感じる。
Winsockのことなんですが、connectで一つのポート番号に何個もソケットを作ってもいいんでしょうか。
WinSockを勉強しています。 非同期、非ブロッキングでsendの送信完了のタイミングを 知りたいのですが、ご教授願えませんでしょうか。
FAQくらいは読め。
ついでにRFCもナー
>>888 tcpdump のダンプを見られない状況なので憶測だけど
送信データはパディングされてなくて
受信データはパディングされてる
ってことではなくて?
だとすればキャプチャしたあとにパディングされるのでそうなるかも。
受信したデータは相手がパディングしたものが届いてる。
899 :
デフォルトの名無しさん :2005/12/20(火) 20:22:49
MS-DOS = NDIS 2.0 Windows 3.1 = NDIS 2.0 or 3.0 Windows NT 3.51 = NDIS 3.0 Windows 95a = NDIS 3.0 Windows 95B = NDIS 3.0 or 4.0 Windows NT 4 = NDIS 3.0 or 4.0 Windows 98 = NDIS 3.0 or 4.0 Windows 98se = NDIS 3.0 or 4.0 Windows 2000 = NDIS 4.0 or 5.0 Windows Xp = NDIS 4.0 or 5.0 で、対応関係はOK?
複数のクライアントがサーバ上のディスクのDBを更新するようなシステム における排他制御について勉強しています。 この場合、同一マシン内の異プロセス間ならセマフォでできますが、ネットワーク 経由での排他制御はどのようにすれば良いのでしょうか? それとこの問題について何か良い文献ありますか?
902 :
901 :2005/12/20(火) 23:58:38
すみません。ちょっと訂正します。 >同一マシン内の異プロセス間 ↓ >同一マシン内の異スレッド間
データ毎にオーナーになるノードを決める データをモディファイする際はオーナーにお伺いを立てる(オプション) オーナーは一定時間毎にアップデートを通知する
複数のクライアントにユニークなアカウント配布で排他すれば? 不特定多数なら、IPをハッシュで持ってセッションの度に検索チェックするとか(ぉぃ NATは面倒だね。基本は常に内側からセッション張らせる事。内々で繋ぎたいのは諦めろ(w もうすこしすればチャンコロがIPv4を食いつぶしてくれるから、IPv6まで待った方がいいカモな(w
accept()中のソケットを正しく終了させる方法はどんな方法でしょうか?
TCPソケットの終了の仕方は
ttp://www.kt.rim.or.jp/~ksk/wskfaq-ja/newbie.html#howclose 2.10 - TCP ソケットを正しく close するにはどうすれば良いのですか?
から知ることができましたが、accept()中のソケットの正しい閉じ方は
具具って見てもわかりませんでした。
もうひとつ質問があるのですが、IPアドレスを複数用意することは無
理なのでしょうか?
というのはIPアドレスを元に接続要求を受け入れるか判断する関数を
作成しようとしているのですが、127.0.0.1 とローカルIPアドレスひとつだ
けでは、テストがはかどりません。
開発中のPCでは外部ネットワークに接続できません。
accept関数から抜け出してcloseすればよろしい IPアドレスを複数用意したいなら単純にNIC増設すればよろしい
NIC増設せんでもIPエイリアスで ってwinsockてことはWindowsか
910 :
881 :2005/12/23(金) 17:14:42
>>890 HttpSendRequestを呼び出すと、通信許可を求めるダイアログが表示されます。
ダイアログでユーザが返答し、通信が許可されると関数は成功し普通に通信できます。
一方、ダイアログでユーザが返答し、通信が許可されなければ関数は失敗し、
GetLastErrorは「0x00002EE7」を返します。
このエラーって何なのでしょうか?
FormatMessageでは探せませんでした。
ユーザが返答しないと関数はブロック状態で帰ってきません。
とりあえず5分待ちましたがブロック状態でした。
ダイアログ出してるのはノートン先生かXPのセキリティ、 WSAGetLastErrorではCONNECTION-REFUSEDが来ていると予想
WindowsでもIPエイリアス出来た気がする 記憶違いならごめん
913 :
890 :2005/12/23(金) 20:50:24
>>910 _endthread()のエラーが知りたかった^^;
914 :
881 :2005/12/24(土) 09:35:55
>>911 WSAGetLastErrorでも同じく「0x00002EE7」が帰ってきます。
0x00002EE7=12007なので、
#define WSABASEERR 10000
からエラーだといえますが、2007が何なのか定義されていません。
CONNECTION-REFUSEDは
#define WSAECONNREFUSED (WSABASEERR+61)
と定義されていると思います。
>>913 _endthread()はスレッドが終了するので何も返さなかったです。
で正しいですか?
> つまり_endthreadしようにも、ブロック状態で出来ません。 どっちなんすか(;´Д`) ダイアログに返答するまで_endthread()ででも待たされるってことかいな?
ああ、勘違いしてたスマソ
_endthreadはExitThreadと同じタイプなんだな。 TerminateThreadで外部から消しちゃえ。
918 :
881 :2005/12/24(土) 11:44:15
>>917 あ〜、でダイアログに答えなくても中断できるようにTerminateThreadで終了しようとしています。
BOOL ret;
int Priority = GetThreadPriority(m_hThread);
if( THREAD_PRIORITY_ERROR_RETURN != Priority )
{
if( SetThreadPriority( m_hThread, Priority|THREAD_TERMINATE ))
{
DWORD dwExitCode;
GetExitCodeThread(m_hThread, &dwExitCode);
if (dwExitCode == STILL_ACTIVE)
ret = TerminateThread(m_hThread, -1);
m_hThread = NULL;
}
}
ってやっています。
retには1が返ってきますので、正常に終了できているようです。
しかし、プロセスはダイアログに答えるまで消滅しません。
環境:WinXp
>>918 WinInetが内部でスレッド作ってるのかも。
解決するにはWinsock使えばいいよ。とか言う。
920 :
ぴんこ :2005/12/25(日) 12:53:46
質問です! WindowsでFTPツール作ろうと思ってるんですけど WinsockではFTPで送受信することはできないのですか? TCPやUDPでしか通信できないのでしょうか?
あ、作りたいのはFFFTPのような、FTPサーバーにファイルを送れるクライアントです。
922 :
ぴんこ :2005/12/25(日) 12:59:46
Firefoxで書き込んだら名前がおかしくなりましたが、921は私です
もしかして、FTPって、ポートの番号を21にすればいいだけ??? 普通にTCP/IPでport21で通信すればいいんですか?
また名前がおかしくなってますが、気にしないで下さい
926 :
ぴんこ :2005/12/25(日) 13:21:59
コード書く前にPASVコマンドを勉強しとけな。
928 :
ぴんこ :2005/12/25(日) 17:19:48
サーバーのIPアドレスはどうやって調べるんですか? server.sin_addr.S_un.S_addr = inet_addr(""); この""のところにホスト名を入れても接続できますか?
ぽかーん
テンプレを読むだけで解決する質問だな
931 :
ぴんこ :2005/12/25(日) 21:08:56
テンプレってどこですか??
932 :
ぴんこ :2005/12/25(日) 21:11:29
あ、最初のほうのレスか
933 :
ぴんこ :2005/12/25(日) 22:05:08
というか教えてくださいよ藻前らさま
934 :
ぴんこ :2005/12/25(日) 22:11:07
>>933 は偽者です!
テンプレ見たんですが、よくわかりません。
なんかいいサイトありませんか?
>>934 マジレスすると、TCPで繋いでからが色々あるから、本買ったほうが良い。
サンプルソースが載ってるやつとか
そんなレヴェルで Winsock を使うことが間違い。 WinInet でも使っとけ。
>>935 猫でもわかるネットワークプログラミングというのがよさそうだと思ったんですが
ちょっと高いので買えそうにないです
>>936 調べてみたんですが、BCCでしか使えないのですか?
私はVisualC++6.0を使っているのですがwininet.libやwininet.hはVCでも使えますか?
図書館行こうぜ
>>937 そのレベルでネットワークプログラムなんて、相手のサーバに迷惑だからマジでやめてくれ
940 :
わたこ :2005/12/26(月) 00:13:43
つかさと申します。 市販のPersonalFireWallってアプリケーションが通信を開始しようとすると それを検出してユーザに確認を取りますよね。 あるアプリケーションが通信を開始しようとするのを検出する方法って C言語とかで簡単に書けるのでしょうか。 それとも、独自のソケットとかを使ってやってるんでしょうか。 知識のある方、お願いいたします。
941 :
わたこ :2005/12/26(月) 00:15:07
申し訳ないです。 ↑はつかさではなく、わたこの間違いでした。 お騒がせいたしました。
おまいらプログラミングの前にネットワークの勉強が必要だよ。
自分のサーバなら良くないパケットも実験し放題。
Apacheが檄有名所で無料だぞ。
表象的にはサーバもポートを利用するソフトに過ぎないことがわかる
のではないだろうか
あと、存在しない相手に送るのも良くない。親ノードに大きな負担になる。
と、一応言っておく。
>>928 Cは門外漢だが、名前解決って知ってる?
どうしてApacheが出てくるんだ
じゃあ鯖ソフトの代表を述べよ。
>>944 馬鹿はHTTPサーバしか知らないから。
それでなんでも試せるとは思っていない。 専門といえるまでの知識を持ち合わせてないことは自覚してるよ。 サーバーぐらい入れるべきと、当然のことを言ったつもりだったよ。 DNSのBINDぐらいは知っている。触ったことはないけど orz HTTPでもプログラムで繋がるかは試せるし、自分なら好きに出来るしさ。
サーバを実際に立ててみるってのは重要だとは思うけどな。 プログラムする前に、まともな動作を見てないとまともなのは作れないだろ。 サーバ立ててるうちにネットワークの知識も必要だしさ。 何も知らずにいきなりプログラムは無理。
どこからどこまでがネットワークプログラミングなの?
家にたどり着くまでがネットワークプログラミングです
家にたどり着いてからネットワークプログラミングですう
バナナはネットワークプログラミングではありません。
ネットワークプログラミングは500円まで
最近は300円じゃないのか。
winsock使ってSniffer作ってみたんですが、 高い頻度(約1割)で取りこぼしが発生してしまいます。 これってWinsockの仕様? それともコーディングがダメなだけ?
>高い頻度(約1割)で取りこぼしが発生してしまいます。 うーむ、3割なら蟹の問題なんだが。
959 :
デフォルトの名無しさん :2005/12/28(水) 15:22:32
ネットゲーム作りたいんですが、winsockの使い方解説してる良いサイトありますか? あとwinsock以外にネット通信できるライブラリってありますか?
まず、テンプレに目を通してから質問しようぜ
Snifferで取りこぼし無しって結構なパフォーマンスが必要だよ。 おまいらのプログラムがそんなにパフォーマンス有ると思うのか? ネトゲの本が有るから買った方が速い。 買えなきゃ諦めな。
962 :
957 :2005/12/28(水) 19:44:10
>>961 具体的にどのような"パフォーマンス"が必要なのですか?
解説されているサイト等ありましたら教えてもらえないでしょうか
パフォーマンスいるのはドライバまわりの方だけどな。 キャプるのにGbE使ってみれ。(100Mにして) バッファが大きいのと動作が速いぶん割込みが軽くなってとりこぼしが少ない。
蟹ってなに?
>>966 どうしてくれる!!蟹食いたくなったじゃないか!!
WSAAsyncSelectで非同期モードにして Selectでsend、recvのブロッキング終了を待つのは邪道でしょうか?
間違えましたSelectのブロッキングを待ってsend、recvをする でした
邪道かどうかで何を判断するんだ?
リアルタイムでパケット解析させたら、おまいらの糞プログラムで処理が追いつく訳ないじゃん。 仮に100Mbpsとして、一つのパケット舐めるのに何クロック必要で、実際のPCが何GHzの処理能力かよく考えろ。 糞プログラムではバッファが溢れる頻度でしか取りに逝けないよ。
>>971 IPパケットの形にしてカーネルに渡すのはインターフェースなんだけど、
インターフェースってそんなに素敵なCPU積んでるのか。ふーん。
IPパケットからデータを取り出すのは、おまいの作ったプログラムとCPUだから。 IPパケットがどんどん来てバッファから全部読み出せなければ溢れて捨てられるよ。
リアルタイムに解析したらこぼすって言ってる? Etherealみたいにとりあえずキャプチャしてメモリかファイルに保持しておいて 後から解析なら取りこぼさないって事?
975 :
まっさ :2005/12/30(金) 12:57:47
WSOCK32.dllとws2_32.dllのsendとconnectをフックした状態でWSAStartup 呼ぶとWSASYSNOTREADYエラーになるんだけどなんでだこれ??
ネットワークゲーム作ろうとしてるのにシーケンス図わかんねーとか話になんねーんだけど。 頼みますよ先輩。 愚痴スマソ
ネットワークプログラミングならUML不要、状態遷移図だけで足りるぜ
>>973 ふ〜ん、CPUまで自作か。スゲェな...
ネットワークゲーム作るときってシーケンス図用意しないとつらいの?
方針が決まるまではないとつらいなあ
ここで履物 ここでは着物 ここで吐き
986 :
デフォルトの名無しさん :2006/01/05(木) 21:36:36
サーバとクライアント間のシミュレートを一台のパソコンでできますか?
構造体をhtons処理したいのですが、 構造体の中身を配列のように順番に列挙してくれるものってありますか?
989 :
デフォルトの名無しさん :2006/01/05(木) 22:01:45
>>988 よく知らないのですが、ホスト(サーバソフトに標準装備とか?)に接続ってのをすると
サーバとIEの通信の様子が見えるのでしょうか。APACHEってのは9xに入れられますか
「様子が見える」って何よ? cygwinのapacheなら動くんじゃない?
Apacheならxamppでインスト出来るな httpサーバならもっとWindows寄りの(素人が触りやすい)がいっぱいあると思うが
>>989 ローカルホストとは自分自身。
鯖に同一マシン上から自分自身に接続できる。
994 :
986 :2006/01/05(木) 23:18:56
サーバとクライアントの間でどんなデータのやりとりをしているのかを 一台のPCで見てみたくて。ホストというのは何かのファイルの事ですか? ネットワークアダプタのことだと思っていました
>>994 ホストはネットワークアダプタというよりは
プログラムとかのことになるのかね
えせりあるでも入れとけ
997 :
986 :2006/01/05(木) 23:41:23
Wsock32.dllとかですか(ws2_32.dllはみつからない)?他にありますか? 作るとしたら、スタジオが必要ですか?フリーのLsicとかでつくれますか
もういいからさ RFC2068でも読んでなさい
初めて書き込むオレが999!
初めて書き込むオレが1000!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。