借助Sigar API获取网络信息

Sigar(全称System Information Gatherer And Reporter,即系统信息收集报表器),它提供了一个开源的跨平台的收集计算机硬件和操作系统信息的API(该API底层接口用C语言编写),本文将演示如何借助Sigar API获取网络信息:

package com.ghj.packageoftest;

import org.hyperic.sigar.NetFlags;
import org.hyperic.sigar.NetInterfaceConfig;
import org.hyperic.sigar.NetInterfaceStat;
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;

/**
 * 借助Sigar API获取网络信息
 *
 * @author GaoHuanjie
 */
public class NetworkTool {

	public static void main(String[] args) throws SigarException {
		Sigar sigar = new Sigar();

		// 当前机器的正式域名
		try {
			System.out.println(sigar.getFQDN());// 即Fully Qualified Domain Name,中文为:全称域名
		} catch (SigarException e) {
			e.printStackTrace();
		}

		String[] netInterfaceList = sigar.getNetInterfaceList();

		// 获取网络流量信息
		for (int i = 0; i < netInterfaceList.length; i++) {
			String netInterface = netInterfaceList[i];// 网络接口
			System.out.println("netInterface:" + netInterface);
			NetInterfaceConfig netInterfaceConfig = sigar.getNetInterfaceConfig(netInterface);
			System.out.println("Address = " + netInterfaceConfig.getAddress());// IP地址
			System.out.println("Netmask = " + netInterfaceConfig.getNetmask());// 子网掩码
			if ((netInterfaceConfig.getFlags() & 1L) <= 0L) {// 网络装置是否正常启用
				System.out.println("!IFF_UP...skipping getNetInterfaceStat");
				continue;
			}
			NetInterfaceStat netInterfaceStat = sigar.getNetInterfaceStat(netInterface);
			System.out.println("netInterfaceStat rxPackets:" + netInterfaceStat.getRxPackets());// 接收的总包裹数
			System.out.println("netInterfaceStat txPackets:" + netInterfaceStat.getTxPackets());// 发送的总包裹数
			System.out.println("netInterfaceStat rxBytes:" + netInterfaceStat.getRxBytes());// 接收到的总字节数
			System.out.println("netInterfaceStat txBytes:" + netInterfaceStat.getTxBytes());// 发送的总字节数
			System.out.println("netInterfaceStat rxErrors:" + netInterfaceStat.getRxErrors());// 接收到的错误包数
			System.out.println("netInterfaceStat txErrors:" + netInterfaceStat.getTxErrors());// 发送数据包时的错误数
			System.out.println("netInterfaceStat rxDropped:" + netInterfaceStat.getRxDropped());// 接收时丢弃的包数
			System.out.println("netInterfaceStat txDropped:" + netInterfaceStat.getTxDropped());// 发送时丢弃的包数
			System.out.println("netInterfaceStat rxOverruns:" + netInterfaceStat.getRxOverruns());
			System.out.println("netInterfaceStat txOverruns:" + netInterfaceStat.getTxOverruns());
			System.out.println("netInterfaceStat rxFrame:" + netInterfaceStat.getRxFrame());
			System.out.println("netInterfaceStat txCollisions:" + netInterfaceStat.getTxCollisions());
			System.out.println("netInterfaceStat txCarrier:" + netInterfaceStat.getTxCarrier());
			System.out.println("netInterfaceStat speed:" + netInterfaceStat.getSpeed());
		}

		// 一些其它的信息
		for (int i = 0; i < netInterfaceList.length; i++) {
			String netInterface = netInterfaceList[i];// 网络接口
			NetInterfaceConfig netInterfaceConfig = sigar.getNetInterfaceConfig(netInterface);
			if (NetFlags.LOOPBACK_ADDRESS.equals(netInterfaceConfig.getAddress())
				|| (netInterfaceConfig.getFlags() & NetFlags.IFF_LOOPBACK) != 0
				|| NetFlags.NULL_HWADDR.equals(netInterfaceConfig.getHwaddr())) {
				continue;
			}

			System.out.println("netInterfaceConfig name:" + netInterfaceConfig.getName());
			System.out.println("netInterfaceConfig hwaddr:" + netInterfaceConfig.getHwaddr());// 网卡MAC地址
			System.out.println("netInterfaceConfig type:" + netInterfaceConfig.getType());
			System.out.println("netInterfaceConfig description:" + netInterfaceConfig.getDescription());// 网卡描述信息
			System.out.println("netInterfaceConfig address:" + netInterfaceConfig.getAddress());// IP地址
			System.out.println("netInterfaceConfig destination:" + netInterfaceConfig.getDestination());
			System.out.println("netInterfaceConfig broadcast:" + netInterfaceConfig.getBroadcast());// 网关广播地址
			System.out.println("netInterfaceConfig netmask:" + netInterfaceConfig.getNetmask());// 子网掩码
			System.out.println("netInterfaceConfig flags:" + netInterfaceConfig.getFlags());
			System.out.println("netInterfaceConfig mtu:" + netInterfaceConfig.getMtu());
			System.out.println("netInterfaceConfig metric:" + netInterfaceConfig.getMetric());
		}
		sigar.close();
	}
}

