在实际使用的过程中可能存在使用代理访问其他网站,以防因过度频繁访问,自己ip被封,如下提供C#使用socks5的大致代码,个人可以根据实际情况进行封装、加工。切勿乱用

C#代码  
  1. public class LoadProxyHelper
  2. {
  3. private static readonly log4net.ILog _logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  4. // 默认使用array 可以根据自己的爱好调整
  5. private static string[] ipdatas = new string[20];
  6. / 如下代理ip未必可用,请自行找寻(本次只是作为一个样本)
  7. private static string ipFormat = "x.x.x.{0}";
  8. static LoadProxyHelper()
  9. {
  10. // 给的是固定的ip
  11. for (int i = 0; i < ipdatas.Length; i++)
  12. {
  13. ipdatas[i] = string.Format(ipFormat , 19+i);
  14. }
  15. }
  16. public bool m_RequireAuthorize = false;
  17. public string m_user = string.Empty;
  18. public string m_pass = string.Empty;
  19. public byte[] bytes  = new byte[1024];
  20. /// <summary>
  21. /// 设定byte
  22. /// </summary>
  23. public byte[] RequireBytes
  24. {
  25. get { return bytes; }
  26. set { bytes = value; }
  27. }
  28. /// <summary>
  29. /// default is false
  30. /// </summary>
  31. public bool RequireAuthorize
  32. {
  33. get { return m_RequireAuthorize; }
  34. set { m_RequireAuthorize = value; }
  35. }
  36. public string Username
  37. {
  38. get { return m_pass; }
  39. set { m_pass = value; }
  40. }
  41. public string Password
  42. {
  43. get { return m_user; }
  44. set { m_user = value; }
  45. }
  46. private static string GetEncodType(string ContentType)
  47. {
  48. string strTemp = string.Empty;
  49. strTemp = ContentType;
  50. if (strTemp != null && strTemp.IndexOf("charset") > -1)
  51. {
  52. int index = strTemp.IndexOf("charset=") + 8;
  53. strTemp = strTemp.Substring(index, strTemp.Length - index);
  54. return strTemp;
  55. }
  56. return Encoding.Default.BodyName;
  57. }
  58. /// <summary>
  59. /// 获取请求返回的结果
  60. /// 注意包头中的每一个内容后面不能缺失“\r\n”
  61. /// 同时注意targetHost需要为域名
  62. /// </summary>
  63. /// <returns></returns>
  64. public string GetSocketBytes(string targetHost,int targetPort,string request,string encode,string refer="")
  65. {
  66. try
  67. {
  68. string messages = string.Empty;
  69. int rl = 0;
  70. string sr = string.Empty;
  71. Random rand = new Random();
  72. string ip = ipdatas[rand.Next(0, 20)];
  73. Socket sRH = GetSocket(ip, 8080);
  74. ConnectProxyServer(targetHost, targetPort, sRH);
  75. SocketSend(request + "\r\n", sRH);
  76. SocketSend("Accept-Language:zh-CN,zh;q=0.8\r\n", sRH);
  77. SocketSend("Connection:close\r\n", sRH);
  78. SocketSend(string.Format("Host:{0}\r\n", targetHost), sRH);
  79. SocketSend("User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36\r\n", sRH);
  80. SocketSend("\r\n", sRH);
  81. rl = sRH.Receive(bytes);
  82. sr = Encoding.GetEncoding(GetEncodType(encode)).GetString(bytes, 0, rl);
  83. //sr = GetResponseByEncode(encode, rl);
  84. StringBuilder messDatas = new StringBuilder();
  85. while (sr.Length > 0)
  86. {
  87. rl = sRH.Receive(bytes);
  88. //sr = GetResponseByEncode(encode, rl);
  89. sr = Encoding.GetEncoding(GetEncodType(encode)).GetString(bytes, 0, rl);
  90. messDatas.Append(sr);
  91. Console.WriteLine(sr);
  92. }
  93. if (!string.IsNullOrWhiteSpace(messDatas.ToString()))
  94. {
  95. messages = messDatas.ToString();
  96. }
  97. return messages;
  98. }
  99. catch(Exception ex)
  100. {
  101. StringBuilder sblog = new StringBuilder();
  102. sblog.AppendFormat("{0}异常信息( GetSocketBytes ):", "LoadProxyHelper");
  103. sblog.AppendFormat("{0}ex:{1},", Environment.NewLine, ex.ToString());
  104. sblog.AppendFormat("{0}StackTrace:{1},", Environment.NewLine, ex.StackTrace.ToString());
  105. _logger.Fatal(sblog.ToString(), ex);
  106. }
  107. return "";
  108. }
  109. /// <summary>
  110. /// 获取response内容
  111. /// </summary>
  112. /// <param name="encode"></param>
  113. /// <param name="rl"></param>
  114. /// <returns></returns>
  115. private string GetResponseByEncode(string encode,int rl)
  116. {
  117. string sr = string.Empty;
  118. switch (encode)
  119. {
  120. case "utf-8":
  121. sr = Encoding.UTF8.GetString(bytes, 0, rl);
  122. break;
  123. case "ascii":
  124. sr = Encoding.ASCII.GetString(bytes, 0, rl);
  125. break;
  126. case "unicode":
  127. sr = Encoding.Unicode.GetString(bytes, 0, rl);
  128. break;
  129. default:
  130. sr = Encoding.Default.GetString(bytes, 0, rl);
  131. break;
  132. }
  133. return sr;
  134. }
  135. /// <summary>
  136. /// 发送请求
  137. /// </summary>
  138. /// <param name="str"></param>
  139. /// <param name="sRH"></param>
  140. private void SocketSend(string str, Socket sRH)
  141. {
  142. try
  143. {
  144. byte[] b = Encoding.Default.GetBytes(str);
  145. sRH.Send(b);
  146. }
  147. catch (Exception ex)
  148. {
  149. StringBuilder sblog = new StringBuilder();
  150. sblog.AppendFormat("{0}异常信息( SocketSend ):", "LoadProxyHelper");
  151. sblog.AppendFormat("{0}ex:{1},", Environment.NewLine, ex.ToString());
  152. sblog.AppendFormat("{0}StackTrace:{1},", Environment.NewLine, ex.StackTrace.ToString());
  153. _logger.Fatal(sblog.ToString(), ex);
  154. }
  155. }
  156. /// <summary>
  157. /// 连接代理服务器
  158. /// </summary>
  159. /// <param name="strRemoteHost"></param>
  160. /// <param name="iRemotePort"></param>
  161. /// <param name="sProxyServer"></param>
  162. /// <returns></returns>
  163. public bool ConnectProxyServer(string strRemoteHost, int iRemotePort, Socket sProxyServer)
  164. {
  165. try
  166. {
  167. //构造Socks5代理服务器第一连接头(无用户名密码)
  168. byte[] bySock5Send = new Byte[10];
  169. bySock5Send[0] = 5;
  170. bySock5Send[1] = 1;
  171. bySock5Send[2] = RequireAuthorize ? (byte)2 : (byte)0;
  172. //发送Socks5代理第一次连接信息
  173. sProxyServer.Send(bySock5Send, 3, SocketFlags.None);
  174. byte[] bySock5Receive = new byte[10];
  175. int iRecCount = sProxyServer.Receive(bySock5Receive, bySock5Receive.Length, SocketFlags.None);
  176. //用户验证
  177. if (bySock5Receive[1] == 2 && !RequireAuthorize)
  178. {
  179. throw new Exception("代理服务器需要进行身份确认。");
  180. }
  181. else if (bySock5Receive[1] == 2)
  182. {
  183. //构造Socks5代理服务器第一连接头(无用户名密码)
  184. byte[] bUser = Encoding.Default.GetBytes(Username);
  185. byte[] bPass = Encoding.Default.GetBytes(Password);
  186. int dl = 3 + bUser.Length + bPass.Length;
  187. bySock5Send = new Byte[dl];
  188. bySock5Send[0] = 5;
  189. bySock5Send[1] = (byte)bUser.Length;
  190. Array.Copy(bUser, 0, bySock5Send, 2, bUser.Length);
  191. bySock5Send[2 + bUser.Length] = (byte)bPass.Length;
  192. Array.Copy(bPass, 0, bySock5Send, 3 + bUser.Length, bPass.Length);
  193. //发送Socks5代理第一次连接信息
  194. sProxyServer.Send(bySock5Send, dl, SocketFlags.None);
  195. bySock5Receive = new byte[100];
  196. iRecCount = sProxyServer.Receive(bySock5Receive, bySock5Receive.Length, SocketFlags.None);
  197. }
  198. if (iRecCount < 2)
  199. {
  200. sProxyServer.Close();
  201. throw new Exception("不能获得代理服务器正确响应。");
  202. }
  203. if (bySock5Receive[0] != 5 || (bySock5Receive[1] != 0 && bySock5Receive[1] != 2))
  204. {
  205. sProxyServer.Close();
  206. throw new Exception("代理服务其返回的响应错误。");
  207. }
  208. if (bySock5Receive[1] == 0)
  209. {
  210. bySock5Send[0] = 5;
  211. bySock5Send[1] = 1;
  212. bySock5Send[2] = 0;
  213. bySock5Send[3] = 1;
  214. IPAddress ipAdd = Dns.Resolve(strRemoteHost).AddressList[0];
  215. string strIp = ipAdd.ToString();
  216. string[] strAryTemp = strIp.Split(new char[] { '.' });
  217. bySock5Send[4] = Convert.ToByte(strAryTemp[0]);
  218. bySock5Send[5] = Convert.ToByte(strAryTemp[1]);
  219. bySock5Send[6] = Convert.ToByte(strAryTemp[2]);
  220. bySock5Send[7] = Convert.ToByte(strAryTemp[3]);
  221. bySock5Send[8] = (byte)(iRemotePort / 256);
  222. bySock5Send[9] = (byte)(iRemotePort % 256);
  223. sProxyServer.Send(bySock5Send, bySock5Send.Length, SocketFlags.None);
  224. iRecCount = sProxyServer.Receive(bySock5Receive, bySock5Receive.Length, SocketFlags.None);
  225. if (bySock5Receive[0] != 5 || bySock5Receive[1] != 0)
  226. {
  227. sProxyServer.Close();
  228. throw new Exception("第二次连接Socks5代理返回数据出错。");
  229. }
  230. return true;
  231. }
  232. else
  233. {
  234. if (bySock5Receive[1] == 2)
  235. throw new Exception("代理服务器需要进行身份确认。");
  236. else
  237. return false;
  238. }
  239. }
  240. catch(Exception ex)
  241. {
  242. StringBuilder sblog = new StringBuilder();
  243. sblog.AppendFormat("{0}异常信息( ConnectProxyServer ):", "LoadProxyHelper");
  244. sblog.AppendFormat("{0}ex:{1},", Environment.NewLine, ex.ToString());
  245. sblog.AppendFormat("{0}StackTrace:{1},", Environment.NewLine, ex.StackTrace.ToString());
  246. _logger.Fatal(sblog.ToString(), ex);
  247. }
  248. return false;
  249. }
  250. /// <summary>
  251. /// 获取连接的socket
  252. /// </summary>
  253. /// <param name="strIpAdd"></param>
  254. /// <param name="iPort"></param>
  255. /// <returns></returns>
  256. public Socket GetSocket(string strIpAdd, int iPort)
  257. {
  258. try
  259. {
  260. IPAddress hostadd = IPAddress.Parse(strIpAdd);//Dns.Resolve(strIpAdd).AddressList[0];
  261. IPEndPoint EPhost = new IPEndPoint(hostadd, iPort);
  262. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  263. s.Connect(EPhost);
  264. return s;
  265. }
  266. catch (Exception ex)
  267. {
  268. StringBuilder sblog = new StringBuilder();
  269. sblog.AppendFormat("{0}异常信息( GetSocket ):", "LoadProxyHelper");
  270. sblog.AppendFormat("{0}ex:{1},", Environment.NewLine, ex.ToString());
  271. sblog.AppendFormat("{0}StackTrace:{1},", Environment.NewLine, ex.StackTrace.ToString());
  272. _logger.Fatal(sblog.ToString(), ex);
  273. throw (ex);
  274. }
  275. }
  276. }

