在单元测试中发送错误的UDP/IP数据报(故意)

本文关键字:IP 数据报 故意 UDP 单元测试 错误 | 更新日期: 2023-09-27 18:08:18

我目前正在为我的公司正在开发的一个设备(无线电编码器)开发单元测试。

可以通过SNMP(仅v1)访问各种统计数据,其中您可以获得由于各种原因而丢弃的UDP数据报的数量。

我希望能够发送一个数据包包装在一个错误的UDP报头与各种错误(校验和错误,错误的IP地址在报头等),以确保错误计数器的行为正确。

我没有找到任何关于如何实现这一点的信息,我能够找到的大多数高级网络功能(显然)正确地自动计算校验和。

在单元测试中发送错误的UDP/IP数据报(故意)

你必须求助于Raw Sockets:

http://www.winsocketdotnetworkprogramming.com/clientserversocketnetworkcommunication8f_3.html和http://www.winsocketdotnetworkprogramming.com/clientserversocketnetworkcommunication8h.html

请注意局限性:http://msdn.microsoft.com/en-us/library/windows/desktop/ms740548(v=vs.85).aspx

在Windows 7、Windows Vista、Windows XP with Service Pack 2 (SP2)和Windows XP with Service Pack 3 (SP3)上,通过原始套接字发送流量的能力在以下几个方面受到限制:

TCP数据不能通过原始套接字发送。UDP数据报无效的源地址不能通过原始套接字发送。IP源任何传出UDP数据报的地址必须在网络上存在接口或数据报被丢弃。这个变化是为了限制恶意代码创建分布式拒绝服务的能力攻击和限制发送欺骗数据包(TCP/IP数据包)的能力伪造的源IP地址)。类对bind函数的调用不允许使用IPPROTO_TCP协议的原始套接字。注意:绑定使用原始套接字的函数允许用于其他协议(IPPROTO_IP,IPPROTO_UDP,或IPPROTO_SCTP,例如)