2

假设我们使用 libpcap 的 C API 捕获数据包。使用字符串搜索 strstr() 以线速(例如 Mbps/Gbps)解析一些有效负载字符串是否有效?例如 strstr(payload,"User-Agent");

使用正则表达式模式匹配库(例如 libpcre)会更有效吗?

如果我们只想对 HTTP 标头参数执行此操作,是否有任何 C API?我不清楚 libcurl 是否可以做到这一点......提前谢谢你。

4

3 回答 3

1

http://www.arstdesign.com/articles/fastsearch.html有一些指标显示 strstr 的性能不错。对于短字符串匹配,我怀疑正则表达式库能否击败良好的优化程序集。

于 2010-08-26T07:15:21.517 回答
1

如果您只搜索单个短字符串,那么没有什么比 . 使用的线性比较快得多了strstr()。也就是说,strstr()NUL字节的特殊处理几乎肯定不是您检查网络流量时想要的,您最好编写自己的实现来处理所有字节相同并接受长度参数。

如果您要搜索多个字符串,最好使用像 Aho–Corasick 这样的快速字符串匹配算法,或者构建一个状态机,在您想要的上下文中匹配您想要的字符串——即解析器。为了解析 C 语言中的 HTTP 之类的大部分常规语法,我选择了ragel 状态机编译器

于 2010-09-02T13:41:31.543 回答
0

我真的无法想象 strstr 比正则表达式替代方案要慢 - 但是,如果您需要提取各种 HTTP 标头值,那么解析数据包将是一个非常简单、更好的选择。libpcap 是否不包含任何内置解析器?

于 2010-07-27T23:43:47.257 回答