java - 使用 jpcap 库从网络捕获数据包并保存在数据库中

标签 java networking packet-capture jpcap

我正在使用 jpcap 库捕获数据包并保存在 Mysql 数据库中。我想分别完成这两个功能。我的程序捕获数据包并保存在数据库中,然后捕获另一个数据包并保存在数据库中。 我想要的是一种方法捕获数据包,另一种方法保存在数据库中。保存数据包不会停止捕获以完成该过程。

    public class PacketSniffer {
    private static String[] devices;
    private static PacketCapture captor;
    private static Packet info;            
    private static final Scanner input = new Scanner(System.in);
    private static final String FILTER = "";
    private static final int PACKET_COUNT = -1;

    public PacketSniffer()
    {
       captor = new PacketCapture();
       int i;
       devices =  PacketCapture.lookupDevices();

       for(i=0; i<devices.length; i++)
       {
          System.out.println(i+": "+devices[i]); // +devices[i].name
          System.out.println();
       }
       String device = input.nextLine();
       captor.open(device, 65535, true, 0);
       captor.setFilter(FILTER, true);
       captor.addPacketListener(new PacketCapture());
       captor.capture(PACKET_COUNT);             
    }
}

处理捕获数据包的数据包处理程序:

    public class PacketHandler implements PacketListener {

    Queue<Packet> queue;

    @Override
    public void packetArrived(Packet packet) 
    {
       System.out.println(packet);
    } 

    public void savePacket()
    {
       //  Method to save packet in database 
    }
}

最佳答案

public class PacketCapture implements PacketListener,Runnable {
Queue<Packet> queue = new LinkedList<>();
@Override
public void packetArrived(Packet packet) 
{
   queue.add(packet);
   System.out.println(m_counter++);
}

public void run()
{
  while(!(queue.equals(null))){
    System.out.println(queue.poll());
 }
 }
 }

在主要方法中

 public static void main(String[] args) {

     Thread t1 = new Thread(new PacketSniffer());
    Thread t2 = new Thread(new PacketCapture());
     t1.start();
    t2.start();
}

关于java - 使用 jpcap 库从网络捕获数据包并保存在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23327639/

相关文章:

windows - 如何关闭 Windows 机器上的套接字?

networking - 在游戏中使用多个端口有什么好处?

python - Scapy 在使用多线程时无法嗅探数据包

Android Shark (tcpdump) 创建无效的 pcap

java - 使用两个 android 应用程序的地理围栏

java - 使用java servlet的异步文件上传

docker - 获取 Docker 主机的 IPv4 地址

c - 解析 TCP 数据包数据

java - 在Sqoop文件导入中,我想使用定义的映射器在文件拆分中控制导入的数据

java - 从 SSLSocket 读取最快或最好的方法