【问题标题】:Arduino Ethernet server: How to avoid denial of service?Arduino 以太网服务器:如何避免拒绝服务?
【发布时间】:2013-10-29 15:39:31
【问题描述】:

Arduino 以太网(板或屏蔽)最多支持 4 个连接。如果充当服务器,很容易造成拒绝服务:只需打开 4 个与 Arduino 的连接,不发送任何数据。服务器代码永远不会意识到连接已建立,因为 EthernetServer::available() 方法仅在连接有可用数据时返回 EthernetClient。因此,只要客户端维护它们,连接就会保持打开状态,从而阻止 Arduino 处理其他请求,而服务器在一段时间后没有机会关闭它们。

所以问题是:有没有办法在空闲连接上设置超时,也许在 Wiznet 芯片级别?

【问题讨论】:

  • 如果是这种情况,我不确定即使是空闲连接超时也有助于抵御大多数拒绝服务攻击,因为许多人一直在暴力破解他们的目标
  • 没错,但我更关心客户端中的错误或不良行为,而不是实际的恶意攻击。就我而言,Arduino 不是面向公众的。
  • 恕我直言,这是 Arduino 不适合作为服务器的众多原因之一。我建议选择马力更大的东西,例如。一个 RASPI 或一些 open-wrt ​​路由器。
  • 这种情况下马力绰绰有余(大部分CPU时间都花在了空转上)。我只需要一种方法在一段时间后关闭不活动的连接。

标签: arduino ethernet


【解决方案1】:

作为背景信息,对话框的 GET HTTP 模型被称为“无状态”,这意味着可以关闭连接然后重新打开而不会丢失信息。

但是,浏览器可以通过 HTTP 关键字请求保持连接打开。

允许服务器关闭连接,实际上 HTTP/1.1 定义了一条从服务器到浏览器的消息。

因此,在您控制所有软件(TCP/IP 堆栈和服务器代码)的 Arduino 中,您应该修改 WizNEt 库或添加您自己的包装器以使对话框超时并关闭它,独立浏览器在做什么。

因此,没有 DNS(或者至少是 DNS 的保持线路开放风格)。

获取 HTTP/1.1 规范(在网络上)以获取更多信息和细节。

【讨论】:

  • 谢谢,但我真正需要的是实现超时的方法。希望不修改原始库。顺便说一句,这与 HTTP 无关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-30
  • 1970-01-01
  • 2014-03-02
  • 2015-12-10
  • 1970-01-01
相关资源
最近更新 更多