diff --git a/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java b/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java index 5874a092..47d8d7c3 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java +++ b/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java @@ -205,6 +205,17 @@ public class CaptureService extends VpnService implements Runnable { private void stop() { stopPacketLoop(); + while((mThread != null) && (mThread.isAlive())) { + try { + Log.d(TAG, "Joining native thread..."); + mThread.join(); + } catch (InterruptedException e) { + Log.e(TAG, "Joining native thread failed"); + } + } + + mThread = null; + if(mParcelFileDescriptor != null) { try { mParcelFileDescriptor.close(); @@ -258,7 +269,7 @@ public class CaptureService extends VpnService implements Runnable { @Override public void run() { if(mParcelFileDescriptor != null) { - int fd = mParcelFileDescriptor.detachFd(); + int fd = mParcelFileDescriptor.getFd(); if(fd > 0) runPacketLoop(fd, this, Build.VERSION.SDK_INT); diff --git a/app/src/main/jni/vpnproxy-jni/vpnproxy.c b/app/src/main/jni/vpnproxy-jni/vpnproxy.c index ed621785..3b995c26 100644 --- a/app/src/main/jni/vpnproxy-jni/vpnproxy.c +++ b/app/src/main/jni/vpnproxy-jni/vpnproxy.c @@ -976,7 +976,11 @@ static int run_tun(JNIEnv *env, jclass vpn, int tapfd, jint sdk) { goto housekeeping; } - check_dns_req_dnat(&proxy, &pkt, conn); + if((check_dns_req_dnat(&proxy, &pkt, conn) == 0) + && (pkt.tuple.dst_ip == proxy.vpn_dns)) { + log_android(ANDROID_LOG_DEBUG, "ignoring packet directed to the virtual DNS server"); + goto housekeeping; + } if(proxy.tls_decryption.enabled) check_tls_mitm(tun, &proxy, &pkt, conn); @@ -1065,7 +1069,6 @@ Java_com_emanuelef_remote_1capture_CaptureService_runPacketLoop(JNIEnv *env, jcl jobject vpn, jint sdk) { run_tun(env, vpn, tapfd, sdk); - close(tapfd); } JNIEXPORT void JNICALL