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">
|
<!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>
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
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
|
// 开启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)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,28 +1,29 @@
|
|||||||
<?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>
|
||||||
</array>
|
<string>dns-proxy</string>
|
||||||
<key>com.apple.developer.networking.vpn.api</key>
|
</array>
|
||||||
<array>
|
<key>com.apple.developer.networking.vpn.api</key>
|
||||||
<string>allow-vpn</string>
|
<array>
|
||||||
</array>
|
<string>allow-vpn</string>
|
||||||
<key>com.apple.developer.system-extension.install</key>
|
</array>
|
||||||
<true/>
|
<key>com.apple.developer.system-extension.install</key>
|
||||||
<key>com.apple.security.app-sandbox</key>
|
<true/>
|
||||||
<true/>
|
<key>com.apple.security.app-sandbox</key>
|
||||||
<key>com.apple.security.application-groups</key>
|
<true/>
|
||||||
<array>
|
<key>com.apple.security.application-groups</key>
|
||||||
<string>$(TeamIdentifierPrefix)</string>
|
<array>
|
||||||
</array>
|
<string>$(TeamIdentifierPrefix)</string>
|
||||||
<key>com.apple.security.files.user-selected.read-only</key>
|
</array>
|
||||||
<true/>
|
<key>com.apple.security.files.user-selected.read-only</key>
|
||||||
<key>com.apple.security.network.client</key>
|
<true/>
|
||||||
<true/>
|
<key>com.apple.security.network.client</key>
|
||||||
<key>com.apple.security.network.server</key>
|
<true/>
|
||||||
<true/>
|
<key>com.apple.security.network.server</key>
|
||||||
</dict>
|
<true/>
|
||||||
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user