什么是用于单元测试的好的无效IP地址?

Rya*_* R. 45 ip unit-testing tcp

我正在为客户端库编写单元测试.我想测试连接无效端口和无效的IP.什么是一个好的IP地址使用,不会在某个地方路由?我不想对运行单元测试的机器所在的网络做出任何假设.LOCALHOST似乎是一个糟糕的选择,因为这是运行服务器组件的有效机器,我想分别测试无效端口.是否在IPv4规范中的某处保留了INVALID-IP?

Jon*_*han 53

根据RFC 5737:

提供块192.0.2.0/24(TEST-NET-1),198.51.100.0/24(TEST-NET-2)和203.0.113.0/24(TEST-NET-3)用于文档.

这意味着您可以使用以下范围中的IP地址:

  • 192.0.2.0 - 192.0.2.255
  • 198.51.100.0 - 198.51.100.255
  • 203.0.113.0 - 203.0.113.255

  • @Bruno:问题:*"使用哪个好的IP地址不可能在某处路由?"*来自链接文档:*"网络运营商应该添加[TEST-NET-1,TEST-NET-2和TEST-NET-3阻塞到不可路由的地址空间列表,如果部署了数据包过滤器,那么这个地址块应该被添加到数据包过滤器."*对我来说似乎很好. (4认同)
  • 为了完整起见,我认为 `2001:db8::/32` 也应该出现在这个答案中。 (2认同)

Fré*_*idi 11

如果您正在寻找一个真正无效的IP地址(而不是一个不可路由的IP地址),您可以利用A类地址的第一个字节不能的事实0.

例如:

0.42.42.42
Run Code Online (Sandbox Code Playgroud)

  • 我认为在这种情况下使用无效的IP地址可能会有风险.如果正在测试的应用程序使用的外部组件/ API在提供无效IP地址时表现不同,该怎么办?(很难解释我的意思.但是,假设您将IP地址保存在具有IP地址类型的列中的数据库中.数据库可能会返回错误,因为提供的IP地址无效.当发生这种情况时,您的单元测试失败,但不是因为你自己的错.) (4认同)

小智 5

Jonathan 的答案(及其评论)对 IPv4 有好处

如果您的测试支持 IPv6,它有一个明确的黑洞,您可以使用:0100::/64RFC 6666中定义

使用 254.254.254.254 很诱人,因为它很容易记住,但在某些平台上,它会立即给出“传输失败。一般失败”,而不是实际超时,这可能是无效的单元测试。