如何在Bash中伪造光标位置以响应\033[6n ANSI代码?
伪造终端光标位置响应(SSH场景)
要伪造终端对\033[6n查询的响应,你可以通过拦截SSH会话中的交互数据,替换默认的光标位置响应。以下是几种可行的方案:
方法一:使用Expect脚本拦截查询并返回自定义坐标
Expect可以自动处理交互式SSH会话,捕获服务器发送的\033[6n查询指令,然后返回你指定的坐标响应。
创建一个名为fake_cursor.exp的脚本:
#!/usr/bin/expect # 替换成你要伪造的行号和列号 set fake_row 1000 set fake_col 2000 # 启动SSH会话,替换为你的服务器地址和用户名 spawn ssh user@your-server # 捕获服务器发送的\033[6n查询,返回自定义响应 expect { "\033\[6n" { send "\033\[${fake_row};${fake_col}R" exp_continue } eof }
赋予脚本执行权限:
chmod +x fake_cursor.exp
运行脚本即可启动带伪造光标响应的SSH会话:
./fake_cursor.exp
方法二:用Socat和Shell脚本包装SSH会话
通过Socat建立双向管道,拦截服务器的输出,实时替换\033[6n查询的响应。
创建一个bash脚本fake_cursor.sh:
#!/bin/bash # 自定义坐标 FAKE_ROW=1000 FAKE_COL=2000 # 替换为你的SSH命令 SSH_CMD="ssh user@your-server" # 使用socat拦截数据,替换响应 socat - EXEC:"$SSH_CMD",pty,stderr,setsid,sigint,sane 2>&1 | \ sed -u "s/\x1b\[6n/\x1b\[${FAKE_ROW};${FAKE_COL}R/g"
赋予执行权限后运行:
chmod +x fake_cursor.sh ./fake_cursor.sh
注意事项
- 确保系统已安装
expect或socat,可通过包管理器安装(如apt install expect socat) - 自定义坐标需为正整数,无数值上限(只要服务器能处理)
- 两种方案都会自动拦截服务器的多次光标查询,并持续返回自定义响应
内容的提问来源于stack exchange,提问作者Aditya Prakash
相关产品推荐
相关产品推荐

