VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 951|回复: 3

使用JList显示jpcap.loopPacket()结果时的问题

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-3 16:50:01 | 显示全部楼层 |阅读模式
我使用JBuilder2006做了一个抓包然后回显的小程序,通过监听button的
事件触发:
     public void jButton1_mouseClicked(MouseEvent e) {
      try{
        jpcap=Jpcap.openDevice(Jpcap.getDeviceList()[1],1024,false,10000);
        jpcap.loopPacket(10,new GetPacket());
                                ----------
      }
      catch(java.io.IOException f){
        System.out.println("We can't open device");
      }
     }
  其中的 GetPacket()类为
import jpcap.*;
import java.util.Vector;
import javax.swing.JList;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2006</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
class GetPacket implements JpcapHandler{
  public void handlePacket(Packet packet){
    Frame.listMode1.addElement(packet);
  }
}
    /*listMode1是一个显示时的静态对象,用于向一个JList增加包的显示行,定义为                 public static DefaultListModel listMode1=new DefaultListModel();
JList jList1 = new JList(listMode1);*/


使用jpcap.loopPacket(10,new GetPacket()),我想要的是一共抓十个包,抓到一个包显示一个,但我这里出现的情况是,抓到所有的包之后,才一起显示,这与Jpcap.loopPacket()的方法定义不符合,是什么原因造成的?请高手指教,3Q!
回复

使用道具 举报

0

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-8-9 21:30:01 | 显示全部楼层
你看看JPcap的API文档,API文档里面是这样写的
public int loopPacket(int count,PacketReceiver handler)

Captures the specified number of packets consecutively.

consecutively的意思是连续的意思,我估计是一下子抓count个包吧,所以你在Frame.listMode1.addElement(packet);里面直接都add进去了,我是这样认为的,也不知道对不对
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-9-2 20:45:01 | 显示全部楼层
不要使用 jpacp.loopPacket(),使用 JpcapCaptor.getPacket(),这个方法是每次抓一个包,抓到包后就进行处理,用一个循环来处理,这样可以达到你的目的.
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-9-3 23:30:01 | 显示全部楼层
抓包线程阻塞了你的swing事件调度线程。
加上多线程就可以了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表