3

我有一个可以被视为接入点的嵌入式系统。有一个程序在该系统中运行,并与连接到该接入点的设备执行一些网络通信。它正在发送包含一些诊断信息(一种数据结构)的 UDP 数据包并接收命令。问题是有时该传出数据结构的某些字段未填充数据(例如,有零或一些垃圾)。我需要每次都正确填写这些字段,并且我知道应该在那里输入什么值。

我需要完成的另一项任务是过滤进入该程序的传入数据包(我知道它侦听的端口) - 通常我需要简单地传递它们,但偶尔(例如,当我从传感器获取一些信息时)它是有必要用我将生成的新数据包完全替换它们。

我有几个想法,从巧妙地使用 iptables 和 pcap 到编写我自己的内核模块。我不拥有该嵌入式应用程序的来源,因此我无法将此功能嵌入其代码中。性能在这里至关重要,我想听听您的建议:我应该追求什么?编写自己的内核模块对我来说似乎是最好的解决方案,但我没有网络黑客的经验,所以也许有一些其他方法更适合这个问题。任何意见将不胜感激!

4

2 回答 2

2

一种标准方法是使用 libnetfilter_queue 直接拦截和修改数据包。在尝试编写自己的内核模块之前,您至少应该尝试一下。

于 2012-05-21T07:55:59.863 回答
1

您可以在用户空间中执行此操作。只需编写一个接收数据包的服务器更改它们并再次发送它们。您必须配置应用程序才能使用您的本地主机作为目标 IP(或配置您的系统以使其具有目标地址)。它是典型的“中间人”设置。

于 2012-05-16T08:46:41.767 回答