使用 golang gopacket 实现进程级流量监控

如何分析某服务器上哪个进程的流量多 ? 猜不少人都有类似的需求, 社区里已经有 c 写的 nethogs 工具, 该工具很方便的获取流量较高的 TOP N 进程列表。

既然有 nethogs 工具,为什么还需要用 goalng 来实现一遍 ?主要是 nethogs 不够灵活,没有开放接口供其他程序调用。对的,我们现在就需要这类接口。当然,不是每个公司都有这类需求,大家通常都是当流量异常时,登上去分析下异常流量。

代码

项目名为 go-netflow, 代码已经提交到 github。

地址为 https://github.com/rfyiamcool/go-netflow,有兴趣的可以看看,记得点 star 哈。

从设计到流量测试完毕,用了差不多 两天半 的时间。go-netflow 的接口方面还算完善,最少满足了我们容器云团队及 sre 的需求。但他的 cli 终端部分很是简陋,有兴趣的同学可以帮忙提交 pr。

实现

像 promethues, openfalcon 这类开源监控软件,通过 /proc/net/snmp/proc/net/netstat 获取连接和流量信息。

  • /proc/net/snmp 文件只是提供了主机各层的IP、ICMP、ICMPMsg、TCP、UDP详细数据

  • /proc/net/n

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用gopacket构建HTTP 302重定向头的示例代码: ``` package main import ( "fmt" "github.com/google/gopacket" "github.com/google/gopacket/layers" "net" ) func main() { srcIP := net.ParseIP("192.168.0.1") dstIP := net.ParseIP("192.168.0.2") // 创建一个新的 Ethernet layer ethernetLayer := &layers.Ethernet{ SrcMAC: net.HardwareAddr{0x00, 0x11, 0x22, 0x33, 0x44, 0x55}, DstMAC: net.HardwareAddr{0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb}, EthernetType: layers.EthernetTypeIPv4, } // 创建一个新的 IPv4 layer ipLayer := &layers.IPv4{ Version: 4, Id: 1, SrcIP: srcIP, DstIP: dstIP, Protocol: layers.IPProtocolTCP, } // 创建一个新的 TCP layer tcpLayer := &layers.TCP{ SrcPort: layers.TCPPort(1234), DstPort: layers.TCPPort(80), SYN: true, Seq: 100, } // 创建一个新的 HTTP layer httpLayer := &layers.HTTP{ Response: true, Version: layers.HTTPVersion11, StatusCode: 302, Reason: "Found", Headers: layers.HTTPHeaders{ "Location": []string{"http://example.com/newpath"}, }, } // 计算 TCP 校验和 tcpLayer.SetNetworkLayerForChecksum(ipLayer) // 创建一个 PacketBuilder builder := gopacket.NewPacketBuilder() builder.AddLayer(ethernetLayer) builder.AddLayer(ipLayer) builder.AddLayer(tcpLayer) builder.AddLayer(httpLayer) // 完成 PacketBuilder 并获取最终的 Packet packet := builder.Build() fmt.Println(packet) } ``` 在这个示例中,我们构建了一个包含 Ethernet、IPv4、TCP 和 HTTP 层的数据包。HTTP 层包含一个 302 重定向头,其中包含一个 Location 值。在构建时,我们还计算了 TCP 校验和。最终,我们打印了构建的 Packet 对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值