数据包中的字符串搜索

时间:2010-07-27 23:35:14

标签: c pcre pcap libpcap

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

使用正则表达式模式匹配库(例如libpcre?

)来实现它会更有效吗?

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

3 个答案:

答案 0 :(得分:1)

http://www.arstdesign.com/articles/fastsearch.html有一些指标表明strstr的表现非常出色。对于短字符串匹配,我怀疑正则表达式库可以击败良好的优化组件。

答案 1 :(得分:1)

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

如果你正在搜索多个字符串,最好使用像Aho-Corasick这样的快速字符串匹配算法,或构建一个状态机,它匹配你想要的上下文所需的字符串,即解析器。为了解析像C中的HTTP这样的大多数常规语法,ragel state machine compiler是我的首选工具。

答案 2 :(得分:0)

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