【发布时间】:2012-05-03 21:44:10
【问题描述】:
我有一个问题,也许你有一些关于这个的信息。我想在运行过程中挂钩套接字接收函数(recv)并修改传入数据。 我怎么知道,我可以使用内核模块来做到这一点,但我找不到关于如何做这样的钩子的信息。
我尝试过其他方式,例如 Netfilter、iptables,但这些方式速度较慢。
【问题讨论】:
我有一个问题,也许你有一些关于这个的信息。我想在运行过程中挂钩套接字接收函数(recv)并修改传入数据。 我怎么知道,我可以使用内核模块来做到这一点,但我找不到关于如何做这样的钩子的信息。
我尝试过其他方式,例如 Netfilter、iptables,但这些方式速度较慢。
【问题讨论】:
请注意,可以使用多种不同的系统调用 - 不仅仅是 recv()。
假设有问题的应用程序通过 C 库进行内核交互(而不是手工制作系统调用),并且您可以重新启动它来设置测试,一个相当简单的想法可能是使用 LD_PRELOAD 环境变量来首先加载一个自定义库,它将感兴趣的系统调用包装器替换为拦截器。
或者你可以像 strace 那样设置系统调用拦截,然后与感兴趣的人一起玩。
另一个选择是不让应用程序直接连接到远程系统,而是创建一个代理,让它连接到代理,然后让代理连接到远程系统。这样做的一个主要优点是它非常便携,几乎不需要平台特定的细节。
【讨论】: