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">
<plist version="1.0">
<dict>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>NSExtension</key>
<dict>
<key>NSExtensionPointIdentifier</key>

View File

@ -19,15 +19,18 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
let token = options["token"] as! String
//let version = options["version"] as! Int
let installed_channel = options["installed_channel"] as! String
let superIp = options["super_ip"] as! String
Task {
SDLLogger.logLevel = .debug
do {
self.context = try SDLContext(provider: self, config: .init(
version: 1,
installedChannel: installed_channel,
superHost: "118.178.229.213",
//superHost: "118.178.229.213",
superHost: superIp,
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(),
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
func enableVpn(options: [String : NSObject]? = nil) async throws {
func enableVpn(options: [String : NSObject]) async throws {
let manager = try await loadAndCreateProviderManager()
try await manager.loadFromPreferences()
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
@ -91,6 +94,7 @@ class VPNManager: ObservableObject {
return manager
}
deinit {
NotificationCenter.default.removeObserver(self)
}

View File

@ -1,28 +1,29 @@
<?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">
<plist version="1.0">
<dict>
<key>com.apple.developer.networking.networkextension</key>
<array>
<string>packet-tunnel-provider</string>
</array>
<key>com.apple.developer.networking.vpn.api</key>
<array>
<string>allow-vpn</string>
</array>
<key>com.apple.developer.system-extension.install</key>
<true/>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.application-groups</key>
<array>
<string>$(TeamIdentifierPrefix)</string>
</array>
<key>com.apple.security.files.user-selected.read-only</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.network.server</key>
<true/>
</dict>
<dict>
<key>com.apple.developer.networking.networkextension</key>
<array>
<string>packet-tunnel-provider</string>
<string>dns-proxy</string>
</array>
<key>com.apple.developer.networking.vpn.api</key>
<array>
<string>allow-vpn</string>
</array>
<key>com.apple.developer.system-extension.install</key>
<true/>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.application-groups</key>
<array>
<string>$(TeamIdentifierPrefix)</string>
</array>
<key>com.apple.security.files.user-selected.read-only</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.network.server</key>
<true/>
</dict>
</plist>