From 065cdadcd653cb8a4c5be10d550143bee9fcbfb4 Mon Sep 17 00:00:00 2001 From: "T. Coutlakis" Date: Thu, 30 Jul 2026 11:08:10 +0200 Subject: [PATCH 1/2] fix(network_info_plus): Fix subnet mask and broadcast on Linux, using network byte order --- .../lib/src/network_info_plus_linux.dart | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/packages/network_info_plus/network_info_plus/lib/src/network_info_plus_linux.dart b/packages/network_info_plus/network_info_plus/lib/src/network_info_plus_linux.dart index 92f2314729..1ffe63743a 100644 --- a/packages/network_info_plus/network_info_plus/lib/src/network_info_plus_linux.dart +++ b/packages/network_info_plus/network_info_plus/lib/src/network_info_plus_linux.dart @@ -97,7 +97,7 @@ class NetworkInfoPlusLinuxPlugin extends NetworkInfoPlatform { String? _getSubnetMask(List>? data) { final prefix = data?.firstOrNull?['prefix'] as int; - final mask = 0xffffffff >> (32 - prefix); + final mask = (0xffffffff << (32 - prefix)) & 0xffffffff; return mask.toIpString(); } @@ -113,17 +113,26 @@ class NetworkInfoPlusLinuxPlugin extends NetworkInfoPlatform { } extension _IpInt on int { - int byteAt(int i) => (this >> (i * 8)) & 0xff; - String toIpString() => '${byteAt(0)}.${byteAt(1)}.${byteAt(2)}.${byteAt(3)}'; + /// Returns the i-th octet in network (big-endian) order. + /// i must be 0..3. + int octet(int i) { + assert(i >= 0 && i <= 3); + return (this >> (24 - i * 8)) & 0xff; + } + + String toIpString() { + final v = this & 0xFFFFFFFF; + return '${v.octet(0)}.${v.octet(1)}.${v.octet(2)}.${v.octet(3)}'; + } } extension _IpString on String { int toIpInt() { final parts = split('.'); - return parts.intAtOrZero(3) << 24 | - parts.intAtOrZero(2) << 16 | - parts.intAtOrZero(1) << 8 | - parts.intAtOrZero(0); + return parts.intAtOrZero(0) << 24 | + parts.intAtOrZero(1) << 16 | + parts.intAtOrZero(2) << 8 | + parts.intAtOrZero(3); } } From 82044f6cd7bdb094525cb1dbd33f40983e619ec4 Mon Sep 17 00:00:00 2001 From: "T. Coutlakis" Date: Thu, 30 Jul 2026 12:41:05 +0200 Subject: [PATCH 2/2] fix(network_info_plus): format --- .../network_info_plus/lib/src/network_info_plus_linux.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/network_info_plus/network_info_plus/lib/src/network_info_plus_linux.dart b/packages/network_info_plus/network_info_plus/lib/src/network_info_plus_linux.dart index 1ffe63743a..3442674a8b 100644 --- a/packages/network_info_plus/network_info_plus/lib/src/network_info_plus_linux.dart +++ b/packages/network_info_plus/network_info_plus/lib/src/network_info_plus_linux.dart @@ -119,7 +119,7 @@ extension _IpInt on int { assert(i >= 0 && i <= 3); return (this >> (24 - i * 8)) & 0xff; } - + String toIpString() { final v = this & 0xFFFFFFFF; return '${v.octet(0)}.${v.octet(1)}.${v.octet(2)}.${v.octet(3)}';