为什么需要扫描服务清单?
joggle的使用体验是用户自己添加端口、ip配置,对于普通用户来说对这些都不擅长。为了让joggle客户端能够有更好的使用体验,于是本人开始开发客户端程序。为了让功能能够自动发现服务,因此对ngrok再次开发实现内网端口扫描。
下图是joggle集成kscan通讯的原理图:
kscan的扫描结果如下所示:
[ { "Digest": "\"SSH-2.0-OpenSSH_8.9p1 Ub\"", "IP": "192.168.1.6", "Info": "Ubuntu Linux; protocol 2.0", "Keyword": "ssh", "Length": "42", "MatchRegexString": "^SSH-([\\d.]+)-OpenSSH_([\\w._-]+)[ -]{1,2}Ubuntu[ -_]([^\\r\\n]+)\\r?\\n", "OperatingSystem": "Linux", "Port": "22", "ProbeName": "TCP_NULL", "ProductName": "OpenSSH", "Response": "SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.11\r\n", "Service": "ssh", "URL": "ssh://192.168.1.6:22", "Version": "8.9p1 Ubuntu 3ubuntu0.11" } ]
那么我需要将json数组解析为我需要的数据结构,例如:名称、图标、本地ip+端口、协议。
这里就面临一个问题,选择使用(joggle-server)Java侧解析还是(ngrok)golang侧解析?
最后选择的java解析!!!
调试设备的服务清单,设备相关服务启动完成后,点击上面的【扫描服务清单触发本地扫描任务】就像NPC接到了一个任务一样。
点击扫描服务清单后,ngrok侧输出扫描的结果日志,并存储到conf/services.json
开发完,
扫描结果看一看