jnetpcap:无法在 ubuntu 上使用字节数组创建 PcapPacket
jnetpcap: can't create PcapPacket using byte array on ubuntu
我正在尝试 运行 这段代码将字节的 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 上都有同样的问题。
谢谢您的帮助
干杯
我发现这里的答案应该已经阅读了 javadoc:
http://jnetpcap.com/docs/javadocs/jnetpcap-1.3/org/jnetpcap/packet/PcapPacket.html
一个pcap数据包。完全解码的数据包,提供对解码过程中确定的协议 headers 的访问。 PcapPacket class 旨在与 pcap 库一起使用。它不能用于从仅包含数据包数据的外部内存缓冲区创建新数据包,例如准备要从网络接口发送的数据包。您可以使用 JMemoryPacket 从头开始创建内存数据包。 ....
Example 和代码片段:
JPacket packet =
new JMemoryPacket(JProtocol.ETHERNET_ID,
" 001801bf 6adc0025 4bb7afec 08004500 "
+ " 0041a983 40004006 d69ac0a8 00342f8c "
+ " ca30c3ef 008f2e80 11f52ea8 4b578018 "
+ " ffffa6ea 00000101 080a152e ef03002a "
+ " 2c943538 322e3430 204e4f4f 500d0a");
测试于 Windows。
我正在尝试 运行 这段代码将字节的 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 上都有同样的问题。 谢谢您的帮助 干杯
我发现这里的答案应该已经阅读了 javadoc: http://jnetpcap.com/docs/javadocs/jnetpcap-1.3/org/jnetpcap/packet/PcapPacket.html
一个pcap数据包。完全解码的数据包,提供对解码过程中确定的协议 headers 的访问。 PcapPacket class 旨在与 pcap 库一起使用。它不能用于从仅包含数据包数据的外部内存缓冲区创建新数据包,例如准备要从网络接口发送的数据包。您可以使用 JMemoryPacket 从头开始创建内存数据包。 ....
Example 和代码片段:
JPacket packet =
new JMemoryPacket(JProtocol.ETHERNET_ID,
" 001801bf 6adc0025 4bb7afec 08004500 "
+ " 0041a983 40004006 d69ac0a8 00342f8c "
+ " ca30c3ef 008f2e80 11f52ea8 4b578018 "
+ " ffffa6ea 00000101 080a152e ef03002a "
+ " 2c943538 322e3430 204e4f4f 500d0a");
测试于 Windows。