3ウェイハンドシェイクの流れを変える方法

このQ&Aのポイント
  • OS「fedora 5」、言語「C」で3ウェイハンドシェイクの流れを変える方法について学びたい
  • 3ウェイハンドシェイクの流れを制御フラグを変更することで変えることは可能だが、具体的な方法を知りたい
  • 参考書やソケットプログラミングについての調査を行っても、3ウェイハンドシェイクの流れを変える方法についての情報が見つからない
回答を見る
  • ベストアンサー

3ウェイハンドシェイクの流れを変える方法

OS「fedora 5」、言語「C」で、ソケットプログラミングを使い、3ウェイハンドシェイクの流れ <3ウェイハンドシェイク> クライアント     サーバ  syn    →→→        ←←← syn/ack  ack    →→→ これを クライアント     サーバ   syn     →→→         ←←←  rst         ←←←  syn syn/ack   →→→         ←←←  ack の流れにしようと考えています。 参考書を読んだり、ソケットプログラムのことについて調べたのですが、お手上げ状態です。 コントロールフラグの変更の仕方はどうやるのでしょうか? また理論上は3ウェイハンドシェイクを変えることきているのですが、実際は流れ自体変える事は不可能なことなのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • GOOD-Fr
  • ベストアンサー率32% (83/256)
回答No.3

なにをしたいのかさっぱり意味不明ですが、 > クライアント     サーバ >  syn     →→→ >         ←←←  rst SYN を送ってきたクライアントにいきなり RST を送り返したら、セッションがクローズするのはご存知なんですよね?クローズしたセッションに SYN を送りつけてもなにも起こらないのは自明ですから、こういうプログラムは動作しないはずです。 仕様どおりに動いていないクライアントを攻撃したい、ということであれば、それはご自由ですけど。 > 参考書を読んだり、ソケットプログラムのことについて調べたのですが それは、参考書が悪いんでしょうし、調べ方が悪いのでしょう。 少なくとも、私の手元にある本にはプログラムのしかたも、サンプルプログラムも、TCP の仕様もちゃんと書いてあります。(だから、わざわざ調べて回答できるわけで) 当然、今回質問されている手順は TCP の標準手順ではないので、「普通に」プログラムしたのでは作ることができませんが、ちゃんとした本にはそういう場合のこともちゃんと書いてあるものです。このあたりの仕様は 20年以上も変わってないので、「いい本」を見つけられるよう努力してください。 > 実際は流れ自体変える事は不可能なことなのでしょうか? とりあえず、質問する前に RFC ぐらいは目を通しましょう。これなら本を買うお金がなくてもなんとかなるでしょ。

その他の回答 (2)

  • eroermine
  • ベストアンサー率18% (83/444)
回答No.2

root になって RAW Packet は出せましたか? 少なくとも syn flood 攻撃プログラムは作れないと第一歩が。

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

私が回答できるわけではないのですが、 どうしてそのようなことをなさりたいのでしょうか? さしつかえなければ、その理由を教えていただけませんでしょうか。

