public void request(final Session session) {
        if (mUidProvider != null) {
            int uid = mUidProvider.uid(session);
            if (uid != UidProvider.UID_UNKNOWN) {
                session.uid = uid;
                return;
            }
        }
        // Android Q abandons the access permission.
        if (NetBareUtils.isAndroidQ()) {
            return;
        }
        final int port = NetBareUtils.convertPort(session.localPort);
        try {
            Net net = mNetCaches.get(session.remoteIp, new Callable<Net>() {
                @Override
                public Net call() throws Exception {
                    NetDumper[] dumpers = mDumpers.get(session.protocol);
                    if (dumpers == null) {
                        throw new Exception();
                    }
                    for (NetDumper dumper : dumpers) {
                        Net net = dumper.dump(port);
                        if (net != null) {
                            return net;
                        }
                    }
                    // No find the uid.
                    throw new Exception();
                }
            });
            if (net != null) {
                session.uid = net.uid;
            }
        } catch (ExecutionException e) {
            // Not find the uid
        }
    }
A dumper analyzes /proc/net/ files to dump uid of the network session. This class may be a
battery-killer, but can set {@link NetBareConfig.Builder#dumpUid} to false to close the dumper.

@author Megatron King
@since 2018-12-03 16:54
netbare-core/src/main/java/com/github/megatronking/netbare/net/UidDumper.java