sniffer: 一个现代化的全平台进程流量分析工具 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
chenjiandongx
V2EX    分享创造

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

  •  3
     
  •   chenjiandongx 2021-11-18 10:17:05 +08:00 4046 次点击
    这是一个创建于 1425 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 条回复    2021-11-22 23:28:46 +08:00
    nasmatic
        1
    nasmatic  
       2021-11-18 10:45:30 +08:00
    给一代目打 call
    defunct9
        2
    defunct9  
       2021-11-18 11:51:58 +08:00
    不错,不错
    sbilly
        3
    sbilly  
       2021-11-18 13:14:48 +08:00
    赞~
    能生成抓包文件么?
    chenjiandongx
        4
    chenjiandongx  
    OP
       2021-11-18 13:25:28 +08:00
    @sbilly 抓包文件暂时还不支持 是想在使用的时候同时生成文件 然后退出进程的时候将抓包文件落盘?
    chenjiandongx
        5
    chenjiandongx  
    OP
       2021-11-18 13:26:06 +08:00
    @nasmatic 钓鱼佬永不空军
    wellsc
        6
    wellsc  
       2021-11-18 13:31:31 +08:00
    Archeb
        7
    Archeb  
       2021-11-18 20:07:42 +08:00
    很直观,正是我需要的,赞!
    guyskk0x0
        8
    guyskk0x0  
       2021-11-18 21:59:37 +08:00
    很不错,求发布单文件可执行包~
    sbilly
        9
    sbilly  
       2021-11-19 00:23:17 +08:00
    @chenjiandongx 把制定的网络数据包写入磁盘
    sola97
        10
    sola97  
       2021-11-19 19:02:48 +08:00
    不错,我为了编译二进制还特地放到 docker 里编译完再拿出来,有 release 就好了
    chenjiandongx
        11
    chenjiandongx  
    OP
       2021-11-19 22:24:36 +08:00
    @guyskk0x0 这个之前试过提供过 不过有开发者反馈不能直接使用 参见 issue https://github.com/chenjiandongx/sniffer/issues/1
    chenjiandongx
        12
    chenjiandongx  
    OP
       2021-11-19 22:25:00 +08:00
    @sola97 同上
    chenjiandongx
        13
    chenjiandongx  
    OP
       2021-11-19 22:25:40 +08:00
    @sbilly 是为了拿到 wireshark 上分析吗?
    guyskk0x0
        14
    guyskk0x0  
       2021-11-19 22:34:32 +08:00
    @chenjiandongx #11 有点遗憾,看来是依赖系统的 libpcap 库,导致没法静态编译
    chenjiandongx
        15
    chenjiandongx  
    OP
       2021-11-19 22:37:50 +08:00
    如果是相同或者兼容的 libpcap 库应该可以,我试过在 macos 上编译 windows 版本,放到 windows 能跑起来
    sbilly
        16
    sbilly  
       2021-11-20 04:32:57 +08:00
    zhaoawd
        17
    zhaoawd  
       2021-11-22 23:28:46 +08:00
    正好需要一个流量监控工具
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     6060 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 02:29 PVG 10:29 LAX 19:29 JFK 22:29
    Do hve faith in what you're doing.
    ubao 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