バイトの HexString をバイト配列に変換し、この配列から PcapPacket を作成しようとするこのコードを実行しようとしています。
import org.jnetpcap.packet.PcapPacket;
public class PcapTest {
public static void main(String[] args) {
PcapPacket packet= new PcapPacket(hexStringToByteArray("08002760f9b952540012350208004500008f6ee600004006ab16d5f87e650a00020f15b3d192006546b55996b53d5018fffffe0c00000dcd6405003156656e6420efbfbc206d7020766f73206f66667265206a65207661697320646f646f2064616e732032206d696e7574657354cf1d3400087a376b706d7338700059006500084968656273657468050cf0a100013fcc07000100467c3c99e2ac5401"));//tcp Packet from wireshark
}
//this function is jute for completeness of the example
public static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i+1), 16));
//System.out.println(Integer.toHexString(data[i / 2]));
}
return data;
}
}
次のエラーが表示されます。
Exception in thread "main" java.lang.IndexOutOfBoundsException: Invalid [16,3696,3680) range.
at org.jnetpcap.nio.JMemory.peer(Unknown Source)
at org.jnetpcap.packet.JPacket$State.peerTo(Unknown Source)
at org.jnetpcap.packet.PcapPacket.peerStateAndData(Unknown Source)
at org.jnetpcap.packet.PcapPacket.transferStateAndDataFrom(Unknown Source)
at org.jnetpcap.packet.PcapPacket.<init>(Unknown Source)
at jNetPcapTest.JNetPcapTest.main(JNetPcapTest.java:12)
うまく機能しているように見える機能を確認しました。また、root権限でEclipseを使用しています(ubuntuで)。
Eclipse にライブラリを追加するために、Eclipse で新しいユーザー ライブラリを作成し、jar とネイティブ ライブラリの場所 (.so/.dll があるフォルダー) を追加しました。
Linux(ubuntu)とWindowsの両方で同じ問題があります。助けてくれてありがとう