用Sigar取得网卡流量数据

在网络应用中,经常要对网卡的流量进行统计分析。

和网卡相关的统计数据主要有:网卡信息(ip地址、子网掩码、mac地址等)、网卡的吞吐量、流量等等。

当然了使用sigar也可以获得这些数据。

下面通过例子说明:

1.package lab.sigar;   
2.  
3.import java.util.ArrayList;   
4.import java.util.List;   
5.  
6.import org.hyperic.sigar.NetInterfaceConfig;   
7.import org.hyperic.sigar.NetInterfaceStat;   
8.import org.hyperic.sigar.Sigar;   
9.import org.hyperic.sigar.SigarException;   
10.  
11.import com.thoughtworks.xstream.XStream;   
12.  
13./**  
14. * 网卡信息、接口数据、流量  
15. *   
16. * 使用Sigar获得网卡信息  
17. *   
18. */  
19.public class NetInterfaceData {   
20.  
21.    private NetInterfaceConfig config;   
22.    private NetInterfaceStat stat;   
23.    private long rxbps;   
24.    private long txbps;   
25.  
26.    public NetInterfaceData() {}   
27.  
28.    public void populate(Sigar sigar, String name)   
29.        throws SigarException {   
30.  
31.        config = sigar.getNetInterfaceConfig(name);   
32.  
33.        try {   
34.               
35.            long start = System.currentTimeMillis();   
36.            NetInterfaceStat statStart = sigar.getNetInterfaceStat(name);   
37.            long rxBytesStart = statStart.getRxBytes();   
38.            long txBytesStart = statStart.getTxBytes();   
39.            Thread.sleep(1000);   
40.            long end = System.currentTimeMillis();   
41.            NetInterfaceStat statEnd = sigar.getNetInterfaceStat(name);   
42.            long rxBytesEnd = statEnd.getRxBytes();   
43.            long txBytesEnd = statEnd.getTxBytes();   
44.               
45.            rxbps = (rxBytesEnd - rxBytesStart)*8/(end-start)*1000;   
46.            txbps = (txBytesEnd - txBytesStart)*8/(end-start)*1000;   
47.            stat = sigar.getNetInterfaceStat(name);   
48.        } catch (SigarException e) {   
49.               
50.        } catch (Exception e) {   
51.               
52.        }   
53.    }   
54.  
55.    public static NetInterfaceData gather(Sigar sigar, String name)   
56.        throws SigarException {   
57.       
58.        NetInterfaceData data = new NetInterfaceData();   
59.        data.populate(sigar, name);   
60.        return data;   
61.    }   
62.  
63.    public NetInterfaceConfig getConfig() {   
64.        return config;   
65.    }   
66.  
67.    public NetInterfaceStat getStat() {   
68.        return stat;   
69.    }   
70.       
71.       
72.       
73.    public long getRxbps() {   
74.        return rxbps;   
75.    }   
76.  
77.    public long getTxbps() {   
78.        return txbps;   
79.    }   
80.  
81.    public static void main(String[] args) throws Exception {   
82.        Sigar sigar = new Sigar();   
83.        String[] netIfs = sigar.getNetInterfaceList();   
84.        List netIfList = new ArrayList();   
85.        for ( String name:netIfs ) {   
86.            NetInterfaceData netIfData1 = NetInterfaceData.gather(sigar, name);   
87.            netIfList.add(netIfData1);   
88.        }   
89.        XStream xstream = new XStream();   
90.        xstream.alias("NetInterfaceDatas", List.class);   
91.        xstream.alias("NetInterfaceData", NetInterfaceData.class);   
92.        System.out.println(xstream.toXML(netIfList));   
93.    }   
94.}  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值