java怎么获取网络的上传速度和下载速度
1、第一步:下载wincap,jpcap,鉴于不好下载问题,大家可以去网络找,如图:

2、第二步:解压,里面的wincap.exe直接下一步安装就好。把压缩包里面的jpcap.dll放到jdk的bin目录,如图:

3、第三步:创建项目,引入压缩包里面jpcap.jar,如图:

4、第四步:编写代码。创建一个类,并实现PacketReceiver ,代码如下:
public class Demo3 implements PacketReceiver {
@Override
public void receivePacket(Packet packet) {
}
}

5、第五步:对Packet进行解析,里面又tcp,udp和其他请求,通过instanceof判断,代码如下:
@Override
public void receivePacket(Packet packet) {
if (packet instanceof jpcap.packet.TCPPacket) {
// tcp请求
}else if (packet instanceof jpcap.packet.UDPPacket){
// UDP请求
}else{
// 其他请求比如ping
}
}

6、第六步:统计里面的流量,tcp和udp统计后进行总数相加,就是上传下载的流量,代码如下:
@Override
public void receivePacket(Packet packet) {
if (packet instanceof jpcap.packet.TCPPacket) {
// tcp请求
TCPPacket tcp = (TCPPacket) packet;
System.out.println("TCP源IP地址:"+tcp.src_ip+"目的IP地址:"+tcp.dst_ip +"包长度:"+tcp.len);
tcpPacketCount+=tcp.len;
}else if (packet instanceof jpcap.packet.UDPPacket){
// UDP请求
UDPPacket udp = (UDPPacket) packet;
System.out.println("TCP源IP地址:"+udp.src_ip+"目的IP地址:"+udp.dst_ip +"包长度:"+udp.len);
udpPacketCount += udp.len;
}else{
// 其他请求比如ping
System.out.println("***捕获到非运输层协议的其他包!!!");
}
System.out.println("总流量为: "+(tcpPacketCount+udpPacketCount));
}

7、第七步:写main方法进行网卡选择,选择你正在上网的那个网卡,找到对应ipv6地址,然后输入网卡下标,回车就会看到效果,代码如下:
public static void main(String[] args) throws Exception {
//获得网卡设备列表
NetworkInterface[] devices = JpcapCaptor.getDeviceList();
if (devices.length == 0) {
System.out.println("无网卡信息!");
return;
}
//输出网卡信息
for (int i = 0;i < devices.length;i++) {
System.out.println("网卡" + i + "信息:" + devices[i].name);
for (NetworkInterfaceAddress address :devices[i].addresses) {
System.out.print(address.address + " ");
}
System.out.println("\n");
}
Scanner scan = new Scanner(System.in);
System.out.println("请选择您要监听的网卡序号:");
int index = scan.nextInt();
//监听选中的网卡
System.out.println(devices[index].name);
JpcapCaptor jpcapCaptor = JpcapCaptor.openDevice(devices[index], 2000, false, 20);
jpcapCaptor.loopPacket(-1, new Demo3());
}

8、第八步:全部代码和效果如下:
/**
* 多多支持,不懂留言,相互学习
*/
public class Demo3 implements PacketReceiver {
private static int tcpPacketCount = 0;
private static int udpPacketCount = 0;
@Override
public void receivePacket(Packet packet) {
if (packet instanceof jpcap.packet.TCPPacket) {
// tcp请求
TCPPacket tcp = (TCPPacket) packet;
System.out.println("TCP源IP地址:"+tcp.src_ip+"目的IP地址:"+tcp.dst_ip +"包长度:"+tcp.len);
tcpPacketCount+=tcp.len;
}else if (packet instanceof jpcap.packet.UDPPacket){
// UDP请求
UDPPacket udp = (UDPPacket) packet;
System.out.println("TCP源IP地址:"+udp.src_ip+"目的IP地址:"+udp.dst_ip +"包长度:"+udp.len);
udpPacketCount += udp.len;
}else{
// 其他请求比如ping
System.out.println("***捕获到非运输层协议的其他包!!!");
}
System.out.println("总流量为: "+(tcpPacketCount+udpPacketCount));
}
public static void main(String[] args) throws Exception {
//获得网卡设备列表
NetworkInterface[] devices = JpcapCaptor.getDeviceList();
if (devices.length == 0) {
System.out.println("无网卡信息!");
return;
}
//输出网卡信息
for (int i = 0;i < devices.length;i++) {
System.out.println("网卡" + i + "信息:" + devices[i].name);
for (NetworkInterfaceAddress address :devices[i].addresses) {
System.out.print(address.address + " ");
}
System.out.println("\n");
}
Scanner scan = new Scanner(System.in);
System.out.println("请选择您要监听的网卡序号:");
int index = scan.nextInt();
//监听选中的网卡
System.out.println(devices[index].name);
JpcapCaptor jpcapCaptor = JpcapCaptor.openDevice(devices[index], 2000, false, 20);
jpcapCaptor.loopPacket(-1, new Demo3());
}
}

9、第九步:以上代码纯手打,希望可以帮到大家
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
阅读量:104
阅读量:161
阅读量:130
阅读量:51
阅读量:171