【问题标题】:Changing tcp/ip packets c++ or java更改 tcp/ip 数据包 c++ 或 java
【发布时间】:2012-03-01 15:54:48
【问题描述】:

情况是这样的。网络中有服务器和客户端。他们的交流方式是这样的:

  1. 客户端发送某些功能的请求。
  2. 服务器向客户端发送函数参数。
  3. 客户端尝试执行功能并向服务器发送响应。
  4. 服务器向客户端发送它应该显示的数据。

但有时客户端无法执行功能并发送错误。我想从第 2 步捕获所有数据包,分析它们(我已经有工具),防止其中一些到达客户端,用我的程序处理它们并像第 3 步一样形成数据包。这必须在客户端完成边。我无法访问服务器和客户端。

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

感谢您的帮助! 我试图用谷歌搜索如何更改数据包,但我得到的只是未回答的问题和嗅探器=(

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

【问题讨论】:

    标签: java c tcp packets


    【解决方案1】:

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

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

    【讨论】:

    • +1 在同一个数据包中可以有多个请求,在多个数据包中可以有一个请求,这毫无价值。此外,您不能简单地将数据包注入或从流中删除数据包,因为它们已编号。
    • 谢谢,我从 boost 示例中构建了代理,它完成了我需要的事情。
    【解决方案2】:

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

    1. 使用过滤器捕获数据包
    2. 从数据包中提取数据
    3. 您可以处理数据(修改它们)
    4. 使用同一个库再次重新注入

    但是您必须以相当原始的方式处理内部数据。该库的最佳文档是其头文件中的 cmets,这是最新的信息。也许有一些更舒适的高级库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      • 2018-09-04
      • 2012-03-30
      • 1970-01-01
      • 2016-04-19
      相关资源
      最近更新 更多