Bluetooth Scanner

ic_launcherHi guys,

I have just launched my new app and I’m excited to introduce you to the new features.

This Bluetooth Scanner is completely ad free and you can download it for free from Google Play.

With this app you can find or discover any Bluetooth devices around you. It will detect BLE (Bluetooth Low Energy) devices and the classic devices as well.

For connected devices, it will even display the battery level (if the device supports it) or in case of audio device, the configured codec as well (aptX, LDAC, SBC and others, from
Android 8.0).bluetooth-scanner1smartmockups_jsw7cjos

Of course, it displays the signal strength (RSSI), the bt address and other useful information about the device.

If you want, you can customize the device, setting custom name or type, but there are a lot of built-in heuristics to detect the type of the device.

Lots of useful filters where you can select which kind of device you want to see. You can filter based on device group, date range, you can order the results by signal strength (RSSI), address, name and others.

In the History, you can reload the result of any previous scan, and you can do the same filtering or ordering.



My new app: Network Scanner

Hi guys,

I have just launched my new app and I’m excited to introduce you to the new features.




This Network Scanner is completely ad free and you can download it for free from Google Play. The original (and easier) version can be found in my WiFi analyzer app, but later I realized that this function deserves an own app due to the complexity.

After rethinking the function, I’ve added a lot of extra functions:

Lots of useful filters where you can select which kind of device you want to see. You can filter based on device type, date range, you can order the results by IP address,  access time, name and others.

In the History, you can reload the result of any previous scan, and you smartmockups_jotsokmycan do the same filtering or ordering.smartmockups_jotspo9e

From now, you can export the full database (that contains the result of all scans in the history), for further processing (for example for processing it in a Excel sheet)

and of course I have kept the original functions, like you can customize the devices (type, name..), you can scan custom network range and others.

Because this is a new app, please forgive me if I made any mistake, if you find a bug or any problem, just report it to me, and I will fix it as soon as possible (I run several tests, but you can never be sure when something unexpected will happen)

Basically you can use almost all features for free and without ads, but you can support me (and the development) by buying the paid version (Extreme Edition).

The Extreme Edition removes all limitations from the app.

A few more screenshots:


WiFi Analyzer: issue with Android Pie (9.0)

Hi guys,

Update (2018.10.27):

The new Android 9  (Pie) compatible version has been fully released, just update the app.

(Note: this update affects only devices running Android 9)

Currently there is an issue if you are using Android Pie.

As I mentioned it earlier, to access some network information, on new Android, the app must hold location (GPS) permission, and location service (GPS) must be turned on.
I don’t need your location, and it worked perfectly without location in the last 5 years, but unfortunately Google changed it (more info).

The problem is, that based on my experience, 90% of user reject apps and give negative ratings that need location permission without good reason. And there is no selective permission on Android, that means I have two possible choices:

  • a, ask location permission from everyone, everywhere regardless of the version of OS.
  • b, do not ask location, and it won’t work properly on Android Pie.

As you can see, there is no good choice just bad and worst.

Because Pie just has been released recently and not really popular (yet), temporarily I chose the last one (b).  So sorry from Android Pie users, but currently my app won’t work properly on Android Pie.
But if you were happy with my app earlier, you don’t need to uninstall it, because I will fix it soon (so currently “b” works, but later it will go to “a”)

I don’t have any other choice because Pie will go more popular, so this is a temporary situation, I just try to balance between adapting the new change forced by Google and not hurting so many people.

So if you like my app and

  • you are using Android Pie: you should just wait the fix that will be released soon
  • you are using other versions (like Oreo): it works perfectly before and after the fix, but if you don’t want to give location permission, you can use my classic apps, that never ever will ask location:

Again, so sorry for the inconvenience, this is a bad situation, but it was decided by Google and not by me and I really don’t have chance to solve it painless.

WiFi Analyzer: Important changes related the location permission after November 2018

Hi guys,

Starting with November 2018, all wifi analyzer apps need location permission (and enabled location service) to detect wifi networks, otherwise the developer won’t be able to update or change anything (like bug fixes) in the app.

