nbEasyTshark 09 监控网卡趋势流量图

09 监控网卡流量趋势图

wireshark的软件起始页能够实现实时监控网卡数据,这能告诉用户每个适配器当前的流量情况,我们来实现类似的功能。

想要实时输出网卡流量数据,那就要实时获取当前的流量信息。tshark是否可以做到呢?

可以用如下命令:

tshark -i WLAN -q -z io,stat,1

这个命令的作用是使用静默模式 在线抓取某个适配器的流量

  • -z io, stat 1用来执行统计,统计每秒的数据包数量。

但是这个方法的问题是统计是事后统计的,没办法做到实时统计。

要做到实时统计,我们可以使用如下方法:和抓包类似,但是只输出两个和流量统计相关的数据

tshark -i WLAN -T fields -e frame.time_epoch -e frame.len

如此,我们将上述的数据按秒聚合即可。就能知道每一秒的数据流量大小了,那每一个Adapter都开启一个线程来统计。

class AdapterMonitorInfo
{
public:
    AdapterMonitorInfo() {
        monitorTsharkPipe = nullptr;
        tsharkPid = 0;
    }

    std::string adapterName;
    std::map<long, long> flowTrendData;
    std::shared_ptr<std::thread> monitorThread;
    FILE* monitorTsharkPipe = nullptr;
    PID_T tsharkPid;
};

每一个网卡都需要用AdapterMonitorInfo来记录其属性,而所有的AdapterMonitorInfo对象都需要再统一的保存起来,放到TsharkManager中。

    /* monitor the flow trend */
    std::map<std::string, AdapterMonitorInfo> adapterFlowTrendMonitorMap;

    /* protect trend map */
    std::recursive_mutex adapterFlowTrendMapLock;

监控网卡数据

既然每个网卡都需要启线程去capture,那么拆解任务目标:

  1. 获取现在的网卡适配器列表
  2. 每个网卡启动一个线程,统计对应网卡的数据
    1. 统计每一秒种的包数,而后汇总
  3. 在等待一定时间后,杀掉tshark让管道破裂结束
  4. 输出数据

相关命令:

tsharkPath + ” -i \”” + adapterName + “\” -T fields -e frame.time_epoch -e frame.len”

10 查看数据包详情和协议构建

wireshark中可以获取数据包的详细协议树信息,我们也需要做到类似的功能

如何实现呢?我们可以用

tshark -T pdml

tshark -r capture.pcap -Y “frame.number==1” -T pdml > packets.xml

命令获取协议树的详细信息

packets.xml文件内容如下:

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