トップページ⇒tech
1001コメント319KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2012/10/31(水) 17:05:08.29
主にソケットに関しての質疑応答スレッドです。

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

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

前スレ
ネットワークプログラミング相談室 Port28
http://toro.2ch.net/test/read.cgi/tech/1334736934/

関連スレ
ネットワークプログラミング雑談
http://toro.2ch.net/test/read.cgi/tech/1235800707/
0048デフォルトの名無しさん2012/11/16(金) 14:24:37.29
もう、自分が何を言ってるのかもわからない状態。
0049デフォルトの名無しさん2012/12/15(土) 16:40:50.41
初歩的な質問かと思いますがよろしくお願いします。環境はWindows7, Visual c++2010です。

proxyサーバー越しにネットワークに接続するにはどうすれば良いでしょうか。

現在は、単純にSOCKETを作って、サーバーにconnectしてGET メッセージを送るという方法を使用しています。
しかし、今後はproxyサーバー越しに、ネットワークに接続する必要が出来ました。

proxyサーバーを介する場合、接続先サーバーをproxyサーバーにして、本当に接続したいURLをGET以降に
記述したらいいということまではわかりました。
しかしユーザー名とパスワードの必要なproxyサーバーのため、usernameとpassをどのように設定すればよいか
解りませんでした。
ユーザー名とパスワードを入れずにそのまま接続すると、やはり HTTP 407 が帰ってきます。
0050デフォルトの名無しさん2012/12/15(土) 16:59:22.13
プロキシサーバを構築された方に相談して下さい。
第三者には認証の仕組みが解らないのでアドバイスが困難です。
0051デフォルトの名無しさん2012/12/15(土) 21:59:27.49
>>49
IE とかなら接続できるんでしょ?
なら、wireshark とかでパケット見ればいいんじゃね。
0052デフォルトの名無しさん2012/12/19(水) 23:17:11.99
rfc 2617 を読め、とマジレスしてみる。
0053デフォルトの名無しさん2012/12/22(土) 00:19:44.92
生データからアプリケーションプロトコルをデコードしたいんだけどよくわからない
クラスでプロトコル定義するのにどういう風に設計したらいいのだろう
単純にunpackして分割してみたりはした
0054デフォルトの名無しさん2012/12/28(金) 23:20:36.44
おーい、エスパー
0055デフォルトの名無しさん2012/12/29(土) 20:15:18.48
無理!
0056デフォルトの名無しさん2012/12/29(土) 23:54:31.53
エスパーじゃないけど, 挑んでみる

> 生データからアプリケーションプロトコルをデコード
暗号買得と一緒で, パーターン解析して頻度計算すれば
運が良ければヘッダーくらいは抽出できるかも知れない

> クラスでプロトコル定義する
インタプリタパターンってのが王道らしいぞ

yacc とか bison とか(じゃなくてもいいけど, オートマトン
ジェネレータ的なもの)使えばもっと楽できるかも

おそらく, 全然, 別の話なんだろうな w
0057デフォルトの名無しさん2013/01/01(火) 01:49:27.21
エスパーとかいうまでもなく言葉通りパケットの生データから中身を解析するって話だろ
tcpdumpとかwiresharkみたいに
オブジェクト指向の言語で同じことするのに設計というか実装するのに悩んでるんじゃないの?
0058デフォルトの名無しさん2013/01/01(火) 09:43:35.59
買得w
0059デフォルトの名無しさん2013/01/08(火) 12:04:02.25
区
0060デフォルトの名無しさん2013/01/08(火) 12:10:55.49
上ミス