This is a new change required by Google due to security reason.

My wifi analyzer applications do not ask location yet, but as you can see, I cannot delay it forever, because I won’t be able to update them after November 2018.

If you are worrying about location, as an alternative, I’ve created two copies of my existing wifi analyzer apps, that will NEVER ask location permission :

WiFi Analyzer Classic (no location, free with ads):

WiFi Analyzer Classic Pro (no location, paid, no ads):

These apps do not ask location and never will, but won’t be updated after November 2018 and may not work on Android versions released after this date (Last tested version: Android Oreo 8)

More info about the changes:


WiFi Analyzer promo video

Hi guys,

I just created a new promotional video for my WiFi Analyzer and WiFi Analyzer Pro, and I thought I share it with you.

Huawei Mate 10 Pro performance (WiFi, internal storage)

Hi guys,

I just created a few WiFi and internal storage performance tests on Huawei Mate 10 Pro (this is my new phone) using my apps.

First of all, here is the WiFi performance. I used my WiFi Speed Test app to measure it. The phone uses 2x MIMO (802.11ac) with 80 MHz bandwidth, with link speed at 866 Mbps.

The performance (the real speed) was 384 Mbps (48 MB/s), it’s absolute fine. (the router was a TP-Link Archer C5, and the server was running on a laptop connected to the router via gigabit LAN).


And I also executed an internal storage performance test using my SD Card Test app.

The write speed was around 202 MB/s, the read was 619 MB/sec, when reading and writing a 16 GB of single file. It’s  UFS 2.1 performance.


Here you can find more screenshots about the details, including the graphs:


Everday syslog-ng: How to configure syslog-ng Kafka destination to use Kerberos

Hello guys,

Now I just want to write something interesting about my favorite logging application called syslog-ng.


  • Active Kerberos server
  • Active Apache Kafka server configured to use Kerberos
  • The Kerberos client libs (krb5-user krb5-config) are installed and configured on the host where syslog-ng is running
  • syslog-ng OSE 3.12 or newer
  • or syslog-ng Premium Edition 7.0.5 or newer
  • Java Cryptography Extension (JCE): To use Kerberos, syslog-ng needs this Java extension. You should download and install it to your computer where syslog-ng runs.

In the first scenario, I will configure syslog-ng to use Kerberos with SASL_PLAINTEXT authentication, in the second part, Kerberos with SSL.

Syslog-ng configuration

First of all we need a syslog-ng configuration. Here is mine (the embedded configs are detailed below):

