<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Jni on Alessandro Sangiorgi — GPU Performance Engineer</title><link>https://contact.alessandrosangiorgi.net/tags/jni/</link><description>Recent content in Jni on Alessandro Sangiorgi — GPU Performance Engineer</description><generator>Hugo</generator><language>en</language><lastBuildDate>Wed, 08 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://contact.alessandrosangiorgi.net/tags/jni/index.xml" rel="self" type="application/rss+xml"/><item><title>Retrieving the ARP Table on Android SDK 30+ via Netlink</title><link>https://contact.alessandrosangiorgi.net/posts/ip-neigh-android-sdk30-netlink-workaround/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://contact.alessandrosangiorgi.net/posts/ip-neigh-android-sdk30-netlink-workaround/</guid><description>&lt;p&gt;Starting with Android 11 (API level 30), Google removed the ability for apps to run &lt;code&gt;ip neigh&lt;/code&gt; or bind netlink sockets. This broke every app that relied on reading the ARP table — network scanners, device discovery tools, local network diagnostics. The change was intentional: Google argued that exposing the neighbor table leaks information about other devices on the local network, which is a privacy concern.&lt;/p&gt;
&lt;p&gt;The problem is that there was no replacement API. Apps that needed neighbor discovery — for example, to find smart home devices, printers, or other hosts on the LAN — were simply out of luck. So I wrote a native library that retrieves the ARP table via RTNetlink without binding the socket, shipped it as an Android library, and &lt;a href="https://github.com/fulvius31/ip-neigh-sdk30"&gt;open-sourced it&lt;/a&gt;.&lt;/p&gt;</description></item></channel></rss>