如何将 .NET WebSocket 客户端与 NTLM 代理一起使用?

Posted

技术标签:

【中文标题】如何将 .NET WebSocket 客户端与 NTLM 代理一起使用?【英文标题】:How to use .NET WebSocket Client with NTLM proxies? 【发布时间】:2016-12-29 17:31:09 【问题描述】:

我的目标是使用 WebSocket .Net 客户端实现(即不是浏览器)通过需要 NTLM 身份验证的公司代理连接到 WebSocket。到目前为止,所有解决方案(例如 websocket-sharp-with-proxy、websocket4net)都不足。

我试过这些:

How to use proxies with the WebSocket4Net library

https://***.com/a/2587330/573261

据我所知,作者尚未更新有关添加 NTLM 代理支持的讨论。 http://websocket4net.codeplex.com/discussions/448172

这个问题试图问为什么客户端实现不支持代理,但没有得到回答,也没有说明为什么没有人愿意解决这个问题。

回到我的问题,如何在 NTLM 代理后面的客户端应用程序中使用 WebSocket 技术?

【问题讨论】:

底层 .NET http 堆栈使用什么?大多数 Windows 堆栈(例如 WinInet、WinHTTP)已经支持 NTLM。 @Adrien 与new WebSocket("ws://echo.websocket.org", origin: "http://example.com"); 相呼应的东西,但它没有将 NTLM 代理作为参数。我提到的库也试过了,不管他们在内部使用什么 您能否提及这是一个独立的服务流程,还是更像一个桌面应用程序,一个人将登录并从他们的凭据启动您的应用程序? 桌面应用程序(便携式,类似 xcopy) 【参考方案1】:

System.Net.WebSockets 中的 ClientWebSocket 对象包含一个 Options 属性,允许您配置代理设置。

var ws = new System.Net.WebSockets.ClientWebSocket();
await ws.ConnectAsync(new Uri("destination.com"), CancellationToken.None);
ws.Options.Proxy = new WebProxy("example.com")

    Credentials = new NetworkCredential("userName", "password")
;

NetworkCredential 对象用于基于密码的身份验证,可以提供您需要的内容。如果上述方法不起作用,您也可以尝试在WebSocket 对象的Options 属性上设置Credentials

ws.Options.Credentials = new NetworkCredential("userName", "password");

我无法访问这种类型的环境,所以我实际上没有尝试过您正在尝试做的事情,并且不确定这是否会有所帮助。但是,这看起来对我有用。

【讨论】:

以上是关于如何将 .NET WebSocket 客户端与 NTLM 代理一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

java 11 java.net.http.Websocket 与 undertow 或 vert.x、netty 相比效率如何

.NET 4.5 中的 Websocket

.net websocket 如何发送消息给特定的客户端

如何编写一个 websocket 客户端

将图像从 websocket 服务器 .NET 发送到客户端 (HTML5)

如何在 C# Asp.net MVC 中创建 websocket 客户端?