gpt4 book ai didi

java - 使用 jnetpcap 进行数据使用计数

转载 作者:行者123 更新时间:2023-12-01 04:23:50 29 4
gpt4 key购买 nike

我为一个程序编写了以下代码,可以测量计算机的总数据使用量。我使用了 PcapPacket 类的 getTotalSize() 方法。它是否直接指示数据使用情况(如果连续添加)或者我应该使用其他方法。

import org.jnetpcap.packet.PcapPacket; 
import org.jnetpcap.protocol.JProtocol;

public class CapturePacket{

public static void main(String[] args) throws Exception {
List<PcapIf> alldevs = new ArrayList<PcapIf>(); // Will be filled with
// NICs
StringBuilder errbuf = new StringBuilder(); // For any error msgs


int r = Pcap.findAllDevs(alldevs, errbuf);
if (r == Pcap.NOT_OK || alldevs.isEmpty()) {
System.err.printf("Can't read list of devices, error is %s", errbuf
.toString());
return;
}
PcapIf device = (PcapIf) alldevs.get(0); // We know we have at least 1 device


String ad = device.getHardwareAddress().toString();
System.out.println("\nCurrently open adapter MAC:" + ad);

int snaplen = 64 * 1024; // Capture all packets, no truncation
int flags = Pcap.MODE_PROMISCUOUS; // capture all packets
int timeout = 10; //10*1000; // No timeout, non-interactive traffic
final Pcap pcap = Pcap.openLive(device.getName(), snaplen, flags, timeout,
errbuf);
if (pcap == null) {
System.err.printf("Error while opening device for capture: "
+ errbuf.toString());
return;
}


PcapPacketHandler<String> jpacketHandler = new PcapPacketHandler<String>()
{
long total_traffic = 0,count = 0;
int i;


public void nextPacket(PcapPacket packet, String user) {

count += packet.getTotalSize();
if( count>1048576 )
{
i++;
total_traffic += count;
System.out.println(i+"MB"+"\t total:"+total_traffic);
count=count-1048576;

}
};
};
pcap.loop(-1,jpacketHandler," ");
pcap.close();
}

}

上面是我编写的代码,试图计算通过网络的流量。它是否直接表明(如果不是完全准确)计算机的数据使用情况?

最佳答案

你应该使用 packet.getPacketWirelen()根据文档,即使捕获的数据包被截断,它也会获得在线上看到的原始长度。

此外,您应该检查数据包是否仅来自或发往您的内部网络,因此它不应计入您的数据使用量(我假设您希望使用 ISP 所看到的数据使用量)。

之后,它应该表明您的数据使用情况。

关于java - 使用 jnetpcap 进行数据使用计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18682326/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com