我正在使用基于在 Linux 下运行的 Linux 堆栈的用户空间 TCP 堆栈。不幸的是,它需要应用程序专门调用它自己的修改版本的普通套接字 API 函数,然后使用 libpcap 获取它接收到的传入数据包作为响应。
现在我的问题是,是否有任何方法可以将数据包从应用程序重定向到此 TCP 堆栈,而无需修改应用程序本身。换句话说,我正在寻找一种方法来拦截对套接字 API 的调用并将它们重定向到等效的用户空间。
希望你或多或少清楚我的意思。
最佳答案
两个想法(未经测试,先用谷歌搜索一下,看看以前是否有人做过):
设置一个替换
stdlib
,它使用 TCP 库而不是系统调用。然后使用ld.so
在加载时覆盖它。设置一个
tun
网络设备,让应用程序就此进行通信,然后编写另一个任务将 tun 的另一端连接到用户空间 TCP 库。
我猜第一个性能更好并且可能不那么脆弱。它需要一些微妙的 stdlib 知识,我想。此外,tun
设备似乎只给你 IP 数据包。
最好的办法是搜索 TCP 库的其他用户,很可能已经有某种“加载程序”可以做到这一点。
关于linux - 在不修改应用程序的情况下将数据包重定向到用户空间 TCP 堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/966031/