Linux网络流量分析工具实现

最近开展运维项目的需求须对业务服务器内部之间访问关系进行梳理(可用于后续的访问策略控制),以及对于服务器网络连接统计(便于后续问题处理时的调试以及历史回溯)。初期想法设计是使用现有linux工具如iftop进行整合开发与集成,但这样对于运维整合和可控性太差,主要考虑如下:

  • 目前开源的工具iftop/nethogs等基本上都是命令式展示,未提供API方式或web方式整合。
  • 如果我只需要查看TCP连接,如同netstat,无法控制开启/关闭抓包统计功能以便释放抓包分析所带来的资源损耗。
  • Golang源码实现工具的没有找到,基本上都为C实现。

后查了一下网络上相关工具的实现原理与源码,整理自己的思路,于是决定自己开发实现(使用golang开发)

基础实现思路

    分析系统/proc/net/tcp的tcp链接信息(local/remote/uid/inode),通过
inode查找PID(/proc/PID/fd下socket对应inode号),通过uid查找对应用
户名(/etc/passwd记录),通过pid查找进程执行文件信息(/pro/PID/exe),
此时通过/proc下的各信息统计与分析完"pid/username/local/remote/program File”。
对于TCP连接流程的实时统计则通过libpcap抓包库进行抓包分析与统计,其对应索
引为“local:port-remote:port”。最后将实现输出显示Console和webUI展示输出。
webUI实现实时数据同步显示可通过websocket技术来实现。

Linux网络分析工具设计

libnetgo1.jpg

抓包分析与流量统计逻辑

netlibgo2.jpg
流量统计: 使用大MAP对每一个item项进行统计, item内包含一直
在累计的in/out值,上一次统计时间(lastAccTime)上一次统计值(lastAccIn/lastAccOut)。有了这些信息数据则可以创建一个goroutine
来间隔性计算:
差值(累计in/out总值 - 上一次统计值) / 时间差(当前时间 - 上一次统计时间) = 速率 

最后实现工具的显示效果

console端
webui端

源码地址:
https://github.com/gotoolkits/libnetgo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 4,367评论 0 5
  • 这是这次战争中希腊人最大的一次军事行动,照我看来,是希腊历史中我们所知道的最大的一次军事行动——对于胜利者说来,是...
    唯水忆音阅读 1,449评论 2 5

友情链接更多精彩内容