IOCPでUDPの送受信って出来ないのかな
ネットでサンプル探してるがTCPしか見つからん
自分でいろいろ組んでみたんだけど送信した後にGetQueuedCompletionStatusがエラー返してくる
受信する相手がいる場合はエラーにならない。相手がいない場合だけエラーになる。
もしかしてTCPみたいに接続が確立されてないと使えないのかな?
0061デフォルトの名無しさん2013/01/08(火) 12:24:56.58
>>60
できる
ソケットのみで送受信できるようにbindしておくよろし
0062デフォルトの名無しさん2013/01/08(火) 12:39:08.79
OSはまあ関数名でわかるけど、
(AIXもIOCPはあるんやで)
どんなエラーか書いてね。
それから相手ポートが閉じてる時にどうなって欲しいの?
0063デフォルトの名無しさん2013/01/08(火) 14:38:31.89
受信もしてるからbindはしてる
返ってくるエラーはERROR_PORT_UNREACHABLE
相手がいてもいなくても、ただ単純に受信待ちしつつ周期でデータ送りたいだけ
0064デフォルトの名無しさん2013/01/08(火) 14:54:34.79
port unreachableならTCPでも同じ。
コード書いてリトライしてください。
0065デフォルトの名無しさん2013/01/08(火) 15:18:10.84
そうかー。とりあえずエラー無視して続行しても大丈夫みたいなんだよね。
IOCPのハンドル閉じるまで処理巻き戻しとかしなくていいんであれば無視でいいかな・・・
0066デフォルトの名無しさん2013/01/13(日) 01:43:26.26
ローカルなファイルへの書き込みをするときのように
write(client)からclose(client)の間にfflush(client)をするべきでしょうか?
0067デフォルトの名無しさん2013/01/13(日) 01:56:39.27
そうまでして省く必要があるのか?
0068デフォルトの名無しさん2013/01/13(日) 13:40:48.75
close()はflush()もしてくれるだろ
0069デフォルトの名無しさん2013/01/13(日) 15:03:21.83
そもそもsocketにbuffer flushは無いだろ
気にせせずcloseして帰り値は捨てて良い
ネットワークアプリケーションは信頼性が低いというのは、知識に欠けるユーザーでも信頼性が低いと知ってるから、エラーがでてもあまり気にしない
0070デフォルトの名無しさん2013/01/13(日) 15:10:22.41
>>69
>気にせせずcloseして帰り値は捨てて良い

こういう奴が作るネットワークアプリケーションの信頼性は低いんだろうな。
0071デフォルトの名無しさん2013/01/13(日) 15:50:01.05
すいません
結局のところバッファの掃き出しはどうすべきなんでしょうか?
0072デフォルトの名無しさん2013/01/13(日) 16:44:12.28
プロトコルで終わりが決められてるんでもなけりゃ
いくらフラッシュしたところで閉じるまでにまたデータ来るかもしれんし
閉じる必要があるときに閉じるだけでいいだろ。
0073デフォルトの名無しさん2013/01/13(日) 16:49:39.38
気になるならするべき
0074デフォルトの名無しさん2013/01/13(日) 16:53:04.62
>>72
> いくらフラッシュしたところで閉じるまでにまたデータ来るかもしれんし

意味がわからん。
ひょっとして受信側で flush するとかしてるのか?
0075デフォルトの名無しさん2013/01/13(日) 18:45:01.08
その前にflushするAPIなんてあったか?見たこと無いぞおれ
0076デフォルトの名無しさん2013/01/13(日) 18:55:33.43
flush する API じゃないけど, setsockopt で SO_LINGER と
TCP_NODELAY を突くくらいかなぁ
0077デフォルトの名無しさん2013/01/13(日) 19:01:28.37
あと, 到達確認的な意味だと
送り側 shutdown(..., SHUT_WR)
|
v
受け側 if (read(...) == 0) { shutdown(..., SHUT_RDWR); }
|
v
送り側 if (read(...) == 0) {shutdown(..., SHUT_RD); }
とか, かなぁ
0078デフォルトの名無しさん2013/01/14(月) 02:36:54.80
クライアントのソケットで、同じポートにbindしてもエラーにならないんだけど、これってやってもおk?
下のコードの後、別々のところにconnectしても普通に通信続けられるみたいだけど。
仕様上の理由でポート固定なんだ。

local.sin_port = htons(12345);

SOCKET sock1 = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
SOCKET sock2 = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

int on = 1;
setsockopt(sock1, SOL_SOCKET, SO_REUSEADDR, (char*)&on, sizeof(on));
setsockopt(sock2, SOL_SOCKET, SO_REUSEADDR, (char*)&on, sizeof(on));

