Не открывает устройство в библиотеке PcapPlusPlus

Пытаюсь написать свой снифер, для этого использую библиотеку PcapPlusPlus, но увы функция dev->open() всегда возвращает false. Возможно это из-за эмулятора Genymotion, этот эмулятор вроде рутирован, но возможно все же нельзя и надо использовать реально рутированное устройство:

extern "C"
JNIEXPORT void JNICALL
Java_com_example_android_pcapplusplus_PcapPlusPlusInterface_listenTraffic(JNIEnv *env,
                                                                          jobject thiz) {
// IPv4 address of the interface we want to sniff
    std::string interfaceIPAddr = "10.0.3.16";

// find the interface by IP address
    pcpp::PcapLiveDevice *dev = pcpp::PcapLiveDeviceList::getInstance().getPcapLiveDeviceByIp(
            interfaceIPAddr);
    if (dev == NULL) {
        std::string str =
                "Cannot find interface with IPv4 address of '" + interfaceIPAddr + "'" + "\n";
        l(str);
        return;
    }
    // before capturing packets let's print some info about this interface

    std::string interfaceInfo =
            "   Interface name:        " + dev->getName() + "\n" + // get interface name
            "   Interface description: " + dev->getDesc() + "\n" + // get interface description
            "   MAC address:           " + dev->getMacAddress().toString() + "\n" +
            // get interface MAC address
            "   Default gateway:       " + dev->getDefaultGateway().toString() + "\n" +
            // get default gateway
            "   Interface MTU:         " + std::to_string(dev->getMtu()); // get interface MTU

    l(interfaceInfo);
    if (dev->getDnsServers().size() > 0) {
        l("   DNS server:            " + dev->getDnsServers().at(0).toString());
    }
    if (!dev->open()) {
        l("Cannot open device \n");
        return;
    }
    // create the stats object
    PacketStats stats;
    l("Starting asynch capture \n");
    dev->startCapture(onPacketArrives, &stats);
    // sleep for 10 seconds in main thread, in the meantime packets are captured in the async thread
    pcpp::multiPlatformSleep(20);
    // stop capturing packets
    dev->stopCapture();
    // print results
    l("Results \n");
    stats.printToConsole();



}

Я попробовал все адреса что вернула функция из java внизу были результат был один dev->open() возвращал false.:

private String getIpAddress() {
        String ip = "";
        try {
            Enumeration enumNetworkInterfaces = NetworkInterface
                    .getNetworkInterfaces();
            while (enumNetworkInterfaces.hasMoreElements()) {
                NetworkInterface networkInterface = (NetworkInterface)enumNetworkInterfaces
                        .nextElement();
                Enumeration enumInetAddress = networkInterface
                        .getInetAddresses();
                while (enumInetAddress.hasMoreElements()) {
                    InetAddress inetAddress = (InetAddress) enumInetAddress.nextElement();

                    String ipAddress = "";
                    if (inetAddress.isLoopbackAddress()) {
                        ipAddress = "LoopbackAddress: ";
                    } else if (inetAddress.isSiteLocalAddress()) {
                        ipAddress = "SiteLocalAddress: ";
                    } else if (inetAddress.isLinkLocalAddress()) {
                        ipAddress = "LinkLocalAddress: ";
                    } else if (inetAddress.isMulticastAddress()) {
                        ipAddress = "MulticastAddress: ";
                    }
                    ip += ipAddress + inetAddress.getHostAddress() + "\n";
                }
            }
        } catch (SocketException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            ip += "Something Wrong! " + e.toString() + "\n";
        }
        return ip;
    }

Ответы (0 шт):