@version: 3.12
@module “mod-java”
@include “scl.conf”
options {
jvm_options(“ -Dlog4j.configuration=file:/home/pzolee/install/configs/kafkakerberos/”);

source s_network_5acd1de3c3494308820dd80525d0a1aa {

destination d_kafka_e0fb1bbb06d345f4ba3770b4eecc4a8a {


log {

It just contains a simple network (tcp) source where the logs are coming, and a Kafka destination where the logs are forwarded. For the options of Kafka destination, read the documentation.

The client.jaas file contains the required parts for Kerberos:

cat client.jaas
KafkaClient { required refreshKrb5Config=true useKeyTab=true keyTab=”/home/pzolee/install/configs/kafkakerberos/client.keytab” storeKey=true principal=”client/thor.mydomain@SYSLOG-NG.MYDOMAIN”;};

Keytab file

Because syslog-ng runs as a daemon without interactive user login, we want to use keytab file instead of manually initialize Kerberos and typing the password.

So generate a Kerberos keytab file for syslog-ng. Here is the example of my keytab file:

klist -kte /home/pzolee/install/configs/kafkakerberos/client.keytab
Keytab name: FILE:/home/pzolee/install/configs/kafkakerberos/client.keytab
KVNO Timestamp           Principal

—- ——————- ——————————————————

1 2017-09-26 15:18:23 client/thor.mydomain@SYSLOG-NG.MYDOMAIN(aes256-cts-hmac-sha1-96)

Don’t forget, Kerberos checks the FQDN in the principal, so the hostname should be correct.
Properties files

We need a Kafka producer properties files for syslog-ng with the following content:

cat /home/pzolee/install/configs/kafkakerberos/

For bootstrap.servers you should use your Kafka server and for the same name that is configured in the file in the Kafka server.

And another one for log4j to see some debug messages

cat /home/pzolee/install/configs/kafkakerberos/

Now start syslog-ng:

sbin/syslog-ng -Fevd

[2017-09-28T10:24:08.306159] syslog-ng starting up; version=’3.11.1′
[2017-09-28T10:24:08.341826] ProducerConfig values: \x0a acks = 1\x0a batch.size = 16384\x0a bootstrap.servers = [thor.mydomain:9092]\x0a buffer.memory = 33554432\x0a = \x0a compression.type = none\x0a = 540000\x0a enable.idempotence = false\x0a interceptor.classes = null\x0a key.serializer = class org.apache.kafka.common.serialization.StringSerializer\x0a = 0\x0a = 60000\x0a = 5\x0a max.request.size = 1048576\x0a = 300000\x0a metric.reporters = []\x0a metrics.num.samples = 2\x0a metrics.recording.level = INFO\x0a = 30000\x0a partitioner.class = class org.apache.kafka.clients.producer.internals.DefaultPartitioner\x0a receive.buffer.bytes = 32768\x0a = 1000\x0a = 50\x0a = 30000\x0a retries = 0\x0a = 100\x0a sasl.jaas.config = null\x0a sasl.kerberos.kinit.cmd = /usr/bin/kinit\x0a sasl.kerberos.min.time.before.relogin = 60000\x0a = kafka\x0a sasl.kerberos.ticket.renew.jitter = 0.05\x0a sasl.kerberos.ticket.renew.window.factor = 0.8\x0a sasl.mechanism = GSSAPI\x0a security.protocol = SASL_PLAINTEXT\x0a send.buffer.bytes = 131072\x0a ssl.cipher.suites = null\x0a ssl.enabled.protocols = [TLSv1.2, TLSv1.1, TLSv1]\x0a ssl.endpoint.identification.algorithm = null\x0a ssl.key.password = null\x0a ssl.keymanager.algorithm = SunX509\x0a ssl.keystore.location = null\x0a ssl.keystore.password = null\x0a ssl.keystore.type = JKS\x0a ssl.protocol = TLS\x0a ssl.provider = null\x0a = null\x0a ssl.trustmanager.algorithm = PKIX\x0a ssl.truststore.location = null\x0a ssl.truststore.password = null\x0a ssl.truststore.type = JKS\x0a = 60000\x0a = null\x0a value.serializer = class org.apache.kafka.common.serialization.StringSerializer\x0a;
[2017-09-28T10:24:08.713300] Successfully logged in.;
[2017-09-28T10:24:08.716513] [Principal=client/thor.mydomain@SYSLOG-NG.MYDOMAIN]: TGT refresh thread started.;
[2017-09-28T10:24:08.719814] [Principal=client/thor.mydomain@SYSLOG-NG.MYDOMAIN]: TGT valid starting at: Thu Sep 28 10:24:21 CEST 2017;
[2017-09-28T10:24:08.720000] [Principal=client/thor.mydomain@SYSLOG-NG.MYDOMAIN]: TGT expires: Thu Sep 28 20:24:21 CEST 2017;
[2017-09-28T10:24:08.720146] [Principal=client/thor.mydomain@SYSLOG-NG.MYDOMAIN]: TGT refresh sleeping until: Thu Sep 28 18:29:04 CEST 2017;

As you can see, syslog-ng could log in to Kafka using kerberos.

Configuring syslog-ng Kafka destination with Kerberos and SSL


  • Kafka broker is configured to use Kerberos with SSL

You only need a few minor changes in file:

cat /home/pzolee/install/configs/kafkakerberos/

You only have to change the security.protocol from SASL_PLAINTEXT to SASL_SSL and provide the keystore and truststore paths and passwords.

If you want to see the ssl logs, add “” to the jvm_options.