创建一个TCP packet
JProtocol:各种协议的枚举表
JMemoryPacket:以及基于packet的堆,可以无需PcapHeader实例化
JPacket:一个本地的packet缓存对象,这个类指向 packet 数据缓存 和 解析后的本地packet结构。JPacket类是一更常用的扫描packet buffer data的类 JBuffer的子类。它也有一个指向 JPacket.State对象的引用。这个对象和由JScanner产生的本地packet state 结构相互绑定。
packet提供了很多访问解码后的信息的方法,比如:当packet被扫描的时候,你可以使用 hasHeader(int) 方法来检查是否由特别的哪个header包含在packet里。
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");
Ip4 ip = packet.getHeader(new Ip4());
Tcp tcp = packet.getHeader(new Tcp());
tcp.destination(80);
ip.checksum(ip.calculateChecksum());
tcp.checksum(tcp.calculateChecksum());
packet.scan(Ethernet.ID);
System.out.println(packet);
过程:
我们创建的这个packet样本是基于之前捕获的一个packet。我们把packet的内容表示为16进制。16进制数被解析成byte[]然后作为packet的主要内容。JMemoryPacket为这个新的数据包分配内存并且扫描它。我们用的是以下的构造方法。
JMemoryPacket(int id, java.lang.String hexdump)
Creates a new fully decoded packet from the hexdum