繁体   English   中英

发送任意(原始)数据包

[英]Sending arbitrary (raw) packets

我已经看到它在其他地方问了但是没有人满意地回答:我怎样才能接收和发送原始数据包?

通过“原始数据包”,我的意思是,我必须生成所有头和数据,使字节完全是任意的, 而且我不以任何方式限制。 这就是为什么Microsofts RAW套接字无法工作的原因,因为您无法发送具有错误源地址的TCP或UDP数据包。

我知道您可以使用WinPCAP发送我想要的数据包,但是您无法使用它接收原始信息,我也需要这样做。

首先确定要测试格式错误的数据的协议层:

以太网络

如果您希望生成和接收带有错误以太网校验和的无效以太网帧,那么您或多或少会因为校验和通常在硬件中完成而失败,并且在它们不是的情况下,NIC的驱动程序执行校验和并且至少在Windows上没有办法解决这个问题。 NetBSD为大多数在OS驱动程序中执行以太网校验和的驱动程序提供了该选项。

另一种方法是购买专用硬件(例如Napatech的卡,你可能会找到更便宜的硬件),它提供了一个用于发送和接收以太网帧的API,但是你想要的无效。

请注意,通过发送无效的以太网帧,接收端或中间的路由器发送只会丢帧,它们永远不会到达应用程序或OS IP层。 您将在接收端测试NIC或NIC驱动程序。

IP

如果你想要的只是发送/接收无效的IP数据包,winpcap允许你这样做。 生成数据包,设置winpcap来捕获数据包,使用winpcap发送..

请注意,具有无效IP校验和其他无效字段的数据包,接收应用程序运行的TCP / IP堆栈将丢弃IP数据包,发送器和接收器之间的任何IP /第3层路由器都会丢弃。 他们无法联系到申请表。 如果您正在生成有效的IP数据包,您还需要自己生成有效的UDP并使用有效的TCP数据包实现TCP会话,以便应用程序处理它们,否则它们也会被TCP / IP丢弃堆

您将在接收端测试TCP / IP堆栈的下半部分。

TCP / UDP

这与发送/接收无效IP数据包没有什么不同。 你可以使用winpcap完成所有这些工作,但只要以太网/ IP头没问题,路由器就不会丢弃它们。 应用程序不会收到这些数据包,它们将被TCP / IP堆栈丢弃。 您将在接收端测试TCP / IP堆栈的上部。

应用层

这是实际测试应用程序的(理智)方式(除非您的“应用程序”实际上是TCP / IP堆栈,或更低)。 您可以使用任何应用程序使用套接字发送/接收数据,但可以根据需要生成格式错误的应用程序数据。 应用程序将接收此数据,它不会被较低的协议层丢弃。

虽然使用TCP的一种特定形式的测试可能很难测试 - 即改变发送的TCP段,如果您想测试应用程序正确地将TCP数据解释为流。 (例如,您希望在5个段中发送字符串“hello”,并以某种方式使接收应用程序逐个读取()字符。 如果您不需要速度,通常可以通过在发送中插入暂停并关闭nagel的算法(TCP_NDELAY)和/或调整NIC MTU来获得该行为。

请记住,TCP流中具有较低级别协议的任何muckery,例如导致其中一个数据包具有无效/不同的IP源地址,只会被较低级别的层丢弃。

您将测试在TCP / UDP(或任何其他IP协议)上运行的应用程序。

备择方案

  • 切换到另一个操作系统,你至少可以使用原始套接字,而不受最近窗口的限制。

  • 基于上面的“以太网”或“IP”替代方案实施透明的插入式插入解决方案。 即你有正常的客户端应用程序,您的正常服务器应用程序。 你在它们之间断开电缆,插入带有2个NIC的盒子,在那里以编程方式改变收到的帧的字节,然后在另一个NIC上再次发送它们。 这样您就可以轻松地在系统中引入数据包延迟。 Linux的netfilter已经具备了这种功能,您可以轻松地构建它,通常只需配置或编写脚本。

  • 如果您可以更改要测试的接收应用程序,请让它从其他内容(如文件或管道)读取数据,并根据需要随机提供字节/数据包。

  • 混合模型,主要用于TCP应用程序测试,但也可用于测试UDP ICMP响应。 使用套接字设置TCP连接。 使用套接字发送无效的应用程序数据。 引入随机格式错误的数据包(比使用设置TCP会话的原始套接字编程然后引入较低层错误容易得多)。 发送格式错误的IP或UDP / TCP数据包,或者使用WinPcap发送ICMP数据包,尽管使用套接字代码与winpcap代码进行通信,这样您的地址/端口就会正确,这样接收应用程序就可以看到它。

  • 查看NS / 2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM