我需要拦截/重定向其有效负载与某些正则表达式模式匹配的TCP和UDP数据包,并获得原始目标地址和端口。
我不能通过在防火墙上使用DSTNAT将TCP和UDP数据包重定向到我的应用程序(如果不匹配模式,则splice()
),因为这不允许我在更改/翻译之前获取原始目的地地址和端口。
所以我读到了转向插座,看起来很有希望。我有点怀疑,因为我无法找到应用程序可以读取转移套接字上收到的数据包的数量。是否可以读取整个数据包(包括TCP和UDP有效负载)或仅读取其标头?整个数据包是发送转移套接字还是只是第一次收到的片段(可能受MTU / MRU限制,或者send()
可以在另一端推送单个呼叫多少......)?
如果重要,我将用于转移数据包的防火墙是ipfw。