background image

  

int

  loopPacket(intcount, PacketReceiver handler)
  捕捉指定数目的数据包,并交由实现了 PacketReceiver 接口的类的实例处理,并返回
捕捉到的数据包数目。如果 count 参数设为-

1

,那么无限循环地捕捉数据。

  这个方法不受超时的影响。还记得 openDivice()中的 to_ms 参数么?那个参数对这个方
法没有影响,如果没有捕捉到指定数目数据包,那么这个方法将一直阻塞等待。
  PacketReceiver 中只有一个抽象方法

void

 receive(Packet p)。

  

int

  processPacket(intcount, PacketReceiver handler)
  跟 loopPacket()功能一样,唯一的区别是这个方法受超时的影响,超过指定时间自动
返回捕捉到数据包的数目。
  

int

  dispatchPacket(intcount, PacketReceiverhandler)
  跟 processPacket()

功能一样,区别是这个方法可以处于 non-blocking”模式工作,在这

种模式下 dispatchPacket()可能立即返回,即使没有捕捉到任何数据包。
  

void

  setFilter(java.lang.Stringcondition, booleanoptimize)
  .condition:设定要提取的包的关键字。
  Optimize:这个参数在说明文档以及源代码中都没有说明,只是说这个参数如果为真,
那么过滤器将处于优化模式。
  

void

  setNonBlockingMode(booleannonblocking)

  如果值为

true

,那么设定为 non-blocking”模式。

  

void

  breakLoop()
  当调用 processPacket()和 loopPacket()后,再调用这个方法可以强制让 processPacket()
和 loopPacket()停止。
  

3

.JpcapSender

  该类专门用于控制数据包的发送。
  方法成员
  

void

  close()
  强制关闭这个连接。
  staticJpcapSender
  openRawSocket()
  这个方法返回的 JpcapSender 实例发送数据包时将自动填写数据链路层头部分。
  

void

  sendPacket(Packet packet)
  JpcapSender 最重要的功能,发送数据包。需要注意的是,如果调用这个方法的实例是
由 JpcapCaptor 的 getJpcapSenderInstance()得到的话,需要自己设定数据链路层的头,而如
果是由上面的 openRawSocket()得到的话,那么无需也不能设置,数据链路层的头部将由
系统自动生成。
  

4

.Packet

  这个是所有其它数据包类的父类。Jpcap 所支持的数据包有: