抓取 TCP 端口 banner,支持 tls

2016-04-19 11:29:40 +08:00
 ChiChou

写了一个扫描 banner 的工具,其实就是个极简版的 zgrab 。

zgrab 每个探针返回的数据 schema 都不一样,而且默认的 JSON 编码对二进制非常不友好,遇上蛋疼的 python 2 不停地报 UnicodeError 。怒而造了个轮子。目前只实现了直接回显(如 Telnet, SSH, 和 FTP ),带 payload (如 http ), tls (如 IMAPS 和 https )的情况,其实可以涵盖绝大多数抓 TCP 服务 banner 的场景了。

https://github.com/ChiChou/grab.js/blob/master/lib/index.js

调用:

const grabber = require('grab.js');
grabber.grab(ip, port)
  .payload(new Buffer('ping'))
  .run()
  .then(result => { /* 在这里读取 result.banner ,如为 tls 还会返回证书信息 */ })
  .catch(err => { /* 超时、目标不可达等错误 */ })

由于 http 探针需要设置 Host 头,所以接下来打算给 payload 增加字符串模板字段。

不支持 udp 协议,因为 udp 在 zmap 的探针里自带了 banner 功能。 zgrab 还支持一些工控协议,由于懒癌晚期,加上对我没太大用处,不打算做了。

与 zmap 组合,运行效果如下(在 Linux 下需要 sudo ):

5222 次点击
所在节点    Node.js
5 条回复
ljcarsenal
2016-04-19 13:55:58 +08:00
话说 node 4.0 支持 arrow function 和 class 语法么
123s
2016-04-19 14:02:28 +08:00
@ljcarsenal 最新版的 4.x 应该是支持的吧
Phant0m
2016-04-19 14:49:13 +08:00
zmap masscan 本身就支持部分端口 banner 的提取,其中就包括 ssh 。。。
Nightink
2016-04-19 14:59:07 +08:00
@ljcarsenal 支持的
ChiChou
2016-04-20 18:33:15 +08:00
@Phant0m 我已经吐槽了 zgrab 的问题才自己写的哦

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/272191

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX