2

Java 用の jNetPcap ライブラリを使用して、PCAP ファイル内の ARP パケットに関する情報を取得しようとしています。私が実際に求めているのは、Ethernet フレーム内のソース アドレスと宛先アドレス、および ARP パケット内の送信者 MAC とターゲット MAC を読み取ることです。

これまでのところ、PCAP ファイルをロードし、パケット キャプチャ内のすべてのパケットをループして、実際に ARP プロトコルのパケットのパケット番号 (フレーム番号) を表示することができました。

追加情報を取得するにはどうすればよいですか?

これまでの私のコードは次のとおりです。

package firstjavapcaptest;

import org.jnetpcap.Pcap;
import org.jnetpcap.packet.PcapPacket;
import org.jnetpcap.packet.PcapPacketHandler;
import org.jnetpcap.protocol.lan.Ethernet;
import org.jnetpcap.protocol.network.Arp;
import org.jnetpcap.protocol.tcpip.Tcp;

public class FirstJavaPcapTest {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

        final StringBuilder errbuf = new StringBuilder(); // for any error messages
        final String file = "Z:\\test_pcap.pcap";
        Tcp tcp = new Tcp(); // Preallocate a TCP header
        Arp arp = new Arp(); // Preallocate a ARP header
        System.out.printf("Opening file for reading: %s%n", file);  

        Pcap pcap = Pcap.openOffline(file, errbuf);  
        if (pcap == null) {  
            System.err.printf("Error while opening device for capture: " + errbuf.toString());  
            return;  
        }  

        PcapPacketHandler<String> jphArp = new PcapPacketHandler<String>() { 
            public void nextPacket(PcapPacket packet, String user) {
                Ethernet ethh  = new Ethernet();
                if (packet.hasHeader(arp)) {
                    System.out.println("[" + packet.getFrameNumber() + "]");
                }
            }
        };

        try {  
            pcap.loop(-1, jphArp, "");
        } finally {  
            pcap.close();  
        }
    }

}
4

1 に答える 1