sniffer: 一个现代化的全平台进程流量分析工具 - V2EX
爱意满满的作品展示区。
chenjiandongx

sniffer: 一个现代化的全平台进程流量分析工具

  •  3
     
  •   chenjiandongx Nov 18, 2021 4478 views
    This topic created in 1637 days ago, the information mentioned may be changed or developed.

    sniffer 项目地址https://github.com/chenjiandongx/sniffer

    在 Linux 系统中,进程的多数指标数据都能在 /proc/${PID} 路径下取到,但网络 IO 的数据,比如网络流量或者进出网络包吞吐量这类的是没有办法直接读取到的。一番搜索后,在 Github 上找到两个工具,imsnif/bandwhichraboof/nethogs,前者使用 Rust 编写,后者使用 C++ 编写。bandwhich 界面精巧并且支持以多种视角查看流量数据,像 Socket 连接、进程以及远程端点,但不支持传入 BPF 过滤条件,比如只想查看某个端口的流量数据或者过滤某个 IP 的数据。而 nethlogs 支持 BPF 过滤条件但只能以进程维度查看数据。

    那问题就来了,能不能两者兼得呢?既能使用 BPF 过滤特性又能以多种视角查看数据。

    当然可以,自己动手写一个不就行了。

    chenjiandongx/sniffer 是一个 Golang 编写的,支持 TCP/UDP 协议,用于查看分析进程或者连接的流量情况的命令行工具。既然要查看进程流量,那如何高效的将网络包的信息将进程信息关联起来就显得十分重要了。在 sniffer 中,Linux 系统下使用的是类似 ss 命令的 netlink socket ,只获取 ESTABLISHED 状态的连接,而不是直接读取 /proc/net/* 下面的数据,这种做法更高效,因为主机上可能存在大量的 TimeWait 的链接,这些链接是不会有流量的,所以无需纳入统计范围内。而 MacOS 上则用的是 losf 命令,也是仅获取 ESTABLISHED 状态的连接。Windows 上就比较简单粗暴了,直接使用 shirou/gopsutil 提供的 API 。

    用法介绍

     sniffer -h # A modern alternative network traffic sniffer. Usage: sniffer [flags] Examples: # processes mode for pid 1024,2048 in MB unit $ sniffer -p 1024 -p 2048 -m 2 -u MB # only capture the TCP protocol packets with lo,eth prefixed devices $ sniffer -b tcp -d lo -d eth Flags: -b, --bpf string specify string pcap filter with the BPF syntax (default "tcp or udp") -d, --devices-prefix stringArray prefixed devices to monitor (default [en,lo,eth,em,bond]) -h, --help help for sniffer -i, --interval int interval for refresh rate in seconds (default 1) -l, --list list all devices name -m, --mode int view mode of sniffer (0: bytes 1: packets 2: processes) -n, --no-dns-resolve disable the DNS resolution -p, --pids int32Slice pids to watch, empty stands for all pids (default []) -u, --unit string unit of traffic stats in processes mode, optional: B, KB, MB, GB (default "KB") -v, --version version for sniffer 

    截图预览

    Bytes Mode: 以流量视角查看数据

    Packets Mode: 以网络包视角渲染数据。

    Processes Mode: 进程整体维度展示数据。

    17 replies    2021-11-22 23:28:46 +08:00
    nasmatic
        1
    nasmatic  
       Nov 18, 2021
    给一代目打 call
    defunct9
        2
    defunct9  
       Nov 18, 2021
    不错,不错
    sbilly
        3
    sbilly  
       Nov 18, 2021
    赞~
    能生成抓包文件么?
    chenjiandongx
        4
    chenjiandongx  
    OP
       Nov 18, 2021
    @sbilly 抓包文件暂时还不支持 是想在使用的时候同时生成文件 然后退出进程的时候将抓包文件落盘?
    chenjiandongx
        5
    chenjiandongx &bsp;
    OP
       Nov 18, 2021
    @nasmatic 钓鱼佬永不空军
    wellsc
        6
    wellsc  
       Nov 18, 2021
    Archeb
        7
    Archeb  
       Nov 18, 2021
    很直观,正是我需要的,赞!
    guyskk0x0
        8
    guyskk0x0  
       Nov 18, 2021
    很不错,求发布单文件可执行包~
    sbilly
        9
    sbilly  
       Nov 19, 2021
    @chenjiandongx 把制定的网络数据包写入磁盘
    sola97
        10
    sola97  
       Nov 19, 2021
    不错,我为了编译二进制还特地放到 docker 里编译完再拿出来,有 release 就好了
    chenjiandongx
        11
    chenjiandongx  
    OP
       Nov 19, 2021
    @guyskk0x0 这个之前试过提供过 不过有开发者反馈不能直接使用 参见 issue https://github.com/chenjiandongx/sniffer/issues/1
    chenjiandongx
        12
    chenjiandongx  
    OP
       Nov 19, 2021
    @sola97 同上
    chenjiandongx
        13
    chenjiandongx  
    OP
       Nov 19, 2021
    @sbilly 是为了拿到 wireshark 上分析吗?
    guyskk0x0
        14
    guyskk0x0  
       Nov 19, 2021
    @chenjiandongx #11 有点遗憾,看来是依赖系统的 libpcap 库,导致没法静态编译
    chenjiandongx
        15
    chenjiandongx  
    OP
       Nov 19, 2021
    如果是相同或者兼容的 libpcap 库应该可以,我试过在 macos 上编译 windows 版本,放到 windows 能跑起来
    sbilly
        16
    sbilly  
       Nov 20, 2021
    zhaoawd
        17
    zhaoawd  
       Nov 22, 2021
    正好需要一个流量监控工具
    About     Help     Advertise     Blog     API     FAQ     Solana     3667 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 49ms UTC 04:39 PVG 12:39 LAX 21:39 JFK 00:39
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86