fix 域名解析

This commit is contained in:
anlicheng 2025-05-14 19:59:39 +08:00
parent 24bf7c1908
commit 3b2ae2050f
6 changed files with 121 additions and 28 deletions

View File

@ -2,6 +2,12 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>NSExtension</key> <key>NSExtension</key>
<dict> <dict>
<key>NSExtensionPointIdentifier</key> <key>NSExtensionPointIdentifier</key>

View File

@ -19,15 +19,18 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
let token = options["token"] as! String let token = options["token"] as! String
//let version = options["version"] as! Int //let version = options["version"] as! Int
let installed_channel = options["installed_channel"] as! String let installed_channel = options["installed_channel"] as! String
let superIp = options["super_ip"] as! String
Task { Task {
SDLLogger.logLevel = .debug SDLLogger.logLevel = .debug
do { do {
self.context = try SDLContext(provider: self, config: .init( self.context = try SDLContext(provider: self, config: .init(
version: 1, version: 1,
installedChannel: installed_channel, installedChannel: installed_channel,
superHost: "118.178.229.213", //superHost: "118.178.229.213",
superHost: superIp,
superPort: 18083, superPort: 18083,
stunServers: [.init(host: "118.178.229.213", ports: [1265, 1266]), .init(host: "118.178.229.213", ports: [1265, 1266])], stunServers: [.init(host: superIp, ports: [1265, 1266]), .init(host: "118.178.229.213", ports: [1265, 1266])],
clientId: SDLContext.getUUID(), clientId: SDLContext.getUUID(),
token: "" token: ""
//token: token //token: token

View File

@ -0,0 +1,55 @@
//
// DNSResolver.swift
// punchnet
//
// Created by on 2025/5/14.
//
import Foundation
import Darwin
struct DNSResolver {
// ip
static func resolveAddrInfos(_ hostname: String) -> [String] {
var hints = addrinfo(
ai_flags: AI_ALL,
ai_family: AF_UNSPEC,
ai_socktype: SOCK_STREAM,
ai_protocol: 0,
ai_addrlen: 0,
ai_canonname: nil,
ai_addr: nil,
ai_next: nil
)
var result: UnsafeMutablePointer<addrinfo>?
let error = getaddrinfo(hostname, nil, &hints, &result)
guard error == 0 else {
return []
}
var ips = [String]()
var current = result
while current != nil {
var host = [CChar](repeating: 0, count: Int(NI_MAXHOST))
if let addr = current?.pointee.ai_addr {
getnameinfo(
addr,
socklen_t(addr.pointee.sa_len),
&host,
socklen_t(host.count),
nil,
0,
NI_NUMERICHOST
)
let ip = String(cString: host)
ips.append(ip)
}
current = current?.pointee.ai_next
}
freeaddrinfo(result)
return ips
}
}

View File

@ -0,0 +1,24 @@
//
// Config.swift
// punchnet
//
// Created by on 2025/5/14.
//
import Foundation
struct PunchnetConfig {
static let server = "punchnet.aioe.tech"
static let port = 18083
static func getOptions() -> [String:NSObject] {
var options: [String: NSObject] = [:]
if let ip = DNSResolver.resolveAddrInfos(PunchnetConfig.server).first {
options["super_ip"] = ip as NSObject
}
return options
}
}

View File

@ -27,12 +27,15 @@ class VPNManager: ObservableObject {
} }
// vpn // vpn
func enableVpn(options: [String : NSObject]? = nil) async throws { func enableVpn(options: [String : NSObject]) async throws {
let manager = try await loadAndCreateProviderManager() let manager = try await loadAndCreateProviderManager()
try await manager.loadFromPreferences() try await manager.loadFromPreferences()
self.addVPNStatusObserver(manager) self.addVPNStatusObserver(manager)
try manager.connection.startVPNTunnel(options: options) var configOptions = PunchnetConfig.getOptions()
configOptions.merge(options, uniquingKeysWith: {$1})
try manager.connection.startVPNTunnel(options: configOptions)
} }
// vpn // vpn
@ -91,6 +94,7 @@ class VPNManager: ObservableObject {
return manager return manager
} }
deinit { deinit {
NotificationCenter.default.removeObserver(self) NotificationCenter.default.removeObserver(self)
} }

View File

@ -1,10 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>com.apple.developer.networking.networkextension</key> <key>com.apple.developer.networking.networkextension</key>
<array> <array>
<string>packet-tunnel-provider</string> <string>packet-tunnel-provider</string>
<string>dns-proxy</string>
</array> </array>
<key>com.apple.developer.networking.vpn.api</key> <key>com.apple.developer.networking.vpn.api</key>
<array> <array>
@ -24,5 +25,5 @@
<true/> <true/>
<key>com.apple.security.network.server</key> <key>com.apple.security.network.server</key>
<true/> <true/>
</dict> </dict>
</plist> </plist>