日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

解决一下 WebView2 不能用 socket5代理的问题。

發布時間:2023/12/16 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解决一下 WebView2 不能用 socket5代理的问题。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

webview2現在好像還能在啟用s5代理的情況下,可以輸入賬號密碼。應該是還沒開發這個API。所以曲線解決了一下,記錄一下吧。

解決就是自己寫代理轉發認證一下。直接上代碼?

/// <summary> /// Socket代理5轉發 /// </summary> public class Socket5Forward { #region 類型 Type #region 私有類型 Private /// <summary> /// 進度命令 /// </summary> private enum Command { /// <summary> /// 默認 /// </summary> Default, /// <summary> /// 連接 /// </summary> Connection, /// <summary> /// 驗證 /// </summary> Validate, /// <summary> /// 讀寫 /// </summary> ReadWrite } /// <summary> /// 異步狀態對象 /// </summary> private class StateObject { /// <summary> /// 標識 /// </summary> public long IntID { get; set; } /// <summary> /// 客戶端-無認證 /// </summary> public Socket ClientSocket { get; set; } /// <summary> /// 客戶端-進度 /// </summary> public Command ClientCommand { get; set; } = Command.Default; /// <summary> /// 客戶端-數據包 /// </summary> public List<ArraySegment<byte>> ClientRead { get; set; } /// <summary> /// 代理端-需認證 /// </summary> public Socket ProxySocket { get; set; } /// <summary> /// 代理端-進度 /// </summary> public Command ProxyCommand { get; set; } = Command.Default; /// <summary> /// 代理段-數據包 /// </summary> public List<ArraySegment<byte>> ProxyRead { get; set; } } /// <summary> /// 代理數據 /// </summary> public class Proxy { /// <summary> /// 代理IP /// </summary> public string IP { set; get; } /// <summary> /// 代理端口 /// </summary> public int Port { set; get; } /// <summary> /// 代理用戶 /// </summary> public string User { set; get; } /// <summary> /// 代理密碼 /// </summary> public string Pass { set; get; } } #endregion 私有類型 #region 公開類型 Public #endregion 公開類型 #endregion 類型 #region 屬性 Propertie #region 私有屬性 Private /// <summary> /// 代理信息 /// </summary> private Proxy ObjProxy { get; set; } /// <summary> /// 自增標識 /// </summary> private long IntID { get; set; } = 0; /// <summary> /// 服務對象 /// </summary> private TcpListener ObjServer { get; set; } #endregion 私有屬性 #endregion 屬性 #region 構造 Constructor /// <summary> /// 構造對象 /// </summary> /// <param name="sIp">代理IP</param> /// <param name="nPort">代理端口</param> /// <param name="sUser">代理用戶</param> /// <param name="sPass">代理密碼</param> public Socket5Forward(string sIp, int nPort, string sUser, string sPass) { ObjProxy = new Proxy { IP = sIp, Port = nPort, User = sUser, Pass = sPass }; AddLog(System.Text.Json.JsonSerializer.Serialize(ObjProxy)); } public Socket5Forward(Proxy oProxy) { ObjProxy = oProxy; } #endregion 構造 #region 方法 Method #region 私有方法 Private /// <summary> /// 日志 /// </summary> /// <param name="sMsg"></param> private static void AddLog(string sMsg) { System.Diagnostics.Trace.WriteLine(sMsg); //Console.WriteLine(sMsg); } #region 客戶端 /// <summary> /// 客戶端-接受連接 /// </summary> /// <param name="iAR"></param> private void ClientAccept(IAsyncResult iAR) { AddLog("客戶端-連接"); var listener = iAR.AsyncState as TcpListener; try { var oClientSocket = listener.EndAcceptSocket(iAR); var oProxyScoket = new TcpClient(); var oState = new StateObject { IntID = ++IntID, ClientSocket = oClientSocket, ClientCommand = Command.Connection, ClientRead = new List<ArraySegment<byte>>() { new ArraySegment<byte>(new byte[oClientSocket.ReceiveBufferSize]) }, ProxySocket = oProxyScoket.Client, ProxyRead = new List<ArraySegment<byte>>() { new ArraySegment<byte>(new byte[oClientSocket.ReceiveBufferSize]) } }; _ = oProxyScoket.BeginConnect(ObjProxy.IP, ObjProxy.Port, ProxyConnect, oState); _ = listener.BeginAcceptSocket(ClientAccept, listener); } catch { } } /// <summary> /// 客戶端-讀取->轉發 /// </summary> /// <param name="iAR"></param> private void ClientRead(IAsyncResult iAR) { var oState = iAR.AsyncState as StateObject; try { var nRead = oState.ClientSocket.EndReceive(iAR); if (nRead > 0) { if (oState.ClientCommand == Command.Connection) { AddLog($"[{oState.IntID}]客戶端-請求命令"); var nFristMethod = oState.ClientRead[0].Array[2]; _ = oState.ClientSocket.Send(new byte[] { 0x05, nFristMethod }); oState.ClientCommand = Command.ReadWrite; } else if (oState.ClientCommand == Command.ReadWrite) { //var sText = Encoding.UTF8.GetString(oState.ClientRead[0].Array, 0, nRead); //AddLog(sText); var nSend = oState.ProxySocket.Send(oState.ClientRead[0].Array, nRead, SocketFlags.None); AddLog($"[{oState.IntID}]客戶端-轉發數據包長度:R[{nRead}],S[{nSend}]"); } _ = oState.ClientSocket.BeginReceive(oState.ClientRead, SocketFlags.None, ClientRead, oState); } else { AddLog($"[{oState.IntID}]客戶端-關閉:長度不足"); oState.ClientSocket.Close(); oState.ProxySocket.Close(); } } catch (Exception) { AddLog($"[{oState.IntID}]客戶端-關閉:異常關閉"); oState.ClientSocket.Close(); oState.ProxySocket.Close(); } } #endregion #region 代理端 /// <summary> /// 代理端-連接完成 /// </summary> /// <param name="iAR"></param> private void ProxyConnect(IAsyncResult iAR) { try { AddLog("代理端已連接"); var oState = iAR.AsyncState as StateObject; oState.ProxySocket.EndConnect(iAR); oState.ProxyCommand = string.IsNullOrEmpty(ObjProxy.User) || string.IsNullOrEmpty(ObjProxy.Pass) ? Command.Validate : Command.Connection; _ = oState.ProxySocket.Send(new byte[] { 0x05, 0x02, 0x00, 0x02 }); _ = oState.ProxySocket.BeginReceive(oState.ProxyRead, SocketFlags.None, ProxyRead, oState); } catch { } } /// <summary> /// 代理端-讀取->轉發 /// </summary> /// <param name="iAR"></param> private void ProxyRead(IAsyncResult iAR) { var oState = iAR.AsyncState as StateObject; try { var nRead = oState.ProxySocket.EndReceive(iAR); if (nRead > 0) { //AddLog($"[{oState.IntID}]ProxyRead====nRead > 0 nRead=" + nRead); if (oState.ProxyCommand == Command.Connection) { var arrBuf = oState.ProxyRead[0].Array; AddLog($"[{oState.IntID}]代理端-返回連接方法:{arrBuf[0]:x},{arrBuf[1]:x}"); var oStream = new MemoryStream(); oStream.WriteByte(0x1); oStream.WriteByte((byte)ObjProxy.User.Length); oStream.Write(Encoding.ASCII.GetBytes(ObjProxy.User)); oStream.WriteByte((byte)ObjProxy.Pass.Length); oStream.Write(Encoding.ASCII.GetBytes(ObjProxy.Pass)); _ = oState.ProxySocket.Send(oStream.ToArray()); oStream.Close(); oState.ProxyCommand = Command.Validate; } else if (oState.ProxyCommand == Command.Validate) { var arrBuf = oState.ProxyRead[0].Array; AddLog($"[{oState.IntID}]代理端-返回驗證結果:{arrBuf[0]:x},{arrBuf[1]:x}"); if (arrBuf[1] == 0x0) { AddLog($"[{oState.IntID}]客戶端-接受數據"); _ = oState.ClientSocket.BeginReceive(oState.ClientRead, SocketFlags.None, ClientRead, oState); oState.ProxyCommand = Command.ReadWrite; } else { AddLog($"[{oState.IntID}]代理端-認證錯誤"); oState.ProxySocket.Close(); oState.ClientSocket.Close(); } } else if (oState.Pro 江西黨性培訓 www.ctbuganxun.com xyCommand == Command.ReadWrite) { //var sText = Encoding.UTF8.GetString(oState.ProxyRead[0].Array); var nSend = _ = oState.ClientSocket.Send(oState.ProxyRead[0].Array, nRead, SocketFlags.None); AddLog($"[{oState.IntID}]代理端-轉發數據包長度:R[{nRead}],S[{nSend}]"); } _ = oState.ProxySocket.BeginReceive(oState.ProxyRead, SocketFlags.None, ProxyRead, oState); } else { AddLog($"[{oState.IntID}]代理端-關閉:長度不足"); oState.ProxySocket.Close(); oState.ClientSocket.Close(); } } catch (Exception) { AddLog($"[{oState.IntID}]代理端-關閉:異常"); oState.ProxySocket.Close(); oState.ClientSocket.Close(); } } #endregion #endregion 私有方法 #region 公開方法 Public /// <summary> /// 開始服務 /// </summary> /// <param name="nProt"></param> public void Start(int nProt) { AddLog("開始"); try { ObjServer = new TcpListener(IPAddress.Any, nProt); ObjServer.Start(); _ = ObjServer.BeginAcceptSocket(ClientAccept, ObjServer); } catch (Exception) { ObjServer = null; } } public void Stop() { ObjServer?.Stop(); } #endregion 公開方法 #endregion 方法 }

?

總結

以上是生活随笔為你收集整理的解决一下 WebView2 不能用 socket5代理的问题。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。