实战笔记:当我想查端口却没装 Telnet 时,我决定自己写个工具

我从事于 IT 工作,经常会碰到各种奇葩的问题。其中的一项就是服务无法访问,当碰到这些情况,如何快速的排查问题?如果手边有电脑,那还好办,直接打开电脑找问题即可。如果手边没有电脑,我们怎么快速的定位问题?是服务挂掉了?还是服务器宕机了? 我的基本思路是这样的,先查看服务器是否宕机,如果服务器没有宕机,那么查看服务是否挂掉?如果服务没有挂掉,那么很大可能是数据造成的问题,或者程序 Bug。 某次我急需确认服务器上的一个端口是否正常开启,习惯性地打开 Windows 命令行准备敲下 telnet 命令。结果弹出的却是:“telnet 不是内部或外部命令”。这是让我抓狂的一刻。 由于系统刚重装,这个组件还没勾选。当我从控制面板找到它、安装、甚至可能还要重启系统时,这套复杂的操作让我陷入了反思:为了检测一个端口,至于这么麻烦吗? 更进一步想,如果我手头没有电脑,只有一部手机,我该如何快速判断服务器防火墙是不是忘了开? 痛点:环境依赖与生态限制 在实现这个功能之前,我有过两个思考维度: 环境依赖:无论是 Windows 的 Telnet 还是 Linux 的 nc,都依赖当前操作系统的环境配置。 小程序限制:微信小程序虽然有网络请求能力,但它必须配置服务器域名白名单。如果你想直接用小程序前端去探测一个随机的 IP 或端口,微信的底层安全机制是不允许的。 方案:Go 后端代劳,小程序只做“遥控器” 为了绕过这些限制,我在“豆子工具”里实现了一个远程端口检测功能。它的逻辑非常直接且高效: 前端交互:用户只需在小程序里输入目标服务器的 IP/域名 和 端口号。 后端核心:数据提交到我用 Go 编写的后端服务。 模拟连接:后端服务代替用户执行 TCP 连接探测。Go 语言的 net.DialTimeout 在这里非常实用,可以精准控制探测时间,避免由于网络超时导致的页面死等。 结果反馈:后端将“连接成功”或“连接失败”的结果返回给小程序展示。 那么如何操作呢? 1,访问服务器的 SSH 端口,查看是否通畅?如果程序返回开启,那么进行下一步。 2,访问服务端口,查看是否挂掉?如果程序返回开启,那么进行下一步。 3,查看其他用户是否这样的情况?如果是,大概率是程序 Bug,如果不是,大概率给这个用户的数据相关。 价值:随时随地的“运维眼” 自从这个功能上线后,我解决了很多尴尬的场景: 排查防火墙:在云厂商后台改了安全组策略后,掏出手机点一下,秒知是否生效。 现场交付:在客户现场没有电脑时,快速确认后端服务是否已经拉起。 零部署成本:再也不用担心当前电脑有没有装 Telnet 或 Netcat。 总结 很多时候,工具的意义并不在于它用了多么高深的算法,而在于它是否能在你最需要的时候,以最简单的方式解决那个微小却刺手的痛点。 这个小功能的背后,其实是 Go 语言并发网络模型的一个微小缩影。

2018-01-08 · 1 min · Eagle

实战笔记:知识真的就是金钱,聊聊我的局域网调试工具

在“豆子工具”的所有功能中,局域网调试工具(TCP/UDP/WebSocket) 并不是受众最广的,但它却是我最引以为傲的一个。 因为它让我真切地体会到了一句话:知识就是力量,知识就是金钱。 缘起:把调试器揣进口袋 做嵌入式开发或者网络协议调试的人都知道,以往测试局域网通信,必须背着电脑,接上串口线或网线,蹲在机柜旁守着。我当时就在想:既然微信小程序已经开放了网络通信的能力,为什么我不能做一个随身携带的调试器呢? 于是,我深度调用了小程序的 wx.createTCPSocket、wx.createUDPSocket 和 WebSocket API,在“豆子工具”里构建了一个完整的网络测试模块。它支持: 十六进制(Hex)与 ASCII 码切换 实时数据日志展示 局域网内稳定的数据收发 变现:从技术分享到“第一桶金” 工具做成后,我并没有藏着掖着,而是把实现原理和核心逻辑整理成文,发布到了微信开发者社区。 没过多久,一位用户通过那篇文章联系到了我。他在工业自动化领域遇到了一个难题:需要一套能够定制化采集设备数据的微信小程序工具,而协议正是基于 Modbus/TCP。 由于我的“豆子工具”已经打好了坚实的底层基础,我对原有的 TCP 调试模块进行了针对性的修改,迅速就适配出了满足他实际业务场景的采集方案。 虽然这笔订单带来的“第一桶金”数额并不算惊人,但它对我的意义非凡。它验证了一个逻辑:当你把一个细分领域的工具做到极致,并愿意分享出去时,价值自然会找上门来。 思考:底层逻辑的价值 很多开发者纠结于学习各种眼花缭乱的新框架,但其实最耐打的永远是底层逻辑。 通过开发这个调试工具,我深度钻研了 TCP 的三次握手、UDP 的无连接特性以及 Modbus 这种工业标准协议。正因为有了这些底层的积淀,当机会来临时,我才能在短短几天内就把“调试工具”变成“生产力工具”。 总结 现在,这个局域网调试模块依然是“豆子工具”里的核心功能。每当我在现场用手机直接调通一台设备时,我都会想起那个联系我的用户。 知识不仅能改变认知,真的能产生价值。

2018-01-06 · 1 min · Eagle