Jnetpcap 官方样例(2)- 创建一个TCP数据包

本文档详细介绍了如何使用Jnetpcap库创建一个TCP数据包。通过JProtocol枚举、JMemoryPacket和JPacket类,演示了从16进制数据创建并解析TCP包的过程,并强调了在修改包内容后重新扫描和更新packet state的重要性。
摘要由CSDN通过智能技术生成

原文网址

创建一个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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值