用 LD_PRELOAD 写魔法程序
💡
原文中文,约6600字,阅读约需16分钟。
📝
内容提要
作者利用 MTR 工具排查网络问题,开发了一个平台查询 IP 对应设备。通过 LD_PRELOAD 技术自定义 getnameinfo 函数,使 MTR 直接显示设备名称。尽管遇到日志打印和 Golang 程序死锁等问题,最终成功实现功能并发布。
🎯
关键要点
- 作者使用 MTR 工具排查网络问题,开发了一个平台查询 IP 对应设备。
- 通过 LD_PRELOAD 技术自定义 getnameinfo 函数,使 MTR 直接显示设备名称。
- MTR 支持 DNS PTR 反查,但内网 DNS 没有支持 PTR 记录。
- 使用 LD_PRELOAD 技术可以自定义 getnameinfo 函数的行为。
- 编写了简单的 C 语言程序验证 LD_PRELOAD 的可行性。
- 使用 Go 语言实现逻辑,但遇到日志打印和程序死锁等问题。
- 解决日志打印问题的方法是将日志输出到 stderr。
- Golang 程序在 fork 后出现死锁问题,最终用 C 语言实现逻辑解决了问题。
- 将程序打包成 deb 包发布到内网中,推荐使用 nfpm 工具。
🏷️
标签
➡️