linux - 在不修改应用程序的情况下将数据包重定向到用户空间 TCP 堆栈

标签 linux tcp

我正在使用基于在 Linux 下运行的 Linux 堆栈的用户空间 TCP 堆栈。不幸的是,它需要应用程序专门调用它自己的修改版本的普通套接字 API 函数,然后使用 libpcap 获取它接收到的传入数据包作为响应。

现在我的问题是,是否有任何方法可以将数据包从应用程序重定向到此 TCP 堆栈,而无需修改应用程序本身。换句话说,我正在寻找一种方法来拦截对套接字 API 的调用并将它们重定向到等效的用户空间。

希望你或多或少清楚我的意思。

最佳答案

两个想法(未经测试,先用谷歌搜索一下,看看以前是否有人做过):

  1. 设置一个替换 stdlib,它使用 TCP 库而不是系统调用。然后使用 ld.so 在加载时覆盖它。

  2. 设置一个 tun 网络设备,让应用程序就此进行通信,然后编写另一个任务将 tun 的另一端连接到用户空间 TCP 库。

我猜第一个性能更好并且可能不那么脆弱。它需要一些微妙的 stdlib 知识,我想。此外,tun 设备似乎只给你 IP 数据包。

最好的办法是搜索 TCP 库的其他用户,很可能已经有某种“加载程序”可以做到这一点。

关于linux - 在不修改应用程序的情况下将数据包重定向到用户空间 TCP 堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/966031/

相关文章:

php - 如何在centos中为Mcrypt安装库

python - 在 python 中使用套接字发送文本和二进制文件

c - 基于 libuv 的 tcp 服务器未监听指定端口

c# - 确定缓冲区应该有多大

linux - 如何确定 Linux 进程启动的日期和时间?

android - 无法使用 ANDROID PREVIEW SYSTEM IMAGE 刷入 Nexus 7[2012][Wifi]

linux - 仅在不破坏任何内容的情况下应用补丁

linux - sendmail 452 4.5.3 收件人太多

java - 使用 TCP 通信比 HTTP 通信有何优势?

c++ - 只关闭一个套接字