c - 数据包中的字符串搜索

标签 c pcre pcap libpcap

假设我们使用 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/

相关文章:

c - 在c中打印满足一定条件的直角三角形

c - 从文件中读取多行数据

c - 为什么 strcpy 不能正常工作

regex - 解决灾难性回溯的工具

regex - 简码/bbcode 的正则表达式 (pcre)

bash - 正则表达式、捕获组和美元符号

c - 如何正确定义函数返回的结构?

python - scapy:UDP碎片整理时间戳问题

java - Pcap4J:无法加载库 'pcap'

c - 为什么 pcap_next_ex 的第三个参数是不兼容的指针类型?