Hyperscan扫描时间过多

问题描述

  • 我正在使用一个具有一千万行签名的数据库来匹配PCAP软件包。我用c ++完成了代码匹配一个200m PCAP封装需要100秒。
  • 据我所知,有人完成了项目,而匹配一个200m PCAP封装仅花费了几秒钟。
  • 这是我的步骤:
  1. 我所有的模式如下:

    id:1258808
    pattern:\x06\x62\x68\x69\x66\x72\x69\x03\x63\x6F\x6D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 
    flag   :0

  1. 我使用阻止模式。
  2. func hs_scan()

    for (size_t i = 0; i < packets.size(); ++i) {
            const std::string pkt = packets[i];
            err = hs_scan(database,pkt.c_str(),pkt.length(),scratch,onMatch,&matchCount);
            if (err != HS_SUCCESS) {
                cerr << "ERROR: Unable to scan packet. Exiting." << endl;
                exit(-1);
            }
        }

我想知道我的问题在哪里,以及如何缩短运行时间?

解决方法

我发现了问题所在,导致速度缓慢的原因是因为我在数据库中混合了太多不同的标志模式。因此,我用不同的标志分割了模式,并且效果惊人。谢谢你们。