2

ライブラリを使用して、パケットをキャプチャする Java プログラムを作成しようとしていjnetpcapます。しかし、特定のポートから PID を取得できるのだろうか? 私の場合、Sigar API を使用して PID を取得しようとしています (メソッド名は ですgetProcPort(protocol, port))。

PcapPacketHandler<String> jpacketHandler = new PcapPacketHandler<String>(){
    public void nextPacket(PcapPacket packet, String user) {
        Tcp tcp = new Tcp();
        Ip4 ip = new Ip4();
        String protocol;
        long port;
        if(packet.hasHeader(ip)&&packet.hasHeader(tcp)){
            protocol = tcp.getName();
            port = tcp.source();
            try {
                //but the following line will cause an error 
                long pid = sigar.getProcPort("tcp", Long.toString(port));
                System.out.println("pid : " + pid);
            } catch (SigarException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            if(filtering==false){
                printPacketResult(packet, tcp, ip, port, protocol);
            }else if(filtering==true){
                filteredPrintPacketResult(packet, tcp, ip, port, protocol);
            }

        }                   
    }
};

私が得るエラーは次のとおりです。

org.hyperic.sigar.SigarNotImplementedException: このメソッドは、org.hyperic.sigar.SigarNotImplementedException.(SigarNotImplementedException.java:28) でこのプラットフォームに実装されていません。 hyperic.sigar.Sigar.getProcPort(Sigar.java:632) で networkInfo.PackageCapture$1.nextPacket(PackageCapture.java:84) で networkInfo.PackageCapture$1.nextPacket(PackageCapture.java:1) で org.jnetpcap.Pcap.loop (ネイティブ メソッド) org.jnetpcap.Pcap.loop (不明なソース) で networkInfo.PackageCapture.startNet(PackageCapture.java:111) で networkInfo.FilterChoice.choice(FilterChoice.java:27) で networkInfo.Main.main(Main) .java:6)

それは可能ですか?情報をお持ちでしたら、ヒントを教えてください。

4

0 に答える 0