0分下载示例工程

时间: 2024-08-25 06:20:42

借助Sigar API获取网络信息的相关文章

借助Sigar API获取磁盘信息

Sigar(全称System Information Gatherer And Reporter,即系统信息收集报表器),它提供了一个开源的跨平台的收集计算机硬件和操作系统信息的API(该API底层接口用C语言编写),本文将演示如何借助Sigar API获取磁盘信息: package com.ghj.packageoftest; import org.hyperic.sigar.FileSystem; import org.hyperic.sigar.FileSystemUsage; impor

借助Sigar API获取内存信息

Sigar(全称System Information Gatherer And Reporter,即系统信息收集报表器),它提供了一个开源的跨平台的收集计算机硬件和操作系统信息的API(该API底层接口用C语言编写),本文将演示如何借助Sigar API获取内存信息: package com.ghj.packageoftest; import org.hyperic.sigar.Mem; import org.hyperic.sigar.Sigar; import org.hyperic.sig

借助Sigar API获取CPU相关信息

Sigar(全称System Information Gatherer And Reporter,即系统信息收集报表器),它提供了一个开源的跨平台的收集计算机硬件和操作系统信息的API(该API底层接口用C语言编写),本文将演示如何借助Sigar API获取CPU相关信息: package com.ghj.packageoftest; import org.hyperic.sigar.Cpu; import org.hyperic.sigar.CpuInfo; import org.hyperi

借助Sigar API获取操作系统信息

Sigar(全称System Information Gatherer And Reporter,即系统信息收集报表器),它提供了一个开源的跨平台的收集计算机硬件和操作系统信息的API(该API底层接口用C语言编写),本文将演示如何借助Sigar API获取操作系统信息: package com.ghj.packageoftest; import java.net.InetAddress; import org.hyperic.sigar.OperatingSystem; import org.

C# 网络编程之通过豆瓣API获取书籍信息(一)

这篇文章主要是讲述如何通过豆瓣API获取书籍的信息,起初看到这个内容我最初的想法是在"C# 网络编程之网页简单下载实现"中通过HttpWebResponse类下载源码,再通过正则表达式分析获取结点标签得到信息.但后来发现可以通过豆瓣API提供的编程接口实现. 该文章仅是基础性C#网络编程文章,尝试测试了下豆瓣API,并没什么高深的内容.但希望对大家有所帮助,仅供学习. (警告:文章仅供参考,提供一种想法,否则访问多次-10次被403 forbidden莫怪.建议认证使用豆瓣API) 一

PHP通过ZABBIX API获取主机信息 VS 直接从数据库获取主机信息

最近项目需要获取linux主机的一些信息,如CPU使用率,内存使用情况等.由于我们本身就装了zabbix系统,所以我只用知道如何获取信息即可,总结有两种方法可以获取. 一.通过ZABBIX API获取主机信息 这种方式获取的主机信息相对是比较新的(每分钟更新一次).但因为每次都需要请求接口,所以相对比较慢,如果并发查询的主机数量比较多,就会非常慢. 开源监控系统ZABBIX的官方文档提供了丰富的API.我这里http请求是用的Guzzle 6.当然你也可以用php内置的curl函数自己写一个ht

Android USB API获取设备信息失败问题

在华为荣耀的盒子验证openni的程序,发现orbbec的3d摄像头一直无法使用,一直卡在 设备找不到的提示. 开始从下面2个方面验证:1.验证openni的本身自带的SimpleRead程序,看看是否正常读取到设备信息和depth 图.2.验证Android层usb权限控制问题. 经过验证发现openni自带的c++的可执行程序,可以正常读取到设备信息和depth 图.由此推测 orbbec 3d的驱动和openni的这块部分没有什么问题.问题可能出在Android层的usb权限和获取设备信息

通过API获取统计信息时报Access denied错误处理记录

通过API获取HDFS统计信息时报Access denied错误信息,错误信息如下: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Access denied for user xusweeter. Superuser privilege is required at org.apache.hadoop.hdfs.server.namenode.FSPermiss

Delphi For Android 使用Posix函数获取网络信息(MAC, IP...)

安卓中获取系统当前活动的网卡MAC地址和IP地址时,需要使用到java.net.networkinterface库,在Delphi中虽然可以调用java库, 但是如果没有现成的java库(jar.class等),也会比较麻烦,这里使用posix函数实现获取MAC和IP地址,不需要root权限, 但理论上应该需要设置查询网络状态和WIFI状态权限: <!-- 获取网络状态的权限 --> <uses-permission android:name="android.permissi