В вашем коде используется прямое непосредственное подключение к конечному серверу, а не через прокси, если я правильно понял ваш вопрос. Если вы хотите установить подключение через прокси, вам необходимо использовать соответствующую библиотеку или инструмент для настройки прокси-соединения.
Один из распространенных способов получить ServerHello через прокси - использовать библиотеку, например `http.Client` в Go, с настроенным прокси-соединением.
```go
package main
import (
"crypto/tls"
"fmt"
"log"
"net/http"
"net/url"
)
func main() {
proxyURL, err := url.Parse("http://your-proxy-server:port")
if err != nil {
log.Fatal(err)
}
// Создание клиента с настройками прокси
client := &http.Client{
Transport: &http.Transport{
Proxy: http.ProxyURL(proxyURL),
DialTLS: func(network, addr string) (net.Conn, error) {
conn, err := net.Dial(network, addr)
if err != nil {
return nil, err
}
tlsConfig := &tls.Config{InsecureSkipVerify: true}
tlsConn := tls.Client(conn, tlsConfig)
if err := tlsConn.Handshake(); err != nil {
return nil, err
}
return tlsConn, nil
},
},
}
// Отправка запроса
resp, err := client.Get("https://example.com")
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
// Получение ServerHello
state := resp.TLS
if state != nil {
fmt.Println(state.ServerName)
} else {
fmt.Println("No TLS connection")
}
}
```
В этом примере мы создаем `http.Client`, настраиваем его на использование прокси через `http.Transport`. Мы также настраиваем `DialTLS` функцию для поддержки TLS-соединений через указанный прокси.
После отправки запроса `client.Get`, вы можете получить информацию о состоянии TLS-соединения через поле `resp.TLS`. Если есть активное соединение, вы можете получить доступ к `resp.TLS.ServerName` для получения имени сервера ServerHello.