无法使用JPCAP打开设备

  • 本文关键字:JPCAP java winpcap jpcap
  • 更新时间 :
  • 英文 :


我在使用JPCAP库打开网络设备时遇到麻烦。我已经在System32和Syswow64中安装了WinPCAP并具有JPCAP.DLL。尝试打开设备时,以下教程代码崩溃。碰撞日志:

PacketCapture: loading native library jpcap.. ok
net.sourceforge.jpcap.capture.CaptureDeviceOpenException: Error opening adapter: The system cannot find the device specified. (20)
    at net.sourceforge.jpcap.capture.PacketCapture.open(Native Method)
    at net.sourceforge.jpcap.capture.PacketCapture.open(PacketCapture.java:57)
    at networksnifferdesktop.NetworkSnifferDesktop.<init>(NetworkSnifferDesktop.java:26)
    at networksnifferdesktop.NetworkSnifferDesktop.main(NetworkSnifferDesktop.java:40)
Java Result: 1

在调试中,我可以看到m_device设置为:

"DeviceNPF_{EC5226CF-3F55-4148-B40E-1FC3F8BB3398}   Realtek PCIe GBE Family Controller"

在以下代码中:

package networksnifferdesktop;
import net.sourceforge.jpcap.capture.*;
import net.sourceforge.jpcap.net.*;
public class NetworkSnifferDesktop
{
    private static final int INFINITE = -1;
    private static final int PACKET_COUNT = 10;
    // BPF filter for capturing any packet
    private static final String FILTER = "";
    private PacketCapture m_pcap;
    private String m_device;
    public NetworkSnifferDesktop() throws Exception
    {
        // Step 1:  Instantiate Capturing Engine
        m_pcap = new PacketCapture();
        // Step 2:  Check for devices
        m_device = m_pcap.findDevice();
        // Step 3:  Open Device for Capturing (requires root)
        m_pcap.open(m_device, true);
        // Step 4:  Add a BPF Filter (see tcpdump documentation)
        m_pcap.setFilter(FILTER, true);
        // Step 5:  Register a Listener for Raw Packets
        m_pcap.addRawPacketListener(new RawPacketHandler());
        // Step 6:  Capture Data (max. PACKET_COUNT packets)
        m_pcap.capture(PACKET_COUNT);
    }
    public static void main(String[] args)
    {
        try
        {
            NetworkSnifferDesktop example = new NetworkSnifferDesktop();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            System.exit(1);
        }
    }
}
class RawPacketHandler implements RawPacketListener
{
    private static int m_counter = 0;
    public void rawPacketArrived(RawPacket data)
    {
        m_counter++;
        System.out.println("Received packet (" + m_counter + ")");
    }
}

"DeviceNPF_{EC5226CF-3F55-4148-B40E-1FC3F8BB3398} Realtek PCIe GBE Family Controller",如果您的字符串含义为一个字符串,其第一个字符是" device"中的" d",其最后一个字符是"控制器"中的" r",IS 不是有效的winpcap设备名称字符串。

"DeviceNPF_{EC5226CF-3F55-4148-B40E-1FC3F8BB3398}"将是有效的设备名称字符串。

通过查看JPCAP源,findDevice方法似乎不是返回有效的设备名称字符串。它被记录为返回"描述网络设备的字符串";它返回的是一个包含设备名称字符串,newline,两个空白和设备供应商描述字符串的字符串。据报道这是JPCAP错误。

我建议您扫描字符串,寻找第一个白色空间字符("白空间"包含空白和新线),然后用作设备名称,可以传递到打开的例程,但所有内容都无法包括那个白色空间的角色。(如果您找不到白色空间字符,请使用整个字符串。)

相关内容

  • 没有找到相关文章

最新更新