手動で作成したTCPヘッダーデータをバイト配列にプッシュする方法を解明しようとしています。私はJnetPcap.send(byte []パケット)を使用してwiresharkでそれを見ることができます。パケットをバイト配列として作成して送ることができます。私はヘッダを作成するのに使うことができるライブラリ関数がたくさんあるので、これを手動で行いたいと思います。TCPヘッダー値をフォーマットし、Javaのパケットテストのバイト配列にプッシュする方法
値を書式設定する方法や配列に読み込む方法については説明がありません。私が使用している値が有効かどうかもわかりません。これは...私が使用してと思っています何
public static int sourcePort = 1234; //16 bits
public static int destinationPort = 80; //16 bits
public static int sequenceNum = 0; //32 bits - Can this be arbitrary?
public static int ackNum = 0; //32 bits - sequenceNumber + next data start
public static int dataOffset = 5; //4 bits - Minimum value of 5
public static int reserved = 0; //4 bits - Always 0
public static int controlFlags = 0; //8 bits - Not sure if I need any
public static int windowSize = 0; //16 bits Can this be arbitrary?
public static int checkSum = 0; //16 bits - ?use TCP.calculateChecksum()
public static int urgent = 0; //16 bits
byte[] packet = new byte[160];
//Now load the values into the byte[]
ある
UPDATE(私もGETイーサネットで構築し、IPVヘッダー機能を取得JnetPcapを使用しています): を私はそれのように見えるこのスニペットを見つけましたバイト配列に16進値を入れる必要があるユーティリティです:
byte[] pktBytes = FormatUtils.toByteArray("0015c672234c90e6ba92661608004500002d358c4000800600000a000b050a090028c26e270fb8b256e3a2009f785018faf01f550000746573740a");
JMemoryPacket packet = new JMemoryPacket(pktBytes);
ここで値を変換するにはどうすればいいですか?それは文字通り互いに追加された16進翻訳でしょうか?
私の16ビットのdestinationPort = 80; 0050 ...となり、32ビットsequenceNum = 0となる。 0000 0000 ... 4ビットになるdataOffset = 5;それがうまくいくように思える、私は試してみるつもりだ。
(彼らは118桁の16進数持って、TCPヘッダーのためのその権利のですか?私の値は、おそらく彼らは同様にペイロードまたはIP/Ethernetヘッダを持って、40進数で私を残すでしょうか?)