jnetpcap v1.4r1425로 wireshark의 사용자 지정 버전을 작성하고 있습니다. 난 그냥 오프라인 pcap 파일을 열고 속도를 제외하고 위대한 작품 내 tableview에 표시 싶습니다. 내가 열어 본 파일은 약 100MB이고 700k 패키지가 있습니다.JnetPcap : 오프라인 파일 읽기가 매우 느림
public ObservableList<Frame> readOfflineFiles1(int numFrames) {
ObservableList<Frame> frameData = FXCollections.observableArrayList();
if (numFrames == 0){
numFrames = Pcap.LOOP_INFINITE;
}
final StringBuilder errbuf = new StringBuilder();
final Pcap pcap = Pcap.openOffline(FileAddress, errbuf);
if (pcap == null) {
System.err.println(errbuf); // Error is stored in errbuf if any
return null;
}
JPacketHandler<StringBuilder> packetHandler = new JPacketHandler<StringBuilder>() {
public void nextPacket(JPacket packet, StringBuilder errbuf) {
if (packet.hasHeader(ip)){
sourceIpRaw = ip.source();
destinationIpRaw = ip.destination();
sourceIp = org.jnetpcap.packet.format.FormatUtils.ip(sourceIpRaw);
destinationIp = org.jnetpcap.packet.format.FormatUtils.ip(destinationIpRaw);
}
if (packet.hasHeader(tcp)){
protocol = tcp.getName();
length = tcp.size();
int payloadOffset = tcp.getOffset() + tcp.size();
int payloadLength = tcp.getPayloadLength();
buffer.peer(packet, payloadOffset, payloadLength); // No copies, by native reference
info = buffer.toHexdump();
} else if (packet.hasHeader(udp)){
protocol = udp.getName();
length = udp.size();
int payloadOffset = udp.getOffset() + udp.size();
int payloadLength = udp.getPayloadLength();
buffer.peer(packet, payloadOffset, payloadLength); // No copies, by native reference
info = buffer.toHexdump();
}
if (packet.hasHeader(payload)){
infoRaw = payload.getPayload();
length = payload.size();
}
frameData.add(new Frame(packet.getCaptureHeader().timestampInMillis(), sourceIp, destinationIp, protocol, length, info));
//System.out.print(i+"\n");
//i=i+1;
}
};
pcap.loop(numFrames, packetHandler , errbuf);
pcap.close();
return frameData;
}
이 코드는 첫 번째 어쩌면 400k 패키지의 경우 매우 빠르지 만 이후에는 속도가 느려집니다. 첫 번째 400k 패키지는 약 1 분, 나머지는 약 10 분이 필요합니다. 여기서 문제는 무엇입니까?
목록을 작성하는 데 시간이 너무 많이 걸리는 것은 아닙니다. 추가 listmethod는 O (1), 그렇지 않습니다?
공식 jnetpcap 포럼에서도이 사실을 알았지 만별로 활발하지 않습니다.
편집 : 그것을 밖으로
차례로 때문에 힙 사용의 대규모 속도가 느려집니다. 이것을 줄이는 방법이 있습니까?
핫 스폿이 무엇인지 확인하려면 프로파일 러 (예 :'jvisualvm')를 사용하십시오. – Kayaman