string host = "www.baidu.com";
string encode = "UTF-8";
string requset = string.Format("GET / HTTP/1.1");
// socks5
strReceiveString = proxHelper.GetSocketBytes(host, 80, requset, encode);
根据实际情况填写

关于C#使用socks5做代理相关推荐

  1. .NET 使用sock5做代理(不是搭建服务端)

    在日常开发中经常会遇到这些需求,爬取数据,都知道现在通常用python爬取是很方便的,但是免不了还有很多伙伴在用NET来爬取,在爬取数据的时候我们知道需要使用代理服务器,如果不用代理,你的IP很有可能 ...

  2. 使用fiddler4做代理调试手机页面

    由于一般手机不能改host,手机页面如果涉及到各个域名ip的混合使用,在手机上调试看效果非常麻烦. 使用fiddler4做代理,手机跟电脑连到同一个局域网,手机上网通过电脑做个代理上网,那么一切请求就 ...

  3. 小菜成长记---【proxy 代理模式 ---西门庆干潘金莲——王婆做代理】

    西门庆找潘金莲,潘金莲肯定不会答应,咋办找个王婆做代理呗. 西门庆干潘金莲的事我就不说了大家心里明的像镜似的.. 程序代码实现如下: 定义女人接口,以及方法. 潘金莲实现女人接口,以及方法. 王婆实现 ...

  4. 花生日记怎么做代理?花生日记官方邀请码AZR9NNO

    花生日记怎么做代理?花生日记官方邀请码AZR9NNO,官方客服微信Tyi523花生日记app是一款生活购物服务软件,这款软件收集了大量的优惠好用产品,大量的电商都在这里售卖产品,想要免费做代理的伙伴, ...

  5. 做代理记账工作风险有哪些

    做代理记账工作风险有:    1.来自经济环境的风险:不正规企业在代理记账是建立在市场经济基础上的,而在市场经济发展中最基本特征就是强烈的竞争,因此这些不正规代理企业或个人通常以盈利为目,为了争取更多 ...

  6. Linux做代理上网服务器

    Linux做代理上网服务器--送给那些想用Linux做网吧代理上网服务器的朋友 首先声明,会这个的老鸟不用看,我这只是给新手看的 首先安装好Linux,准备一台有两块网卡的服务器,一网卡接内网,另一网 ...

  7. 使用ssh tunnel 来做代理或跳板

    接前文 http://www.cnblogs.com/piperck/p/6188984.html  使用ssh config配置文件来管理ssh连接 前文说了如何配置自己的ssh config 来方 ...

  8. 如何选择socks5免费代理地址呢?

    选择Socks5代理地址时,需要考虑以下几个因素: 1.代理服务提供商的信誉度和口碑.选择一个有良好信誉度的代理服务提供商,可以避免遭遇到诸如安全风险和数据丢失等问题. 2.地理位置:选择一个地理位置 ...

  9. PRX 通过LSP实现浏览器Socks5/Tcp代理(从发送数据上着手)

    本文阐述针对市面上主流的浏览器 实现基于Socks5协议Tcp代理部分原理 它是浏览器翻墙的一种方法 这只是在LSP实现方式中一种类别 它具备很多不同方式 但在本文中不在累赘:此方法适应"C ...

