@@ -2,6 +2,7 @@ package main
2
2
3
3
import (
4
4
"bytes"
5
+ "context"
5
6
"crypto/tls"
6
7
"embed"
7
8
"encoding/base64"
@@ -10,6 +11,7 @@ import (
10
11
"flag"
11
12
"fmt"
12
13
"io"
14
+ "net"
13
15
"net/http"
14
16
"net/url"
15
17
"os"
@@ -194,16 +196,34 @@ func main() {
194
196
return
195
197
}
196
198
199
+ uri , _ := url .Parse (u )
200
+
197
201
// Set skip tls verify
198
- tlsConfig := & tls.Config {InsecureSkipVerify : true , ServerName : "0.0.0.0" }
202
+ tlsConfig := & tls.Config {InsecureSkipVerify : true , MaxVersion : tls .VersionTLS12 }
203
+
199
204
customTransport := http .DefaultTransport .(* http.Transport ).Clone ()
200
205
customTransport .TLSClientConfig = tlsConfig
201
206
client := http.Client {Transport : customTransport }
202
207
203
208
// GET authpanel
204
209
resp , err := client .Get (u )
205
210
if err != nil {
206
- fatal ("请求" , u , "时发生错误:" , err )
211
+ if uri .Port () == "443" || net .ParseIP (uri .Hostname ()) != nil {
212
+ fatal ("请求" , u , "时发生错误:" , err )
213
+ }
214
+
215
+ // retry ip as sni
216
+ fmt .Println ("直接请求失败,尝试替代 SNI 请求" )
217
+ ips , err2 := net .DefaultResolver .LookupIP (context .Background (), "ip4" , uri .Hostname ())
218
+ if err2 != nil || len (ips ) == 0 {
219
+ fatal ("请求" , u , "时发生错误:" , err , ",并且无法解析域名:" , err2 )
220
+ }
221
+
222
+ tlsConfig .ServerName = ips [0 ].To4 ().String ()
223
+ resp , err = client .Get (u )
224
+ if err != nil {
225
+ fatal ("请求" , u , "时发生错误:" , err )
226
+ }
207
227
}
208
228
res , err := io .ReadAll (resp .Body )
209
229
if err != nil {
0 commit comments