Hacker News 中文摘要

RSS订阅

今日发现:无需curl,用Bash的/dev/TCP也能发起HTTP请求 -- TIL: You can make HTTP requests without curl using Bash /dev/TCP

文章摘要

本文介绍了在没有curl或wget的容器中,如何利用bash的/dev/tcp功能手动发送HTTP请求。通过打开TCP连接并直接写入HTTP请求行和头部,即可获取服务器响应,无需额外工具。

文章总结

标题:在没有curl的容器中使用bash /dev/tcp发起HTTP请求

核心内容: 1. 问题场景: - 需要在精简版Docker容器(无curl/wget等工具)中检查服务连通性 - 目标是对内部服务发起简单的GET /health请求

  1. 解决方案: 使用bash内置的/dev/tcp功能手动构造HTTP请求: bash exec 3<>/dev/tcp/service/8642 # 建立TCP连接 printf 'GET /health HTTP/1.1\r\nHost: service\r\nConnection: close\r\n\r\n' >&3 # 发送HTTP请求 cat <&3 # 读取响应

  2. 关键细节:

  • /dev/tcp是bash的虚拟文件系统(实际不存在于磁盘)
  • 必须包含Connection: close头部避免连接挂起
  • 支持添加自定义头部(如Authorization)
  • 仅适用于HTTP明文通信(不支持HTTPS)
  1. 重要限制:
  • 非完整HTTP客户端(无重定向/压缩/TLS等处理)
  • 仅bash支持(非POSIX标准)
  • 需编译时启用--enable-net-redirections选项
  • 旧版Debian系统可能默认禁用该功能
  1. 适用场景:
  • 精简容器环境下的快速调试
  • 临时性连通性检查
  • 无法安装额外工具时的应急方案

(注:删减了关于历史版本兼容性等次要细节,保留了核心方法论和关键注意事项)

评论总结

总结评论内容:

  1. 支持观点:认为Bash的/dev/tcp功能很酷且实用
  • 主要论据:在缺少curl/wget等工具时非常有用,适合简单测试和调试
  • 关键引用: "I ran into this while checking connectivity between containers...Pretty cool!" (mrshu) "Yes, it used to be my goto few times when some devices tried to lockdown everything" (devsda)
  1. 反对观点:认为这不是真正的HTTP客户端,存在风险
  • 主要论据:无法处理完整HTTP协议,可能在实际使用中出现问题
  • 关键引用: "No, it can not. Bash lets you open TCP sockets...will break" (basilikum) "HTTP1.1 seems like such a simple protocol but in the real world you need to deal with proxies..." (AndrewStephens)
  1. 安全担忧:可能被滥用绕过安全限制
  • 主要论据:常用于攻击场景或绕过安全限制
  • 关键引用: "It's interesting that most of the comments here are about using this feature to bypass security restrictions" (dchest) "This is an old post-compromise trick used when an attacker needs to download a payload" (washbasin)
  1. 怀旧观点:联想到早期网络技术
  • 主要论据:让人想起telnet等早期网络交互方式
  • 关键引用: "Reminds me of telnetting to port 80 to make a get request years ago" (alienbaby) "As a kid in the late 90s my mind was blown when I realized I could telnet to port 80..." (xenadu02)
  1. 实用案例:在特殊场景下的应用
  • 主要论据:在资源受限环境中特别有用
  • 关键引用: "I ended up writing a shell script that used this feature of bash to send out heart beats" (saidinesh5) "I discovered this bash trick by chance when...healthCheck the Envoy's official OCI image" (geoctl)