文章总结: rlwrap是一个实用的命令行工具,用于包装其他命令行程序,为其提供行编辑和命令历史功能。它解决了许多交互式程序无法使用方向键、没有命令历史、无法Tab补全等问题,特别适用于增强反向Shell、sqlplus、PythonREPL等场景。通过自定义补全功能,可进一步提升工作效率,是安全测试和日常运维的实用工具。
综合评分: null
文章分类: 安全工具,终端安全,红队,WEB安全
惊喜的命令包装工具-rlwrap
原创
Titans
骏之安科技知识库
2025年11月24日 07:00
北京
rlwrap 是一个非常实用的命令行工具,它用来“包装”其他命令行程序,为其提供行编辑和命令历史功能。
1. rlwrap 是什么?为什么需要它?
许多命令行程序(尤其是那些用于调试、连接或交互的程序)自身没有提供友好的行编辑和历史记录功能。具体表现为:
- • 无法使用方向键:按上、下、左、右键会出现像
^[[A,^[[C这样的乱码。 - • 没有命令历史:不能按
上箭头键找回之前输入的命令。 - • 无法使用 Tab 补全:不能自动补全文件名或命令。
- • 编辑困难:不能方便地移动光标到行中间进行修改。
rlwrap** 就是为了解决这些问题而生的。** 它通过调用 GNU Readline 库,为这些“简陋”的交互程序加上了一个强大的编辑外壳。
2. 主要功能和优势
- 1. 行编辑:可以使用方向键、Home/End 键移动光标。
- 2. 持久化命令历史:可以保存输入过的命令,下次启动程序时仍然可用。
- 3. Tab 补全:支持文件名补全,还可以配置自定义补全(如 SQL 关键字、编程语言函数等)。
- 4. 搜索历史:使用
Ctrl + R反向搜索历史命令。 - 5. 无侵入性:你不需要修改目标程序的源代码,只需要在启动命令前加上
rlwrap即可。
3. 基本使用方法
基本语法非常简单:
rlwrap [rlwrap选项] <要运行的程序> [程序的参数]
最经典的例子:增强 Netcat 用于反向 Shell
在使用 Netcat 接收一个反向 Shell 时,默认的 Shell 环境非常难用。
没有 rlwrap 的情况(不推荐):
nc -lvp 4444
连接成功后,你获得的 Shell 无法使用方向键,体验极差。
使用 rlwrap 的情况(强烈推荐):
rlwrap nc -lvp 4444
现在,当被控端连接上来后,你在控制端获得的 Shell 将支持:
- • 使用
上/下箭头查看命令历史。 - • 使用
左/右箭头移动光标编辑命令。 - • 使用
Ctrl + R搜索历史命令。 - • 使用
Tab补全命令和文件名(补全的是你控制端本地的文件,对于远程 Shell 的路径可能不准,但命令历史是核心优势)。
这极大地提升了交互体验和效率。
4. 其他常见使用场景
4.1 增强 Oracle 的 sqlplus
sqlplus 默认没有历史记录,写错 SQL 语句修改起来很麻烦。
rlwrap sqlplus username/password@database
现在,你可以用上箭头找回之前执行的 SQL 语句了。
4.2 增强 Python/Node.js/其他语言 REPL
某些语言的基本 REPL 环境功能较弱。
rlwrap python3
# 或者
rlwrap node
4.3 增强 telnet 或调试其他 TCP 服务
当你手动用 telnet 或 nc 连接 SMTP、POP3 等服务器时,rlwrap 也能记录你输入的命令。
rlwrap telnet mail.example.com 25
5. 常用选项
| 选项 | 描述 |
| — | — |
| -a , --always-readline | 始终使用 readline 模式,即使检测到程序有自己的行编辑功能。 |
| -A , --ansi-colours-aware | 使提示符和颜色输出工作得更好。 |
| -c | 支持文件名补全。 |
| -C , --complete-files | 强制进行文件名补全(默认行为)。 |
| -f``<文件名> | 指定一个文件作为额外的补全词列表。 |
| -H``<文件名> , --history-filename | 指定用于存储历史记录的文件(默认是 ~/.<程序名>_history)。 |
| -l``<文件名> , --log-file | 将所有输入输出记录到指定文件,用于调试。 |
| -N | 与 -C 相反,禁用文件名补全。 |
| -s``<最大行数> | 设置历史文件的最大行数(默认 500)。 |
6. 高级用法:自定义补全
rlwrap 的强大之处在于可以为其包装的程序定义自定义的补全单词。
例如,为 sqlplus 创建一个 SQL 关键字补全文件:
- 1. 创建一个补全词文件,比如
~/.sqlplus_completions:
SELECT
FROM
WHERE
INSERT
UPDATE
DELETE
CREATE
TABLE
DATABASE
COMMIT
ROLLBACK
-- 可以添加任何你常用的 SQL 关键字或表名
- 2. **使用
-f选项启动 **rlwrap:
rlwrap -f ~/.sqlplus_completions sqlplus scott/tiger@ORCL
现在,在 sqlplus 中,输入 SEL 然后按 Tab,它会自动补全为 SELECT。这极大地提升了输入长 SQL 语句的速度和准确性。
你可以为不同的程序(如 python3, redis-cli 等)创建不同的补全文件。
7. 安装
- • Debian/Ubuntu:
sudo apt install rlwrap
- • CentOS/RHEL/Fedora:
sudo yum install rlwrap
# 或者
sudo dnf install rlwrap
- • macOS:
brew install rlwrap
总结
rlwrap 是一个看似简单但能极大提升工作效率的工具。它的核心价值在于:
- • 补救缺陷:为那些设计简陋的交互式命令行程序“打补丁”。
- • 提升体验:通过提供历史记录和行编辑,让交互过程不再痛苦。
- • 高度可定制:通过自定义补全词,可以适配各种专业场景。
当你觉得某个命令行工具用起来“反人类”时,试试在它前面加上 rlwrap,很可能会有惊喜!
–END–
觉得不错,可以关注,点赞,转发,如果需要技术援助,可以联系我们,期待您的莅临
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:骏之安科技知识库 Titans《惊喜的命令包装工具-rlwrap》