Skip to content

Commit 710085f

Browse files
committed
add srv and txt record support
1 parent 28e9038 commit 710085f

File tree

4 files changed

+87
-5
lines changed

4 files changed

+87
-5
lines changed

README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,22 @@
1+
## Endpoint 添加srv记录和txt记录支持
2+
3+
下载:[Release](https://github.com/zhcode-fun/wireguard-windows/releases)
4+
5+
+ srv记录:设置端口号为0,例如
6+
```
7+
Endpoint = srv.wg.xxxx.com:0
8+
```
9+
10+
+ txt记录:设置端口号为1,例如
11+
text记录值可以是纯`ip:port`,也可以在后面添加其他备注,以`||`分割,如`1.1.1.1:6789 || 更新于2024-09-12 20:30:00`
12+
```
13+
Endpoint = txt.wg.xxxx.com:1
14+
```
15+
16+
> 不会golang,一边查语法一边写的,代码太烂,好在改的不多🤣
17+
18+
**************************************分割线,下面是官方README******************************
19+
120
# [WireGuard](https://www.wireguard.com/) for Windows
221

322
This is a fully-featured WireGuard client for Windows that uses [WireGuardNT](https://git.zx2c4.com/wireguard-nt/about/). It is the only official and recommended way of using WireGuard on Windows.

build.bat

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ if exist .deps\prepared goto :render
4141
echo [+] Regenerating files
4242
go generate ./... || exit /b 1
4343
)
44-
call :build_plat x86 i686 386 || goto :error
44+
@REM call :build_plat x86 i686 386 || goto :error
4545
call :build_plat amd64 x86_64 amd64 || goto :error
46-
call :build_plat arm64 aarch64 arm64 || goto :error
46+
@REM call :build_plat arm64 aarch64 arm64 || goto :error
4747

4848
:sign
4949
if exist .\sign.bat call .\sign.bat
@@ -73,7 +73,7 @@ if exist .deps\prepared goto :render
7373
echo [+] Assembling resources %1
7474
%~2-w64-mingw32-windres -I ".deps\wireguard-nt\bin\%~1" -DWIREGUARD_VERSION_ARRAY=%WIREGUARD_VERSION_ARRAY% -DWIREGUARD_VERSION_STR=%WIREGUARD_VERSION% -i resources.rc -o "resources_%~3.syso" -O coff -c 65001 || exit /b %errorlevel%
7575
echo [+] Building program %1
76-
go build -tags load_wgnt_from_rsrc -ldflags="-H windowsgui -s -w" -trimpath -buildinfo=false -buildvcs=false -v -o "%~1\wireguard.exe" || exit /b 1
76+
go build -tags load_wgnt_from_rsrc -ldflags="-H windowsgui -s -w" -trimpath -buildvcs=false -v -o "%~1\wireguard.exe" || exit /b 1
7777
if not exist "%~1\wg.exe" (
7878
echo [+] Building command line tools %1
7979
del .deps\src\*.exe .deps\src\*.o .deps\src\wincompat\*.o .deps\src\wincompat\*.lib 2> NUL

conf/dnsresolver_windows.go

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ package conf
77

88
import (
99
"log"
10+
"net"
1011
"net/netip"
12+
"strings"
1113
"time"
1214
"unsafe"
1315

@@ -85,13 +87,74 @@ func resolveHostnameOnce(name string) (resolvedIPString string, err error) {
8587
return
8688
}
8789

90+
func resolveSrvRecord(name string) (resolvedIPString string, resolvedPort uint16, err error) {
91+
maxTries := 10
92+
if services.StartedAtBoot() {
93+
maxTries *= 4
94+
}
95+
var resolvedTargetString string
96+
resolvedTargetString, resolvedPort, err = resolveSrvRecordOnce(name)
97+
if err != nil {
98+
return
99+
}
100+
resolvedIPString, err = resolveHostname(resolvedTargetString)
101+
return resolvedIPString, resolvedPort, err
102+
}
103+
104+
func resolveSrvRecordOnce(name string) (resolvedTargetString string, resolvedPort uint16, err error) {
105+
_, records, err := net.LookupSRV("", "", name)
106+
if err != nil {
107+
return
108+
}
109+
if len(records) > 0 {
110+
resolvedTargetString = records[0].Target
111+
resolvedPort = records[0].Port
112+
}
113+
return
114+
}
115+
116+
func resolveTxtRecordOnce(name string) (resolvedTargetString string, resolvedPort uint16, err error) {
117+
records, err := net.LookupTXT(name)
118+
if err != nil {
119+
return
120+
}
121+
if len(records) > 0 {
122+
targetString := records[0]
123+
if strings.Contains(records[0], "||") {
124+
resolvedTargetStrings := strings.Split(records[0], "||")
125+
targetString = resolvedTargetStrings[0]
126+
}
127+
i := strings.LastIndexByte(targetString, ':')
128+
if i >= 0 {
129+
targetString = strings.TrimSpace(targetString)
130+
var resolvedPortStr string
131+
resolvedTargetString, resolvedPortStr = targetString[:i], targetString[i+1:]
132+
resolvedPort, err = parsePort(resolvedPortStr)
133+
if err != nil {
134+
return
135+
}
136+
}
137+
}
138+
return
139+
}
140+
88141
func (config *Config) ResolveEndpoints() error {
89142
for i := range config.Peers {
90143
if config.Peers[i].Endpoint.IsEmpty() {
91144
continue
92145
}
93146
var err error
94-
config.Peers[i].Endpoint.Host, err = resolveHostname(config.Peers[i].Endpoint.Host)
147+
if config.Peers[i].Endpoint.Port == 0 {
148+
// srv记录
149+
log.Printf("SRV record start resolve...")
150+
config.Peers[i].Endpoint.Host, config.Peers[i].Endpoint.Port, err = resolveSrvRecord(config.Peers[i].Endpoint.Host)
151+
} else if config.Peers[i].Endpoint.Port == 1 {
152+
// txt记录
153+
log.Printf("TXT record start resolve...")
154+
config.Peers[i].Endpoint.Host, config.Peers[i].Endpoint.Port, err = resolveTxtRecordOnce(config.Peers[i].Endpoint.Host)
155+
} else {
156+
config.Peers[i].Endpoint.Host, err = resolveHostname(config.Peers[i].Endpoint.Host)
157+
}
95158
if err != nil {
96159
return err
97160
}

version/version.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66
package version
77

88
const (
9-
Number = "0.5.3"
9+
Number = "0.5.3.1"
1010
)

0 commit comments

Comments
 (0)