私は現在、安定した TCP 接続を作成し、ISN 番号を完全に制御できるプログラムを作成しようとしています。私は C で書いてきましたが、私の非常に限られた知識が限界に達した時点で、それを行うためのより良い方法があるかどうか疑問に思っていました。
私が試したのは、ヘッダーを手動で構築することでした。生のソケットを使用して、カーネルが干渉することなくパケットを送受信しましたが、これは課題でした。
言語に関係なく、ISN を操作する最も効率的で簡単な方法は何だと思いますか?
私は現在、安定した TCP 接続を作成し、ISN 番号を完全に制御できるプログラムを作成しようとしています。私は C で書いてきましたが、私の非常に限られた知識が限界に達した時点で、それを行うためのより良い方法があるかどうか疑問に思っていました。
私が試したのは、ヘッダーを手動で構築することでした。生のソケットを使用して、カーネルが干渉することなくパケットを送受信しましたが、これは課題でした。
言語に関係なく、ISN を操作する最も効率的で簡単な方法は何だと思いますか?
さて、ISN は、ISN perediction 攻撃を防ぐためにランダムな方法で生成されます ( http://www.thegeekstuff.com/2012/01/tcp-sequence-number-attacks/ )。
Linux Network スタックは、関数を使用しtcp_v4_init_sequence
て ISN を生成します ( http://lxr.free-electrons.com/source/net/ipv4/tcp_ipv4.c#L101 )、この関数呼び出しsecure_tcp_sequence_number
関数 ( http://lxr.free -electrons.com/source/net/core/secure_seq.c#L106 ) を実行します。この関数を見て、クローンを作成して、ユーザー空間のコードで使用できるようにしてください。
十分な時間がある場合は、( http://www.rfc-editor.org/rfc/rfc6528.txt ) のセクション 3を参照してください。ISN の生成方法に関するアルゴリズムが説明されています。RFC 6528
ISN = M + F(localip, localport, remoteip, remoteport, secretkey)
必要に応じて、それを実装してみてください:)