0

使用下面的代码将 PcapPackets 传递给队列,是否可以将其传递给 Kafka 队列,以便 Kafka 消费者可以从 Kafka 生产者那里提取 PcapPackets?

StringBuilder errbuf = new StringBuilder();  
Pcap pcap = Pcap.openOffline("tests/test-afs.pcap", errbuf);  

PcapPacketHandler<Queue<PcapPacket>> handler = new PcapPacketHandler<Queue<PcapPacket>>() {  
  public void nextPacket(PcapPacket packet, Queue<PcapPacket> queue) {  
    PcapPacket permanent = new PcapPacket(packet);  

    queue.offer(packet);  
  }  
}  

Queue<PcapPacket> queue = new ArrayBlockingQueue<PcapPacket>();  

pcap.loop(10, handler, queue);  

System.out.println("we have " + queue.size() + " packets in our queue");  

pcap.close(); 
4

2 回答 2

0

Kafka 支持将任意二进制数据存储为消息。在您的情况下,您只需要提供一个 PcapPacket 类二进制序列化器(和用于读取的反序列化器)。

有关示例,请参阅Kafka:编写自定义序列化程序。

于 2014-10-14T17:29:52.853 回答
0

虽然我迟到了,但我在这里分享我的工具:Pcap Processor (GitHub URL),如果有类似要求的人觉得它有用的话。我为我的研究开发了一个 Python 工具,用于读取原始 pcap 文件、处理它们并将它们提供给我的流处理器。由于我尝试了各种流协议,所以我在这个工具中实现了所有这些协议。当前支持的接收器:

  • CSV 文件
  • Apache Kafka(编码为 JSON 字符串)
  • HTTP REST (JSON)
  • gRPC
  • 控制台(只需打印到终端)

例如,要读取input.pcap并将其发送到 Kafka 主题,您需要调整kafka_sink.py中的引导端点和主题名称。然后,从父目录执行以下命令将读取文件并将数据包发送到 Kafka 队列。

python3 -m pcap_processor --sink kafka input.pcap

有关更多详细信息和安装说明,请查看 GitHub自述文件,如果遇到任何问题,请随时打开GitHub问题。

于 2018-05-10T21:03:27.380 回答