假设我们使用 libpcap 的 C API 抓包。使用字符串搜索 strstr() 以线速(例如 Mbps/Gbps)解析一些有效负载字符串是否有效?例如 strstr(payload,"User-Agent");
使用正则表达式模式匹配库(例如 libpcre)会更高效吗?
如果我们只想对 HTTP header 参数执行此操作,是否有任何 C API?我不清楚 libcurl 是否可以做到这一点...... 提前谢谢你。
最佳答案
如果您只搜索单个短字符串,那么没有什么比 strstr()
使用的线性比较更快了。也就是说,strstr()
对 NUL
字节的特殊处理几乎肯定不是您想要检查网络流量的方式,您最好编写自己的实现以相同的方式处理所有字节并接受长度参数。
如果您要搜索多个字符串,最好使用像 Aho–Corasick 这样的快速字符串匹配算法,或者构建一个状态机来在您想要的上下文中匹配您想要的字符串,即解析器。为了解析像 C 中的 HTTP 这样的大多数常规语法,ragel state machine compiler是我的首选工具。
关于c - 数据包中的字符串搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3348812/