此问题与this Go question等效,在该问题中微不足道(尽管很hacky)才能获得所需的行为:我正在寻找一种修改TLS SNI信息的方法,该信息最终以TCP段结尾在.NET中使用高级Web客户端时创建的。
this answer中的最后一段表明,黑客可能会做类似的事情
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来执行对requiredsni.com的请求。但是,在我的测试中,与答案所建议的相反,SNI标签 更改为example.com,在我的情况下这不好,因为我想要的实际上是对主机的标头字段是一回事,而SNI字段是另一回事(我将完全删除SNI)。同样,让httpRequestMessage.RequestUri = new Uri("https://example.com");
也将SNI标签更新为example.com。
是否有一种简单的方法可以使用HttpClient
,HttpWebRequest
或类似方法来修改SNI字段中的内容,而无需修改TCP段中的其他任何内容?