From 03eff8441c9352d4205ea7aa25b63ae9d3cadc11 Mon Sep 17 00:00:00 2001 From: Henrik Grimler Date: Sun, 2 Mar 2025 10:49:50 +0100 Subject: [PATCH 1/2] enhance(WifiAPI): use ConnectivityManager to get ip addresses We can then get all the ipv4 and ipv6 addresses, and do not have to use the deprecated Formatter.formatIpAddress. Returns something like: ``` $ termux-wifi-connectioninfo { "ip": "fe80::7cf7:74ff:fe65:52be", "ip": "192.168.1.224", "ip": "fd6e:e697:d22e:0:7cf7:74ff:fe65:52be", "ip": "fd6e:e697:d22e:0:d536:328f:b0f:1a32", "bssid": "02:00:00:00:00:00", "frequency_mhz": 2452, "link_speed_mbps": 78, "mac_address": "02:00:00:00:00:00", "network_id": -1, "rssi": -57, "ssid": "", "ssid_hidden": false, "supplicant_state": "COMPLETED" } ``` --- app/src/main/java/com/termux/api/apis/WifiAPI.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/termux/api/apis/WifiAPI.java b/app/src/main/java/com/termux/api/apis/WifiAPI.java index 0708d9e69..123b126ae 100644 --- a/app/src/main/java/com/termux/api/apis/WifiAPI.java +++ b/app/src/main/java/com/termux/api/apis/WifiAPI.java @@ -4,11 +4,13 @@ import android.content.Context; import android.content.Intent; import android.location.LocationManager; +import android.net.ConnectivityManager; +import android.net.LinkProperties; +import android.net.LinkAddress; import android.net.wifi.ScanResult; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.text.TextUtils; -import android.text.format.Formatter; import android.util.JsonWriter; import com.termux.api.TermuxApiReceiver; @@ -30,14 +32,17 @@ public static void onReceiveWifiConnectionInfo(TermuxApiReceiver apiReceiver, fi public void writeJson(JsonWriter out) throws Exception { WifiManager manager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); WifiInfo info = manager.getConnectionInfo(); + ConnectivityManager connManager = (ConnectivityManager) context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); + LinkProperties linkProperties = connManager.getLinkProperties(connManager.getActiveNetwork()); out.beginObject(); if (info == null) { out.name("API_ERROR").value("No current connection"); } else { + for (LinkAddress address: linkProperties.getLinkAddresses()) { + out.name("ip").value(address.getAddress().getHostAddress()); + } out.name("bssid").value(info.getBSSID()); out.name("frequency_mhz").value(info.getFrequency()); - //noinspection deprecation - formatIpAddress is deprecated, but we only have a ipv4 address here: - out.name("ip").value(Formatter.formatIpAddress(info.getIpAddress())); out.name("link_speed_mbps").value(info.getLinkSpeed()); out.name("mac_address").value(info.getMacAddress()); out.name("network_id").value(info.getNetworkId()); From 82269edcffd4dc5456dba2d554e818bc568db038 Mon Sep 17 00:00:00 2001 From: Henrik Grimler Date: Sun, 2 Mar 2025 11:06:32 +0100 Subject: [PATCH 2/2] enhance(WifiAPI): print gateway as well through routeInfo Getting the gateway address can be useful. One use-case is for easily ssh'ing into a device providing a hotspot, in which case one should ssh to the gateway ip. --- app/src/main/java/com/termux/api/apis/WifiAPI.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/src/main/java/com/termux/api/apis/WifiAPI.java b/app/src/main/java/com/termux/api/apis/WifiAPI.java index 123b126ae..140d9b495 100644 --- a/app/src/main/java/com/termux/api/apis/WifiAPI.java +++ b/app/src/main/java/com/termux/api/apis/WifiAPI.java @@ -7,6 +7,7 @@ import android.net.ConnectivityManager; import android.net.LinkProperties; import android.net.LinkAddress; +import android.net.RouteInfo; import android.net.wifi.ScanResult; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; @@ -41,6 +42,11 @@ public void writeJson(JsonWriter out) throws Exception { for (LinkAddress address: linkProperties.getLinkAddresses()) { out.name("ip").value(address.getAddress().getHostAddress()); } + for (RouteInfo routeInfo: linkProperties.getRoutes()) { + if (routeInfo.isDefaultRoute() && routeInfo.hasGateway()) { + out.name("gateway").value(routeInfo.getGateway().getHostAddress()); + } + } out.name("bssid").value(info.getBSSID()); out.name("frequency_mhz").value(info.getFrequency()); out.name("link_speed_mbps").value(info.getLinkSpeed());