【问题标题】:How to test if packet is sent correct?如何测试数据包是否发送正确?
【发布时间】:2012-08-01 15:40:57
【问题描述】:

在我的应用程序中,我通过 原始套接字 将数据包发送到另一台计算机,而不是取回数据包并通过原始套接字将返回数据包写入另一台计算机。 我的应用程序是在 Ubuntu 上运行的 c++ 应用程序,使用 nfqueue。

我想测试计算机 1 和计算机 2 的发送数据包,以检查它们是否符合预期。 我需要编写一个自动化测试来检查我的程序,这个自动化测试需要监听 eth 加载发送的数据包并检查它们是否符合预期(ip、端口、有效负载)。

我正在寻找一种简单的方法(工具(带有简单的 API)、代码)来做到这一点。 我需要一种简单的方法来收听(自动)eth。 我更喜欢测试将检查发送者,但可能很难找到一个 api 来监听 eth(我通过原始套接字发送),所以一个建议的 API 来检查接收者的计算机也很好。 测试应用程序可以用c++、java、python编写。

【问题讨论】:

  • 我不太清楚你想做什么,但是像wireshark 这样的东西可以作为你的测试工具吗?
  • 我希望这个问题现在更清楚了。我需要自动化测试。
  • 测试要证明什么?测试期间没有发生损坏?如果您想要流量完整性,请使用加密签名。 IE。 TLS.
  • @Remus Rusanu,测试需要检查数据包是否发送正确。我的应用程序构建它们并将它们发送到这 2 台计算机,我需要进行白盒测试以查看发送的数据包是否正确。
  • 您为什么使用原始套接字而不是 TCP/IP 或 UDP/IP 等已建立的协议?您意识到您需要以 root 身份运行才能创建原始套接字,对吧?

标签: c++ python testing networking


【解决方案1】:

检查数据包是否已正确发送的唯一方法是在接收端验证其完整性。

【讨论】:

  • 你建议如何检查它(自动化)。我愿意并且想要妥协,并且会通过倾销或收听发件人的 eth 来检查发送的内容。
  • 您可以检查格式、大小等。确保使用 TCP,因为它更可靠。
  • 我正在寻找一个api来捕获发送的数据包
  • 我不认为你会为此找到一个 api。我什至不确定我是否理解你现在的问题......你想在哪里捕获数据包?在客户端还是服务器端?如果您的答案是服务器,那么捕获您正在发送的数据包绝对没有意义,因为您首先应该知道您正在发送什么。
  • 是的,这个问题对我来说也没有意义。哦,好吧,我试过了
【解决方案2】:

自动生成大量随机数据包列表,将列表提供给两台计算机并开始发送它们,并在收到时根据列表检查它们。计算机 1 将发送,然后等待计算机 2 的回复。计算机 2 将检查数据包,然后发送成功或失败数据包。在任一计算机上记录结果(没关系),然后您可以从日志文件中生成统计信息。如果需要,在两个方向上使用此方法来测试两个连接。在python中应该非常简单。

或者疯狂地使用汉明码: http://en.wikipedia.org/wiki/Hamming_code(维基) http://lionel.textmalaysia.com/hamming-code-in-python.html(解释和一些代码)

【讨论】:

  • 我正在寻找一个api来捕获发送的数据包
  • 那么你肯定做错了什么。捕获数据包应该是您工作中最简单的部分。停止使用原始套接字,除非你必须这样做,因为你最终会进入一个你不想去的地方。
【解决方案3】:

我在接收计算机上运行 tcpdump 并将所有数据包保存到文件中。 我用 python 分析了 tcpdump,并在测试中检查了数据包是否按预期发送。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    相关资源
    最近更新 更多