7 :
1 :2006/10/01(日) 18:14:26
・Wiresharkはetherealから名称変更しためテンプレに追加した。
/* tcp.h 「SYN」 「ACK」 さわやかな接続の挨拶が、混みきったセグメントにこだまする。 ARPA様のお庭に集うパケットたちが、今日も天使のような無垢なTTLで、 高価なゲートウェイをくぐり抜けていく。 下位レイヤを知らないデータを包むのは、幾重ものヘッダ。シーケンス番号は 乱さないように、経路上のノードは輻湊させないように、ゆっくりスタートするのが ここでのたしなみ。 もちろん、ウィンドウサイズギリギリで帯域を占有するなどといった、はしたない TCPスタックなど存在していようはずもない。 Transmission Control Protocol。 1982年確立のこのプロトコルは、もとは軍のネットワークのためにつくられたという、 伝統あるストリーム系プロトコルである。 インターネット。シリアル通信の面影を未だに残しているデータ損失の多いこのネットワークで、IETFに見守られ、 フレームリレーからWDMまでの一貫接続がうけられる通信の要。 時代が移り変わり、大統領がレーガンから三回も改まった平成の今日でさえ、 十八ヶ月で性能を倍化させ続ければ電話屋育ちの純粋培養プロトコルが棺入りで出荷される、 という仕組みが未だに残っている貴重なプロトコルである。 */
9 :
デフォルトの名無しさん :2006/10/01(日) 18:40:06
もうスレ埋めたのか?速いな。 前スレのように、俺だけしか分からない話を「レベル高い」とかいうザコはお断り!
>>9 は何言ってるかわかんないので男割りなんです ><;
11 :
デフォルトの名無しさん :2006/10/01(日) 18:43:06
12 :
デフォルトの名無しさん :2006/10/01(日) 19:38:03
さー、低レベルの話をおおいに議論しようじゃないか。 ************************************************* 主にソケットに関しての低レベル質疑応答スレッドです。 *************************************************
安全じゃないサーバってどういう基準でわかるの? ポート80以外を排他して、決められたバッファ以上は一度に受け取らないなら安全?
俺様の前に安全なサーバーなぞ存在しないぜ。
マシン室に誰でも入れて、 パスワードが書かれた付箋紙がディスプレイに貼ってあるサーバは 全部ポート閉じてても危ないな
というわけでリスクと効用を天秤にかけなきゃ話にならんです
17 :
デフォルトの名無しさん :2006/10/01(日) 22:40:37
質問です。 Javaで JList(Object[] listData) JList.setListData(Object[] listData) でリストにファイル表示させるみたいに、 リモートのファイルを表示させるやりかたってあるんですか?
ないです。
「リモートのファイル」って簡単に言っちゃってるけど、 リモートのファイルってどういうパスに成るの?
20 :
17 :2006/10/01(日) 22:45:37
別なやり方知ってますか?
リモートのファイル一覧取得してコンテナにぶっこむんじゃダメなの? 何がわからんのかがわからん
22 :
17 :2006/10/01(日) 23:03:37
>19 そう言われれば、考えて無かった・・ 繋げてからもう一度質問します
ブラウザってIEとかFireFoxとか全部同じポート番号なのに サーバーからクライアントに入ってきた情報をどのブラウザに渡せばいいのかって どうやって識別してるか? IPとポートだけで識別してるなら どっちのブラウザに渡せばいい情報なのか解らないと思うんですが 他に何かプログラムを識別する物があるんでしょうか?
>>23 80番に送っているのであって、80番から送っているわけではない。
25 :
23 :2006/10/01(日) 23:44:46
>>24 ありがとうございます!
という事は80番で接続した後に
クライアント側でソケットのポート番号を違う値にしても問題ないんですか?
おまえ自分で何言ってるかわかってないだろ
27 :
23 :2006/10/01(日) 23:52:28
>>26 いえ、一応解ってるつもりなんですが
例えば、Javaで1000番ポートを開放してるサーバーに
Socket sock=new Socket("127.0.0.1",1000);
と接続した後に、受信用の1000番のポートを変える方法ってあるんですか?
どう見てもわかってません。
>>27 acceptすると待ち受け用とは別のソケットが生成される。
通信はそのソケットを使って行い、新規の待ち受けは引き続き今までのソケットで行う。
31 :
23 :2006/10/02(月) 00:03:17
>>30 ありがとうございます。
それなら納得です。
ちなみにacceptで新規に生成されたソケットのポート番号はどうやって決まるんですか?
いちいち人に聞くな
>>31 待ち受けポートと同じ。
cli * srv 10000
cli 2222 srv 10000
cli 2223 srv 10000
相手のIPアドレスとポート番号は一意なのでソケットの仕組みが勝手に取捨選択してくれる。
34 :
23 :2006/10/02(月) 00:10:31
>>33 重ね重ねありがとうございます!
とても助かりました!!
とりあえず、この程度の事は人に聞くだけでなく自分でも試してみる事
レベルの低い話すんな糞がき
人に訊く前にプログラム組んで試さないプログラマってクズだよな。 今時、80番ポートで何でも通しちゃうので、ポート番号で語る事自体が無意味。 変なネットワークが広まって変な使い方が当たり前になってきて、どんどんインターネットの精神が崩壊していく。 みんなでリセットしてUUCPからやり直した方が良いと思う。
ドキュメント調べずに、とりあえず処理系依存でたまたま動いたからOKにするプログラマが最大の癌 それだったら作れない方がマシ。そんな危険なコードが出回ったら大変な事になるぜ。
早起きしてみれば、ゴミが2個あったよー
>>8 は新着テンプレだな。
> 電話屋育ちの純粋培養プロトコルが棺入りで出荷される
の意味が分からないのだが、これは何なの?
>>38 教えて君は処理系依存の動作について自分で調べるかわりに他人の結果を聞いて丸写しするから余計悪い
ドキュメントや規格書は絶対に読まない
宿題感覚だよな。 とりあえず動けば終わり。 だから社会に出て正解が無いと、とたんに詰まって鬱に成る。
エーテルネットワークが速くなったので、非同期転送モードが廃れたよ、という話じゃまいか
>>44 ・どこがネットワークプログラミングの質問だ
・よそで質問してこっちまで引っ張ってくるな
氏ねばいいのに。
俺も正直SOAPはやりすぎたと思うな。 しかし使っていいプロトコルを絞るという意味では 他に良い手があるとも思えん
>>43 WDM, ATM, IPそれぞれが、X over Yとなるなら分かるが、TCPって何よ?
48 :
33 :2006/10/02(月) 22:35:34
初心者いじめが大好きな君のために、
>>33 に三つの嘘を入れておいた。
それには触れずねちねちねちねち・・・w
>どこがネットワークプログラミングの質問だ 説明すると、 ネットワークのプログラミングのツールとしてVC++を使うという 依存関係から話が派生したものです。 そう口汚くののしる態度は世の中ではうまくやっていけない 人であろう・・・と思いました。大変残念です。
>>46 APレベルのRPCの標準化としてSOAPを決めるならば、
それは異なる機種間で制御データを共通化してやりとりするという意義において、
必要性や利便性が出せると思うが、
自分の会社だけの装置に特化できるものならば、
そのほうが単純なプロトコルになれると思う。
SOAPって本当に使われてるんですか?
使ってるよ。
うちも。
5年待って普及せん技術ってダメでしょ。もう。
かわいそうに…僻地にいるんだね
楽天もvectorもmixiも東証一部もみんなSOAPのレシーバを持っていて、状況に応じてウェブサービスを繋ぎ変えてビジネス革命!みたいなことになってないじゃないですか。
なんていうか、花形だけで舞台作ってる感じがするなぁ そんなんじゃないすよ
僕もSOAPに行きたいです。
マスターアップまで我慢しろ
ウィルス対策ソフトみたいにメール受信してるものを横取りして特定のキーワードがあったら 件名に印をつけるというSPAM対策ソフトを作りたいんですが、Winsock2でできるもんでしょうか? できるとしたら何を調べにいけばいいでしょうか?
無理です。諦めてください。
POPFileを調べに行けばいいと思うよ?
LSP使えばできるだろ
ローカルにPOPのプロキシ鯖でも作ればいいんでね ついでにWinsock2.1以降ならキャプチャできた…けど意味ないか
プロキシPOPサーバ作る方が遙かに簡単だと思う。
質問です。 winsock2で自分マシンに割り振られたのサブネットマスクを取得する方法ってありますか?
>>69 そのページは、元質問と何か関係があるのか?
71 :
68 :2006/10/07(土) 16:31:34
他の方法で自分のマシンに割り振られたサブネットマスクを取得する方法ってありますか? 当方の環境はOSがWindowsXP SP2、コンパイラがVS2005で、言語はC++を使ってます。
>>71 >>69 にあったのじゃだめなの?
WinXPHomeSP2だとできたよ?
73 :
68 :2006/10/07(土) 18:27:53
実は今、自分のIPアドレスとサブネットマスクをどうにかして取得して ネットワークアドレスを出力するっていうしょーもないプログラムを 作ってるんです。winsock2だとIPアドレスはgethostbyname関数で簡単に 取得できたんですけどねぇ、今日は朝からずっとググってるんですけど わからないので書き込ませていただきました。
getsockoptで出来なかったっけ。
ていうか、平然と「自分の」という言葉をずっと使っているけど IPアドレスもサブネットマスクも、NICごとに割り当てるものだろ?(仮想も含めて) だから、インターフェースを特定してそれを元に取得するものであって 「マシン全体で」のものなんかないんじゃないのか? どうやって取得するのかは知らんけど。
ioctlで取れるな。unixでは。
「自分の」IPアドレスならloopbackでいいんでねw ってのはともかく、通信相手から見える自分を指すIPアドレスってのは 自分だけで知るのは困難だよな。 NICごとどころか仮想でインターフェース増やしまくれるし ルーティングの段階で相手ごとに選択されるわけだからな
79 :
68 :2006/10/08(日) 11:54:54
GetAdaptersInfoで上手くIPアドレスとアブネットマスクを取得できました! ありがとうございました。
アブネットマスク
あぶね!!!っとマスク
192.168.0.1/32
255.255.255.255/35
WindowsXP Professional SP2 上で自作のTCP/IPサーバープログラムを24時間連続稼動させています。 クライアントはLinuxで1秒間隔でサーバー側でデータを送っています。 で、通信ログを出力させて稼動状態を見ていたのですが、 3日に一回程度の頻度でサーバーが一瞬応答しなくなる (10秒ほど) 現象に悩んでいます。 3日に一回程度(1日置いて発生することもあれば1週間何事もないことも・・・)、時間帯は不規則です。 Windowsインストール後、自作のサーバープログラム以外はインストールしてません。 Windowsは不規則にOSが負荷の高い処理を実行して、その間ユーザープロセスを止めてしまうようなことがある。 と、以前何かで見たことがあるのでそれが原因かと思ってるのですが。 このWindowsでユーザープロセスを止めるような不規則な処理がなんだか、ご存知が説明のあるHPを知ってる人いますか?
>>84 原因がWindowsであると断定した理由は?
>>85 実はまだ断定してません、というか原因調査中の状態です。
「応答しなくなる」と書きましたが、詳しくはサーバーの応答が10秒ほど遅れて送信されてくる、です。
クライアント側でタイムアウトを1秒としているため、通信ログに異常が記録されていました。
サーバープログラムでは、データ受信後に決まった処理しか行わず、特に負荷に波がある処理はさせていません。
遅れても応答は返ってくるので、サーバプロセス自体が一瞬停止させられたのではないかと疑っています。
(ちなみにネットワークですがPC〜Linux間をクロスケーブルで繋いだだけの最小構成です)
後Windowsがプロセスを停止させたと判断するような材料ですが。
別プログラムでCPU/メモリに負荷を与えると、サーバープロセスが一時的に停止したりしますが、
この時残されている通信ログが、前述した異常時のログと動きが一致してました。
じゃあタイムアウトを15秒ほどに伸ばせば解決だ。
省電力関連で一時的にNICが止められた とか?
後ろ向きな解決法は
>>87 だろうけどね。
89 :
84 :2006/10/10(火) 11:58:38
回答ありがとうございます
>>87 おまいとは気が合いそうだ。 orz
>>88 コントロールパネルの電源オプションは全て"なし"に設定してるのですが。
他にNIC止める要因ってあるでしょうか。
でもNICの電源供給やめられたらsocketも生きてないような気が・・・、遅れても応答が返るんで
socket自体は生きてるようなんですよね。
簡単なデータロガー的なものを作ってる人で、似た問題が起きてる人いないかな。
なんで後ろ向きやねん。 遅れても問題無いように作るのが先だろ。1秒は厳しすぎだ。
ま、順序はどうでも良いんだけどさ。 なんとなくわからずに延ばしただけじゃ気持ち悪いじゃん。 まして、クロスケーブルのピアピア接続なわけだし…
くだらない事にこだわるんだな。
93 :
84 :2006/10/10(火) 13:03:51
>>90 1時間分のバッファを持たせて、送信できるようになったら送信するようにしてます。
なのでデータロストはなく、「仕様です」と無表情に言えば通る話だと思います。
・・・やっぱり1秒は厳しいのかな。
>>91 そうなんですよ、気持ち悪くって・・・しかもログに残るようになっちゃってるし。
後で、「しまった!、ログに吐かなきゃバレなかったのに」とは思いましたが。
>87でおわっとるやんけ。
95 :
84 :2006/10/10(火) 14:55:20
>>94 いやいや、障害対処じゃなくて原因が知りたいんですよ。
ユーザーアプリを止めるような高負荷なことをWindowsXPが不定期にやってるのかなと。
96 :
デフォルトの名無しさん :2006/10/10(火) 15:09:03
. . .... ..: : :: :: ::: :::::: :::::::::::: : ::::::::::::::::::::::::::::::::::::::::::: ∩___ ∩ . . . .: : : ::: : :: ::::::::: :::::::::::::::: / :::::::::::::::::ヽ:| 監視銘柄殆どナイアガラなのになんで日経プラス? |/ ̄X ̄丶;:丶. .日経平均って絶対計算間違ってるクマ ミ/ :::/●ヽ ヽ::| . .:: :.: ::: . :::::::::::::::::::::::::::::::: / :::/ ;;:|∪| ::ヽ ヽ .. :. :. .:: : :: :: :::::::: : ::::::::::::  ̄ ̄ ̄(_,ノ  ̄ ̄ ̄ ̄ヽ、_ノ ̄
>>95 ネットワークプログラミングとしての話は終わってる。
続けたければ他所へ行け。
>>97 それもそうだ
>>96 ぶっ、こんな所に誤爆してやがる。もうどうでもよくなってきた、吊ってくるわ
>>93 そのサーバアプリって、接続元を逆引きしたりしてるんじゃない?
んでへぼISPのせいで名前解決が時々遅れるとか。
クロスケーブルの中のISPも大変だな
Win2Kでプログラムをwebを取得するような組んでいます。
初心者なのでブラウザーが送信するコマンド(?)を使っていますが、
recv関数で止まります。
GET
http://www.google.co.jp/ HTTP/1.0
Accept: */*
Accept-Language: ja
Cookie: PREF=ID=d3dc13c725aba505:TM=1131299185:LM=1131299185:S=7Z_D3LwF_ybAD27s
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Host: www.google.co.jp
Proxy-Connection: Keep-Alive
だと、無事にhttpが取得できるのですが、
>>102 に続く
102 :
デフォルトの名無しさん :2006/10/10(火) 15:44:42
>>101 の続き
GET
http://www.google.co.jp/ HTTP/1.1
Host: www.google.co.jp
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; ja; rv:1.8.0.7) Gecko/20060
909 Firefox/1.5.0.7
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plai
n;q=0.8,image/png,*/*;q=0.5
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive
Cookie: PREF=ID=452332018f76a489:TM=1159774461:LM=1159774543:L=156aP5bKh55yM5YyX
5Lmd5bee5biC5YWr5bmh6KW_5Yy65p2x5bed6aCt55S6:S=UEbzdt83qv13aXSX
だと、recvで受信に行ったところで止まってしまいます。
telnetで同じように送信しても途中で止まっているのですが、
接続を完了するにはどうしたらよいでしょうか?
あと、なぜ受信途中で止まってしまうのでしょうか?
すみません、どなたか教えてください。
103 :
デフォルトの名無しさん :2006/10/10(火) 15:46:42
>>102 の訂正です。
変なところに改行が入っていました。
GET
http://www.google.co.jp/ HTTP/1.1
Host: www.google.co.jp
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; ja; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive
Cookie: PREF=ID=452332018f76a489:TM=1159774461:LM=1159774543:L=156aP5bKh55yM5YyX5Lmd5bee5biC5YWr5bmh6KW_5Yy65p2x5bed6aCt55S6:S=UEbzdt83qv13aXSX
>>101-103 改行コードはちゃんと CR LF にしてる?
最後のヘッダ(この場合 Cookie:)の後にさらに CR LF してる?
(最後は S=UEbzdt83qv13aXSX CR LF CR LF になる)
105 :
デフォルトの名無しさん :2006/10/10(火) 16:53:51
>>104 最後のヘッダはきちんと空行を入れるようにしています。
あと、
>>101 ならば自前のプログラム上でも、telnet上でも、
きちんと取得できるので、基本的に手法は間違っていないと思っています。
ただ、telnetでのアクセスでも
>>103 だと途中で止まったままになっています。
問題点はどこにあるのでしょう?
>>105 うちから
>>103 のリクエストをtelnetで投げたら、ちゃんとレスポン
スが表示されたよ。
108 :
デフォルトの名無しさん :2006/10/10(火) 17:37:16
>>107 ありがとうございます。
すみません。
書き込んでいたのはリクエストを取るために作った、
自前の簡易サーバーのログからでした。
プロクシに対してのリクエストなのをすっかりと忘れていました。
リクエストを“GET
http://www.google.co.jp/ HTTP/1.0\r\n\r\n”とすると
問題はありませんが、“HTTP/1.0”を“HTTP/1.1”にすると
recvの所で止まってしまいます。
telnetでも“HTTP/1.0”ならば“ホストとの接続が切断されました。”まで
一気に表示されてtelnetが終了します。
“HTTP/1.1”にするとレスポンスの後に改行を入れなければ、telnetの終了まで
いきませんでした。(Win2Kで試しました)
問題点はここだったようです。
まだ疑問点などは色々とありますが、もう一度勉強をしなおしてきます。
ありがとうございました。
>>107 HTTPの今後の仕様で変わるかもしれないから、相手がプロクシじゃなくても
通るようになってるって話がどこかになかったっけ?
keep-aliveあたりが問題じゃないの
この際RFC読めよ。
ソース晒す方が早いよ
114 :
デフォルトの名無しさん :2006/10/10(火) 18:29:11
そんなバグったソースパクってどうするんだよ。
116 :
デフォルトの名無しさん :2006/10/10(火) 18:37:48
>>115 それはパクル人に聞いてもらわないとなんとも・・・
>>114 HTTPのGET/RESPONSEぐらい、お前からパクるまでもないから心配しなくて良い。
そんなもんWeb上にいくらでも転がってる。
100本以上のセッションをIoCompletionPortとか使いながらスレッドプールで
捌いて、しかも連続する同一ホストに対するセッションをpipelineでまとめたり、
サーバがパイプラインを嫌ったときに、自動的に再試行してくれたりとかまで
対応してるんならパクるが。
あと、別スレッドのロジック処理に回す時も、memory-to-memoryのコピーが
最少となるように工夫されてると良い。
118 :
デフォルトの名無しさん :2006/10/10(火) 18:48:10
>>117 当然ながらIO完了ポートを使っていますし、
スレッドもプールして使いまわしています。
HTTP1.1でパイプラインが使える場合は使いますし、
使えない場合は使いません。
スレッドが違ったとしても態々コピーするようなことはしてません。
というような当たり前の実装をしていますが・・・
メイル欄、空の人は荒しだな。放置推奨
>>118 じゃ、IO完了ポートも使わない
スレッドもプールしない
パイプラインが使える時も使わないし、そうじゃない場合も使わない
同じスレッドでもメモリコピーしまくりの
単純なプログラムで検証汁
なんか変なところを刺激されたみたいだな
そもそも毎秒おきに受け取って処理するなんてリアルタイムOSじゃ無いと無理。 リナクスでも受け側では遅延すると思うよ。もちろんXではDVDでも見てて負荷かけててくれ。
>>119 この場合、荒しとは言わない
ただの厨房だ
気に入らないならスルーしろ
126 :
デフォルトの名無しさん :2006/10/11(水) 00:54:43
http1.1のRFC読めよって話なんだよ
>>108 > 書き込んでいたのはリクエストを取るために作った、
> 自前の簡易サーバーのログからでした。
HTTP/1.1に対応していないならあなたのプロキシは転送時に
HTTP/1.1をHTTP/1.0に書き換えなければならない。
まあ
>>129 ってこった。
>>130 私のプロキシって何ですか?
作った覚えがないプロキシが対応していないと言われても・・・。
>>131 提示されたログは明らかにproxy宛のリクエストだから
そのログをとった「簡易サーバー」はproxyとしか思えんわけだが。
>>127 > ソース公開は嫌だという書き込みは荒らしだと思うんですよ。
で、晒す気はないと?
逃げたか?プッ
>>134 いえ、勝ち戦で逃げる必要は無いので、それはあり得ません。
私もproxyを作った覚えはないのですが、参加してもよいですか?
proxyは韓国起源ニダ
コード出さない奴はエスパースレへ誘導
私だけが私のバグを ああ未確認
俺の天才的なコードを晒すわけねーだろばーか^^
142 :
デフォルトの名無しさん :2006/10/11(水) 22:11:59
HTTPとPROXYの話が出たから。 proxyさばっぽいのつくってます。 HTTPはしゃべれるようになったんですが、 HTTPSでつまずいてる。 クライアントからCONNECTメソッドが来たらどうしてあげればよい?
143 :
デフォルトの名無しさん :2006/10/11(水) 22:27:22
>>142 CONNECT www.example.com:443 HTTP/1.0\r\n
\r\n
という感じのリクエストが来ると思うので、www.example.com の 443/tcp に接続を試みる。
接続が成功すれば、
HTTP/1.0 200 OK\r\n
\r\n
を返して、その後はサーバーとクライアントの間のやり取りをそのまま転送し、
どちらからか接続が切られるまで転送を続ける。
接続が失敗した場合は、
HTTP/1.0 504 Gateway Timeout\r\n
\r\n
等を返して、接続を切る。
それから、ポートの指定が443以外の場合は、403 Forbidden等を返して接続を切るようにしたほうがいいと思う。
理由は省略するけど、HTTP Proxyを作っているなら分かるだろうし、分かるべきだと思う w
問題はwww.example.com:443によってssl証明書を変える必要が有る場合。 最初からssl接続しないと通信できないしそのためにはssl証明書が必要。 つまり鶏卵問題が発生する。 バーチャル鯖は辞めとけってことだが。
というか、TLSのハンドシェイクもそのまま鸚鵡返しにすればいいだろ?
>>145 接続先によって、SSL/TLSのクライアント証明書を使い分ける場合の事?
それとも、クライアント証明書が不要で、サーバ証明書のみが必要な場合の事?
どちらにしても、そういった場合には証明書関連で不都合が生じるとは思う。
でもそれはクライアントの実装等の問題であって、HTTP Proxyの問題ではないはず。
DNS Aliasを使う場合やIP Addressを直に指定する場合は、HTTP Proxyの有無に関わらず、
トラブルの原因になりがちだし、HTTPSのコンテンツフィルタリングを行う場合は、かなり問題になると思う。
でも
>>142 はそこまでやりたいとは言っていないし、
とりあえずは、
>>144 の回答でほぼ問題がないかと。
それ以上となると、ネットワークというより、セキュリティ関連の方の話題になってしまうと思う。
簡潔に言うと
>>146 の言うように、SSL/TSLに関しては単に中継すればいいだけ。
そこでIE7からサポートされてFx3でもサポート予定のServer Name Indicationですよ。
ttp://ascii24.com/news/i/topi/article/2006/09/21/664704-000.html wwwありのURLは、実在のホスト名を指すが、ドメイン名というのは本来実体のない
抽象的な存在だ。だから、wwwなしのドメイン名そのものをアクセス可能なURLとして
設定するというのは、従来の設定方法から比べると、ややトリッキーではある。しかし、
「もう時代は変わった。こっちのほうが便利だらかいいんじゃん?」というノリで変えて
しまうルーズさ、またそれができてしまうという、いい意味での仕様の曖昧さこそ、
インターネットの重要な本質ではないだろうか。インターネットが活力を失わずに進化を
続けられているのはガチガチに仕様が決まっていないこと。だとしたら、wwwなしがWeb2.0的だ。
ascii24.com/news/i/topi/article/2006/09/21/664704-000.html リンク先を見ると、 >(編集部 西村賢) って奴が責任者なんだろうな。こいつ年はいくつなんだ? 恥ずかしい奴だな。wwwwwwwwwwwww
150も150で「どこがおかしいのかが実はわからない」臭がプンプンするw
コンピュータ名でしょ?
connect send recv send recv HTTPで上のようにやりたいんですけど、2回目のsendで失敗します どうすればいいんでしょうか…
>>154 失敗しないように2回目のsendをHTTPでやればいいだけなのだと思うのですが…
HTTP/1.1
HTTP/1.1でもConnection: closeつけてリクエストしてたりして
>>156 HTTP/1.1 って、Keep-Alive がデフォルトでしたっけ?
>>154 の環境が分からないですし、具体的にどういうことがやりたいのかもいまいちですが、
1つのHTTPリクエストを複数回に分けて送ろうとしているなら、考え直したほうがいいと思います。
コネクションを張りなおさずに複数のHTTPリクエストを出したいなら、リクエストヘッダに
Connection: Keep-Alive
Keep-Alive: 300
等のようなものを含めてみるとかでしょうか。
ただ、CGIのような動的コンテンツの場合などサーバーが、
Connection: close
で、コネクションを切断する場合もあるので、必ずしもうまくいくとは限りません。
>>158 HTTP/1.1はKeep-aliveではなくpersistent connectionがデフォルト
(Keep-aliveはchunked encodingを許さないのでcontent-lengthが付けられないなら
closeで終了を知るしかない)
160 :
158 :2006/10/16(月) 00:05:29
>>159 難しいです・・・ Keep-Alive と persistent connection の違いを勉強しなおします。
Keep-Alive と chunked encoding は併用出来ないのですか。
それなら、動的コンテンツでサイズが分からない場合は、コネクションの切断で終了を知らせるしかなさそうですね。
いやだからpersistent connectionとchunked encodingを使うの。 Keep-AliveはHTTP/1.0の拡張でRFC1945の付録に書かれてる。 HTTP/1.0だからchunked encodingは禁止(とRFC2616に書かれてる) persistent connectionはHTTP/1.1の標準仕様だしデフォルト。 当然chunked encodingも使える。というかまさに > 動的コンテンツでサイズが分からない場合 に終了を知らせるための機能なんだから。
162 :
154 :2006/10/17(火) 18:51:27
POSTでデータを送るとき、Content-Lengthの値が間違ってました 固定データだからといって自分で数えますた 皆さんの予想通り凡ミスです すみませんでした…
でんでん
dedenn
dandan心魅かれてく
166 :
デフォルトの名無しさん :2006/10/18(水) 07:18:03
IPv6リンクローカルマルチキャストアドレスを指定してソケットプログラミングを組むことは可能ですか?
167 :
166 :2006/10/19(木) 04:29:17
うーん。。
UDPのmanを見る限り
「UDP ソケットが生成されるとき、ローカルアドレスやリモートアドレスは指定されない。
正しい行き先アドレスを引数として sendto(2) や sendmsg(2) を呼べば、データグラムはただちに送信される。」
とあるので、やはりリンクローカルアドレスの使用は無理っぽいですね。。
http://www.linux.or.jp/JM/html/LDP_man-pages/man7/udp.7.html あるマシンがリンクローカルマルチキャストを送信して、同一リンク上の他のマシンが応答するようなプログラムを書きたいんですけど、なにかいい方法はありませんか?
>>166-167 分かってるようで分かって無い日本語なので何をこたえりゃいいのか分からんwwwwwww
> sendto(2) や sendmsg(2)
>>167 ローカルアドレスのローカルと、リンクローカルアドレスのローカルは意味というか、
範囲が違うぞ。
リモートのリンクローカルアドレスだってある。
IPv4だと普通にsocketつくって、setsockoptでマルチキャストグループに入って送受信すれば
いいだけだが、v6だと違うのか?
170 :
デフォルトの名無しさん :2006/10/19(木) 10:36:53
172 :
166 :2006/10/19(木) 20:34:13
>>168 すいません。。
現状としては、クライアント側でsockaddr_in6.sin6_addr.s6_addrにサーバのグローバルアドレスを指定すると普通にsendtoして送信することはできます。
ここで、"ff02::1%[interface name]"などのリンクローカルマルチキャストアドレスを指定するとsendtoでエラーをはいてしまってどうしたものかと。。
ちなみに、"fe80::hoge"などのリンクローカルアドレスでも同様にエラーになってしまいます。
>>169 助言していただいてありがとうございます。
リンクローカルアドレスを指定する場合はsetsockoptすればいいんですかね?
>>170 サーバ側では、リンクローカルアドレスをbindしているんですがうまくいかなくて。。
>>171 ありがとうございます。
1. sendtoするまえにソケットを明示的にリンクローカルアドレスにbindする 2. マルチキャストならさらにIPV6_MULTICAST_IF でちゃんとIFを指定する とかくらいしか思いつかない・・・
174 :
デフォルトの名無しさん :2006/10/24(火) 16:11:22
現在Linuxでソケットプログラミングをしているのですが、
なぜか一定数接続したところでacceptが固まってしまいます。
短い間隔、長い間隔、複数ホストからの接続を試みてみましたが、
いずれも必ず合計382接続したところでacceptから反応が返ってこなくなってしまいます。
同じプログラムでWindowsでは問題なく動いているので、
Linux環境特有のなにかがあると思うのですが。。。
ちなみに他のスレッドから待ち受け用のソケットと閉じるとacceptから抜けました。
どなたかご存知の方いらっしゃいませんか?
LinuxのディストリはUbuntu Desktop、gcc 4.0.3で、
ttp://gimite.ddo.jp/gimite/cppmess.htm のラッパを使用して以下の様にプログラムしました
175 :
174 :2006/10/24(火) 16:11:55
void *server_thread(void *arg){ gimite::socket_stream s((gimite::socket_t)arg); //hogehoge s.close(); return NULL; } void accept_thread() { gimite::server_stream_socket ss; if(!ss.bind(port)) return; while(!terminate){ gimite::socket_t cs = ss.accept(); if(cs != -1){ pthread_t thread; pthread_create(&thread, NULL, server_thread, cs); }else{ break; } } }
176 :
174 :2006/10/24(火) 16:55:35
すみません 自己解決しました 一定数以上スレッドを作成すると、pthread_create() が "Cannot allocate memory"を返してきました。 この状態になると accept() が固まるようです。 pthread_create() のあとに pthread_detach() を呼び出すことで解決できました。
177 :
デフォルトの名無しさん :2006/10/24(火) 16:57:48
CreateGame〜陸海空オンライン〜 日本NO1MMO製作プロジェクト開始! PG募集!
>>174-175 スレッド数制限じゃねぇかな。PTHREAD_THREADS_MAXか、ulimitとか。
適時、死んだスレッドはpthread_joinで回収しろ。
それまでは、リザルトコード保持のために、スレッド情報が保持される。
スレッド終了時に自分の、pthread_tをキューにでも積んでいって、
適当なタイミングで、pthread_join()を回すとか。
179 :
174 :2006/10/24(火) 17:05:52
>>178 ありがとうございます。
リザルトコードは欲しいのでその方式にしたいと思います。
スタックオーバーをちゃんとエラーとして出すコンパイルオプションがあるんじゃなかったっけか。 少なくともSunStudioのCCにはあるが。。。
スタックオーバー?
C/C++で、本読みながらネットワーク勉強しはじめました。 ほんのサンプルはなんか便利な関数使っていてわからないのですが、 GETとかPOSTとかコマンドは、実際に送っているデータもASCII文字列を 送っているのでしょうか。 send関数のバッファーbuffに、その文字列入れて recvで待っていると"200"のASCII文字列が返ってくるということでしょうか。
違います。
185 :
ACE :2006/10/25(水) 09:58:08
C/C++で、本読みながらネットワーク勉強しています。 ACE(ADAPTIVE Communication Enviroment)って言うのは実際には 使われているんでしょうか? ソケットAPIに比べてとても優秀だと言われていますが、 やっぱり基本はソケットAPIですかね?
>>185 そもそも同じ土俵に持ってくることが間違い
187 :
ACE :2006/10/25(水) 10:09:19
え、本当ですか?
189 :
ACE :2006/10/25(水) 10:30:35
申し訳ありません。 ありがとうございました!!!!!
HTTPクライアントを作っていて思ったのですが、 VMwareの仮想NICなど複数のNICが存在する環境で、 bindしなければランダム?で使用するNICが選ばれてしまい、うまく動作しないことがあります。 bindするにしても、どのIPアドレスにbindすればWebサーバに接続できるのかがわかりません。 ブラウザなどはどうやって判断してるのでしょうか?
>>190 ランダムではない。ルーティングテーブルを見てる。
>>190 消極的な対処でよければ
bindしないでconnectしてみたら
>>190 複数のNICを一つのサブネットにDHCPでアドレスを取って、接続してて、
OSがWindowsで、メトリックが自動メトリックになってるで、仮想環境をリブートしたり、NICの
ON/OFFをする度に、選ばれるNICがコロコロ変わっているんじゃないかと推測してみる。
なら、自動メトリックを切って、接続元として使いたいNICのメトリックを最少にする。
netstat -rあたりで、ルーティングテーブル見ればどのNICがbest interfaceとして選ばれる
か分かる。
それでも、HTTPクライアントで、接続元アドレスを気にする必要ってあるか?
サーバ側で、SRCアドレスでセッション管理してるとかかな。
よっぽどのことがなければ、クライアント側はbindせず、OSのルーティングに任せるのが普通。
マルチスレッドで複数のクライアントを相手にするサーバを 安全に、自分の好きなタイミング終了させたいのですが質問です。 C++builder使っているので、WINDOWSの場合 ・flag変数を用意 ・ボタンを押したらflagが変わる で、終了処理に移ることができます。 linuxの場合はどのようにするのでしょうか? 標準入力(コマンド入力)を待つスレッドかプロセスを 作ってその入力によってflagを変えるというふうにするのがよいでしょうか?
サーバ側が常にrecvで待機しておいて、クライアント側がsendで送った メッセージを全員に配信するというチャットプログラムを作りました。 これにサーバ側が好きなタイミングで全員にメッセージを送る機能を 付けたいのですが、サーバはrecvを呼び出した所で止まっているため 動けません。 一応クライアント側が数秒に1回ダミーメッセージを送るという方法で 動く奴は出来たのですが、こういう方法で良いのでしょうか?それとも こういう場合、もっと良い実装方法があるのでしょうか? Winsock2.0でマルチスレッドで作っています。
クライアントとして自分で自分にメッセージを送れば?
>>194 linuxの場合は、ってlinuxで、ユーザーとのインタラクションはどうやるつもりなの?
TTYなら、SIGINTか、SIGTERMあたりの適当なsignal拾えばいいと思う。標準入力をトリガにしても良い
だろうし、RPCとか、別プロセスからnamed pipeでも良い。
ユーザーからのどのような動作で、終わらせたいのかが不明。
XでGUI組むなら、Windowsと同じようにGUIでも良いし、signalとかの手段でも良い。
>>195 サーバ側を非同期受信にする。
というのはガセ
すみません、返答が遅れました。
>>195 「なるほど!その手があったか!」とコロンブスの卵的に感動して早速
プログラムしたのですが、新たに問題が出てきました。普段クライアン
ト側はメッセージ送信(send)をするまで適当にsleepしながら無限ルー
プで待っているのですが、そのためサーバがsendしてきてもrecv出来
ません。結局サーバ・クライアント共に普段はrecvで待ちながら、必要
な時だけ自分宛のsendでrecvを一度終了し、相手にsendしたあと、再度
recvに戻る…となってしまうようです。
なんか効率が悪い気がするのですが、こういうのが一般的なプログラム
方法なのでしょうか?
続きます。
それでちょっと考えていたのですが、現状1接続に対して1つのスレッドを、
send用とrecv用の2つのスレッドに増やせば良いのでは?と思いつきました。
ただこの場合、SOCKET変数を外部変数なんかで共有し、2つのスレッドで
同時使用することになると思うのですが、これは問題ないのでしょうか?
recvスレッドがrecv()で受信中のソケットに対して、sendスレッドがsend()で
送信することが起こると思うのですが…特に問題なしですかね?
ちなみに
>>197 さんもこういう実装方法を指しているのでしょうか?
>>199-200 >なんか効率が悪い気がするのですが、こういうのが一般的なプログラム
>方法なのでしょうか?
そんなことをしているプログラムは普通ではないです。
スレッドを使ってもいいのですが、性能面で問題がないなら
以下のようなループで十分では?
while (!quit) {
select で受信できるかどうか見てみる
-> 受信できるようなら、recv して queue なり buffer なりに追加
-> 追加した結果、メッセージが全部来ていたらそれを処理
何か他の必要なことをする
}
UDP なら recv1回でメッセージは全部取れるので少し簡単になります。
なるほど。今まであまりselectは使った事が無かったのですが、こういう時
に使うのですね!ヘルプも読んでみましたが確かに上手くいきそうです。
参考になりましたm(__)m
が、実はチャットは制作の第1段階で、最終的にはネットワークゲームを
作る予定でして、性能面もちょっと気にしております。それで確認なのです
が、
>スレッドを使ってもいいのですが
というのは
>>200 のようなやり方でOKと解釈して良いでしょうか?それとも
>>200 では駄目でしょうか?またその場合、スレッドを使ったこういう時の
一般的な処理方法はどういうものなのでしょうか?
>好きなタイミングで全員にメッセージを送る機能 サーバーにクライアント機能を入れなくてもいいんでね? クライアントとして完全な別アプリにするとか せめて別プロセス作ってそっちで動かすとかして 正規クライアントとして(もしくはバックドアから)接続 一緒に入れ込むと拡張とか保守とかしにくくなってくるよ
コロンブスの卵?
>>202 送信と受信でスレッドを分けるやり方も可能ですよ。
同時にrecvとsendが呼ばれても問題ありません。
一般にsendはブロックする(処理が終わるまで時間がかかる)可能性がありますから、
前のsendが終わっていなくても何かrecvしたい・する可能性があるようなプロトコルならば、
送信と受信のスレッドを分ける必要が出てくるでしょう。
個人的にはこのあたりはバグが出ないように非常に単純に作っておいて、
後からチューニングした方が好ましいと思うけど。
>>205 詳しい解説有難うございます。非常に参考になりましたm(__)m
とりあえずまずselectで作ってみて、パフォーマンスに不満が出れば
スレッド方式に移行してみようと思います。
>>203 はい、チャットだけなら確かにそうなのですが、最終的にネトゲを目指
しているため、例えばサーバから全プレイヤーにゲームデータを送る
等、いずれはそういう機能が必要になると思って質問しました。
何にせよ、返答してくださった皆さん、どうも有難うございましたm(__)m
207 :
デフォルトの名無しさん :2006/10/28(土) 07:00:23
TCP通信における、サーバ側のポート番号について疑問点があります。 例えばHTTPの場合、サーバ側のポートは(一般的に)80になるかと思います。 クライアントから要求があり実際に接続された場合、実際に通信に使用される サーバ側のポート番号は80かと思っていましたが、そうではなく内部的に 別のポート番号が割り振られるという話を聞きました。 本当なのでしょうか? tcpdumpなどでキャプチャしたデータを見てみても、TCPのヘッダには80とありますが…
TCPの接続は、 <src IP, src port, dst IP, dst port> の四つ組みで識別されています。 だから<dst IP, dst port>が同じでも何の問題もありません。 > 別のポート番号が割り振られるという話を聞きました。 誰が言ったか知らないが、気違いは無視しましょう。
src側のportは不定だろ。じゃなきゃ多面でダウンロードなんて出来ないし。
トンネルソフトを使えば中継によってポート番号は付け替えられるが、 そういうハナシを混同してはいけない。
同じクライアントからの2つ目の接続の場合、 src portが別のものになる、でよい? この場合のsrc portの割り振りって誰がやってるの?
クライアント
OS
適当に空いてるの
ソケットライブラリさん
216 :
デフォルトの名無しさん :2006/10/28(土) 21:32:09
> 別のポート番号が割り振られるという話を聞きました。 全会一致で、そのようなことはないということですね。 大変為になりました。皆さん、ありがとうございました。
通信要求受付のポートと通信用ポートの存在を忘れないでください。
すべてのプロトコルで80番を使えばおk。 既にNATでエンドツーエンドの通信は崩壊してるし。 ソース側のポートは不定ではないな。OSによって癖が出るから、OS判別に利用されやすい。 セキュリティのことを考えたら、癖を出さないプログラミング重要。 全プレイヤーにゲームデータを送るって仕様の時点でダメポ。 全プレイヤーが全く同一のネット環境なんてあり得ないし、全プレイヤーの中で一番遅くて遅延の酷い香具師に合わせるしかなくなる(遅いのを早めるのは無理。早く来たのを表示を遅らせるのは簡単にできる)
220 :
デフォルトの名無しさん :2006/10/29(日) 10:44:43
UDPパケットを通信速度を超えて送ったとき、 通信速度が間に合わなくなった分は パケットは破棄されるの? それともキューにたまって後になってからやってくる?
>>220 > キューにたまって
どこのレベルの話したいの?
>>223 必要はない。
BSDソケットがそう設計されたってだけの話。
「ポート」と言っても、TCP/IPのポート番号じゃなくて、ソケットのことだし。
>>220 バッファがあればある程度キューみたいなものに溜まって、
溢れたら無条件で破棄、となるのが一般的だが、結局UDPレイヤの実装依存。
linuxとかでGUIなしのデーモンとして動かす場合のアプリって 非同期ソケットって必要になりますか? サーバーとして1000クライアント以下のものを考えてます。
まずなしで作ってみれば? いずれにせよ、イベント駆動型のメインループになるんだから。
まずは非同期と非ブロックの区別をつけることから始めようぜ
もうテンプレに入れといてくれ
非ブロックでフツウに作れるようになってからじゃないと 非同期ってとてもじゃないが扱えないキガスル
231 :
デフォルトの名無しさん :2006/10/29(日) 21:29:21
非ブロックと非同期の違いってなんですかぁ?^^
ここのカスどもには説明できないよ。ググったほうがマシ。
ブロック:完了するまで待たされる。 ノンブロック:忙しければ断られる 非同期:頼んでおけばいつの間にかやってくれる。
>>225 そりゃ、トランスポート層の話でしょ。
>>222 アプリケーション層の話なら、貴方の実装しだい。
アプリケーション側にバッファを用意すると、 TCPの送受信バッファもあるわけで、 2重持ちすることになってアホらしいような気がせんでもないのですが みなさんどう考えますか
実際極限までパフォーマンス稼ぐときはバッファをユーザーモード側に 持たせない手法になっていくよmmapとかsendfileとか果てはhttp.sysとか
各処理の階層を切り分けた結果、 そのあいだにバッファが出来るのは 仕方がないと思っている。 まずは正しく動くことが大事かと。
>>235 出す側はわりと簡単に zero copy 化できるんだけど、受ける側は結構問題だわな。
まあ、Winsockなら、OverlappedI/O使えばダイレクトに受信できるけどね。
PCにNICを二枚挿して、片方のインタフェースから受信したEthernetフレームを
反対側のインタフェースにそのまま送信するWindowsアプリを作りたいと思っています。
(
http://hata.cc/products/linee/ ←要はこれのWindows版)
winsockだとL2が拾えない(と認識しています)ので、WinPcapを使ってみたのですが
フレームを送信しようとすると
データを送信側のデバイスに渡した == データが書き込まれた(フレームを受信した)
という状態になってしまいまい、フレームの転送が出来ることは出来るのですが、送信した
フレームを自分で受信した上にそのフレームを反対側のインタフェースに送信しようとするので
フレームが無限増殖してしまいます。
WinPcapのソースコードを追ってみるとファイルハンドルは"\\.\Global\NPF_{ifname}"で
CreateFileしており、送信/受信の区別が無くインタフェース名で一意になっていることが
原因のようでした。
で、このような状態を回避する方法があるか、WinpCapで無理なら他に何を使えば出来そうか
ご教示願えませんでしょうか。
(因みに、当方ドライバは書いたことがありません…)
>>240 送信元MACアドレスが自分の持っているMACアドレスの1つと一致する場合は
転送処理を行わないとか、そういう単純な回避法では無理ですか?
ARPやDHCPでも送信元MACアドレスを入れないということは無かったと思いますけど。
242 :
240 :2006/11/01(水) 03:35:23
>>241 さん
レスありがとうございます。
すみません、説明が足りませんでした。
ここではインタフェースをプロミスキャスにしていて、受信したフレームの
DMACが自分宛でなくても全て受信し、「そのまま」中継することが目的なので
SMACもDMACも自分のMACアドレスにはならないため、残念ながらフレームで
判断することはできないんですよ。
L2中継機ではなく、ネットワーク的に見れば単純なリピータハブとして動作
するようにしたいのです。
(もちろんARPやDHCPなどのL2マルチキャストもそのまま転送させたい)
ネットワーク構成は以下のような感じで。
アプリが動いてるPC
[PC1]-------------[ IF0 IF1 ]-------------[PC2]
PC2のDMAC → そのまま転送 → PC2のDMAC 逆方向も同様に
>>242 こちらこそ、リンク先をじっくり読んだりしていなくてすみません。
IF0でPC1のSMACのフレームを受信した事を記録して、IF1からそのまま送信、
IF1でPC1のSMACのフレームを検出するけど、IF1で受信したわけではないと分かるので無視、
という方法はどうでしょうか?
残念ながら、私にはこれぐらいしか思いつきません。
ソケットプログラミングのサンプルを見ていると、 accept後にforkして子プロセスに処理を行わせる ものしか見かけないのですが、これは何故スレッド にしないのでしょうか? スレッドを新たに作って、そのスレッドに処理を行わせる 方が自然な気がするのですが。 それにforkはWinに移植しにくいのでポータビリティも 失われる気がします。
・古典的でありよく使われている。 ・対してスレッドは新しく理解・経験・文献・ソースが不足している。 ・子プロセスはこけても親に影響がない。子スレッドは親を道連れにしてあぼ〜んする。 ・acceptするプロセスと実際のやりとりをする子プロセスの間で、密に設計する利点がそもそもない。共有するリソースがない。
・Windowsではプロセス作るのはとんでもなく重いがUNIXではそれほどでもない
・というのはガセ
子スレッド死んだら親も死ぬのか?
>>246 スレッドならWindowsにも移植しやすいのですか?
言語やライブラリによるのかもしれませんけど。
UNIX系の場合は
>>247 の理由に加えて、
set(u|g)id プロセスの特権放棄に対応しやすいというのもあるかもしれません。
winなら素直に非同期で書け
というかUNIX系はプロセスを分ければリークしてても切断すれば元に戻るから安全。 逆にWindowsでスレッドだとWinnyみたいにどんどん使用メモリーが増えてって 1プロセスで500MBとか使う悲惨なことになる。 forkを使うUNIX版きぼんぬ。
そこでmalloc/free論争ですよ
>>253 Winnyを作った作者がヘボプログラムなだけ
スレッドにしないと問題になるのが相手がおもいっきり通信中だと 遅延がものすごいことになるんだよ 即時応答を要求しないものはそれでいいのだけど、独自のPingのような 命令行動を実装していた場合、余裕でタイムアウトしちゃいますw
nyはスレッド使ってねーよ
つまりどっちでもいいってこったな 周りにあわせるならfork 移植性考えるならthread
>>256 >スレッドにしないと問題になるのが相手がおもいっきり通信中だと
>遅延がものすごいことになるんだよ
た め に な る な あ
結局forkとスレッドどっちの方がいいの?
1-からのリンクと適材適所。
UNIXerならforkだろ。
263 :
デフォルトの名無しさん :2006/11/03(金) 20:21:30
ファイアーウォールと、プロキシサーバの 違いを具体的に教えて下さい。 一通り検索しましたが、パケットをフィルタリング できる点は機能的に似ている説明ばかりです。 これらの本質的な機能の違いは何でしょうか?
proxy serverってぐらいなんだから、つまりはそういうことなんだよ。 proxy = 代理。別に検閲目的に立てるだけじゃないぞ。 例えばWebページのキャッシュとかして帯域を節約したりもする。
アプリケーション層で動くファイアウォールもある まぁ、何かフィルタリングするのは確か
>>264-265 両者間で、TCP PORTの通過は、どう違っているんでしょう?
例えば、httpsはPORT 400番台ですよね。
一方、httpはPORT 80だけど、プロキシでは8080へ変換して使うことが
多い。
こうしたTCP PORTは、それぞれ、ファイアウォール、プロキシで
どのような通過制限がかかるのでしょうか?
ファイアーウォールは、基本的にパケットの中身は変更しない。 もちろんパケットを通すか通さないかを決めるためにパケットの 中身を見ることはあるけどね。 プロキシサーバーは、代理サーバーなんだから基本的になんでも ありあり。 ポート番号の変換だけでなく、プロトコルそのものを変えること すら可能。たとえば、ftp サーバーをクライアントには web サーバーのように見せるなんてことをやったりする。
>>267 >ファイアーウォールは、基本的にパケットの中身は変更しない。
非常にここはわかりやすいです。つまり、TCP PORT制限を
かけ、応用層プロトコルは変化させない、と理解すれば。
しかし一方、
>>265 によれば、F/Wによっては、応用層プロトコルにも
介入するという話で、こんがらかるのです。
そもそも俺には ファイアウォールとプロキシーサーバーのどこが似ていて、 なぜ「どこが違うのか」という質問が出てくるのか 全然理解できないのだが。
>>269 パケットをフィルタリングする・・・という(ネット上にある)説明内容が
両者の共通点に見えるためです。
どこだか知らんがひどい説明だな。 プロキシはパケットを意識するような層では動いてないよ
>>271 プロキシが基本的に応用層プロトコル処理に介在しているのは
その説明でわかりました。
それではプロキシが、応用層にあるhttp port 80を 8080へ変換する目的(理由)は
どこにあるのでしょうか?
そんな変換する必要、全然ないけど? 何勝手な思い込みで変なこと言ってるわけ? ちゃんとプロキシーサーバーってものについて、調べてみたのか?
>>268 > しかし一方、
>>265 によれば、F/Wによっては、応用層プロトコ
> ルにも介入するという話で、こんがらかるのです。
そもそもファイヤーウォールは、「何かをブロックする」という
機能を実現するもの。
これに対してプロキシサーバーは「クライアントの代理でサーバー
に要求する」という仕組みを表すもんだから、比べること自体がお
かしい。
アプリケーションファイヤーウォールと呼ばれるものでは、プロキ
シサーバーがファイヤーウォールを実現しているものもあるしな。
そもそも、
>>267 に書いた通りプロキシサーバーはなんでもありあ
りだから。
>>272 > それではプロキシが、応用層にあるhttp port 80を 8080へ変
> 換する目的(理由)はどこにあるのでしょうか?
それは、そのプロキシサーバーを設置しているところに聞いてくれ。
>>273 調べが十分でない、理解が十分でなく、思い込みが
あると思われます。
しかし、無駄に80<->8080への変換をやるのではなく、
何か明確な目的(役割)があると思うのです。
必要がないなら、port番号を変換しないはずと思います。
書くのが大変だと思うので0時を回った故、後でよいです。
同じマシンでWebサーバーとプロクシサーバーが走ってる場合は ポート80はWebサーバーが使ってる。 気の利いた奴が別のポートを選ぶ際に 8080をプロクシサーバーのポートにして流行って定着したんだろうな。 いつからなのかは(´・ω・`)しらんがな
そのサーバの80番は普通にhttpを受け付けてるからじゃないのかね?
OracleのXDBが使っててバグの温床になった経験がある。 8080は人気杉なんで今じゃ不用意に指定しないようにしてるw
>>276 まだmozaicしか無かった頃にどこかの大学が文字コード変換をするために建てたproxyが既に8080だったやうな
>>279 「やっぱり、プロキシーサーバーとは変換するものですよね」と来る予感。
こういう調べればわかるのに聞いてくる馬鹿はなんなんだ? 新しい知識知ったからってここに書くなよぼけ
やっぱり、プロキシーサーバーとは変換するものですよね
釣り人は海、河、湖にでも行ってください。
287 :
デフォルトの名無しさん :2006/11/04(土) 02:38:28
釣り人が海河湖に行くものだと思ってるって石器人ですか? 現代の釣り人は2チャンネルに行くものなんです。
石器人ですが何か?
こまがた ばんだいの がんぐだいさんぶの ほし
291 :
デフォルトの名無しさん :2006/11/04(土) 16:12:27
この天然キチガイサイトはまだ生きてたのか
なるほど、プロキシはそういうものだったんですね。 詳細は省略しますが、自分の思い込みの部分も自分でわかってきました。 夜分遅くまで、ご教示と、ご協力ありがとうございました。
>>292 肝心なコストのかかる担当が悉く空白なのが現実を反映していてよい。
やっぱ最初にちゃんと動くモノ出さないと歯牙にもかけられないよな。
295 :
デフォルトの名無しさん :2006/11/05(日) 21:28:12
ノンブロックでconnectしたとき、接続できたかどうかは 何で判断すればいい? selectでwrite可能かどうか見る以外にスマートな方法キボンヌ
プログラム担当がサポートしかいないんで吹いた。
> selectでwrite可能かどうか見る こうしない理由がわからん
>>295 selectが最もスマートな方法だが、どうしてもポーリングしたいと
いうのならば gepeername(2) を使いたまえ。
Borland 5.5.1でsocklen_tがtypedefされてないのですが、 ひょっとしてこれって絶対typedefされてる保証ないのですか?
PSDKではws2tcpip.hでtypedefされてる。
302 :
デフォルトの名無しさん :2006/11/07(火) 02:57:55
winpcapをc#から使うのは難しいですか?
303 :
デフォルトの名無しさん :2006/11/07(火) 14:12:40
127.127.1.0 というIPアドレスを持っている人はいないんですか?
いっぱいいます
IPv6ってどんどん存在意義が薄れてねーか リンクローカルとグローバルしかないのなら それってNATの向こうとこっちで分かれてる現状と変わらんキガスル
306 :
240 :2006/11/07(火) 23:07:21
>>245 さん
返信遅くなってすみません。
リンク先の情報でOKでした。
ご存知の方もいらっしゃると思いますけど、一応解決方法を書いておきます。
winpcap\packetNtx\driver\Write.c
135行目あたりにNdisSetPacketFlags()を追加。
---
// Attach the writes buffer to the packet
NdisChainBufferAtFront(pPacket,Irp->MdlAddress);
NdisSetPacketFlags(pPacket, NDIS_FLAGS_DONT_LOOPBACK); // 追加 (XPのみ???)
// Call the MAC
NdisSend(
---
リコンパイルして正規のnpf.sysに上書きすればOK。
本当はWinPcapを入れなくてもinf実行でインストールできるようにしたかったんですけど
レジストリにうまく書けず断念…。
>>243 さん
恐らくその方法でも行けるのではないかと思いますが、時間が無くて試していません。
SMACテーブルと検索処理を作るのが面倒だったというのが本音なんですけどw
お二人とも、ありがとうございました。
また何かあればよろしくお願いします!
これむちゃくちゃほしいw グラ8mbって微妙だけどw
>>305 Mobile IPがある。
それからルータが扱いやすいパケット形状で高速化が期待できる。
いずれにせよ、利用者側にはあまり関係ない。
ネットワーク勉強はじめたばかりです。 よろしくお願いします。 ソケットの接続数は限界があるみたいですが、 ネットで検索したらOSごとに違うともありました。 OSは限界か判断できるということは、OSは現在の接続数を知ってるんですよね。 そこで質問なんですが、そのリアルタイムの接続数を 取得する関数や方法などあるのでしょうか? それとも、自分でプログラミングして接続数 管理しないといけないでしょうか。 接続数が知りたいということなんです。 よろしくお願いします。
OSごとに違う
>>310 自分のプログラム内での接続数を知りたいんだったら、自分のプログラ
ムにカウンタを1つ設けるだけやん。
>>310 たくさん”OS”という言葉が出てきているが、
現状は”OS”と呼ばれる領域が曖昧なので
SocketライブラリがOSに含まれるのか、付属品なのかはわからない
なので
>>311 ってこと
>>312 なるほどです。
ソケッド開くたびにひとつ増やして、
閉じるたびにひとつ減らせばいいんですね。
ただ、自分初心者なので異常終了したときに、
きちんと処理できる自信なかったので一発で取得
する方法があれば良いと思いまして。
手元の本見ると異常終了するときは、サーバ側で
select関数使用して受信タイムアウト処理してますが
これで正確にカウントできるでしょうか。
他の条件分岐や気をつける処理などありますでしょうか。
switch(select(...)){
case -1:
//count--;
//ただし、割り込みあったときEINTRもう一回受信
case 0:
//タイムアウト切断
//count--;
default:
//recv関数
//countは、処理の内容次第
}
>>313 ファイルをロックするlock関数みたいに、
システムコールが用意されているのかと思いまして。
Socketライブラリにありますでしょうか?
>>314 えーとそのコードで示した処理って完全に間違ってますよ。
なにか勘違いしてるんだと思います。
socket() で作ると 1 つ増える。
accept() で受け入れると 1 つ増える。
close() すると1つ減る。
それだけこことです。
>>315 完全に違ってましたか。(汗
明快なアドバイスありがとうございます。
ちょっとわかってきました。
close()までたどり着けるようにきちんとすれば
カウントできるんですね。
>>315 connect/accept 成功で +1
close/shutdown で -1
じゃないか?
ソケットディスクリプタの複製や継承をしてたらcloseしても減るとは限らないんじゃ? shutdownなら確実に減るけど
ちょうどUNIXプログラミングスレで関連する話題が出てるな
まあ、あれだ 資源管理は最初から組み込むか一切関知しないかの二者択一だ
>>317-318 shutdown で片方向だけ禁止したのはどう数えるんだ?
0.5 個か? (w
>>321 生きている状態と死んでいる状態が重なっており、それは
ソケットを調べてみるまではわからない。映画化決定。
調べることにより系(システム)の状態が変化するから、
>>322 の言ってることはマジ。
>>322 生きている状態と死んでいる状態が重なっており
>>323 調べることにより系(システム)の状態が変化するから
ちょっと詳しく説明してくれないかな。
>>324 監督はキューブリック。公開は2008年ごろになるらしい。
そもそも自分が本当に生きているということは相手が生きているということだ。 相手が死んでしまえば自分が生きていようと死んでいようとそれは死んでいることと同義である。 「死にに行く訳じゃない。俺が本当に生きてるかどうか、確かめに行くんだ。」 カウボーイビバップ Session#26 「ザ・リアル・フォークブルース(後編)」より
すみません。質問です。 select で n 秒待ちし、抜けてきたら FD_ISSET で調べ、 タイムアウトで抜けたならまた select するという処理 をしているのですが、connect 成功後、相手の切断を 検知できず、ずっとこのループを繰り返してしまいます。 ほとんど同じ処理でテストプログラムを造ると、そっち はちゃんと FD_ISSET でタイムアウト切れじゃない返り値 になり、その後の recv で 0 が帰るのですが・・・。 ライブラリのリンク順番とか関係あるのでしょうか・・・? 環境は Solaris9 上の C です。
328 :
デフォルトの名無しさん :2006/11/12(日) 01:34:04
>>327 そのテストプログラムでも、LANケーブルを抜いたら検知できないよ?
やってみろ。 ライブラリは関係ないよ。
KEEPALIVEを設定するか、アプリ側でヘルスチェックをするようにするか
どっちかしかないよな。
ピピルマ ピピルマ プリリンパ
パパレポ パパレポ ドリミンパ
どっきんハートに瞬きショット
便乗して質問させてください。 selectでタイムアウト処理をしても、 LANケーブル抜くとrecv関数の切断が検知できないで ずっと返り値が返ってこないということでしょうか。 なにか返ってくればわかりますし。 本見ると、recv関数待ちしているとき、 一定の時間がたって値が返ってこなかったら 切断するとあるんですが、どんなコードになるでしょうか。 時間を測るにしても、recv関数の値が返ってこないと、 そこで処理が止まってしまうので、時間を計るプロセスを 別に用意するとかでしょうか。
330 :
デフォルトの名無しさん :2006/11/12(日) 05:23:36
>>329 切断ってのは相手から 「もう別れましょう」 という手紙がくることなんだ。
でも、LANが抜けてれば相手から何も来ないだろ。
つまり、お前はまだあの子と付き合ってると思い込んだままのわけだ。
本当はあの子はもういないのに。
これを防ぐには、毎日メールとか電話をやりとりするしかないよ。
「おはよう」のひとことでも構わない。 通信も恋もマメさが大事。
>>330 レスありがとうございます。
パソコン2台無いので、わからないんですが
異常終了するとき(LANケーブル抜く)、
recv()ってなにを返すんでしょうか。
ずっとブロッキングされて、なにも返さない
という理解で良いんですよね。
>>これを防ぐには、毎日メールとか電話をやりとりするしかないよ。
もうひとつソケットで繋いで、定期的になにか
やり取りをするということでよろしかったでしょうか?
具体的には、ノンブロッキングなら、recv()が返るので
異常終了のときでもすぐに値返ってきますが。
でも、これだとはじめからほんとの通信を、ノンブロッキングに
すればいいんですよね・・・。
ブロッキングで、recv()の待ち時間判定して、
close,shutdownを呼ぶ方法ありますでしょうか。
当方初心者です。
ソケットは1本で十分。ブロッキングでrecvのタイムアウトを判定するには、 alarmを使うとか、SO_RECVTIMEOを設定するとか、recv前のselectの タイムアウトを援用するとかの方法がある。
>>332 >alarmを使うとか、SO_RECVTIMEOを設定するとか
やり方理解できました。
alarmという便利な関数があるんですね。
>recv前のselectのタイムアウトを援用するとか
こちらが全然わからないです。
switch(select(n,&fd_set,NULL,NULL,&timeout)){
case -1:
//エラー
case 0:
//タイムアウト切断
default:
if(FD_ISSET(soc,&mask)){
if(recv()<0){ }
}
}
この場合だとselect抜けたあと、LANケーブル抜くと
recvで止まってしまうんですよね。
どこにどのような処理を追加すればよいのでしょうか。
すみません。よろしくお願いします。
普通はselectが戻ってくるなら、読むべきデータがあるはずなので、 そこのrecvでは止まらない。(中でrecvをループさせたりしてなければ) ただ、例外的にselectが戻ってもrecvが詰まる場合もあり、 そういう場合のために、ノンブロック設定にする。
>>334 ほんとバカで申し訳ないのですが、どういうふうに
解釈していいのか、わかりませんでした。
・select抜けたらLANケーブル抜いても、recvでは止まらない
だけど、LANケーブル抜くとかではなく、例外的な場合があり
selectが戻ってもrecvが詰まるときがある。
そういう場合のために、ノンブロック設定にする。
・LANケーブル抜くと、例外的な場合に当てはまり
selectが戻ってもrecvが詰まるときがある。
そういう場合のために、ノンブロック設定にする。
・その他
どちらでしょうか。
よろしくお願いします。
>>335 LANケーブルが抜けてもわからないんだよ!
たとえば、お前が誰かとお話してたとする。
お前がなんかしゃべってるのに 相手が何も言わなかったら
寝てんのか 黙ってるだけなのか 区別付かないだろ。
そういうときは 「おい、聞いてんのかコラ 」 と一定時間ごとに確認するだろ。
そういうのが必要だということ。
>>336 >>337 レスありがとうございます。
336,337さんの言っていることが反対のような気がするので
混乱してしまいました。
>>333 のコードで、いつLAN抜いても
正常に動作するのでしょうか。
でも、select抜けたときは受信の準備が出来たときですよね。
・recv()呼ぶと受信がはじまる。
・終わるまで待ち状態。
・それで、受信中LAN抜いたら、なにも返事が無いので
recv()はLAN抜いたことわからなくて、
そのままリターンしないで待っている。
という風に思ってました。
本も見てみると、recv()はLAN抜いたときとか、わからないから
リターンしないって書いてあるんですよね。
>>333 のコードで大丈夫なら、LAN抜いたら、
recv()はなにを返すんでしょうか?
すぐに何かのエラーを返してくれるんでしょうか。
recv()待ちのときLAN抜くとリターンしないので、
>alarmを使うとか、SO_RECVTIMEOを設定するとか、recv前のselectの
>タイムアウトを援用するとか
の方法があると思ったのですが。
あれれー。わからなくなってきました。
そもそも、何か前提の知識が間違っているのでしょうか。
>>339 >・recv()呼ぶと受信がはじまる。
>・終わるまで待ち状態。
recv は、既に受信済みのデータをOSが管理するバッファからユーザが
指定したバッファにコピーし、コピーしたバイト数を返します。
1バイトも受信していない場合にはデータが受信されるまで待ちますが、
select で OK なら大抵の場合は少なくとも1バイトは読めて、すぐに
リターンします。
「受信が始まる」とか「終わる」とかいう動作はプロトコルスタックが勝手に
行っていて、APIからは概ね隠蔽されています。
まあNONBLOCKじゃなきゃrecvで受信バッファに溜まっている量を超えて要求したら 「詰まる」とは言えるかもな
>>341 ってsendじゃなくてrecvは全部待ち指定しなきゃ足りなくても帰ってくるか
>>340 ずばりの回答ありがとうございます。
select抜けるときは、受信済みだったんですか。
ようやく理解できました。
selectでOKなら大抵の場合大丈夫だけど、
リターンしない場合も無いわけでは無いので、
念のためalarmとかの処理をしておくということですか。
んー、2冊ぐらい読み直してみたんですが、
そこまで書いてなかったような。
やっぱり2chすごいなぁ。
>>343 > selectでOKなら大抵の場合大丈夫だけど、
> リターンしない場合も無いわけでは無いので、
俺も昔コレではまったことあるんだけど、
なんでこんなことになるの?そういうもの?
>>344 プロトコルスッタク蛾ぶっ壊れたから。
永遠待ちは避けて、1秒待ちの無限ループがお勧め
壊れたOSの面倒まで見たい場合やクリティカルなプログラムなら alarmなりなんなり使ってやる必要があるだろうが、 通常のプログラムじゃそんなことまで考慮する必要は無い。
私は、recvが0なら切断されたということにしています。 あと、select の無限待ちはCPU食うからと10秒待ちにしてるんですが、 それを1秒に変えたら、切断を検知しやすくなったりしますかねぇ・・・。
> select の無限待ちはCPU食うからと は? > 切断を検知しやすく へ? 相手がcloseしてきたこと?なわけないよね。 てことは、ケーブルが抜けたことを検知したいと?
https/ssl通信システムを OpenSSLまたはVxWorks6.1 でクロスコンパイラ(gcc)を使って開発する場合、 どのような難しさがありますか? たとえばスレッド・セーフにする問題とはより具体的に どんな風に難しいでしょうか。
>>347 > 私は、recvが0なら切断されたということにしています。
普通、誰でもそうしますが。
| man recv
| 返り値
| これらのコールは受信したバイト数を返す。エラーの場合は -1 を返す。
| 接続先が正しくシャットダウンを実行した場合は、返り値は 0 となる。
WinMEあたりから、PCに直接つなげてるLANケーブル抜くとソケットが切断されるよ。 ケーブル抜けたテストをやるときはハブを一段かませよう。
どうやって検出してるんだろうね
ドライバから通知してもろてるんやろ
その根拠は?
その根拠は?
つまり、根拠が無いんですね?
つーかドライバに頼らない方法知ってるなら教えてよ。
>>359 方法は無い事も無いな。 すごい方法がある。
まず、Webカメラを用意し、ネットワークカードの差込口を
>>359 *nix だと ioctl()
OS によってインターフェース異なるけど…
根拠を示せないクズばかりですね。
>>351 って本当?
だとするとM$はクズだな
TCP・IPというものをまったく理解していない
違う。351がバカなだけ。 つまり、PC側のケーブルを抜けば、ドライバが切断を検出できる。 けど、ルータ側を抜いたら検出できない。
(^ω^ )
>>349 にRESがないのでOpenSSLをとにかく使ってみることにしました。
VC++がないので、VC++Express Editionではじめました。
http://www.knifeedge.org/?page_id=59 Windows 上での OpenSSL のビルド方法について、ネット上にはあまり情報がないようなので、
先日私がした方法を備忘録として残しておきます。
・・・ここを参考にコンパイルをはじめましたが、Windows.hがnot foundの
コンパイルエラーでとまったところ。
sslのサーバとクラインのテストプログラムを組んで
どの程度難しいのか調べようと思う。
こういうところが難しいとか知ってる人いたら教えてください。
OPENSSLのベースがコンパイルできたら、SOAP/XMLの応用ソフト
を上に載せたい。
http://x68000.q-e-d.net/~68user/net/ ・・・ここにある
C言語: https クライアント
C言語: https クライアント サーバ認証版
C言語: RSA 暗号化 ライブラリに頼りきり版
C言語: RSA 暗号化 あまりライブラリに頼らない版
SSL: root CA 証明書
・・・これらの記事のサンプルプログラムを見るとSSLソケットがあれば
その接続ができれば簡単に上位の応用プログラムが書けそうに思うのは甘いですか?
ほへ。OpenSSLなんか何にも考えずにコンパイルできたって。 どーせExpressEditionに必須のPlatformSDKの環境を セットアップしてないんでそ。
>>367 当方、Windowsプログラムもほぼ初めてで難儀中かも。
Windows.hのincludeのパスは、SDK2003R2のものを、VC++EEの中で設定してるのですが
コマンドラインのclから呼ばれると、そのincludeパス設定が効いていないようで、not foundのようです。
とりあえずエラーとなる.cソースと同じところにwindows.hをcopyしてコンパイル
してみるつもりです。
RADのGUI操作で作ったFTPプログラムのコンパイル+実行は正しく動いたので、
多分、VC++EEのほうのインストールはうまく言っていると思う。
OpenSSLのコンパイルができたら、そのSSLソケットを使ったプログラミングで
難しいところは何かあるでしょうか?
石橋は自分で叩け
工エエェェ(´д`)ェェエエ工・・・
TCPで通信するプログラムを作ってみたんですが、 selectしてwrite,readする感じで数十バイトのデータを往復させただけでも、60msec位掛かってしまいます。 サーバとクライアントは同一PCで動かしているのですが、 TCPってこんなに時間がかかるものなのでしょうか?
そのような視野の狭い人間になってはいけません
わかった気をつける
>>371 そうですよ。
数十バイトで60msecかかるので、数十キロバイトなら60sec、
数十メガバイトなら16時間くらいかかります。
>>371 インタラクティブなやり取りをする時は、
つまりラウンドトリップタイムがメインファクタの時は、
Nagleのアルゴリズムに気をつけてくれ。
詳しくはソケットFAQを読め。
TCP/IP通信で以下の使用を満たすプログラムを作っています。 ・複数のクライアントが座標を入力して、サーバがそれを管理する。 ・クライアントが使われている座標を入力したらその旨を表示する。 単一のクライアントからの入力なら、現在の座標を入力するとその旨を表示するところまで上手くいくのですが、 複数になると、例えばクライアントAの座標をクライアントBが把握できておらず、Aの座標にBが移動してしまいます。 調べたところ双方向パイプという処理を施せば子プロセス間で座標の判断ができると思うのですが、やり方が今一わかりません。 指針などどうかご教授お願いします。言語はCです。
377 :
371 :2006/11/15(水) 21:03:51
>>375 原因はそれでした!ありがとうございました。
>>376 > 複数になると、例えばクライアントAの座標をクライアントBが把握できておらず、Aの座標にBが移動してしまいます。
この役目はサーバじゃない?クライアントBが把握する必要があるの?
> 調べたところ双方向パイプという処理を施せば子プロセス間で座標の判断ができる
うぇwwwwwwwwwwwwwww
そ、双方向バイブ!? (;;'-')ゴクリ
姉妹がいる家になら大抵あるだろ
ないよ
カスどもが反応遅いからselect使って解決しました
pollってselectの代わりに使われてないの? 面倒だから?
ソケット数がすくなければたいした違いはない
kqueueだのepollだの/dev/pollだのをわざわざ使う機会が無いな P2Pで一台だけホストしてゲームするとかなら効果はあるだろうけど移植性が無いし
WinSock2で非同期通信したいのですが、コールバック通知が WSAAsyncSelect()で設定できるWindowハンドルに対してしかできないようです。 ソケット用のスレッドにPostThreadMessageするか、関数を呼んで欲しいのですが、 そのような関数が見あたりません。 やはり無いんでしょうか?
ないです
388 :
デフォルトの名無しさん :2006/11/16(木) 09:48:15
pollとselectの使い分けのうまい例をキボンヌ
そのスレッドでIO完了点を待ち受けるとか、ダミーのウインドウを作るとか、 WaitFor...Ex系でAPCを使うとかいろいろあるだろうに。
Ex?, ウィンドウ? おまえさん偏ってないかい?
pollとselectの使い方を聞かれてなぜWindows
3つ前の質問も覚えていないこんな頭じゃあ・・・
安価つけろヴォケ
つけるほどの事じゃないだろ 内容見ればわかる わからないアホが二人もいたか・・・
わかるわからないじゃなくて 直前のレスに対するレスじゃないものにアンカーをつけないのは マナーその他何も考えてない、世界が自分中心に回っていると思っている証拠。 別に俺の知人じゃないから、俺は2chにそういう奴が居ても平気だけど。
まあ、そういう奴が何か質問をすると 次のレスにエスパー募集中と書かれることになるわけだ。
流れの読めないアホが言ってもなあ・・・
^^;;;;;;;;;
典型的な頭の固いプログラマでワロタ
>>395 まなー云々は同意するけど、わからないアホが2人もいたのは歴然たる事実。
>>394 ,
>>400 わからないというか、勘違いでしょ。
誰もが、常にスレの前後を見てるわけじゃない。
たまたま画面の一番上が
>>388 からだったら、俺でも
>>389 は
ちょっとノータリンだと思う。
そういうことを避けるために、アンカーというお約束がある。
「3個前ぐらい見るのは常識だろ」という奴は、自分の常識を語っ
ているだけ。
単細胞に煽って自爆して焦って開き直るアホに常識語られてもなあ・・・ 恥の上塗りをいつまで続けるんだろう
>>401 うん。常識だマナーだっていうあたりの論に関してはまるきり異論ないですよ。
でも「
>>389 を見て
>>388 への返答だと思う」ってのは勘違いの域を超えてるな、と漏れは思う。
だって内容にまるで関連性が無いんだから。
404 :
389 :2006/11/17(金) 22:42:50
386->387の流れにむしゃくしゃしていたのでベタで書いた。 一つ上のレスしか読まない人のことまで思い至らなかった。 今は反省している。m9(^Д^)プギャー!!
>>402 > 勘違いの域を超えてるな、と漏れは思う。
俺から見ても「そう思う」のは正しいと思うが、誰もが常にそう判断
{する|できる} わけじゃないってこと。
徹夜明けでボケてるとか、
>>404 じゃないけどむしゃくしゃしてるとか、
そもそも関連性が無い書きこする奴だっているわけだし、煽りたいだけ
の
>>402 みたいな奴もいる。
ちょっと面倒だが、安全のために書いておくって言うのは、職業プログ
ラマとしては常識だと思う。
まあ、何も言っても聞かない奴とか、これぐらいは大丈夫と思ってる奴
とか、ルールを破ることをかっこいいと思ってるアフォががいるという
のも厳然たる事実なんだけどね。(w
アホはアホだってこと。
つまり厳然たる事実
ここ見てる人の大多数が思っただろう
>>409 お 前 が 言 う な wwwwwwwwwwwwwwww
409はかわいそうな人なんだから捨て台詞で終わらせてやれよ。
>>409 よぅ 厳然たる事実を目の前にしたか弱い子羊
ここまで読んだ 結局、pollは1024以上のソケット待ちたいときとか conect完了待ちも読み込み待ちもごっちゃに待ちたいときとか そういうときに使えばいいってことでおk?
416 :
デフォルトの名無しさん :2006/11/18(土) 12:08:49
ネットワークプログラミングというには、ちょっと初心者の質問ですが、教えて下さい。 WindowsXPのアプリ1からrshコマンドをLinuxマシンに発行してLinuxマシン上で アプリ2を動かすようなのを作りました。 今は、問題なく動いているのですが、例えばLinuxマシンがダウンしている場合には 当然rshがエラーを返します。 こういう場合に、事前に、Linuxマシンが正常動作しているとか、Windows-Linux間で通信が 正しく行えるかどうかとかを調べる一般的な良い方法などありますか?
SNMPとかpingとかで監視しとけば。
rshコマンドの実行結果が、 「Linuxマシンが正常動作しているとか、 Windows-Linux間で通信が正しく行えるかどうか」 の検査そのものになっていることに気づけ。 pingでも送るか? たとえばping含む別の方法で「Linuxマシンはup状態」だと返されたとしても、 rshコマンドの実行に失敗したら意味ないだろ。 無駄に複雑にするより、rshコマンドの失敗原因を正しく取得する方法を 探すべきだろう。
例え
>>417 のレベルの確認でも、
rshのタイムアウトと天秤にかければ、有益な場合がある。
All or nothingの思考に陥るべきではない。
いや、無意味だよ。 よく考えればわかるけど。
>>419 たとえば、ファイルがない場合にファイルを作成してしまうようなプログラムは
何も考えずに
...ファイルの有無チェック...
...ファイルが無ければファイル作成...
などと書ける
しかし実際のところこのチェックは完全ではない
共有資源というのはそういうものだ
ふつーアトミックにやる機能がシステムコールやAPIにあるだろそういうのは
>>422 ええ
それが
「ファイルを作成」
というもので
>>416 は
「rshで接続」
というものです
UNIXのcreatはファイルがあっても上書きするけどな
SNMPやpingでも結局はタイムアウト処理で、 障害を発見したことにするしかないわけだけど、 単なるチェックのタイムアウトと、 rsh実行のタイムアウトによる中断では、 副作用のatomicityが全然違う。 事前にチェックできることはしたほうがいいことは結構多い。
> 副作用のatomicityが全然違う。 ここ詳しく
427 :
416 :2006/11/18(土) 19:02:49
みなさん、いろいろアドバイスありがとうございました。 私としては、rshがエラーでタイムアウトするまでに数秒かかるので、 それをもう少し早くしたいのです。 例えば、WindowsとLinuxはsambaでファイル共有しているので、Windowsから Linuxのファイルがオープンできるかどうかで通信ができるかどうか 調べる作戦はどうでしょうか?これだともう少し早く調べられませんか?
429 :
デフォルトの名無しさん :2006/11/18(土) 20:15:46
>>427 別の監視スレッドを立てて、そいつでカウントダウンして
タイムアウトしたらrshをSATSUGAIすればいいと思う。
>>427 たとえばsshなら接続タイムアウトがあるし、
rsh相当のことができるんだけどどう?
431 :
初心者です :2006/11/18(土) 21:50:14
こんばんわ。 お尋ねしたいことがあります。 自分のノートパソコンにUbuntu 6.10 をVMware Workstation でインストールしました。 Unix C言語のネットワークプログラミングを学びたいからです。 そして、インストールが完了したのですが /usr/include/ に C言語の標準ヘッダ(stdio.h等)がありません。 gccはインストールされています。 C言語のヘッダファイルはどうやって入手するのですか? どなたか回答をよろしくお願いします。
432 :
(^-^) ◆MONSOON/qo :2006/11/18(土) 22:02:16
普通にWINSOCKでいいじゃん
そういうのはUbuntuのスレに書くといいだろうね
>>431 入れたOSは何? Linux?
find / -name stdio.h -print
のコマンドを入れて探してみてや。
ヘッダファイルは、OSの関数を使うためのものだから、
OSを入れた時点であるよ。
gccの用意している関数ライブラリがあれば、
それ用のヘッダファイルは、新規にどっかにあるよ。
>>434 ubuntuって書いてあるし
>>431 開発環境作るにはパッケージを別にインスコしなくちゃならんぜ
インスコした後でまだ出るってんなら、色々面倒だから再度ubuntu入れて見れ
>>435 ubantuというのはLinux配布パッケージの一種か?
VineとかDebianとかRedhatとか何の知れた配布版のほうが
良いのではないか?
Linux配布版使ってみると、できの悪いと思えた
Win95やWinNT4のインストーラのほうが、Linux系より出来が良い
のを知ったよ。
初期のLinux配布版はX表示のための画面初期設定すら失敗
してしまう。
Linuxを何にもわかってない
>>434 =
>>436 は黙っててくれ
あと
>>431 の質問はネットワークプログラミングに何にも関係ないのでよそ行ってくれ
臭い仕切り屋もよそ行ってくれ
オマエモナ
オマエモナ
サーバとクライアント間で通信するプログラム作っていて、複数のクライアントに対する処理はPOSIX threadを使っています。 クライアント1がクライアント2に戦闘を仕掛け、勝利したならクライアント2を強制的に切断させたいのですが、 クライアント1が戦闘する意思をサーバに伝えた後、サーバがクライアント2を戦闘を行う処理に飛ばす方法がわかりません。 クライアント1は関数で飛ばそうと思っています。どうすれば良いかアドバイスお願いします。
>>441 サーバがクライアントに通知を伝える仕組みはあるの?
どうもクライアント⇒サーバ方向しか考えてないように見える
やっぱプログラマーって変な人多いね。頭はいいかしらんが・・
>>436 ubantuじゃなくてubuntuだよ?
そういう君にはgoogleってサイトがお勧めだよ★
「りなっくす」って検索すればいっぱい情報がでてくるんだよ☆
親切なGoogle先生はubantuで検索してもちゃんと「もしかして: ubuntu」と教えてくれるな
447 :
368 :2006/11/22(水) 19:57:54
>>368 WindowsXP用のOpenSSL ライブラリがビルドできました。
HTTP over SSLクライアントのテストプログラムを作って、
OpenSSLのSSLソケット関数をリンクするコンパイル+ビルドも成功。
VisualC++ExpressEdition使ってるのでただでできた。
アパッチHTTPSサーバと暗号化通信動作もOK。
こんどは電子証明書のサーバ認証実験を行う。
>>448 OpenSSLのWinXP移植版に興味ある人いる?
いればインスコ方法やバイナリ、ソースも公開するけど。
やり方はすでにやってる人いて公開されてるし。
>>449 俺は、興味は無いけど「ソース公開」してくれれば
ためになる人もいるだろう。
他人がとやかく言うものじゃない
>>449 似たようなことやりたかったんで、UPしてくれると助かる。
やるのはいいと思うが、 スレ違いだからよそでやってくれ。
スレ違い厨乙 ライブラリの話だからいいじゃないか
>スレ違いだからよそでやってくれ。 スレ違いと判断する理由は何ですか? 迷惑ならば公開も止めます。 SSL/TLSによるネットワーク上の暗号化通信プログラミングの話なので、スレッドのカテゴリに 合わないということはなく、合致していると考えて書いています。
公開してみてよ。 フツウにOpenSSLビルドすると大概の人がミスってるから。
>>455 喜んでくれる人、有難がってくれる人がいたら公開…みたいな
行動基準はあまりその手の話では上手くいかんよ。
とりあえず公開してみる->あとから喜んでくれる人が現れた…
みたい流れが成功するパターンかな。
まずギブしてからテイクだ。例え感謝の言葉一つであってもテイク
を確約してくれないとギブしない…みたいな人はネット上では相手
にされないよ。
Windows板とか行けよ。 ライブラリの構築はネットワークプログラミングじゃないし、環境依存が甚だしい。
だから、ソースだけ公開しろよ ライブラリってレベルじゃねーぞ!
OpenSSLって勝手に公開してもいいんだっけ? いいなら専用サイト作ってライブラリ公開してほしいね 使いたい人いっぱいいると思うよ
>>461 に示されているライブラリだけでは、OpenSSLとWin32API DLLのリンクで
失敗するので、それだけの知識でOpenSSLを使いこなすことはできません。
ここは特定ライブラリの使い方を語るスレじゃねえんだよ 理解できないなら帰れ
>>463 が救いがたいお馬○さんであることはわかりました。
>>463 つまり何も語るなと
雑談スレがあちらにございます
「ネットワークプログラミング」について語る場で、 「リンクで失敗」するとかについて語るところじゃない。
bsd socket以外はスルーで
プログラミングにはリンクは含まれないんだよ オープンソースなんだから
>>466 を補足する。
プログラミングというよりも、設計のほうがこのスレの趣旨に沿ってるだろ?
上流工程の話題も多いし。
APIの些細な差異とかライブラリの設定とかリンク方法なんかは
下流工程やってるコーダどもにやらせとけばいいんだよね
場違いな馬鹿(おそらくコーダ)が、
リンク成功したとかしないとか日記風に語ってるのが現状。
プログラミングのスレだからな。 設計よりはプログラミングのほうがこのスレにあってるのは間違いない。 あまりにも何かに特化した話題は勘弁だが そこは話題提供者が工夫すればいい。
>プログラミングというよりも スレタイ「ネットワークプログラミング相談室」
>>471 「プログラミング設計」とでもいいたいんでしょ
まあ個々のOSの話になると、ここでやるか専門スレに転送するかは
そのときの面子次第だろうけどね
OpenSSLみたいなマイナーなライブラリなんて ここでやる話題なじゃいないな。
OpenSSLはMicrosoft Windows本体でも使われていて、メジャーなライブラリ。 けど、構築方法はスレ違い。
OpenSSLはメジャーだけどビルドはスレ違い。
つーかさ、コンパイル・リンク程度で書き込みすんなよ。
opensslがマイナーってwww じゃ何がメジャーなんだよwww
>>477 私の調べた複数の文献では、OpenSSLが、SSL V2/3、TLS1.0の実装実例として説明されており、
現段階ではそれを破る手法が確立されていないという点で、電子商取引にも広く利用されている
実績と合わせて考えても、ネットワーク上のセキュアな通信を実現する上で重要な
ソフトウェアと思います。
そうしたOpenSSLを応用するプログラミング手法を知る設計者は稀少です。 ここで攻撃に出てくる質の悪いプログラマは無視することが良いと思います。
ここ最近の流れ見て思ったけどスレ住人が職業プログラマだという前提の元で話してる奴が出てくるのはなんでだ
自分がそうだから じゃね? 人間案外想像力ないものよ
いや、ことネットワークに関しちゃ 全員プロ意識もってもらわないと迷惑だってことだべ
そう、マイナーなライブラリのリンクができました、 なんてことで書き込みしないでほしい
>>478 IE,IISはOpenSSLを使っていないよ
IEのシェア率が8割超えてるのはご存知のとおり
サーバシェアもIISがApacheより上
ということは、Windowsの独自ライブラリが世の中のほとんどの
SSLトランザクションに関わってると見ていいんじゃないかな。
そうそうう、firefoxはOpenSSLを使わないよ。Mozilla独自ライブラリ。
Operaはどうだろう。
>firefoxはOpenSSLを使わないよ。Mozilla独自ライブラリ。 へぇー、初めて知った。 さすがにSSLを作った自負があると見るべきところなのかな。
>>484 SSL は HTTP だけの為にある物じゃないがな…
それにアクセラレータカードなんかは OpenSSL 経由が多いんじゃないの?
>>486 NSS は Netscape にルーツを持つサーバ製品でも良く使われているよ。
電子商取引系だと、SSLが一番多いかなあと。
そのほかだと、VPNソフトぐらいですかね?
OpenSSHを直接商取引に使うとは考えにくい・・・
アクセラレータは個々にプラグインを作るんじゃないかな。
たとえば
ttp://www.msol.co.jp/it/msolock/crypto/crypto-pci.html は
>WEBサーバ:
>Apache WEB Server
>C2NET Stronghold
>iPlanet WEB Server
>Microsoft IIS / BackPffice
>Netscape Enterprise Server
>Netscape Proxy Server
>Netscape Directory Server
に対応するとある。(backpfficeってなんだよ)
逆にいうならこれだけSSL実装はあるってことだ。
つかいまどきIISに(というかWindowsに)対応しないってありえんだろ。
スレ違い指摘クンが来ないよーさみしい
>>488 それ、Apache は OpenSSL, iPlanet/Netscape は NSS だと思うよ。
IIS は良く知らないけど。
えーマ板ってコーダーが愚痴る板でしょ
read.cgiの仕様変更に振り回されないためのrawmode.cgiなのに rawmode.cgi自体を変更してどうすんだよ
Win2000svrだとオレオレプロトコルなサーバはクライアントを幾ら繋いでもOKだったが Win2003svrだとCALが必要になるのね。知らんかった。Orz Linuxブームが下火になったんで好き勝手やってくれるのぅ。。 ところで、サーバ側からコネクションを張ったらCALが要らないなんて理論は通らないよな〜?
2003svrでもwebサーバとしての利用なら何本でもいける 妙な話だがな ということでオレオレプロトコルをHTTPでwrapすればおk
497 :
495 :2006/11/27(月) 23:31:59
>>496 WIN2003で他人様の作られた(オリジナル)プログラムが、MFCの中で
Socket()の後に、Bind()を実行するとエラーコードが帰ってきます。
これはCALの取得の有無と関係がありますか?
499 :
デフォルトの名無しさん :2006/11/28(火) 00:17:13
>>498 同時使用ユーザー数モードを使うにはどう設定すればいいですか?
コンパネの何で設定すればよいですか?
そろそろスレ違いって言っていいかな
ネットワークプログラミングでウインドウズは使うなってこったな。www
そんなことを言っているヤツはいないようだ。 Linuxのカーネル再構築の話なんかもうざし。
そんな話をしているヤツはいないようだ。 そもそも何で Linux のカーネル再構築が出てくるんだ。
匿名ユーザだけかあ 厳しいのう
505 :
デフォルトの名無しさん :2006/11/28(火) 12:57:12
>>498 >コネクトがサーバ、クライアントどちらから接続されたに関係なく2003svrに接続した時点でアウト!!
Win2003PCで走るプログラムのWinAPIレベルで見たとき、bind()関数Callからの戻り値にエラーコードが帰るのですか?
それともListen()あるいはConnect()関数への戻り値にエラーコードが帰るのですか?
>>505 ただのバグか設定ミスだと思うよ。
冷たいようだけど、WSAGetLastError で何のエラーが出てるのか調べて
書いてくれるまでは漏れはもう相手にしないから。
507 :
デフォルトの名無しさん :2006/11/28(火) 13:27:51
>>506 そのお辞めになっている方のプログラムはWinXP、WIn2000で走らせると
正常にFTPサーバにコネクトしますが、Win2003ではBind()でエラー
コードが帰ってきます。
Win2003PCが手持ちにないので、持っている人に時間を割いてもらい、
トレースしてもらいました。
自分で調べたいのは山々ですが、Win2003PCもVisualC++も持っていない状態で
対策を漏れがとることになっています。
現在の状態では仮に原因がわかってバグであっても、パソコンもVC++もないので
ソース修正や再コンパイルができません。・・・という困難な有様です。
パソコンやWin2003やVC++を買う予算も現在ありません。
漏れは無理な仕事に思えますが、上の人はやれ!と言っています。
ftp クライアントか・・・ アクティブモードのデータポートが変なポート番号決め打ちでbindしているとか。 2003 で ftp サーバとか動いていたら止めてみてはどうですか? netstat -ab で Listen してるポートと実行モジュールの情報が得られるので、 そのアプリが何番のポートを使うのかを調べて、Windows 2003 でそのポートが 空いているかをチェックしてみてください。
質問です。 サーバ側のプログラムを終了したいとき、 サーバ側で accept でブロックされている部分を終了させるには closesocket でソケットを閉じるしかないでしょうか。 一応終了はしますがエラーが帰ってくるので ほかにきちんとした終了の仕方があるのでしょうか。 shutdown でソケットを閉じてもだめでした。 accept の関数は別スレッドで動いています。
何回同じ質問聞けばわかんだよ
過去ログ嫁
>>509
libevent使おうとしてます ドキュメントとサンプルが貧弱で閉口してるんですが event_init()で初期化した後 ディスクリプタごとにevent構造体を用意して event_set()を呼び出し、event_add()で監視するリストに追加 最後にevent_dispatch()またはevent_loop()で監視開始 あとは適宜ハンドラから呼び出された後にevent_add()で再度追加 を繰り返す こういう理解であってるかな あとevent_dispatch()は呼び出したらシグナルで割り込まれない限り帰らないってことでOK? event(3)の The callback returns 1 when no events are registered any more. って部分がよくわからんです
> The callback returns 1 when no events are registered any more. この部分は無視して良い。 libeventのソースに、該当するコードは含まれない。
はいはいカテ違いカテ違い
514 :
デフォルトの名無しさん :2006/11/29(水) 21:05:53
今RFCのうち、日本語化されていない部分について翻訳作業をしています。 仕事で使うところからはじめてます。今はiSCSIについて。
>>504 Apacheユーザ会がMSKK相手にゴネたからだな・・・
sslを使ったネットワークプログラミングで参考になるHP教えてください。
わたくしは以前ここでプロキシサーバの役割・機能とは何なのか、教えてもらいました その節はお世話になりありがとうございました。 さて近日proxyへtelnet proxy名 8080 で接続し、パケットを見てみたところ、 httpプロトコルとは異なる応答が帰ることに気づきました。 すなわち、telnetからGET+CR+LFを送信しても、index.htm(l)の内容は 帰ってこず、続けてCR+LFを送ると、読めない化け漢字に文字化けしたパケットが 帰ってきました。 (proxyを介さないイントラネット上のWEBサーバ(アパッチ)は、 telnet httpサーバ名 80 で接続して、GET+CR+LFを送信すると、 若干のRESPONSE文字列の次に続いてindex.htm(l)の内容を応答してきます。) そこで知りたくなったのは、proxyとMS-IEブラウザ間のプロトコル規定です。 http手順でないのはわかりましたが、このproxy⇔MS-IEブラウザ間の プロトコルについて資料をご存知でしたらお教え願います。 知る目的」は、自作のプログラムでproxyを通過した簡易閲覧ソフト作成の 実験をしてみたいのです。そのため、proxyとどのように交信すれば 良いかそのプロトコルを知りたいのです。 GGGLE検索を試みていますが有効な情報が得られていません。
すごい厨房がいるな HTTPを知らんとかプログラミング以前の問題じゃねーの?w
HTTPだとプロバの串がかむからヘッダをいい加減にしてるとおかしくなる。 4G越えのファイル受けようとしたらノートンにひっかかったりとかろくなことがない。
スレ違いかもしれませんがよろしくお願いします・・・。 スイッチングハブ機能を持つルータについてお聞きしたいのですが、 NATのマッピングテーブルにはMACアドレスも記録されるんでしょうか?? それとも、スイッチで分岐する前にarpテーブルを参照してMACアドレスを準備し、 Ethernetフレームを書き換えた後でスイッチに渡すんでしょうか?? 製品の実装によるかもしれませんがご存知の方いましたら教えてください。 考え方が根本的に間違ってる可能性もありますが・・・汗
>>521 考え方が根本的に間違っている上に板違い。
523 :
521 :2006/12/03(日) 02:29:34
>>522 ごめんなさい・・・(^^;
NAT越えに関する実験的なプログラムを作ってみようかなぁと思っていまして。。
実験しようにも自宅にブロードバンドルータがなくて...orz
NAT越えに関する資料とかはIPアドレスのことに着目しているので、
MACアドレスはどうなっているのかな?と思った次第です・・・
>>523 さすがに環境用意した方がいいと思うよ
ルータなんて4000円しないし、
中古ならもっともっと安いのがある
vmwareにunix入れりゃNAT箱なんてロハですぐ作れるだろ
NAT越え自分で実装した奴いる? UDP hole punchingとか。
簡単やん。
用意されたものを使ったことはあるけど、実装はないな。 ARPを実装しただけで息切れしたからなぁ。 自分で作ったDHCPはなんか動くのが奇跡に近い感じだったよ
実装は簡単だよ。 TCP/IPやNATを理解できてない人が、理解できないだけの話。 自分のネットワーク機器の設定が、Symmetric NATかどうかくらい見分けられないと。
532 :
521 :2006/12/03(日) 14:29:27
>>525 やっぱり実際に環境ないとダメですよね。(^^;
必要になる可能性があるので、どっちにせよ近々買おうかな〜と思っていたんですが、
貧乏学生なためになかなか踏み切れなくて・・・orz
>>526 VMがまともに動かないほどのスペックのマシンを使っております・・・。
ちょっと社名忘れてしまいましたが、(サーバを使わず?)あらゆるNATを越えられる技術を開発した!
っていう記事を読んだことがあるので「不可能ではないのか・・・」と思い、
自分も何か考えられないかなと周辺知識を勉強し始めている段階です。 無理そうですが・・・。
たしか↑の技術は特許出願中とか書いてあったような。
UDP hole punchingは、シンメトリックNATを超えれないし UPnPは、まずシンメトリックNATには実装されてることが殆どないしで 結局あれがある限り、全てのNAT超えは無理じゃないか。
Subaddressっぽいのを作る研究もあったなぁ ←(そとがわ | うちがわ)→ 133.x.x.x 192.168.1.x を 1 内→外で www.google.co.jpに192.168.1.1が接続した 2 www.google.co.jpでは133.x.x.x/192.168.1.1に送信(IPAddress in IPAddress? ip in ip?) 3 ゲートウェイがてきとーに分散させる 4 ウマー なんだが、動的に解決できるし何より直感的…だった希ガス でも対応機器が無いと死ねるね
535 :
455 :2006/12/03(日) 15:39:40
>>456 一部に要望があったので、電子証明書によるサーバ認証つきHTTPSクライントプログラム(OpenSSL利用)の
ソースプログラム例を公開しました。
無償のVisualC++ Express Editionで出来ることと
Winsock2.0を使ってWindowsXP環境で暗号通信の実験ができる点が便利なところです。
日本のMSDNフォーラムのVisualC++ Express Editionにところへおいてあります。
はいはいスレ違いスレ違い
>>530 そんな簡単なものか?
UDPの上にTCP実装するようなもんでしょ?
これぐらいみんな楽々な人?
>>538 *bsd系ならnetgraph出てるし、プロトコルがスタックできる形で組み込まれてれば別に何とでもできるぉ (^ω^)
相談させてください。 ネットゲームの通信解析をして遊ぼうと思い、ws2_32.dllのクローンを作成。 それにログとり機能を付与して、対象のゲームに食わせた上で send sento WSASend WSASendTo recv recvfrom WSARecv WSARecvFrom を監視し、データをファイルに出力してみました。 ところが、明らかに受信データが少ないのです。 ゲームの内容は ・リアルタイム対戦格闘ゲーム ・UDP通信のみ。TCP/IP通信は無い のため、かなりの量の受信が期待できるはずでした。 上記以外に、受信用関数は無いと思うのですが、もしかして存在しますでしょうか? 無かった場合、次はDirectPlayを疑うことになりそうなのですが…。 ・チート対策のための複雑化の結果、winsockとDirectPlayを併用しているのでは? ・DirectPlayは内部でwinsock呼んでるんじゃないのかな? という疑問が出ています。
>>540 スレッドとか全く考えてないんじゃないかと思う
>>541 の言うとおりwinpcapを使うなりでパケットをモニタしやがれ
543 :
デフォルトの名無しさん :2006/12/03(日) 21:50:55
LimeWireの検索機能って、どーやってるんですか? Winnyは、IPアドレスを暗号化したノードを使ってますが、 LimeWireにはそれがありません。 まさか、IPアドレスを適当に作って相手がLimeWireを起動してるかチェックなんてことはやってないだろし。
> まさか、IPアドレスを適当に作って相手がLimeWireを起動してるかチェックなんてことはやってないだろし さもなきゃどこかでリストを管理してるよな はっはっは
>>540 ws2_32.dllのクローンを作るなんて凄い技術力だな〜
>>541-542 パケット監視をしたところ、これでもかというくらい大量にUDP通信していました。
どうやらwinsockを使わずに通信しているようです。
ぐぐってみたところ、DirectPlayはUDP通信を利用しているとのこと。
多分DirectPlayを使っているんでしょうね…。
しかし、DirectPlayは下請けとしてwinsockを使っていないのでしょうか?
>>547 ラッパーDLLというべきなのでしょうか。
偽DLLを作るためのツールで簡単に作ることができました。
使ったのは listexp2.exe です。
>>538 > UDPの上にTCP実装するようなもんでしょ?
全然違うぞ。
そりゃUDP hole punching使ったプロトコルで、
TCP相当の機能が欲しければ実装する必要があるが、
>>527 のお題じゃあICMP ECHOに毛の生えたくらいのプロトコルでもいいわけで。
550 :
デフォルトの名無しさん :2006/12/03(日) 22:40:25
>>540 そりゃ、EPD使えば、パケット見れるだろけど、
WinSockのDLL自分で作って、関数使ったときにログ記録させてんでしょ?
それなら、ネトゲはみんなWinSock使ってるハズだし(DPlayもWinSock使ってるらしい)
ログは確実に取得できると思うけど、なんでできないの?
551 :
538 :2006/12/03(日) 22:59:07
話が飛びすぎたね。すまん。 >>DLLClone ネトゲをまじめに遊んでる方からすると こんなミジンコ相手にしてほしくないものだが。
ネトゲ解析とかやめてほしいものだが。
使いづらいUIだったら改造する 当たり前だろ? 特定の数値を入力したいのに+1ずつしかあげることが出来なくて さらにその+1をするためだけに数時間もPCの前に釘付けられるなんて尋常じゃないぞ
>>540 だとどう見てもUI改造じゃないけどな
てか、今時のネットゲームって通信暗号化されてるんじゃないの?
send/recvのバッファ見ても意味ないんでない?
>>554 あ、別にチートとかそういうわけではないです。
通信ゲームの通信を全部ログとって、それを今度は再生させることで
汎用的にリプレイとか作れないかなと思いまして。
556 :
デフォルトの名無しさん :2006/12/04(月) 00:00:43
>>540 生パケットで送信してたら、それではログ取れないかも。
でもこの送信もWinSockの関数使ってると思ったので、そっちも調べれば?
133.x.x.xって。。。 特定しました(w
>>548 listexp2.exe 具具ってみた。面白そうなツールですな。
DirectPlayってDLL実装なのか?
インポートライブラリを使ってるのならDepends.exeでwinsock使ってるかどうかはわかるでしょう。
ダイナミックロードならprocexp.exeで。
559 :
あっこ :2006/12/04(月) 00:23:37
学校の課題で ax^2+bx+c=0をもとめるプログラミングを作成せよという課題がでました。 学校ではflot??とか、SQRT関数を用いてや、ソースファイルの後にINCLD・・・ ・・STIの後にhtm.hをつけろとかいてありました。字が汚くて最後の方は自分で なんとかいたかわかりませんでした><どなたかわかる方いたらお願いします><。。 よろしくおねがいします!
560 :
あっこ :2006/12/04(月) 00:26:42
↑がっこうのソフトはC:++for32こんな感じのソフトでした!!なにもわからないで本当にごめんなさい><
>>559 "INCLD"は#include?
"flot"はfloatのこと?
"STI"はなんだろ。
"htm.h"は何かのヘッダファイルの名前?
何を言ってるのかわからないから課題に答えてあげられません。
学校で友達に聞きなはれ。
563 :
デフォルトの名無しさん :2006/12/04(月) 00:50:23
>>562 どうみても釣り。
>"STI"はなんだろ。
stdio.h
>"htm.h"は何かのヘッダファイルの名前?
math.h
STIってSTLかな・・? だめだ。難しすぎる。
565 :
あっこ :2006/12/04(月) 02:08:12
教えてくれたら一発ヤらせてあげてもいいです。
一発ヤらせてくれたら教えてあげてもいいです。
567 :
デフォルトの名無しさん :2006/12/04(月) 02:13:40
fd_set read; FD_SET(0,&read); ・・・(1) FD_SET(3,&read); ・・・(2) について質問なんですけど、(1)(2)を処理した後って&readはどうなるんですか? 誰か教えてください><
568 :
あっこ :2006/12/04(月) 02:49:21
>>567 0や3がセットされる。
ていうか0や3を即値でセットするのか。すげーな。
すごいだろう!
FD_系マクロで抽象化されてるから 中がどうなってるかはキニシナイ
FD_系マクロが FD_系ホクロって本気で見えた・・・orz
573 :
566 :2006/12/04(月) 13:50:33
FD_ZEROしとかない以上未定義動作の誹りは免れ得ない
575 :
デフォルトの名無しさん :2006/12/05(火) 02:08:30
fork()で同じ親から生成された子プロセス同士で通信を実現したいんですけど、 どうすればいいか全く分かりません。なので、皆さんのアイディアを下さい。
576 :
デフォルトの名無しさん :2006/12/05(火) 02:23:20
>>575 片方で popen("tail -F /tmp/send");
もう片方で /tmp/send になんか書く
うるせえぞ
>>578 !
四の五の言わずにまずはやってみろ!
connectに失敗しました
接続を確立できません。ポートを開いてください。
申し訳ありません。 ただいま制裁発動中なのでポートを開くことは出来ません。 またのご利用をお待ちしております。
>>555 まともな暗号化がされてればその程度でリプレイできるとは限らない。
再生攻撃って知ってるか?
まあネトゲがまともな暗号化使ってるとも限らないけど
結局チートしたいだけだよ
ボットでも作りたいんだろ リプレイしたいならキー入力でも再生しとけ
技術板でチートだのボットだのうるせーよ ゲー板でも篭もってろヒッキー
>>587 せっかく引き篭りを直そうとゲー板から出てきたのにw
ここのどこら辺が技術板なんだろう
確かにw サンプルに毛が生えた程度の話しかしてないわなw
高度な話をしても構わないんだぜ
閃きや自己進化の仕方について
>>589 プロキシサーバの話は参考になったが
最近は粘菌のせいで糞スレ化してるね。
まともな人は沈黙中。
595 :
デフォルトの名無しさん :2006/12/10(日) 10:47:29
>>544 勉強しました!
「一部のユーザーがGnutella Networkサーバーを立ち上げ、そのIPをWeb等で公開している。それをGnutellaのホスト情報に登録することで、Gnutella Networkに参加できるのだ。」
やっぱサーバ必要なんじゃん。
そりゃ通信したいなら鯖立ては基本。
会社から自宅のWinXPへVPNでアクセスしたいのですが、 会社にはファイアウォールがあります。 F/WではVPNの通過を許さないのは普通でしょうか。 (自宅のルータはデフォルトでVPNがブロックされており 設定を変えないと外からXPをアクセスできません。)
普通。 あと板違い。
599 :
デフォルトの名無しさん :2006/12/10(日) 18:28:48
#define SIO_RCVALL _WSAIOW(IOC_VENDOR,1) Winsock2.0系パケットキャプチャでプロミスキャスにせず、 自分の送受信パケットだけを取りたいのですができますか。 opt=3 ioctlsocket(s, SIO_RCVALL, &opt); プロミスキャス設定を取ると、自分のパケットすら取得できなくなる。 PlatformSDKのサンプルとかあると嬉しいです。
pollを使った処理について質問です if( poll( &fds, nfds, timeout ) > 0 ){ if( fds[0].revents & ( POLLIN | POLLOUT ){ //いろいろrecv処理 //その後send send( fds[0].fd, buf, buf_size, 0 ); } という形で作ってるのですが、ソケットがPOLLOUT(送信可能かどうか)の判定は、 sendの直前でやるべきでしょうか? というのも、「いろいろrecv処理」してる時にソケットが送信可能じゃない状態になってしまってたら。と考えてしまうんですが。
nonblockingでsendしてwouldblockならpollループに戻ればいいんじゃね? つか1コマンド分の送受信バッファは要るんじゃなかろうか
602 :
600 :2006/12/11(月) 00:42:36
>>601 ありがとうございます。
ノンブロッキングソケットを使ってるのでその方法は無理ぽいです。
いやnonblockingで、なんだが
604 :
600 :2006/12/11(月) 17:16:47
うはうは 間違えてました。 普通にブロッキングソケットを使ってます。
606 :
600 :2006/12/11(月) 22:49:55
無いです。 ノンブロッキングにします。
607 :
デフォルトの名無しさん :2006/12/11(月) 23:30:47
ノンブロッキングJr
あーでもそのPOLLIN|POLLOUT条件だと戻ったときに引っかからなくなるぞ
恥ずかしくも自分でメッセンジャーを作りたいと思い、プログラミングを 始めようかと思っていてC++から始めようと思っているんですけど、 数ある言語の中でどれを選べばいいか迷ってます。 みなさんのご意見お願いしますm(_ _)m
>>609 C++から始めようと思ってるならそれでいいと思う。
最短距離でメッセンジャー作りたいならJava, C#あたりかな。
どちらにしろ一から言語を覚える段階なら結構苦労すると思うので、
最終目標のことは意識しないで飽きずに頑張ることが大事
>>609 後になって気づくだろうけど
> 自分でメッセンジャーを作りたいと思い、プログラミングを始めようかと思っていて
この考え自体がおかしいですのよ
>>613 自分で作りたいと言ってる初心者向かって
考え自体おかしいと返す馬鹿は放置。
チャットとかメッセンジャーからはじめるのは丁度いいと思うぜ
>>611 をこれ以上いじめるな。
弱いものいじめはよくないぜ。
きっかけをくじこうとする馬鹿なんかほっとけ。
>>611 は理由があって発言したんだろう
理由をきいてあげようじゃないか
611的には、ほとんどの非初心者が自分に同調してくれる予定だったんだろうな。 どこで間違っちゃったんだろうねw
俺もネットプログラミングはチャットツールが最初だったな。 TCPの上に今では見るも悲惨なプロトコルのっけて通信してた。
若きゲイツ > OS作ってみたいんですよ。 611 > 素人が何言ってんだ。その考え自体おかしいですよ。 若きゲイツ > すみませんでした。作るの止めます。 プログラマの給料は今の1.5倍ぐらい高くなってたかもね。
いやそのたとえはおかしい
623 :
609 :2006/12/13(水) 11:01:12
みなさんご意見ありがとうございます。 C#かC++のどちらかに絞り込めました。 初心を忘れないようがんばります!
ゲイツは最初OS作ってたっけ? VBじゃなかったか?
>>624 OSは確かどっかからか権利買ってIBMに売り込んだんじゃなかったかな。
>>625 NG。アルテア用のBASICだよ
当時は実機がなかったので、ポール・アレンの書いた
8080エミュレータ上で開発したのは有名な話
>>626 シアトルコンピュータのQDOS
CP/Mの8086版互換OSとでもいえるモノで
これをベースにPC-DOSに仕立て上げた
ライブドアのようなもの 色々桁違いだが。
629 :
デフォルトの名無しさん :2006/12/14(木) 00:36:36
おまえら、えらそうなこと言ってるけど、 スティーブンスくらいは読んでるんだろうな?全ページ。
>>629 まずはsageを覚えような?前ページ。
訴えたいことがあるならageでもいい希ガス それに、sageは別にえらくはない スティーブンス本はこの世界の常識なので、 このスレの住人なら一通り目を通しているor書いてあることを理解できるくらいは期待したいところだ。
紅茶に砂糖を入れてかき混ぜるときに使うアレか。
633 :
633 :2006/12/14(木) 01:27:35
こんばんわ。 RTTの計測はwinsockでも可能ですか? よろしくお願いします。
634 :
デフォルトの名無しさん :2006/12/14(木) 09:47:10
営業ご苦労様
636 :
デフォルトの名無しさん :2006/12/14(木) 14:19:51
営業じゃないよ。 FindWindowとかで検索掛けてクライアントからLOGとる方式で作った事ある。 けどクライアント側に専用ソフトなしでどうやっているのか知りたかった。 そけだけ。 >635さん 教えてください。
wmiでも使ってるんじゃないか?
ブロードキャストのUDPパケットをモニタリングする場合、ただポートを 開いて待ってれば入って来るのでしょうか? 今フリーソフトのクリップボード共有ツールを使わせて貰っていて、 非Win環境との簡単なデータのやり取りもこの共有ツールに打つ様に すれば便利かなと思っているのですが、暗号化等されていなければ ポート開いて入って来るパケットを観察、似た互換パケットをブロード キャスト送信と言う手順で簡単に出来るのかな…
Windowsの場合、UPnPって実行するのには、Admin権限が必要?
自分でUDPパケット作って投げれば何の問題もなく可能
RawソケットもAdmin権限が居るんじゃなかったっけ
その辺りをVista触った人に聞いてみたいね
生ソケットはSP2からadminでも作れなくなった
645 :
デフォルトの名無しさん :2006/12/16(土) 01:09:04
ネットワークプログラミングでpthread使いますか?
使ったほうが簡単に書けたりする場合もあるんじゃね?
>>642 別にRawパケットいらないし。
HTTPもどきのメッセージをSOCK_STREAMじゃなくてSOCK_DGRAMで投げるだけ。
>644 ほんと?
FAQです。
ネットワークプログラミングはLinuxでやれ! って話ですよ。MSに言わせると。
Cygwinでやっても駄目なの? って単なるWinsockのラッパーだから無理か・・・
そこでWinPcapですよ
じゃあおれはVMPlayerでBridgeしたIFをつかうFreeBSD(5以降)でBPF使ってゴリゴリ書いてるか…
BSDはTCP/IPの原祖だけど、今のBSDはもう変わってしまっているから意味は無いな。 OSでプログラミング手法を変えてなんとかするしか、今は通用しないと思う。
655 :
デフォルトの名無しさん :2006/12/17(日) 01:18:14
何だお前は どんだけパケット延滞してんだよ
ルータにパケット廃棄されなかっただけでも奇跡。
一万年と二千年前からKeep Alive
遅い上に、間違ってるしw
間違ってはいないと思うが?
また知ったかぶりか
>>660 「ソケットペア」って何よ?
UNIXのsocketpair(2)のことじゃないだろうなw
>>662 rfc793の"pair of sockets"を日本語でソケットペアと表記するのはよくあること。
英語でもsocket pairで通じるだろ。
664 :
デフォルトの名無しさん :2006/12/17(日) 15:36:52
>>662 スティーブンスの43ページ嫁
悲しいほどのモグリがいたもんだwww
スティーブンス本といえば、第3版はいつごろ翻訳されるんだろうな?
すてぃーぶんぶん
スティーブンと言ったら目が10
そろそろ次スレだね
質問させてください。 確立済みコネクションが使っている、ローカルインタフェースの インタフェース名や、インタフェースインデックスを取得したいのですが、 よい方法はありませんか? とりあえず思いついたのは、 1. getsocknameでIPを取得 2. sysctlとかで (winsockだとGetAdaptersAddresses?) インタフェースリストを取得 3. 2.で取得したリストの中から、1.のIPにマッチするインタフェースを調べる という方法なのですが、そもそもipv6の場合 IPアドレス -> インタフェース でよいものなのでしょうか?
unicastならそれでいいけど、 routingがdynamicに変わりうることを忘れるな。 一時的にも使っているインターフェース=出ていくインターフェースでない。
確立済みコネクションであってもroutingの変更で interfaceが勝手に変わったりすんの?
接続に対するgetsockname(2)の結果は変わらないけど、 出ていくインターフェースは変わりうる。
>>673 確立してると思ってるのは、TCP より上の人だけで、
中の人には単なるパケットだから、その時に一番よさ
げなインターフェースを選ぶよ。
676 :
デフォルトの名無しさん :2006/12/20(水) 02:18:21
ルークよ、インターフェースを使うのだ
>675 TCPなら確率したコネクションにたいして 出て行くインターフェース(≒SRC-IP)は同じまま保持 しないとまずいんじゃないかと思うが。
接続されている方のピアが、SRC[ip:port], DST[ip,port]で ソケットを識別しているのに、勝手にSRC-IP換えたら 通信不能でそ?この4組は通信の間同じ値になる必要があるはず。 SRC-IPが同じ複数のインターフェースがあるという(チーミング)なら 話はべつだが、それって、複数で1つのインターフェースみたいな扱いでそ?
とりあえずオレの知っている知識と違うところの住人のようなのでスルー
>>679 確かにINADDR_ANYでbindする時のsrc ipはインターフェイスから拾われるが、
だからといって通信にそのインターフェイスを使わなければならない訳ではない。
>>679 そういうプロトコルスタック (if とsrc ip addr の対応が固定) もあるのかもしれないが、
Windows や Unix や Linux ではパケット送出時の if はルーティングテーブルによって選ばれて、
ソケットの src ip や if のもつ ip addr は考慮されないですよ。
684 :
デフォルトの名無しさん :2006/12/20(水) 15:41:38
cでwindowsからlinuxにソケットでデータを送りたいのですが サーバ側であるlinuxのプログラムはwindowsのときのそれと まったくちがうんですか?
だいたい同じ
違うだろ
>>682 マジで?BINDしたらインターフェイス固定されるんじゃ
と思ったけどインターフェイスは固定されないのか
固定されるのはIPとポートだけか
障害があった場合に経路切り替えてなにがなんでも送受信して ほしいな
>>684 Windows 側で作るときに Windows でしか使えない関数を使えば
全く違うようになるし、互換性のある同じ名前の関数を使えば
似たようなものになる(パラメータとか動作が微妙に違うかも
知れない)。
>>683 >>687 うーん、まだ腑に落ちない・・・
connect、sendto するときにルーティングテーブルによって選ばれるのはわかるけど、
確立済みコネクション(connectしたあと)のsendでもルーティングテーブルによって
選ばれるってことでですよね。
そういうシナリオってイメージできないです・・・
>>684 細かいとこが違うからハマる可能性がある
ManpageとかMSDNをよく見ること
>>690 接続中にroute changeされたり、interfaceのリンクが落ちたり。
metrics変更でも切り替わったりするんだろうか
えー。if0:210.168.1.X/24とif1:198.0.0.Y/24のifを持つPCがあったとして、 最初if0でTCPの3-wayを終えると、そのソケットのSRCIPは210.168.1.Xでそ。 んでもって、そこでルーティングテーブルが変更されてDST-IPに近いのがif1という ことになったら、SRC-IPは210.168.1.Xのまま、if1を通ってパケットが発信されるわけ? そんなルーティング変更がなされて、しかもきちんと通信できるような機械が そんじょそこらにあるっていうの?
( ´ー`)y━・~~~
>>694 そんじょそこらにあるよ。
そこまで疑うなら試してみれ。
>>690 あんたが想像力貧困だからどうだっていうの?
こりゃまた想像力のない煽り方だな
>>697 そのip addressを持つifだろ。
特に、それに起因して文章に曖昧さが発生してるわけでもなし。
LANケーブル抜いた状態でUDP送信(send)すると エラーが帰ってくるんだが(errno:65.EHOSTUNreach) 20秒ぐらいたつと数秒間正常が帰ってくる…。何故?
> そのip addressを持つifだろ。 そうかそうか ifにipaddressを持たせるヤツも居るんだ しらなかった
失笑しか買わない馬鹿な突っ込みはどうかと
solarisでIPの生パケット(オレプロトコル)を扱いたいくて、 char packet[LENGTH]; で中身の領域を確保して、パケットの中身を struct { uint8_t hage; uint16_t hige; uint8_t huge; }; という構造体で表現したとき、packetへhageは代入はできるのですが、 higeの代入が機種依存になってしいます x86だと *(uint16_t*)(packet+1) = hige; が動作するのですが、sparcだとbus errorになってしまいます。 アライメントの問題なのはわかっているのですが、こういうとき共通のコードではかけないのでしょうか
pragma pack とかって、gccでは使えたっけ?
>>704 >アライメントの問題なのはわかっているのですが、こういうとき共通のコードではかけないのでしょうか
htonsしてmemcpy。
707 :
704 :2006/12/21(木) 19:02:35
>>705 solaris10のgcc3.4.3で使えますね
>>706 memcpyの存在をすっかり忘れてました(w
pragmaよりは泥臭いけど、処理系依存(sunstudioも念頭に入れておかなきゃいけない)なのはちょと考えてしまうので、memcpyにします。
型ごとにmemcpy呼ぶ関数作るときにTemplateってあるのかと今気づいたC++10日目の初心者
>>704 普通に、
struct {
uint8_t hage;
uint16_t hige;
uint8_t huge;
} x;
x.hage = pakcet[0];
x.hige = ((uint16_t)packet[1]) << 8 | (uint16_t)packet[2];
x.huge = packet[3];
って書けばいいと思う。
あと、pragme pack(1) とかすると、68K とかで hige にそのままアクセスすると
アドレスエラーになるような気がするが...。
少なくともgccではアラインメントを調整しない構造体を作った場合、 そのメンバのアクセスには、バスエラーにならない方法を使うはず。
>>709 そいつはにわかには信じられないほど凄いな。
そういえば昔の Alpha AXP 用の Linux ではカーネルがトラップして面倒を見てくれてた。
パフォーマンスは大いに低下する。
>>709 そんな余計なことをするぐらいなら、素直にエラーにしてくれたほうがいいんだけどなぁ。
余計というか、pragma等で指定しなければ、 配置についてはどうなるか全く分からないのが言語仕様です。
そんな基本的なことを唐突に語られても...。
TCPプロトコルのチャットプログラム作りました。 Base64にしてから送信などせず、そのまま送信です。 cygwinからWINDOWSに、buf="hoge\nhoge"という文字列を送信 したのですが、受け取ると文字の長さがstrlen(buf)=4 の"hoge"だけになってしまいました。 これは、プロトコルか何か決まりで正常なのでしょうか? base64でエンコードしてから、送信すれば大丈夫でしょうか。 どんなことが考えられるのかご教授お願いいたします。
おまえがわるい
>>715 "hoge\nhoge"のまま
受け取れないとおかしかったですか。
ありがとうございました。
>>714 です。
改行を他の文字に変えたり、
Base64でエンコードして送信、受信後エンコード
したら大丈夫でした。
んー、プログラミング駆け出しなので、
どこのコードが悪いのか全然わからないです。
httpとかコマンド送信するとき\r\nを最後につける
って本にあったのでそれと関係してると思ったのですが。
自分で作ったやつなので関係ないですよね。
\nでも\r\nでもどちらでも、切捨てになってしまいます。
どこがおかしいかなにか思い当たる節のある方
いらっしゃいますか?
>>717 電話で「体の調子が悪いんです治してください」って騒いでるようなものだ
ゲッツ禁止
('A`) おっと使い方書いて無いな -コンパイル方法- mv 3285.txt hoge.c #ダウンロード&改名 gcc hoge.c -o tcptect -実行方法- コンソール1: ./tcptest s コンソール2: ./tcptest c で大体おk 分からなくなったらソース見てちょ
とりあえずソース出せ 話はそれからだ
man fgets
725 :
デフォルトの名無しさん :2006/12/26(火) 11:17:43
>>717 パケット1回しか受け取ってない?
2つに分かれてるかもよ
>>720 ソースまでアップしていただき、ありがとうございます。
ソース見ながらずっと考えてました。
sizeof、strlenが目に入りまして、調べてみましたが、
受信側で、sizeof使ってたのが原因かもしれません。
"arere\narere"のサイズ調べると
sizeof=4
strlen=11
でした。改行以降切り捨てられますが、
おそらくこれが原因なんじゃないかと思います。
ちょっと今無理なので、夜、確認したいと思います。
>>726 727です。
それも調べてみたいと思います。
アドバイスありがとうございます。
>>727 sizeof はポインタのサイズを返すから常に4(=32bit)を返すぞ?
そういうオチか・・・
んーw C言語とネットワークプログラミングは切り離して勉強したほうがいいと思うよ
>>727 sizeof とは何かをよーく調べろ。sizeof は演算子だ。関数ではない。
sizeof(charのポインタ)分しか送ってないって落ちかよ。 なんじゃそりゃ!
しかしbase64だとOKというのは・・・ まあ今のところネットワーク関係無いから、これ解決したらまたおいで
ワロス fgetsだと思った俺はまだまだだな
俺もそう思ったが、BASE64とか言っている時点で何かおかしいわな。 根本的な知識が欠如しているというか。
質問させてください。 WaitFor〜系でネットワークイベントを待つとき、内部的には実行スレッドが Sleepしている状態だと聞きました。 つまり送受信時に重複I/O処理するにしても、完了待機(Sleep)中は 同一スレッド内で動いている別処理は動かないわけですよね。 これって結局ブロッキングと同じでは?と思うのですが… CUIで何かしながらネットワークイベントを待機したいときは 何にせよ別スレッドが必要、ということでしょうか?
WaitFor〜系はブロッキング処理です。 複数のイベントを同時に待てるというだけです。 UNIXのselect/poll/kqueue相当。
>>737 何かを並行的に処理するにゃ、自力でイベントループを作ってポーリングするか、スレッド/プロセスにしちまうかしかないと思うんだが・・・
>>738 なるほど、ありがとうございます。
いまいち理解が曖昧だったので助かりました。
>>739 やはりそうですか…
どうにも色んなI/O方式があるので混乱気味です。
スレッドが作れないのなら毎回ポーリングが適当っぽいですね。
741 :
デフォルトの名無しさん :2006/12/26(火) 19:16:40
linuxとwindowsでソケット通信したいんですが クライアントのほうで接続で拒否されてるみたいで・・ サーバ側でポート確認してもlisten状態になってるし 考えられる原因は何でしょうか?
>>741 防火壁/NATの板ばさみ/ポートを他のプログラムが握ってる
くらいか
とりあえずソース出せ 話はそれからだ
>>729-
>>714 >cygwinからWINDOWSに、buf="hoge\nhoge"という文字列を送信
>したのですが、受け取ると文字の長さがstrlen(buf)=4
>の"hoge"だけになってしまいました。
ここには
strlen(buf)=4
って書いてあったんだよなぁ
漏れは
>>714 と
>>727 は別人だと思う
じゃなければ釣り死
745 :
741 :2006/12/26(火) 19:33:58
拒否されてるみたいってなんだよ。 どの関数を呼んだら何が返ってきたか書いてくれ。
747 :
教えて君 :2006/12/26(火) 20:27:49
はじめまして、教えて君です。 さて、質問です。tcpの再送タイマの実装について教えてくださいな。 僕はいままで再送タイマは、送信中のパケットすべてに対してセットされているものだと考えていたんだ。 でも、詳解TCP/IP vol.2を見た感じじゃt_timer[TCPT_REXMT]の一個で実装されてるよね。 これは、つまりパケットが送信される度にタイマが上書きされるのかい? RFC793,2001,2581を見る限り、詳しく指定されていないってことは細かい所は実装者のお好きなようにって事なのかな? ってことはBSDがこうなだけで、他のOSになったらまた変ってくるのかな? 質問連続でごめんね。でも反省はしてないよ。 「ソース読め」とか言わないでね、吐血しそうになるから。
748 :
741 :2006/12/26(火) 20:28:18
クライアント側のcnnectのところで接続ができていないです
だからファイヤーウォールが有効になってんだって。
750 :
741 :2006/12/26(火) 21:04:00
外部接続はしていないんですが・・ よくネットワークのことはわからなくて
>>727 です。
大変申し上げにくいのですが。。。
if((p=strpbrk(buf,"\r\n"))!=NULL){
*p='\0';
}
受信してから、改行があったら'\0'代入して、
そこまでで切ってしまうという処理してました。
コピペして書き換えていたのですが、残っていたようです。
送信したり受信したりのサイズの件は、sizeofでした。
サイズもおかしくて、改行で消えたのでパニックになりました。
ほんとお騒がせしました。m( _ _ )m
レスくれた方ありがとうございました。
753 :
デフォルトの名無しさん :2006/12/26(火) 21:18:27
telnetやってみ。
>>747 いきなり降参かよ。
質問するにしても、詳解TCP/IP vol.2の分らない所か、RFCに沿って質問しろよ。
RFC 793, RFC 2001をちゃんと読め。
それからRFC 1581って、お前本当にRFC読んでるのか?
RFC 2525 TCP Implementation Problems
2.10 Failure to back off retransmission timeout
RFC 2988 Computing TCP's Retransmission Timer
は読んだのか?
757 :
デフォルトの名無しさん :2006/12/27(水) 07:44:29
今ホールパンチングの研究してるんですけど、 Symmetricな挙動をするNATルータの機種を知っている方いますか? それがあるとすごく助かります。
ルータ適当にいくつか買ったけどなかったな 安物だからか
760 :
デフォルトの名無しさん :2006/12/27(水) 08:02:20
761 :
デフォルトの名無しさん :2006/12/27(水) 10:06:08
質問させてください。 CygwinとC言語でソケットを使ってサーバを書く勉強をしているのですが、 画像データの送信でつまいづいております。 表示したいページのHTMLソースに <img src="hoge.jpg">などが「単独で」書かれている場合は この画像がふつうに表示されるのですが、 <td background="hoge.jpg">などと「背景として」要求された画像だけは表示されません。 サーバにとって、両者には何か違いがあるのですか? 画像データの送信の際には、 レスポンスヘッダに「最初の行、Content-Type, Content-Length」の3行を書き、 fopen(...)でバイナリとして読み出したデータを本体としてくっつけて send(socket, ...)で送っています。 原因や怪しいと思われるところなど、教えていただけるとありがたいです。
762 :
761 :2006/12/27(水) 10:24:11
すいません、補足です。 背景画像が表示されないのは<td>に限らずすべてのタグ、 あるいはスタイルシートのbackground-image:url("...")もです。
そういうのはブラウザが自分で取ってくるの。
>>761 パケットキャプチャと関数の戻り値チェックは最低限してるの?
>>761 なんというか、原因はその作ったサーバになるプログラムとクライアントになるプログラムの協調プレイによるものでしかないのでは?
と思う
具体的なのはサッパリだです
767 :
741 :2006/12/27(水) 13:07:09
ファイヤーウォールの設定も行ったのですが ダメでした。 他に考えられる原因はなんでしょうか?
>>767 >>756 俺らがエスパーするより
>>741 がなんとかしたほうが効率がいい
回答を貰いたいなら具体的にどんな環境で何をしてどうなったかを書くべき
769 :
741 :2006/12/27(水) 13:42:45
守秘義務があるため答えられないのです。
いやもう一度書き込んだ時点で終わりだろう・・・常識的に考えて
771 :
741 :2006/12/27(水) 15:02:34
772 :
741 :2006/12/27(水) 15:04:14
ファイアウォールの設定,ポートの設定あたりいじったのですが 解決しません.webminのほうで全て許可にしました
だからパケットキャプチャしてパケット追ってみろって。
>>771 全然情報足りない
間にルータ等をかましてるかどうか
pingは通るのか
ローカル同士でのテストなのにグローバル経由で接続しようとしてないか
>tcp/ip builderのソフト
ってなに?よくしらないんだけど。
後は皆が言うようにパケット追うのが基本
>>771 telnet 192.1.1.2 9000 とかして reject されるようなら、
ネットワークやWindowsの設定の問題。
telnet で繋がるようなら、クライアント側のコードの問題。
やる気の無い奴に何を言っても無駄。
>>771 とりあえずこれはまとめてうpして
・マシンとネットワーク構成
・再現できる最低限のソース
・再現方法
>>720 >>722 とか参考にしてみて
>>775 あと、サーバ内で
telnet localhost 9000
も併せてやるとええね。
あと、
tcpdump port 9000
やらんと。
779 :
741 :2006/12/27(水) 18:24:09
これ以上は守秘義務があるので答えられません。 ネットワーク構成は特に秘すべきなのですが。
んじゃあれだ、 本読んで勉強しろ 質問者の義務を果たせない様なら質問する資格はない
781 :
747 :2006/12/27(水) 19:00:08
>>755 レスありがとうございます
質問の仕方は反省しとります
rfc2525,2988はまだ読んでないんで、読んでみます
ライブチャットのシステムを作りたいのですが、 お勧めの開発環境はありますでしょうか? (OS,言語,DB) 漠然とした質問で申し訳ありません。
skype。
既存のものを使ったらダメなのか?
782です。 できれば一から構築して運営したいという内容なのです。 内容的には既存のノンアダルトのライブチャットシステムと 全く同じでいいのですが、どんな言語を使うと実現可能なのか とっかかりがほしかったところでございました。
>>775 >telnet 192.1.1.2 9000
それローカルアドレスじゃないんですけど
しかしあれだな。 守秘義務があるようなプロジェクトに関わってる香具師が こんなレベルだとは発注者は夢にも思ってないだろうな。
だから守秘義務って言ってるやつは、成りすましの荒らしだってw
大丈夫 俺もまだ35だし ロリコンだから
守秘義務に釣られる奴いたのか・・・
きっとどこまで釣りなのか分かって無いやつガイル
釣られている人がいると思わせる釣り
>>739 > 自力でイベントループを作って
WaitFor〜ってそのためにあるんじゃないの?
なんかビジーループのほうがマシだとか思われてそうで心配なんだけど
794 :
741 :2006/12/28(木) 11:40:31
守秘義務という言葉の意味が分からないのですか。 OSの種類やサービスパックの有無なども守秘義務の範囲です。 ウィルス対策ソフトに何を使っているかなんて、言えるわけありません。 常識を知ってください。
守秘義務があることは認めてやるが ここでそれ持ち出して詳細を伏せる やつはガチでアホ
>>794 ならば、こういう open なコミュニティーで解決しようとすること自体がNG
コュミニティー
また釣ら(ry まあ答えたいけど守秘義務で答えられません、とか
799 :
デフォルトの名無しさん :2006/12/28(木) 13:06:07
すいません。初めての書き込みです。プログラム初心者、というか何も勉強していないのですが、 このような問題を解決しなければならなくなってしまいました。どうか教えてください。課題を教えてくださるスレッド(?)が書き込みできなくなっていたので、 こちらに書き込ませていただきました。 【質問テンプレ】 [1] 授業単元:基礎情報処理 [2] 問題文:縦100横100のマス目(点)に分けられた紙の各点が、白と黒に塗り分けられたものを考える。この中に、下にある様な黒い点で囲まれた図形が1つだけある。図形は必ず、黒い点で囲まれており、 内部は白い点で埋め尽くされている。この「囲まれている」とは、各黒い点の上下左右および8つの点のどれかが黒い点となっているものと考えよう。 □□□□□□□□□□ □□■■■■■■□□ □■□□□□■□□□ □□■□□□□■□□ □□■□□□□■□□ □□■■■■■■□□ □□□□□□□□□□ □□□□□□□□□□ □□□□□□□□□□ □□□□□□□□□□ この図形は整数値の2次元配列(例えばC言語ならa[y,x])で表されている。x軸は左から右、y軸は上からしたとするので、a[1,1]は一番左上の点になる。この配列はプログラムに入る前に何らかの方法で、白い点は0、黒い点は1になっているものとする。 さて、図形の面積、つまり黒い点で囲まれた内部の「白い点」の数を数えるプログラムを考えよう。ただし図形は必ず紙の上に1つだけ存在し、また必ず紙の端から点1つ以上ずつ少し離れた位置にあるとする(つまり黒い点は紙の上下左右の端には存在しない)。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: すみません、よくわかりません [3.3] 言語: なんでもかまいません。 [4] 期限: 2007年1月5日0時まで [5] その他の制限:まだ何も習っていません。具体的に回答を提示してくれると助かります。
スレ違いの上さらにマルチ
やはり守秘義務の壁は厚いか・・・
何も習ってないやつにこんな問題出す講師なんていない。 嘘も体外にしろ。 最近こういう奴が多いな。 新手の荒らし?
804 :
デフォルトの名無しさん :2006/12/29(金) 03:44:53
微妙にスレ違いっぽいのですが、適当なスレが見付からなかったので 宜しければここで質問させて下さい。 現在、携帯電話で独自ドメインのメールアドレスを使用したいと思い 以下の様な事を行っています。 [受信] サーバー側で、メール転送の設定を行い 携帯のメールアドレスへ転送される様にしている。 [送信] サーバーに送信フォームを置き、発信元を独自ドメインのアドレスにした cgiスクリプトを介して目的のアドレスへ送信する様にしている。 と、以上の様な感じなのですが、やはり携帯で無理やり 独自ドメインのアドレスを使用するには、この様にするしか方法はないでしょうか? 携帯のメーラーで、色々アドレスが取り扱えれば一番良いのですが…
勝手サイトじゃなくて承認サイトならiアプリとかで作成可能
806 :
デフォルトの名無しさん :2006/12/29(金) 04:39:24
>>805 レスどうも!二つお聞きしたい事があるのですが、宜しければご教示下さい。
1. 勝手サイトと承認サイトとは具体的にどういう事なのでしょうか?
2. iアプリで作成可能というのは、携帯で使用出来るメーラーを新たに作成可能だという事でしょうか?
また、iアプリとは一般的にどの言語で記述するものなのでしょうか?
807 :
806 :2006/12/29(金) 04:59:32
ああ、自分で作らなくても、 そういう物がフリーとかで公開されてるって事ですよね。 ちょっとVectorにでも行って探して来ます。
808 :
デフォルトの名無しさん :2006/12/29(金) 05:16:36
皆さん始めまして。 2チャンネル(ですよね?)初めての投稿なのですが…。 荒らしがいっぱいいると聞いたので、来たことがなかったのですが… 投稿してみました。 JAVA言語で、ネットワークを利用しつつACCESS利用した、 プログラムサンプルのサイトありませんかね? 説明ならもっと助かります。よろしくお願いいたします。 ググレよ〜とかはやめてください。探したので…一応ですが…。
809 :
デフォルトの名無しさん :2006/12/29(金) 07:21:15
そのACCESSって何のACCESS? もしかして・・・
>>808 > JAVA言語で、ネットワークを利用しつつACCESS利用した、
> プログラムサンプルのサイトありませんかね?
条件限定しすぎ
あるのかどうかはしらないが、そんなサイトを探すより、
それぞれ3つを扱えるようにした方が早いだろう
あと、何がわからないのかをはっきりさせた方がいい
> ググレよ〜とかはやめてください。探したので…一応ですが…。
やめてくださいって…言われたくなかったら、
どんなこと調べたのかは書くべきだろ
>>809 Access って、MS-Access 自体のことなのか、Jet のことなのかがよくわからんが、
Jet なら、jdbc + access あたりでググレば、いくらでも出てくるぞ。
Access 自体を操作したいなら、java + "common object model" あたりでググれば
いいと思う。あまり、そんな奴を見たことないけど。
812 :
808 :2006/12/29(金) 11:07:12
先にお礼を普通にスレッドしていただきありがとうございます。 すいませんでした。わかりずらかったですよね。 えっと、AccessはMS-Access使っております。 現在はMS-Access のSQLのデータを直接JAVAで呼び出すことが出来ており、 SQLのデータをネットワークを経由してJAVAの方へ持って行きたいのです が…。一応OSはWindows(XP)使いたいと思います。 ※文章が不慣れな点がありましたらすいません。
>先にお礼を普通にスレッドしていただきありがとうございます。 お、新語だ。
>>812 わかりずらくなかったけどわかりづらかったです。
>>813 >スレッドしていただき
どういう意味なんだろうな
816 :
デフォルトの名無しさん :2006/12/29(金) 14:59:28
処理って意味だろ
レスの間違いじゃね。
>>812 > 直接JAVAで呼び出すことが出来ており
なんで、それを先に書かないの?
> ※文章が不慣れな点がありましたらすいません。
文章が不慣れと思うなら、なおさらその直接呼び出している部分の
コードを晒した方が話は早いと思う。
819 :
デフォルトの名無しさん :2007/01/04(木) 16:09:43
#include <netinet/ip.h>struct ip *iph のiph->ip_src が ある特定のアドレスと等しいかどうかの比較ってどうやるのですか?
特定されてるなら比較するだけでいいんじゃないの?
821 :
819 :2007/01/04(木) 21:17:25
>>820 レスありがとうございます。
例えば iph->ip_src が "192.168.0.1" かどうかというのを
具体的にどのように比較すればいいのかがわからないのです。
if (iph->ip_src == "192.168.0.1") {}
ってなわけにわいかないですよね。
if (iph->ip_src.s_addr == hogehoge) もなんか違うような気がするし、、、
そのへんを具体的に示していただけると助かります。
>>821 if (iph->ip_src.s_addr == inet_addr("192.168.0.1") ) {}
初めまして。よろしくお願いいたします。 daytime が利用可能なインターネット上のホスト(サーバ)を 教えていただけませんか。 例えば,コマンドプロンプト上で telnet * 13 とやって反応が出てくるような * です。 ある UDP サンプルプログラムを試しているところなのですが, telnet で反応してくれるホストがみつからずにいます。 そこで telnet でうまくいけば,サンプルプログラムでも 試すことができるのですが,そのホストが見つからない,という 状況です。
>>823 telnet と udp ... 釣りと言うことでいいか?
> 823 恐れ入ります。 釣りのつもりはないのですが。 telnet と udp を使っていますが,要はサンプルプログラムで daytime サービスを試しに使ってみたい,しかし,ホストが見つからない ので,提供しているホストを教えてください,という趣旨の質問です。 検索をかけてみたところ,セキュリティ上,daytime は off にしている サーバも多そうな感じがしたので,利用可能なホストがあれば 教えてくださいというものです。
826 :
823 :2007/01/04(木) 23:53:13
>824 825の「> 823」は「>824」の間違いでした。すみません。
telnet でつながっても UDP が使えるとは限らないんじゃまいか? ローカルでdaytime動かす方が確実かも。 (そもそも余所様の鯖で実験するなよw) Winは知らない。LinuxならxinetdのdaytimeをONすればおk。 インストールするのが面倒ならKnoppix。
>>825 > telnet と udp を使っていますが
ますます釣りにしか見えない...。
マジなら、まず TCP とは何ぞやから勉強し直したほうがいいと思う。
>>827 Win2K なら、Windows コンポーネントの ネットワークサービスの
中に 簡易 TCP/IP サービスがあるので、それをインストールすれ
ばいい。(ただし、Character Generator, Discard, Echo,
Quote of the Day も一緒にインストールされてしまうが。)
WinXP にもあったと思う。
telnet で daytime サービスを確認して udp の実験をするつもりなんだろうと解釈した。そして telnet は繋がったけど udp のプログラムが動きません>< ってのを密かに期待www
830 :
823 :2007/01/05(金) 01:15:36
>>827-829 telnet も udp のサンプルプログラム もうまくいけました。
827 の方の書かれた通り,xinetd で daytime を on にして試しました。
ちなみに,件の「UDP のサンプルプログラム」は David A. Curry 著,
アスキー書籍編集部監訳『UNIX C プログラミング』に
載っているものです。
>検索をかけてみたところ 漏れはあなたが捕まらないことを祈ります
昔TCPの実装のテストするのに遠くにあるchargen鯖を叩いたりしたものだが 昨今はこういうの開いてるところ無いだろね。
pingさえ通らんからなあ
マルチスレッドで一つのソケットに対してread、writeしています readは排他制御しないとまずそうなのはわかるんですが writeするときにも排他制御するべきでしょうか?
プログラムにもよるが、すべきだろ。こういう質問をするということは おそらくやってないと思うが、writeの戻り値もちゃんとチェックしとけよ。
レスありがとうございます。やっぱりしとくべきなんですね・・・ readとwriteが同時に一つのソケットに対して行われるのは大丈夫なんでしょうか?
>>840 同時にできないということは
readでブロックしている間はwriteもブロックされるということでしょうか?
>>841 いや、同時に行われるよ。
でも、それが何か問題あるかね?
そりゃ実装に依存するんじゃね? よほどテキトウな実装じゃないかぎりブロックしないと思うけども。
どの部分で同時と言ってるのかねぇ
すくなくともTCP/IPは全二重だから読み書きは同時に行える。 読み書きのたびにブロックするようなプログラムを書いてるかどうかは別の問題
>>844 どの部分でもいいだろ。本質じゃねーよ。
大抵はバッファリングしてるから、read()もwrite()も非ブロッキングだし、 複数のスレッドから同時に利用したとしても構わないような設計になっているはず でFA
TCPの実装について質問です。 詳解TCP/IP Vol.2の917pの図29.5の892行に tp->t_dupacks > tcprexmtthresh という部分があるのですが、これは tp->t_dupacks >= tcprexmtthresh ではないのでしょうか? この図の892-894行における処理は、高速リカバリにおいて最初の重複ACKで ないACKを受信して、高速リカバリを終了する際のcwndをssthreshの値に設定 し直す部分だと理解しています。しかし、 tp->t_dupacks > tcprexmtthresh だと、例えば重複ACKの閾値が3だとして、きっちり重複ACK3つで高速再送、 高速リカバリが行われた場合、cwndがssthreshに設定されないと思うんです が、これは正しいのでしょうか?
>850 レスありがとうございます。 やっぱり正しくはないんですね。
手元に無いから外してるかもしれんが、ひとつ前のif文で++tp->t_dupacksされてたりしない?
>>845 > すくなくともTCP/IPは全二重だから読み書きは同時に行える。
プログラムから読み書きが同時に発行できることと、データが
送受信同時にできるかは全然別の話だよ。
(例えば) 無線 LAN は半二重。
>>853 どの部分でもいいだろ。本質じゃねーよ。
問題はソケット関数群がスレッドセーフに実装されているか否かであって、 たとえLANが同時に送受信できようが、ソケット系関数の中で内部で持ってる(かもしれない) ステータスとかいろんな変数の扱いがスレッドセーフじゃなきゃアウトだろ、ってこと。 逆にLANが同時に送受信できなくても、関数の中できちんと排他処理してたりするなら問題ないだろ。 つまり、調べるべきはソケットライブラリの仕様であって、 TCPの仕様や物理層の仕様ではない。
856 :
855 :2007/01/07(日) 00:05:56
そもそも、ストリーム出力に対して排他もせずに複数スレッドから出力するっていう 状況がよくわからんのだが。 受ける方はどうやって受ける気なんだろう...。
>>857 送るのも届くのも受けるのも全部気まぐれだろ
>>853 > プログラムから読み書きが同時に発行できることと、データが
> 送受信同時にできるかは全然別の話だよ。
2行目にほぼ同じ意味のことを書いてると思うんだが
どうしてそこだけ削除して引用してるの?
どの部分でもいいだろ。本質じゃねーよ。
>>859 > すくなくともTCP/IPは全二重だから
指摘する部分だけ引用するのは当然だと思うが。
全二重の意味理解して無いだろ。
なんかどーでもいい
どうでもいいだろ。本質じゃねーよ。
865 :
846 :2007/01/07(日) 20:49:06
>>861 送受信じゃなくて読み書きと書いたのが気に食わないってことですか
TCP/IP が全二重と書いてあるのがおかしいと言うだけ。 どっからそんな変な知識仕入れたんだ?
この中に全二重と半二重の違いが分かっていないヤツがおる
全二重は全部二重で半二重は半分二重だろ。わかってるよ。 どっちでもいいだろ。本質じゃねーよ。
おまえやろ
おまえや
半二重とは二重の半分、つまり一重である
なまえや
紙一重
じゃあ、full duplex, half duplexで。
877 :
デフォルトの名無しさん :2007/01/08(月) 18:12:11
acceptで待っている状態のスレッドを ほかのスレッドからacceptを終わらせるにはどうしたらいいですか
878 :
877 :2007/01/08(月) 18:38:20
つけたし Winsockだとclose()を呼び出してやればうまく acceptを抜けてくれるけれどもLinuxだとうまくいかない
UNIX系なら適当なSIGNALを投げて、EINTERで戻す手があるな。 スレッドとシグナルの相性がよくないという噂は別にして。
880 :
877 :2007/01/08(月) 19:23:05
full duplex = 複線 half duplex = 単線 っていう感じでしょうか?
>>881 full duplex は受信と送信が同時にできることを意味する。
half duplex は受信も送信もできるが、同時には送受信できないことを意味する。
別の表現をするなら full duplex は携帯電話みたいなもんで
half duplex はトランシーバーみたいなもんだ。
884 :
デフォルトの名無しさん :2007/01/08(月) 23:08:26
つーか、イーサネット層半二重なることアルヨ ってだけだろ。 TCP/IP層は 全二重バッチコーイ! な仕様なんだから どうでもいいだろ。本質じゃねーよ。
本質はなに?
本質なんてどうでもいいだろ
それは良くない。
ハゲ一重
松うな重
羽二重餅
お前らに心眼なんて在るわけ無いだろ
プログラム書くときに普通はTCP/IP層を使う以上 イーサネット層を意識する必要はない つまり全二重だと思って使ってれば問題なし
893 :
デフォルトの名無しさん :2007/01/09(火) 16:35:41
WinPcapのフィルタリングで、 1. TCPは送信だけ。受信は不要。 2. UDPはSRC PORT 53の受信だけ欲しい。 というフィルタはどう書けますか。
894 :
デフォルトの名無しさん :2007/01/09(火) 16:45:52
そこでBASICでつよ
C言語でホストスキャンのプログラムを作るにはどのようにすればよいですか?
ソケットの使い方を調べる
>>893 (src host A.B.C.D and tcp) or (dst host A.B.C.D and udp src port 53)
A.B.C.Dは自ホストIPアドレス。
>>884 TCP/IPじゃなくて、TCPだな。全二重なのは。
>>877 >>879 そのUNIXにPOSIX realtime拡張のpthreadがないとダメ。
そうじゃないとthreadにsignalを送れない。
(realtime拡張がないと対象はprocessのみ)
C言語でProxyARPのプログラムを作るにはどのようにすればよいですか?
>>899 環境が分からないけど、WindowsならWinPcapを使うことになると思う。
UNIX系ならPF_PACKETとか。
901 :
デフォルトの名無しさん :2007/01/14(日) 04:53:28
>>877 俺も昔それで悩んだけど、acceptの前のselectで一秒ごとにwait抜けてキャンセル
フラグを見るようにしてる。ポーリングの効率の悪さと、キャンセル処理に最悪
一秒かかるけど、許容してる。
でも、今思うとWindowsはcloseで、Linuxはselectでキャンセル用FDを 用意しておけばいい気もする。 あと試してないけど、pollだとcloseで抜けたりするといいね。。
フラグ立てといて 他のスレッドがconnectしにいけばいいんでないか
待ち人が来たかと思って玄関を開けると、そこには殺人鬼が立っていた って感じだな。ネットワークってホラーだよな。 殺しのシグナルとか。
ソケットのラッパーみたいなカンジで、処理系に依存せずネットワークプログラミング ができるライブラリはありますか? グラフィックスでいうOpenGLみたいな。
それがソケットライブラリなのでは
>>907 もう一段階上のがホスィ。
けど、その解答からするとナイみたいね。Thx
思ったけど、そーなると、各言語のネットワークライブラリになるのかねぇ。フム
APR(Apache Portable Runtime)にそういうの入ってたような。 あと、Boost.Socketってまだ存在しないんだっけ?
それがJavaだってインターネット256倍本に書いてあったよ
もしかして自分で関数創れない香具師の溜まり場なのか?
はぁ? kansuu(
PPPの実装とIPチェックサムの計算ルーチンなら一度書いたことが有る。 でも普通はそういうものは一々書かないよね。
まぁ、実践を兼ねた趣味程度の小噺にしかならないな それ以上に行く人間は少ないんじゃないかと思ってる
917 :
デフォルトの名無しさん :2007/01/21(日) 22:59:11
Win32環境(VC8 + WinSNMP API)でモニタツールを作りたくMSDN読みながら格闘中ですが あまりの文献の少なさと難解な呼び出し手順に早くも敗北の悪寒。 早速詰まってしまいましたのでご助力をお願いします orz SnmpSendMsg()でSNMP_GETした後のパケットの一連の受信処理で何故か 1回置きにエラーが出ます。 このときアナライザでGetRequestパケットとそれに対して対象のターゲット 機器からResponseパケットが来る所までは確認しています。 擬似コード的にはこんな感じです { SnmpSendMsg(); //GetRequestパケット送出 Slppe(500); SnmpRecvMsg(); //ここでSNMPAPI_SUCCESSが返ってる = パケットは取得できてるはず SnmpGetPduData(); //VBLのハンドルを取得(ここでも常にSNMPAPI_SUCCESSが返ってる) SnmpGetVb(); //一つ上で取得したVBLから値を取得しようとすると一回おきにSNMPAPI_VBL_INVALID(VBLが変)が帰ってエラー /*値を取得したら表示処理*/ /*SnmpRecvMsg()で取得したハンドルを解放*/ } 上記のコードをループさせると、SnmpGetVb()を呼んだときに何故か一回おきで成功->失敗を繰り返します。 SnmpGetVb()に渡すVBLのハンドルはSnmpGetPduData()で取得していますが、これの戻り値は SNMPAPI_SUCCESSにも関わらず、VBLハンドルの値を見ると1を返したり0を返したりしています。 (0の時がSnmpGetVb()でエラー) なんかの呼び出し方が間違っているのでしょうが自分には判別できず頭を抱えてます。 間違いが判れば指摘下さい。 宜しくお願いします。
成功したときにはちゃんとSnmpFreeVbは呼んでいるかとか、 エラー時のエラーコード (GetLastError で得られるもの) とか、 その辺の話も書けばより真剣な質問としてとられると思います。
書いてあるようだが
920 :
デフォルトの名無しさん :2007/01/23(火) 16:05:57
お世話になります。 Windows XP にて。 IPヘルパAPI でNICの情報を取得するコードを書いています。 GetIfTable() ●複数NICがある場合、GetIfTable() で取得する順番は どのように決定されるのでしょうか? GetIfTable(&IfTable, &size, FALSE) IfTable.table[n]に格納される順番です。 ●あと、NICが一枚もない場合はGetIfTable()が失敗するのでしょうか? それとも取得テーブル数が0なのでしょうか? 事情によりNIC外せないので・・・実証できません。 ネットで情報をうまく探せずここに書き込ませていただきました。 よろしくお願いします。
> 事情によりNIC外せないので・・・実証できません。 まずこれをなんとかしろ。 手元で試せないのに「解決」したつもりになってどうする?
>>920 2つ目の件はデバイスマネージャで無効にしてみるとかはどうでしょうか?
XPなのでマシンの構成が変わったと判定されて面倒でしょうけどね w
GetIfTable() を使ったサンプルプログラムを見つけたのでちょっと試してみましたが、
私の環境では無効にしているNICは列挙されませんでした。
NICが1つも無い場合にどうなるかは、その環境でも GetIfTable() を試してみれば想像付くと思います。
>>922 >NICが1つも無い場合にどうなるかは、その環境でも GetIfTable() を試してみれば想像付くと思います。
イメージトレーニング?
924 :
デフォルトの名無しさん :2007/01/27(土) 17:09:34
ストリーム再生されてるオーディオファイルをダウンロードするにはどうすればいいの?
プロトコルに従えばいい。
Windows の SO_REUSEADDR 周りで教えてください。 以下の要件を満たすサーバを作りたいと思ってます。 [要件] 1. 他のプロセスがすでにポートを使っていたらエラーにしたい。 2. サーバを再起動してもすぐに同じポートを利用したい。 [やったこと] setsockopt で SO_REUSEADDR を指定して bind。 [結果] 他のプロセスがポートを利用していてもエラーにならない。 [質問] 検索すると以下のような記述を見かけました。 Windows では SO_REUSEADDR は使わないのが一般的なんでしょうか? 1. Windows では SO_REUSEADDR をつけると 他のプロセスがポートを利用していても bind できる。 2. Windows では TIME_WAIT 状態でも SO_REUSEADDR なしに普通に bind できる
このスレで質問しても答えられる奴いないよ 冷やかされて終わり
928 :
デフォルトの名無しさん :2007/01/30(火) 00:29:21
>>926 WindowsだってTIME_WAITは待たなきゃ駄目なのだよ。
でも、ちゃんと綺麗に終了すればREUSEしなくたって
へっちゃらなはず。
まあ大抵は汚く終わるから必要だけどな。
ソケットの仕様がツンデレ電話だから発生する。 「も、もう電話切っちゃうからね!」 とFIN送信したあと、 相手の 「ああ、おやすみ」(FIN,ACK)発言 を待つ。 (=TIME_WAIT状態) 相手から おやすみ を聞くまで ずーーっと待つ。 20分くらい無言の受話器を抱えて途中から涙目で待つ。 でもそのうち疲れて、そっと受話器を置く。
EXCLUSIVEなんちゃらってオプションがなかったっけ?
>929 FIN_WAITと混同してない?
FIN_WAITって状態じゃないの?
質問です。 winsockでTCPを使って複数のデータを送るプログラムがあるのですが sendのエラーチェックをしていないとWSAEWOULDBLOCKなどで送るデータに漏れが生じることがあります。 それは理解できるのですが、送信されたデータを受信するとデータの順序が変わっているときがあるのです。 TCPなら途中でデータの順序が入れ替わるようなことはありえないと思うので おそらくは送信する時点で既に順序が入れ替わっていると思うのですが、 順番にsendを呼び出しているのに、何故このようなことが起こるのでしょうか?
WSAEWOULDBLOCKになったデータを別のデータの後に再送したりしてないだろうな
>>933 とりあえずパケットダンプしてみて、何も無ければアプリケーション側のバグを疑って、それでもなんとも無ければOS変えてみる
むしろとりあえずブロッキングにして実験してみるのが手っ取り早いな
>>933 送信のときのデータを表示させて見てみたら?
アマチュアだけど、自分のときはそうしてるよ。
>>935 > とりあえずパケットダンプしてみて、何も無ければアプリケーション側のバグを疑って、
> それでもなんとも無ければOS変えてみる
どんな戦略だよw
ダンプがおかしかった場合(一番ありうるケースだと思うが)の対処はなしかよ。
100%アプリのバグだから良く見直せ。
>>933
939 :
933 :2007/01/31(水) 14:39:00
皆さんありがとうございます。 これまでもそういう事例がないもんかなと思って聞いてみたのですがやっぱりアプリの問題ですよね。 見直してみます。
>>938 一番ありうるケースがパケットダンプがおかしい場合なのに
100%アプリのバグなのか・・・
1パケットに複数のデータがまとまってて取り出すときにミスってるだけじゃねーの
こちらで聞いて良いのかどうか解りませんが、お解りになる方が おられましたら、お教えください。 自作の簡単なプロクシサーバーを作って、ちょっとしたフィルタリングを するソフトを作ろうとしています。 自作ソフトは、ブラウザーから受け取ったヘッダをもとにWANにアクセスして その情報を単純にブラウザーに返すだけのものです。 ブラウザーのプロクシ設定を自作ソフトに設定をして、普通にブラウジングが できるなりました。 この時に、text/htmlなどの任意のContent-Type以外はプロクシを使わず 直接アクセスさせるような方法というのはあるでしょうか? なにか案がありましたら、お教えください。 説明がわかりづらいようでしたら申し訳ありません。
ロードバランサのDSR構成とかがひょっとしたら参考になるかもしれない。
ありがとうございます。 DSR構成は・・・私には難しすぎて、すぐに理解ができませんでした。 もう少し、DSR構成を勉強してみます。
>>943 Content-Typeで判断できるかは分からないけど
PACファイルを使えばURL中の特定文字列から直接接続かProxyかに切り替えることができるよ
Content-Typeはアクセス「してから」サーバが返すんだから プロキシ経由でアクセスするかどうかの判断に使えるわけないだろ
それならプロクシのほうでヘッダだけもらってきて(HTTPのGETじゃなくてHEAD) Content-Type調べて該当のURLへアクセスしなおすようレスポンスを生成してそれを返せばいけるんじゃねーの?
と思ったが、プロクシ経由かどうかはブラウザ側で設定するからやっぱ駄目か。
昔は306 Use Proxy ってレスポンスコードがあって、このURLへのアクセスはこのプロクシ(あるいは直接)ね、 ということをプロクシやサーバが返せたんだけど、HTTP 1.0 になるときに無くなったんだよね。
初歩的な質問だとは思うのですが、良いサンプルが見つからないので 質問させていただきます。 WebブラウザからフォームデータをPOSTで受け取り、制御をする簡単なプログラム を書いています。Firefoxからフォームを送信した時、 (1)HTTPヘッダ、プロパティ類 (2)Content-Type (3)Content-Length (4)フォームデータ の順で、それぞれを送信しているように見えます。 こういった場合、firefoxから送られてきたデータがどこで終わったのかを判断 するにはどうしたらよいのでしょうか? 今はrecvが無くなるまで読み溜めているのですが、最後のrecvの後に不要な Timeout 待ちが発生してしまっています。 IE は (1)〜(4)を一気にまとめて送信してくるので何も考える必要は無かったのですが・・・ おそらく、どこでデータ完了とするかなどネットワークプログラムのセオリーがあると 思うのですが。 以上、よろしくお願いいたします。
RFC読めよ HTTPのやつだけで良いから
>>951 え〜っと、ちょっと今はプログラムを組んでいないので検証していませんが、
recvの返値を加算していって、受信したデータ量とContent-Lengthの
送信データ量が同じになったらrecvしないようにするのが吉だと思います。
>>950 HTTP/1.1になったときだよ。HTTP/0.9にはステータスコード自体なかった
>952 助言に従いRFC2068邦訳版を読んでみました(関係ありそうなところだけですが) >>要求の中でのメッセージ本体の存在は,要求のメッセージヘッダの中にContent-Length又 >>はTransfer-Encodingのヘッダフィールドを含むことによって通知される。 という文を読む取ることができましたが、先の例のとおり Content-Length 自体が3回目の recvで得られますので、それまでは本体の存在がわかりません。 これは Method が POST であれば、メッセージ本体があると信じて recv しにいくと 言うことでよいのでしょうか?
3回目のrecvとか、recvしにいくとか関係ないだろ。 バイトストリームで \r\n\r\n が来るまでがヘッダ。
某プロクシ経由でときどきリダイレクトが失敗してたのだが、そいつは
どうやら1回のrecvでレスポンスヘッダをすべて受信できると決めつけていたらしい。
その後プロクシを自作してみてわかった。もちろん自作のやつは
>>956 のようにしてる。
ただし世の中には\n\nを送ってくるサーバもあるので(それもamazonとかの
超有名どころ)考慮せざるを得なかったが
>956 ありがとうございます。 なんか色々迷走しちゃいましたが、けっきょくは\r\n\r\nまで読んで、 そこに Content-Length が含まれていれば、メッセージ本体を 取りにいくというようにしました。 いや、そんな真面目に実装する気は無かったんですが(ただの個人使用のユーティリティなんで) 有用なお話が聞けてよかったです。
プロトコルがどうこう言う前のSocketの話だな
>>957 > ただし世の中には\n\nを送ってくるサーバもあるので(それもamazonとかの
> 超有名どころ)考慮せざるを得なかったが
head ブロックの改行コードが全て LF ?
(CR なら1文字先読み LF で改行確定 || LF なら改行確定) のような処理になるんかな
そういえば昔 yahoo が lf だけで改行というヘッダを送ってきていたことがあったな・・・
>>960 Amazonとか楽天、Yahooくらいに有名なところで(何処だったか忘れた)
改行コードが全部LFと言うのを見たことがある。
その時は知識がなく、そんなものだと思っていた。
そのおかげで当時の自分のシステムが全部改行コードをLFだけに
してしまった。
>>961 ,962
PGP/MIME で同じように CRLF/LF 問題で嵌ったことあるけど、
HTTP でそういうことがあるのか…
昔http proxy書いてたとき、改行がCRだけのサーバーにも遭遇したよ。 だからCR/LF/CRLFの3種類全部対応するはめになった
受け入れは緩く、出すものは厳しく
つーか、書いてあるけどな、HTTPのRFCにも。
て言うか、ネットワークの基本だろ
>>965 それ以前に、会話の基本だったりするが...。
女の子は出すのも受け入れるのもガード固いほうがいいよね
>>967 改行はCRLFにする事って読んだ事はある。
CRやLFの奴もあるから注意と書かれているのでしょうか?
いや、マジ教えて。
3.7.1 Canonicalization and Text Defaults
VC2005でソケットを若干使っています スレッドでaccept関数を呼んでいるのですが、 プログラム終了時にスレッドを終了させたいと思っています。 その場合、acceptを終了させるにはどうしたら良いのでしょうか?
winsockなら、acceptしているリスニングソケットを閉じれば抜けられる
>>973 なるほど、ありがとうございました。試してみます。
975 :
580 :2007/02/06(火) 22:02:22
>>970 HTTPでLFなんてないよ。エンティティボディ内は自由というだけ。
19.3 Tolerant Applications ... >The line terminator for message-header fields is the sequence CRLF. >However, we recommend that applications, when parsing such headers, >recognize a single LF as a line terminator and ignore the leading CR.
>>971 それはメディアタイプ"text"のボディの話でヘッダには適用されない。むしろ
> a bare CR
> or LF MUST NOT be substituted for CRLF within any of the HTTP control
> structures (such as header fields and multipart boundaries).
とか書かれてるぞ。アマゾンアソシエイトが全滅しても弾かなくちゃいけないらしい
いまどきはあまり寛容に作りすぎるとHTTP Response Splittingとか HTTP Request Smugglingとかで足元をすくわれかねないし。
979 :
デフォルトの名無しさん :2007/02/06(火) 22:57:36
>>977 パースじゃなく生成しちゃだめって意味なのかな?
>>979 プロトコルとしては、ヘッダの改行は必ずCRLF。それ以外はダメ。
高可用アプリケーションは、それ以外が送られてきても受け付けるべき。
と書かれている。
CR,CRLF,LFはそういう環境のPCがあるからありうる可能性もある。 HTTPに限らなければ、メッセージの途中で種類が切り替わることもあったし、 LFCRという腐った物を送りつけるものもある。
ヘッダにPCの環境とかふつー関係ないけど > HTTPに限らなければ、メッセージの途中で種類が切り替わることもあったし、 HTTPでもhtmlの途中で改行の種類が変わるとかふつーにあるぞ。 ユーザーがアップロードしたhtmlと埋め込まれた広告で改行の種類が違うとか。
htmlの中の話なんてどうでもいいんだ。プロトコルの話をしてるんだ。
>>971 にあるようにエンティティボディもプロトコルの一部
>>981 そういうのもあるんだ。
CR LF x [2nd char]
CR 2 1 1
LF 1 2 1
改行個数がこうなるわけね。
>>975 section 3 は entity body と関係ないよ。
結局CR,LF,CRLFをパースできて、CRLFを生成すればOK?
LFCRもな
途中でコード切り替わりもありえるだと 1改行→CRLF 固定 1改行→CR (コード切り替わりに続いて) 1改行→LF とかの区別つかないのか。 後者の改行1つロストされるのはしかたないよね…
そろそろ次スレを
関連リンクは
>>3-6 のままでいいですか?
C++でssh通信を行いたいのですが、そのようなライブラリはありませんか?
>>990 etherealはテンプレから消したほうがいい。
両方書いておけばいい。
出たよ、問題先送り野郎。 「Yes? or NO?」 「あ、あうぁぅ・・・ い・・・の・・・ ぉ、ぉ、オア!」 って感じだなオイ
996 :
デフォルトの名無しさん :2007/02/09(金) 00:27:45
>>995 「あんど」という解決を思いつけないのか。
問題先送り野郎といって安堵しているんじゃねぇ。
松竹梅
EtherealってWiresharkって名前に変わってたのか。 Etherealのページしか見てなかったから知らなかった。 どおりで去年からずーっと更新がないわけだ。 リンクはWiresharkの旧版というのを明記するか、消したほうがいいでしょう。
>>998 使ってるんだから消すな という声も多いよ
∩___∩ | 丿 ヽ / ー ー | レスを読んでも理解できませんので | ( _●_) ミ ROMってます 彡、 ヽノ ,,/ / ┌─┐´ |´ 丶 ヽ{ . }ヽ r ヽ、__)ニ(_丿 ヽ、___ ヽ ヽ と____ノ_ノ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。