2

我有一个问题,也许你有一些关于这个的信息。我想在运行过程中挂钩套接字接收函数(recv)并修改传入数据。我怎么知道,我可以使用内核模块来做到这一点,但我找不到关于如何做这样的钩子的信息。

我尝试过其他方法,例如 Netfilter、iptables,但这些方法速度较慢。

4

1 回答 1

4

请注意,可以使用几种不同的系统调用 - 不仅仅是 recv()。

假设有问题的应用程序通过 C 库进行内核交互(而不是手工制作系统调用),并且您可以重新启动它来设置测试,一个相当简单的想法可能是使用 LD_PRELOAD 环境变量首先加载自定义库,它将感兴趣的系统调用包装器替换为拦截器。

或者您可以像 strace 那样设置系统调用拦截,并与感兴趣的人一起玩。

另一种选择是不让应用程序直接连接到远程系统,而是创建一个代理,让它连接到代理,然后让代理连接到远程系统。这样做的一个主要优点是它非常便携,几乎不需要平台特定的细节。

于 2012-04-29T15:51:39.247 回答