bind(sock1, (sockaddr*)&local, sizeof(local));
bind(sock2, (sockaddr*)&local, sizeof(local));
0079デフォルトの名無しさん2013/01/14(月) 03:47:55.15
ok
0080デフォルトの名無しさん2013/01/14(月) 16:57:55.78
>>78
TCPのstremは、
<src addr, src port, dst addr, dst port>
の四つ組で識別される。つまりひとつでも違えば別のstream。
0081デフォルトの名無しさん2013/01/15(火) 21:33:07.75
>>79, 80
そういうことか、わかった。
0082デフォルトの名無しさん2013/01/15(火) 22:23:39.87
ひょっとしてTCP/IPの勉強をしても
socketプログラミングにあまりはやくに立たないんですか?
0083デフォルトの名無しさん2013/01/15(火) 23:36:48.62
役に立つわ
0084デフォルトの名無しさん2013/01/16(水) 02:42:24.01
甘利早くも役に立たない。ちくしょ〜ユーロ円が台無し
0085デフォルトの名無しさん2013/01/16(水) 03:47:25.08
>>82
TCP/IPの知識が無ければ、Socketを使ったTCP/IPプログラムでトラブルが
発生したときに、原因を究明することは出来ないだろうな。
0086デフォルトの名無しさん2013/01/16(水) 07:36:48.74
>>84
計算しょうか
0087デフォルトの名無しさん2013/01/18(金) 14:02:30.24
他人の通信の傍受ってどうやるんですか?
0088デフォルトの名無しさん2013/01/18(金) 14:04:29.67
>>87
他人の通信を傍受すればできます。
0089デフォルトの名無しさん2013/01/18(金) 14:24:29.60
>>87
スイッチのバッファをあふれさせる
0090デフォルトの名無しさん2013/01/18(金) 18:00:48.87
>>84
ニューロコンピュータ?
0091デフォルトの名無しさん2013/01/18(金) 20:20:39.65
サブネット内ならARP PROXYでトラフィックを誘導する
0092デフォルトの名無しさん2013/01/18(金) 21:19:42.25
>>87
他人の背後で画面を覗き込む。
0093 ◆wSaCDPDEl2 2013/01/18(金) 23:02:26.89
てst
0094 ◆wSaCDPDEl2 2013/01/18(金) 23:04:16.41
2chのdat読み込むとトリップ付けたときの名前が</b> ◆wSaCDPDEl2 <b>のように<b>タグで囲まれてるんだけど
普通<b> ◆wSaCDPDEl2 </b>じゃないですか?
なんで逆になってるんですかね?
0095デフォルトの名無しさん2013/01/19(土) 00:22:28.22
</b>したいからです。
0096デフォルトの名無しさん2013/01/19(土) 00:53:03.70
名前は<b>タグで太字表示になっている。
トリップは標準フォントになっている。
で、名前をつけないでトリップだけつけるから名前の<b>タグを
閉じるために頭に</b>がつけてあるんだと思われる。
0097デフォルトの名無しさん2013/01/19(土) 00:55:49.45
なるほど
わかりましたありがとうございます
0098デフォルトの名無しさん2013/01/19(土) 09:04:34.79
>>90
県央の土権屋のことだろう
0099デフォルトの名無しさん2013/01/19(土) 12:10:58.99
マイiPhoneからのみアクセスを許可したサーバーを構築したいのですが
マイiPhoneを識別するにはどうすれば良いとおもいますか?
0100デフォルトの名無しさん2013/01/19(土) 12:47:33.82
つ認証
0101デフォルトの名無しさん2013/01/19(土) 12:48:37.24
証明書を発行してインストールする
0102デフォルトの名無しさん2013/01/19(土) 13:15:28.65
sslでユーザ証明書に途中からする時って脆弱性なかったっけ。
0103デフォルトの名無しさん2013/01/19(土) 16:48:41.16
>>102
> 途中からする

kwsk
01041022013/01/19(土) 21:46:04.98
>>103
CVE-2009-3555 SSL renegotiationによる脆弱性のこと。
apache2.2ではSSLInsecureRenegotiation onにしとかないと、あるディレクティブだけのユーザ証明書使えなかった。
このオプションはInsecureとあるように、脆弱性を受け入れられる場合しか使えない。
今、どうなってるのかは知らない。
0105デフォルトの名無しさん2013/01/19(土) 21:51:29.65
>あるディレクティブだけのユーザ証明書

この考え方自体がSSL/TLSに対する挑戦だな
01061022013/01/19(土) 21:58:42.35
>>105
どこでもユーザ証明書を要求してれば問題なかったのかな?

