2011-09-14 218 views
0

我正在研究使用NFQUEUE過濾另一個應用程序的流量的C程序。我需要做的一件事是用另一個字符串替換一個包中包含的字符串。搜索並替換字符串並忽略空字節字符

問題是,數據包似乎隨機(在字符串中間)包含空終止符字節。這意味着我使用strstr()看到的大多數解決方案都不起作用。我需要找到類似的東西,它在到達空終止符字節時不會停止,而是允許指定長度並使用它。 (nfq_get_payload()返回一個長度。)

我已經着眼於在執行替換之前用另一個字節替換空字節,然後在發送數據包之前恢復空字節。這種方法的問題是數據包可能包含角色的機會,所以這不是最好的方法。我想我也可以找到一個沒有包含在數據包中的隨機字節,但我寧願避免這樣做。

編輯:原始字符串和替換字符串都是相同的長度,這是13個字符。

+0

*數據包似乎隨機包含空終止符字節* - 獲取協議和流量規範,以便您確切知道這些數字在何處以及爲何存在。修改您不瞭解格式的流量可能會破壞應用程序,並讓您進入調試地獄,並帶來各種可能的副作用,包括用戶數據的丟失。 – Secure

+0

這是一個封閉的源代碼應用程序,沒有開發人員提供的規範,所以很不幸,這不是一個選項。 – Mike

+0

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

回答

1

如果找到一個角色可以爲你工作,你可能會滿意memchr。否則,你將不得不自己做一個memmem實現或在線找到一個。

請注意,字符串搜索算法(因爲這就是memmem)可以具有廣泛的性能特徵,因此您希望找到基於性能算法的算法(例如this one外觀可以接受,但是您的里程可能會有所不同) 。