更改tcp / ip数据包c ++或java

时间:2012-02-09 06:35:28

标签: java c tcp packets

情况如下。网络中有服务器和客户端。他们这样沟通:

  1. 客户端发送某些功能请求。
  2. 服务器发送给客户端功能参数。
  3. 客户端尝试执行功能并将答案发送给服务器。
  4. 服务器向客户端发送应显示的数据。
  5. 但有时客户端无法执行功能并发送错误。我想要捕获第2步中的所有数据包,分析它们(我已经有了工具),阻止它们中的一些到达客户端,使用我的程序处理它们并像第3步那样形成数据包。这必须在客户端完成侧。我无法访问服务器或客户端。

    所以,问题是:是否有用于在c ++或java中更改,注入和删除tcp / ip数据包的库?该解决方案应该适用于Win和Linux系统。 另外,您可能有更好的想法来扩展客户端功能吗?

    感谢您的帮助! 我试图谷歌如何更改数据包,但我得到的都是未解决的问题和嗅探器=(

    编辑:实际上,我并不需要注入和删除数据包,我只需要更改数据包数据就可以管理它。此外,同一个数据包中没有多个请求,跨多个数据包的单个请求不是问题。

2 个答案:

答案 0 :(得分:3)

您必须为您的服务器构建代理。客户端连接到代理,代理本身连接到服务器。它只是在客户端和服务器之间路由所有包。

但它现在能够截取特定消息并进行修改。想象一下过滤HTTP代理,它的工作方式相同。

答案 1 :(得分:1)

我在linux和freeBSD上有libpcap的个人经验,这是一种有助于捕获或注入数据包的低级库。我确实在IPV6网桥项目中使用它...但我知道它有一个Windows端口。 http://sourceforge.net/projects/libpcap/ 您可以让图书馆:

  1. 使用过滤器捕获数据包
  2. 从数据包中提取数据
  3. 您可以处理数据(修改它们)
  4. 使用相同的库重新注入它
  5. 但是你必须在一个非常原始的问题上处理内部数据。该库的最佳文档是其头文件中的注释,这是最新的信息。也许有一些更舒适的高级图书馆。