2011-10-07 53 views
1

我已經分配了一個任務來構建一個應用程序,該應用程序將在某些網絡流量(第7層)上執行基於簽名的匹配。匹配將實時進行,並且需要快速以便系統始終保持響應。用於基於(快速)簽名的匹配的編程庫?

起初我想過使用正則表達式作爲簽名和pcre作爲匹配的庫。但似乎這太慢了。將有幾千個簽名進行匹配。

由於我沒有很多的基於簽名內容匹配的經驗,我問:

  1. 我應該使用正則表達式,簽名和找到一些快庫?
  2. 是否有任何其他庫(免費或商業)基於簽名的匹配是快速的?

回答

1

爲了構建一個高效的RE匹配器,我們將它編譯成一個有接受和不接受狀態的有限狀態機。

當你有多個RE時,你可以很容易地形成它們的析取,並將它編譯成一個FSA,具有不接受狀態,並且根據哪個RE接受標記狀態。

因此,對於幾千個RE,您計算一個巨大的析取併爲該集合構建FSA。

大多數標準lexing引擎(例如FLEX)都是這樣做的,每個令牌使用一個RE,並會告訴您哪個令牌。所以你應該能夠使用FLEX作爲開始的地方。