From 01bfe1b79cb2edcbf9457f74118589e81760d507 Mon Sep 17 00:00:00 2001 From: Serhiy Mytrovtsiy Date: Fri, 23 Jul 2021 19:06:24 +0200 Subject: [PATCH] fix: check if IPv6 is not IPv4 (#550) --- Modules/Net/readers.swift | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Modules/Net/readers.swift b/Modules/Net/readers.swift index 0cb36a09e38..4def05bf1fa 100644 --- a/Modules/Net/readers.swift +++ b/Modules/Net/readers.swift @@ -236,7 +236,7 @@ internal class UsageReader: Reader { do { if let url = URL(string: "https://api.ipify.org") { let value = try String(contentsOf: url) - if !value.contains("") { + if !value.contains("") && self.isIPv4(value) { self.usage.raddr.v4 = value } } @@ -247,7 +247,7 @@ internal class UsageReader: Reader { do { if let url = URL(string: "https://api64.ipify.org") { let value = try String(contentsOf: url) - if self.usage.raddr.v4 != value { + if self.usage.raddr.v4 != value && !self.isIPv4(value) { self.usage.raddr.v6 = value } } @@ -267,6 +267,11 @@ internal class UsageReader: Reader { return (upload: Int64(data?.pointee.ifi_obytes ?? 0), download: Int64(data?.pointee.ifi_ibytes ?? 0)) } + private func isIPv4(_ ip: String) -> Bool { + let arr = ip.split(separator: ".").compactMap{ Int($0) } + return arr.count == 4 && arr.filter{ $0 >= 0 && $0 < 256}.count == 4 + } + @objc func refreshPublicIP() { self.usage.raddr.v4 = nil self.usage.raddr.v6 = nil