質問: c言語でtcpの3way handshake (c言語)linuxのpacket socket(socket(af?packet, sock_dgram, htons(eth_p_ip))) を使ってtcpの3way handshakeをosのプロトコルスタックに頼らず自力で挑戦しています。 rfcやほかの技術本をよんでipヘッダやtcpヘッダの実装は一応できたのですが、肝心のsynパケットを送った後のackパケットが返ってきません。 wiresharkでは問題なくsynパケットと認識できているのですが、きっとどこかに不備があるはずです。 そこでc, c++ javaでもいいのでこのプログラムの実装例が載っているサイトなどを教えてください。(英語でもかまいません)
回答: opensouceでしたら、linuxよりbsdのネットワークスタックが読みやすいと 詳しい人に聞いたことがあります。(自分ではまだ読んでません、すんません) それよりも、送信したsynパケットのダンプデータでも貼ってみてはいかがでしょう? スクリーンキャプチャを撮って画像添付するとか。 わかる方が間違いを指摘してくれると思いますよ。私も見ます。 また、対向のサーバはそのsynパケットに対して正しくackを返せるように 調整されているのでしょうか? そのポートはサーバでオープンされていますか? そのポートをtcpでlistenしているデーモンは可動していますか? 対向サーバ上のwiresharkでは、synパケットは観測できていますか? その辺がokなら、やはりパケットのどこかに間違いがあるのだと思います。 見てみたいですね。