2011-09-14 75 views
0

我正在研究使用NFQUEUE过滤另一个应用程序的流量的C程序。我需要做的一件事是用另一个字符串替换一个包中包含的字符串。搜索并替换字符串并忽略空字节字符

问题是,数据包似乎随机(在字符串中间)包含空终止符字节。这意味着我使用strstr()看到的大多数解决方案都不起作用。我需要找到类似的东西,它在到达空终止符字节时不会停止,而是允许指定长度并使用它。 (nfq_get_payload()返回一个长度。)

我已经着眼于在执行替换之前用另一个字节替换空字节,然后在发送数据包之前恢复空字节。这种方法的问题是数据包可能包含角色的机会,所以这不是最好的方法。我想我也可以找到一个没有包含在数据包中的随机字节,但我宁愿避免这样做。

编辑:原始字符串和替换字符串都是相同的长度,这是13个字符。

+0

*数据包似乎随机包含空终止符字节* - 获取协议和流量规范,以便您确切知道这些数字在何处以及为何存在。修改您不了解格式的流量可能会破坏应用程序,并让您进入调试地狱,并带来各种可能的副作用,包括用户数据的丢失。 – Secure

+0

这是一个封闭的源代码应用程序,没有开发人员提供的规范,所以很不幸,这不是一个选项。 – Mike

+0

不只是寻找一个特殊的位模式而不是一个字符串? – Superlokkus

回答

1

如果找到一个角色可以为你工作,你可能会满意memchr。否则,你将不得不自己做一个memmem实现或在线找到一个。

请注意,字符串搜索算法(因为这就是memmem)可以具有广泛的性能特征,因此您希望找到基于性能算法的算法(例如this one外观可以接受,但是您的里程可能会有所不同) 。