You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用netcat或socat转发流量时如何添加HTTP头

解决方案

问题原因

sed卡死问题来自两层缓冲机制:

  • sed默认使用行缓冲模式,遇到无换行符结尾的HTTP payload时会持续等待输入结束,不会向下游传递内容
  • ncat默认的I/O缓冲也会阻塞管道数据传递,导致内容卡在最后一段无换行的payload处

方法1:调整缓冲参数的ncat+sed方案

通过stdbuf关闭进程缓冲,配合sed的无缓冲参数即可解决卡死问题,示例为插入X-Forwarded-For: 1.2.3.4头:

stdbuf -i0 -o0 ncat -lk localhost 1234 | stdbuf -i0 -o0 sed -u '0,/^\r$/s//X-Forwarded-For: 1.2.3.4\r\n/' | stdbuf -i0 -o0 ncat -v localhost 2345

参数说明:

  • stdbuf -i0 -o0:关闭对应进程的输入、输出缓冲
  • sed -u:启用sed的无缓冲模式,实时处理输入内容
  • 0,/^\r$/:限定仅匹配HTTP头末尾的第一个空行(HTTP协议规定头与payload之间通过仅含\r的空行分隔),仅在该位置插入自定义头不会修改payload内容

方法2:更简洁的socat方案

如果可以使用socat,无需手动调整缓冲参数,天然支持多并发连接,配置更简单:

socat TCP-LISTEN:1234,fork SYSTEM:"sed '0,/^\r$/s//X-Custom-Header: test\r\n/' | ncat localhost 2345"

其中fork参数支持同时处理多个连接请求,比原生ncat单连接模式适用性更强。

注意事项

  • 以上示例为向HTTP请求中插入请求头,若需要向返回的响应中插入头,需要调整匹配逻辑或配置socat的双向过滤规则
  • 若转发的是HTTPS加密流量,需要先完成TLS卸载后再执行头插入操作,无法直接修改加密后的流量内容
  • 自定义头内容需要遵循HTTP协议规范,末尾必须带\r\n,避免引发接收端解析错误

内容的提问来源于stack exchange,提问作者David Kennedy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 08:36:05