最新文章

  1. 我最常用的Intellij IDEA快捷键
  2. 阻塞队列的使用案例-注册成功后增加积分
  3. CC2540、nRF51822应用开发比较
  4. cv::mat 颜色空间_网站设计基础:负空间
  5. mybatis中mysql转义讲解
  6. 三、规则组织的衍生组织——经山形组织数学模型的建立
  7. 从根本上解决 Infopath 2010 重复表的序号问题
  8. 齐浩亮 计算机科学与技术,齐浩亮
  9. C# ASP.NET 权限设计 完全支持多数据库多语言包的通用权限管理系统组件源码
  10. linux 改成utc时间_深度操作系统UTC时间设置怎样改?
  11. Ubuntu全盘备份与恢复,亲自总结,实测可靠
  12. ArcGIS Pro中的拓扑检查
  13. 2013计算机核心期刊,2013年度发表国内核心期刊论文
  14. Avril Lavigne: Complicated
  15. ui sketch_如何在Sketch中设计汽车应用程序设计UI
  16. 思科模拟器EVE-NG如何导入镜像
  17. 汽车电子之功能安全介绍
  18. 麦克风产品 麦克风元器件 市场调研
  19. LED有哪些优点,LED驱动电源方案
  20. 南京邮电大学计算机非全调剂,南京邮电大学2018年拟接收(非全日制)考研调剂公告...

热门文章

  1. Ubuntu 如何查看电脑内存条信息
  2. ttf字体库裁剪工具制作与使用
  3. 物联网概念下的B2C电子商务平台“开放”浅析
  4. 双显示器一个清晰一个模糊
  5. 魅蓝NOTE6怎么ROOT,一招最简单实用的方法
  6. CSDN 如何置顶文章
  7. GBase 8a 告警管理--页面告警
  8. 【Bash百宝箱】Android源码下载及编译
  9. 电脑硬件知识大全(二)
  10. cad缺失字体补全工具_字体下载预览缺失补齐助手-链图云字体助手下载v2.9.1.9 官方版-西西软件下载...