add hostname support

This commit is contained in:
anlicheng 2026-01-06 16:33:02 +08:00
parent 06ba79bf83
commit fca095173c
7 changed files with 28 additions and 5 deletions

View File

@ -40,6 +40,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
let networkCode = options["network_code"] as! String
let clientId = options["client_id"] as! String
let remoteDnsServer = options["remote_dns_server"] as! String
let hostname = options["hostname"] as! String
let stunServers = stunServersStr.split(separator: ";").compactMap { server -> SDLConfiguration.StunServer? in
let parts = server.split(separator: ":", maxSplits: 2)
@ -71,7 +72,8 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
noticePort: noticePort,
token: token,
networkCode: networkCode,
remoteDnsServer: remoteDnsServer)
remoteDnsServer: remoteDnsServer,
hostname: hostname)
//
let rsaCipher = try! CCRSACipher(keySize: 1024)
let aesChiper = CCAESChiper()

View File

@ -32,6 +32,7 @@ public class SDLConfiguration {
let stunServers: [StunServer]
let remoteDnsServer: String
let hostname: String
let noticePort: Int
@ -54,7 +55,7 @@ public class SDLConfiguration {
let token: String
let networkCode: String
public init(version: UInt8, installedChannel: String, superHost: String, superPort: Int, stunServers: [StunServer], clientId: String, noticePort: Int, token: String, networkCode: String, remoteDnsServer: String) {
public init(version: UInt8, installedChannel: String, superHost: String, superPort: Int, stunServers: [StunServer], clientId: String, noticePort: Int, token: String, networkCode: String, remoteDnsServer: String, hostname: String) {
self.version = version
self.installedChannel = installedChannel
self.superHost = superHost
@ -65,6 +66,7 @@ public class SDLConfiguration {
self.token = token
self.networkCode = networkCode
self.remoteDnsServer = remoteDnsServer
self.hostname = hostname
}
}

View File

@ -109,6 +109,8 @@ struct SDLRegisterSuper: Sendable {
var networkCode: String = String()
var hostname: String = String()
var unknownFields = SwiftProtobuf.UnknownStorage()
init() {}
@ -639,6 +641,7 @@ extension SDLRegisterSuper: SwiftProtobuf.Message, SwiftProtobuf._MessageImpleme
5: .standard(proto: "pub_key"),
6: .same(proto: "token"),
7: .standard(proto: "network_code"),
8: .same(proto: "hostname"),
]
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
@ -654,6 +657,7 @@ extension SDLRegisterSuper: SwiftProtobuf.Message, SwiftProtobuf._MessageImpleme
case 5: try { try decoder.decodeSingularStringField(value: &self.pubKey) }()
case 6: try { try decoder.decodeSingularStringField(value: &self.token) }()
case 7: try { try decoder.decodeSingularStringField(value: &self.networkCode) }()
case 8: try { try decoder.decodeSingularStringField(value: &self.hostname) }()
default: break
}
}
@ -685,6 +689,9 @@ extension SDLRegisterSuper: SwiftProtobuf.Message, SwiftProtobuf._MessageImpleme
if !self.networkCode.isEmpty {
try visitor.visitSingularStringField(value: self.networkCode, fieldNumber: 7)
}
if !self.hostname.isEmpty {
try visitor.visitSingularStringField(value: self.hostname, fieldNumber: 8)
}
try unknownFields.traverse(visitor: &visitor)
}
@ -696,6 +703,7 @@ extension SDLRegisterSuper: SwiftProtobuf.Message, SwiftProtobuf._MessageImpleme
if lhs.pubKey != rhs.pubKey {return false}
if lhs.token != rhs.token {return false}
if lhs.networkCode != rhs.networkCode {return false}
if lhs.hostname != rhs.hostname {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}

View File

@ -149,6 +149,7 @@ actor SDLSuperClient {
registerSuper.pubKey = ctx.rsaCipher.pubKey
registerSuper.token = ctx.config.token
registerSuper.networkCode = ctx.config.networkCode
registerSuper.hostname = ctx.config.hostname
NSLog("[SuperClient] register super request: \(registerSuper)")

View File

@ -26,7 +26,7 @@ struct SystemConfig {
static let stunServers = "118.178.229.213:1265,1266;118.178.229.213:1265,1266"
//static let stunServers = "127.0.0.1:1265,1266;127.0.0.1:1265,1266"
static func getOptions(networkCode: String, token: String, clientId: String, noticePort: Int) -> [String:NSObject]? {
static func getOptions(networkCode: String, token: String, clientId: String, hostname: String, noticePort: Int) -> [String:NSObject]? {
guard let superIp = DNSResolver.resolveAddrInfos(superHost).first else {
return nil
}
@ -41,6 +41,7 @@ struct SystemConfig {
"super_port": superPort as NSObject,
"stun_servers": stunServers as NSObject,
"remote_dns_server": superIp as NSObject,
"hostname": hostname as NSObject,
"notice_port": noticePort as NSObject
]

View File

@ -11,6 +11,7 @@ import Combine
struct IndexView: View {
@AppStorage("token") private var token: String = ""
@AppStorage("hostname") private var hostname: String = ""
@AppStorage("network_code") private var networkCode: String = ""
@State private var showToken: Bool = false
@ -57,6 +58,13 @@ struct IndexView: View {
.onTapGesture {
self.showMenu = false
}
TextField("主机名", text: $hostname)
.multilineTextAlignment(.leading)
.textFieldStyle(PlainTextFieldStyle())
.frame(width: 200, height: 25)
.background(Color.white)
.foregroundColor(Color.black)
.cornerRadius(5.0)
if showIpAdress {
HStack {
@ -264,7 +272,7 @@ struct IndexView: View {
let clientId = SystemConfig.getClientId()
NSLog("[IndexView] use token: \(self.token), network_code: \(networkCode)")
// token使token
try await vpnManager.enableVpn(options: SystemConfig.getOptions(networkCode: self.networkCode, token: self.token, clientId: clientId, noticePort: self.noticeServer.port)!)
try await vpnManager.enableVpn(options: SystemConfig.getOptions(networkCode: self.networkCode, token: self.token, clientId: clientId, hostname: self.hostname, noticePort: self.noticeServer.port)!)
}
}

View File

@ -32,6 +32,7 @@ struct punchnetApp: App {
@AppStorage("token") var token: String = ""
@AppStorage("network_code") var networkCode: String = ""
@AppStorage("hostname") var hostname: String = ""
@ObservedObject var vpnManager = VPNManager.shared
private var noticeServer: UDPNoticeCenterServer
@ -104,7 +105,7 @@ struct punchnetApp: App {
case .disconnected:
Task {
let clientId = SystemConfig.getClientId()
try await vpnManager.enableVpn(options: SystemConfig.getOptions(networkCode: self.networkCode, token: self.token, clientId: clientId, noticePort: self.noticeServer.port)!)
try await vpnManager.enableVpn(options: SystemConfig.getOptions(networkCode: self.networkCode, token: self.token, clientId: clientId, hostname: self.hostname, noticePort: self.noticeServer.port)!)
}
case .connected:
Task {