fix 域名解析
This commit is contained in:
parent
24bf7c1908
commit
3b2ae2050f
@ -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>
|
||||
|
||||
@ -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
|
||||
|
||||
55
punchnet/Core/DNSResolver.swift
Normal file
55
punchnet/Core/DNSResolver.swift
Normal 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
|
||||
}
|
||||
|
||||
}
|
||||
24
punchnet/Core/PunchnetConfig.swift
Normal file
24
punchnet/Core/PunchnetConfig.swift
Normal 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
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -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>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user