linux网络代码分析工具,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网络分析工具设计

13f4bca0b4232a34956379c0692b8740.png

libnetgo1.jpg

抓包分析与流量统计逻辑

78fef8ceb77cb5a4a70249702a8b8f65.png

netlibgo2.jpg

流量统计: 使用大MAP对每一个item项进行统计, item内包含一直

在累计的in/out值,上一次统计时间(lastAccTime)上一次统计值(lastAccIn/lastAccOut)。有了这些信息数据则可以创建一个goroutine

来间隔性计算:

差值(累计in/out总值 - 上一次统计值) / 时间差(当前时间 - 上一次统计时间) = 速率

最后实现工具的显示效果

f23b6005e5bf125cc981534dd75bc1ce.png

console端

6bcd96090ed56d65cc818f07dbebc40d.png

webui端

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值