0

JpCap Writer を使用してパケットをファイルに保存しようとすると、JVM がクラッシュします。

コード:

captor=JpcapCaptor.openDevice(interfaceList[interfaceNumber], 65535, true, 20);
captor.setFilter("ip and tcp",true);


JpcapWriter writer=JpcapWriter.openDumpFile(captor,"write.txt");
for(int i=0;i<10;i++){
    Packet packet=captor.getPacket();
    writer.writePacket(packet);
  }
writer.close();

クラッシュ情報:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f283105953a, pid=3060, tid=139810797537024
#
# JRE version: 6.0_24-b24
# Java VM: OpenJDK 64-Bit Server VM (20.0-b12 mixed mode linux-amd64 compressed oops)
# Derivative: IcedTea6 1.11.4
# Distribution: Ubuntu 12.04 LTS, package 6b24-1.11.4-1ubuntu0.12.04.1
# Problematic frame:
# v  ~BufferBlob::jni_fast_GetLongField
#
# An error report file with more information is saved as:
# /root/workspace/Sniff/hs_err_pid3060.log
#
# If you would like to submit a bug report, please include
# instructions how to reproduce the bug and visit:
#   https://bugs.launchpad.net/ubuntu/+source/openjdk-6/
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

それを解決する方法はありますか?または、パケットを TCPDump 形式で保存する別の方法はありますか?

4

1 に答える 1

0

私の質問に対するあなたのコメントを見ました。私はこれと同じ問題を抱えていましたが、ライターを閉じた後に閉じようとしたときに発生しました。知らず知らずのうちに閉めているかもしれません。コードを確認し、削除writer.close();がどのような影響を与えるかを確認してください。

パケットを操作する必要がない場合は、Wiresharkの使用をお勧めします。これにより、パケットを TCPDumps としてキャプチャし、キャプチャ フィルタを追加することが非常に簡単になります。

于 2012-10-29T17:56:19.993 に答える