web-dev-qa-db-ja.com

TCP \ IPパケット署名-そのようなデータパケットを識別する方法は?

TCP生のバイナリデータからのIPパケットを「切り分ける」(探す)ことができるプログラムを知っています。それが提示する結果は、送信元と宛先のMACアドレス、送信元と宛先のIPアドレス、および他のいくつかの断片(ポート番号など)。

他の大量のバイナリデータの中でそのようなデータを識別するために、データのどのビットが署名/フラグとして機能するのか知りたいですか?以下の例は、テストからの私自身のIPパケットの1つです。最初の6バイト=宛先MACアドレス。次の6バイト、送信元MACアドレス。 0800は私が今忘れているある種のマーカーです。 45 AB F7 25は1つのIPアドレス、C0 A8 6FA0は私の内部IPアドレスの1つなどです。

しかし、その前後に「ねえ、これはTCP IPデータです」」と言うことは何もありません。他にも同様の例が何百もあります。開始データは単なるMACアドレスであり、プログラムを簡単にコーディングして検索できるものではありません(これは私が自分でやりたいことです)。

何かご意見は?

Offset       0  1  2  3  4  5  6  7   8  9 10 11 12 13 14 15

000000000   00 0C 29 31 24 41 00 50  56 ED A5 46 08 00 45 00     )1$A PVí¥F  E 
000000016   00 28 C0 A8 00 00 80 06  0D 0E 45 AB F7 25 C0 A8    (À¨  €   E«÷%À¨
000000032   6F A0 01 BB 06 AF 7C 3E  0B 51 35 87 6B 87 50 10   o  » ¯|> Q5‡k‡P 
000000048   FA F0 16 C2 00 00 00 00  00 00 00 00 00 00 00 00   úð Â            
000000064   FD 0C AC 83 FB 0A B0 41  B3 B3 F8 71 88 1F 4C 8C   ý ¬ƒû °A³³øqˆ LŒ
1
Gizmo_the_Great

私の提案は、Wiresharkでいくつかのデータをダウンロードしてキャプチャすることです。パケットリスト、パケットの詳細、およびパケットバイトの表示オプションが有効になっていることを確認し、パケットのクリックを開始します。パケットの詳細セクションで、パケットのL2、L3、およびL4セクションをクリックすると、選択したものに関連するバイトが強調表示されます。

次に、オンラインで検索を行って、イーサネットヘッダー/カプセル化、IPヘッダー、TCPヘッダーなど)について学習します。ウィキペディアは、このようなトピックの出発点として適していることがよくありますが、数百もあります。オンラインのリソース。イーサネットフレームが最終的にどのように構築されるかを表す画像を探して簡単に検索したところ、かなり良いものが見つかりました: http://www.tcpipguide.com/free/t_IPDatagramEncapsulation.htm

コンテンツを読んでいませんが、そのようなリソースとWiresharkのようなツールでフレームの一部を操作し始めると、バイナリデータに明確な構造があり、区別するのがかなり簡単になります。

1
YLearn

バイト13、14、15は、IPv4またはIPv6マーカーです。提供されているスクリーンショットでは、00 45 00なので、IPv4パケットがあります。

IPv4パケットの場合、23バイト目を確認します。 06なので、TCPパケットです。11の場合、UDPパケットがあります。

IPv6パケットの場合、その20番目のバイト。

0
Benny