C# 使用HttpClient或HttpWebRequest修改TLS SNI

C# 使用HttpClient或HttpWebRequest修改TLS SNI,c#,.net,https,sni,C#,.net,Https,Sni,这个问题相当于获得所需的行为非常简单(尽管相当粗糙):我正在寻找一种方法来修改TLS SNI信息,这些信息最终会出现在使用.NET中的高级web客户端时创建的TCP段中 中的最后一段建议黑客可以做如下操作 static void Main(string[] args) { HttpResponseMessage response; var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, "https://de

这个问题相当于获得所需的行为非常简单(尽管相当粗糙):我正在寻找一种方法来修改TLS SNI信息,这些信息最终会出现在使用.NET中的高级web客户端时创建的TCP段中

中的最后一段建议黑客可以做如下操作

static void Main(string[] args)
{
    HttpResponseMessage response;
    var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, "https://desiredsni.com");
    httpRequestMessage.Headers.Add("Host", "example.com");
    var handler = new HttpClientHandler
    {
        CookieContainer = new CookieContainer()
    };
    using (var client = new HttpClient(handler))
    {
        response = client.SendAsync(httpRequestMessage).Result;
    }
}
使用example.com主机和desiredsni.com的SNI执行对desiredsni.com的请求。然而,在我的测试中,与答案所建议的相反,SNI标记被更改为example.com,这在我的情况下是不好的,因为我真正想要的是主机头字段是一件事,而SNI字段是另一件事(我将完全删除SNI)。类似地,让httpRequestMessage.RequestUri=newuri(“https://example.com");还将SNI标记更新到example.com


是否有一种简单的方法可以使用
HttpClient
HttpWebRequest
或类似的工具修改SNI字段中的内容,而不修改TCP段中的任何其他内容?

最好的猜测是深入研究这个问题: