fix: check if IPv6 is not IPv4 (#550)

This commit is contained in:
Serhiy Mytrovtsiy
2021-07-23 19:06:24 +02:00
parent f6d5f1a60a
commit 01bfe1b79c

View File

@@ -236,7 +236,7 @@ internal class UsageReader: Reader<Network_Usage> {
do {
if let url = URL(string: "https://api.ipify.org") {
let value = try String(contentsOf: url)
if !value.contains("<!DOCTYPE html>") {
if !value.contains("<!DOCTYPE html>") && self.isIPv4(value) {
self.usage.raddr.v4 = value
}
}
@@ -247,7 +247,7 @@ internal class UsageReader: Reader<Network_Usage> {
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<Network_Usage> {
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