関連するQ&A

  • WiresharkのFlow Graph

    現在WiresharkのFlow Graphという機能を使用して、クライアント端末がサーバー端末へのTCP通信での3ウェイハンドシェイクのパケットやりとりを観測したいと思っています。 次のようなパケットをモニターしました。 |Time | 192.168.1.111 | | | | 192.168.1.222 | |6.402 | PSH, ACK - Len: 1212 |Seq = 1 Ack = 1 | |(6057) ------------------> (5000) | |6.606 | PSH, ACK - Len: 1212 |Seq = 1 Ack = 1 | |(6057) ------------------> (5000) | |6.835 | PSH, ACK - Len: 1212 |Seq = 1 Ack = 1213 | |(6057) <------------------ (5000) | |7.039 | ACK | |Seq = 1213 Ack = 1213 | |(6057) ------------------> (5000) | |7.150 | ACK | |Seq = 1213 Ack = 1213 このパケットのやりとりを観ていて思ったのですが、TCP通信は3ウェイハンドシェイクは SYN--->SYN ACK---> ACK という順序でのパケットのやりとりをクライアントとサーバー間で行うと思っていたのですが、 PSH, ACK ----> PSH, ACK ----> ACK ----> ACK このような順序になっているように思うのですが、これはなぜなのかご教授頂けないでしょうか? どうぞ、よろしくお願い致します。

  • 通信フローの数をsyn,ack,rst等のフラグで区別できるツールご存知ないですか。

    こんにちは。 RubyもPHPもPerlも使わず、C言語でパケットデータを測量したいと考えています。目的はsynフラグが立っているパケットデータを含む通信フローの数のみの取得です。ackやrstの立っているパケットデータは数えないで、synフラグのみの通信フローを取得したいと考えています。 このような通信フローの数を数えてくれるツールをご存知でしたら教えて頂けないでしょうか。 環境はCentosです。どうぞよろしくお願いします。

  • windowsでSYN/ACKを返すプログラム

    以下の現象が発生して、大変困っております。 <現象> クライアントからhttpsアクセスをしようとして、 ブラウザに「ページが表示できません」エラーとなることがある。 <調査状況> クライアント、OS上でWireSharkを仕掛けて、TCPの通信をキャッチしたところ、 問題が発生した通信は「SYN」がOSまでは来ているが、 「SYN/ACK」が返ってきていない。 <環境> サーバ:windows2003server,Apache クライアントOS:WindowsXP <質問内容> クライアントからの「SYN」要求に対して、「SYN/ACK」を返すのは、具体的に何が返しているのでしょうか。 (windowsのソケットプログラム?) また、その調査方法があれば教えて頂けないでしょうか。 よろしくお願い致します。

  • httpsのページがIE 7で表示できません

    httpsのページがIE 7で表示できません。 表示できないページは、apache version 2.2系で自分で建てたサーバーです。 オレオレ証明書に使ったopensslのversionは0.9.8e, private keyの鍵長は、 1024でも2048でもだめでした。 また、mozilla firefox 3.0では同様に証明書の警告が出ますが、 例外設定をすることで表示されることを確認しています。 IE 7の現象としては、 "この Web サイトのセキュリティ証明書には問題があります。" - (A) と警告が出て、閲覧を続行すると "Internet Explorer ではこのページは表示できません" - (B) といわれます。 このとき、wiresharkでパケットのダンプを見てみると、 (A), (B)の通信が両方とも以下のようなシーケンスになっていました。 1, client -> server : tcp syn 2, server -> client : syn, ack 3, client -> server : syn 4, client -> server : client hello 5, server -> client : server hello, change cipher spec, Encrypted Handshake message 6, client -> server : change cipher spec, encrypted handshake message 7, client -> server : FIN ACK 8, server -> client : ACK 9, server -> client : encrypted alert 10, server -> client : FIN ACK 11, client -> server : RST ACK [ client: IE 7 ], [ server: apache22 ] 7の段階でIEからFIN ACKを送っているためページを表示できないのだと思うのですが、 なぜFIN ACKをおくっているのかが分かりません。 問題を解決したいのですが、はまってしまって困っています。 プロトコル・原因の調査方法等々、何か知っていることがありましたらご教授ください。 よろしくお願いいたします。

  • ソケット通信の送受信遅延-02 その後

    前回のNo.1031658 「ソケット通信の送受信遅延」に追加させてもらいます その後、プロトコルアナライザで現状調査を行い以下の現象を確認しました ◇正常時  サーバがメッセージ送信  TCPヘッダ内フラグ ACK:1, PSH:1 + 送信データあり ↓  0.2msec前後で クライアントが 返信  TCPヘッダ内フラグ ACK:1, PSH:1 + 返信データあり ↓  10msecで サーバが送信  TCPヘッダ内フラグ ACK:1, PSH:1 + 送信データあり ↓  0.2msec前後で クライアントが 返信  TCPヘッダ内フラグ ACK:1, PSH:1 + 返信データあり ↓          以下繰り返り ◇不具合時  サーバがメッセージ送信  TCPヘッダ内フラグ ACK:1, PSH:1 + 送信データあり ↓  0.2msec前後で クライアントが 返信  TCPヘッダ内フラグ ACK:1, PSH:1 + 返信データあり ↓  10msecで サーバが送信  TCPヘッダ内フラグ ACK:1, PSH:1 + 送信データあり ↓  約130msec前後で クライアントが 返信  TCPヘッダ内フラグ ACK:1, PSH:0 + 返信データなし ↓  約250msec前後で クライアントが 返信  TCPヘッダ内フラグ ACK:1, PSH:1 + 返信データあり ↓ といった状況です どう解釈すれば良いのでしょうか 遅延の原因はソケットなのかそれ以外なのでしょうか?是非アドバイスをおねがいします。

  • FINパケット、RSTパケットが返却される理由?

    アパッチのヘルスチェックにて、パケットをみました。 シーケンス番号を追っていきましたが、下記のような 通常ではない動作がありました。 <ケース1> (1)サーバからのHTTPのGETに対して、クライアントがFIN.ACKパケットを返却する。 (2)サーバがFIN.ACKパケットをクライアントに送る。 (3)クライアントからRSTパケットが返却される。 ※RSTパケット内にて、broken tcpとの記載あり <ケース2> (1)サーバからのFIN.ACKパケットに対して、クライアントからRST.ACKパケットが返却される。 ・質問1 それぞれについて、正常な動作とはおもえないのですが、 異常でしょうか? ・質問2 FIN.ACKパケット又はRSTパケットが返却されるのはどんな場合が想定されるのでしょうか? ・質問3 FIN.ACKパケット→RST.ACKパケットは異常な動作でしょうか? よろしくお願いします。

  • HTTP コンテンツの要求

    UNIX環境上でC言語を用いてプログラミングしているのですが、完全に詰まってしまいました。 実現したい動作は、クライアントがサーバーにURLを送ってコンテンツを要求するという至って単純なものです。 現在実装が済んでいるのは、クライアントとサーバーがソケット通信をして、例えば以下のような文字列をクライアントからサーバーに送信できるようになりました。(ホスト名は適当) GET /index.html HTTP/1.1 Host: www.host.jp: 8080 調べたところ、サーバーにこの要求を渡せば対応するコンテンツが返ってくる、らしきことが書いてあったのですが、クライアントもサーバーも同じコンピュータ内にあり、ソケットでクライアントとサーバーを接続しただけで全く関係のない場所にあるコンテンツを取得できるとは到底思えません。 一体どうすればコンテンツを取得できるのか、全くわかりません。初歩的な質問かと思いますが、分かる方教えてください。

  • TCP/IPでRST(リセット)フラグのデータって?

    TCP/IPのデータで質問です。 パソコンのサーバーと無線ハンディをTCP/IPで通信しています。サーバー側は無線ハンディからの要求に応えるプログラム(Visual Basic,Winsockコントロール使用)が起動されています。 このサーバーに無線ハンディ30台(もっと多いこともある)から,いっせいに接続要求を出すのですが,この接続に失敗するハンディがあったりします。 このときLAN上のデータを見てみると,パソコン側からRST(リセット)フラグ(強制切断)のデータが出ていました。どうやらこれが接続に失敗している原因のようなのです。 このRST(リセット)フラグのデータが出るのは,どう行ったときなのでしょうか? どういう理由でRST(リセット)フラグのデータが出るのでしょうか? ご存知の方,いらしゃいましたら教えていただけないでしょうか? よろしくお願い致します。

  • c言語ネットワークプログラミングのAPIを乗せているwebページないですか?

    現在私はC言語でソケット通信を使って サーバとクライアントでメッセージのやり取りをおこなってみたいと思っているのですが どのライブラリのどの関数を使って通信できるのか全くわかりません。 (例えば、readの返り値ってなにを返すんだろう?とか) できればunix上(SunOS)でのc言語ネットワークプログラミングに関する APIが乗っているURLを教えていただけないでしょうか?(できれば日本語のwebページがいいです。)

  • TCPのsynとかっていつ・何回位するのでしょうか

    ネットワークの勉強中の中年です。 入門編のTCP/IPですが、コネクション確立(syn→ack/syn→syn)などは 普通に手動で作業をする場合、いつ、何回位されるのでしょうか。 たとえばftpなどですが、 もちろん最初にクライアントからサーバーに接続する際にはとは思うのですか、 パスワードを送るたび、ファイルを送受信するたびに行うものなのでしょうか。 また、finを送るのは、byeでftpを閉じる時でしょうか。 パスワードの送信後とか、ファイルのやり取り後といったタイミングで 発生するのでしょうか。 それともパケットトレースで見るように1秒間に何十回というように されるものなのでしょうか。 挙動についていろいろ資料等があるのですが、 実際に使っているイメージではいつ何をしているかわからず… よろしくお願いいたします。