とっくに直ってるか。
Changes with Apache 2.2.15 March 5, 2010
SECURITY:: CVE-2009-3555
0107デフォルトの名無しさん2013/01/19(土) 22:03:23.73
やけに古い話だな。
RFC 5746に対応してない糞クライアントなら今も問題になりうるが、
元のお題が個人利用だし想定する必要はない。
01081022013/01/19(土) 22:36:58.74
>>107
その仕事しに客先行ったのは最近なんだけどなwセキュリティパッチくらいあてて欲しい。
0109デフォルトの名無しさん2013/01/20(日) 18:31:59.78
ローカルホストのアプリが送信してるデータ、たとえばブラウザのGETメソッドとそのヘッダーとデータ見てみたいんですが
ブラウザのプロクシをローカルホストに設定するなどしないと不可能ですか?
プロクシを設定するないアプリの通信を監視するにはどうすればいいんでしょうか?
0110デフォルトの名無しさん2013/01/20(日) 18:38:02.67
wiresharkとかでみれば?
0111デフォルトの名無しさん2013/01/20(日) 19:05:20.00
>>109
UAみたいだことかなら、ncで適当なポートにサーバ立てて受け付ける。やりとりが見たい時はwiresharkかtcpdump。ncがteeみたいに使えたら便利だし、既存なのかな。
0112デフォルトの名無しさん2013/01/20(日) 19:08:50.93
>>110,111
ありがとうございます試してみます
まだはじめたばかりなんですがネットワークはデバッグが大変ですね
0113デフォルトの名無しさん2013/01/20(日) 19:45:29.72
>>112
キャプチャで簡単に全部見えるのだから、標準的なデバッガのない内部バスなんかより良いと思うのだが。
0114デフォルトの名無しさん2013/01/21(月) 08:29:05.87
禿
0115デフォルトの名無しさん2013/03/08(金) 00:14:52.55
Wiresharkで特定ポート宛のTCP SYNを捕まえて処理するDissectorを書こうと
しているんだが、"tcp.port"のDissectorTableに登録してもESTABLISHED以降の
パケットしか届かない。
SYNを処理するには"ip.proto"に登録して自分でポート番号を判断するしかないんだろうか?
もしそうだとして、TCPヘッダのデコードも自分でやらなきゃならないのかな。
0116デフォルトの名無しさん2013/03/08(金) 14:09:47.53
>>115
SYNのビットを見りゃいーじゃん
0117デフォルトの名無しさん2013/03/08(金) 14:10:54.12
ごめん、勘違いしてた
0118デフォルトの名無しさん2013/03/25(月) 14:31:30.15
TCPで100バイトのデータを送ろうとしています。
50バイトを送ったところで回線に不具合が起きて自動的にセッションが張りなおされました。
この場合、データの続きは51バイト目から送られますか?1バイト目から再送されますか?
0119デフォルトの名無しさん2013/03/25(月) 14:51:51.28
どこまでACKもらったかによるのでは
0120デフォルトの名無しさん2013/03/25(月) 15:05:59.94
つまりACKを送る前で切れてると
でもACKって回線が切れる前に送ったかどうかわからないよね??
0121デフォルトの名無しさん2013/03/25(月) 15:07:07.56
あ
反応無かったら何度も送るか
つまり51バイト目からになるのかな
0122デフォルトの名無しさん2013/03/25(月) 15:10:02.34
間違えたわ
ACKは古いセッションに送るのか
新しいセッションはどこまで送れてるのかわからないのに51バイト目から再開してくれるのかな??
0123デフォルトの名無しさん2013/03/25(月) 15:22:30.34
不明な時は前から送るだろうし、受け取った方は同じもの2つ受けても
大丈夫なように動作するだろう。
0124デフォルトの名無しさん2013/03/25(月) 15:27:16.58
セッションIDって通信内容に含まれてるの?
じゃないと前のセッションがどれかわからないよね?
0125デフォルトの名無しさん2013/03/25(月) 16:17:29.23
どのレイヤーの話なの?
0126デフォルトの名無しさん2013/03/25(月) 16:40:27.67
初心者すぎてよくわからん
途中で何かトラブルがあった場合、別のポートから続きが送られてくることもあるって理解で合ってますか?
0127デフォルトの名無しさん2013/03/25(月) 16:45:06.67
そのポートってのは何だよ
0128デフォルトの名無しさん2013/03/25(月) 16:48:13.00
>>126
あってません
もういちど、自分の手で、続きを送れ
0129デフォルトの名無しさん2013/03/25(月) 16:56:26.81
サーバと一般のPCの間のインターネットの通信で
回線が不安定になっても自動的に繋ぎなおされることは無いってこと?
0130デフォルトの名無しさん2013/03/25(月) 16:57:01.53
TCPの中の人が何を何度再送してようと、それはアプリから見えない水面下のことなので、気にする必要ない
100バイト送ったなら100バイト届くし、その間にポートが変わるようなことはない

TCPの中の人がギブアップするようなトラブルが起きたら、切断されてエラーになる
そのようなエラーが起きたときは、自動的に接続が貼り直されることはないし、自動的に別のポートから続きが送られることもない
0131デフォルトの名無しさん2013/03/25(月) 17:01:09.78
それだ
ありがとうございました
0132デフォルトの名無しさん2013/03/25(月) 17:02:33.34
そのレベルの話だと見破れる>>130スゲー
0133デフォルトの名無しさん2013/03/25(月) 17:04:07.10
スゲーとか言うなよ情け無い
0134デフォルトの名無しさん2013/03/25(月) 17:04:33.62
じゃあ繋ぎっぱなしのTCPってクライアントにIDを割り振らなくてもセッションから個人を識別できるってことか
0135デフォルトの名無しさん2013/03/25(月) 17:13:22.43
せめてネスペを取ってから来て
0136デフォルトの名無しさん2013/03/25(月) 17:25:03.88
そんなんじゃ NHN に雇ってもらえないぞ
0137デフォルトの名無しさん2013/03/25(月) 20:54:31.05
>>134
性善説ならば
0138デフォルトの名無しさん2013/03/25(月) 20:55:50.77
最近はTCPのGraceful Restartができるらしいが。
0139デフォルトの名無しさん2013/03/25(月) 22:07:05.43
MMORPGの作り方についての質問はここでいいですか?
0140デフォルトの名無しさん2013/03/25(月) 22:25:49.90
ゲ作板のほうがいいんじゃないかね
0141デフォルトの名無しさん2013/03/26(火) 00:10:17.03
あそこ過疎だし厨房しかいないし機能してないじゃん
板名に「技術」って付いてるけとその実態は技術板じゃなくて企画板じゃん
0142デフォルトの名無しさん2013/03/26(火) 05:07:38.28
ってことはここでいいってことだな
0143デフォルトの名無しさん2013/03/26(火) 05:57:20.66
>>142
まぁ、MMOのネットワーク限定ならな・・・
0144デフォルトの名無しさん2013/03/26(火) 20:25:12.04
質問ですMMORPGの通信はどうやってやってるんですか?
0145デフォルトの名無しさん2013/03/26(火) 20:46:14.28
本屋さんにそういう本が売ってるから買ってきなさい
アマゾンでも楽天でもいいぞ
0146デフォルトの名無しさん2013/03/26(火) 22:09:02.13
>>144
MMORPG でググレば、いくつか解説サイトは見つけられるけど、
いったい何が分からないの?

・dyama's web page: MMORPG/Protocol
 http://dyama.chaosnet.org/index.cgi?MMORPG/Protocol
  -- ごく簡単な解説(日本語)

・Description of the game protocol
 http://code.google.com/p/galaktia/wiki/Protocol
  -- MMORPGをベースにしたゲームプロトコルの詳細な解説
    Pythonによるサンプルコード付き(英語)

・MMORPG プロトコル エンコードの解読
 http://ja.softuses.com/92917
  -- MMORPGプロトコルをリバースエンジニアリングする技法を解説(日本語)

TCPソケットの経験があって技術英語の読解力があればそれほど難しくないから、
高校生レベルの課題のように見えるが.....
0147デフォルトの名無しさん2013/03/29(金) 22:10:35.43
ここの住人は、メールソフトは既存のソフトを使うのか。あるいは、
自作するのか。その辺が知りたいな。
0148デフォルトの名無しさん2013/03/29(金) 23:14:22.33
>>147
> メールソフトは既存のソフト
ユーザーエージェントのことでOK?
だったら, 既存のものを使う
# 自分用にカスタマイズできればそれでOK
■ このスレッドは過去ログ倉庫に格納されています