在C#网络编程中使用匿名Socks5代理

简介:

 我们知道编程的时候使用代理服务器并不是一件爽心悦目的事情,可是很多时候又是迫不得已的。微软在.NET Framework得System.Net名称空间里给我们提供了一个WebProxy类,不过这是一个http代理,这种代理使用起来受限太多,很不方便。如果我们需要访问更多的网络服务,socks代理是一个理想的选择。下面是C#编写的一个匿名socks5代理使用示例:

#region 连接匿名socks5服务器代码
private bool ConnectProxyServer(string strRemoteHost, int iRemotePort, Socket sProxyServer)
{
    //构造Socks5代理服务器第一连接头(无用户名密码)
    byte[] bySock5Send = new Byte[10];
    bySock5Send[0] = 5;
    bySock5Send[1] = 1;
    bySock5Send[2] = 0;

    //发送Socks5代理第一次连接信息
    sProxyServer.Send(bySock5Send, 3, SocketFlags.None);

    byte[] bySock5Receive = new byte[10];
    int iRecCount = sProxyServer.Receive(bySock5Receive, bySock5Receive.Length, SocketFlags.None);

    if ( iRecCount<2 ) 
    {
        sProxyServer.Close();
        throw new Exception("不能获得代理服务器正确响应。");
    }


    if ( bySock5Receive[0]!=5 || ( bySock5Receive[1]!=0 && bySock5Receive[1]!=2 ) )
    {
        sProxyServer.Close(); 
        throw new Exception("代理服务其返回的响应错误。");
    }


    if ( bySock5Receive[1]==0 )
    {
        bySock5Send[0] = 5;
        bySock5Send[1] = 1;
        bySock5Send[2] = 0;
        bySock5Send[3] = 1;

        IPAddress ipAdd = Dns.Resolve(strRemoteHost).AddressList[0];
        string strIp = ipAdd.ToString();
        string []strAryTemp = strIp.Split(new char[] {'.'});
        bySock5Send[4] = Convert.ToByte(strAryTemp[0]);
        bySock5Send[5] = Convert.ToByte(strAryTemp[1]);
        bySock5Send[6] = Convert.ToByte(strAryTemp[2]);
        bySock5Send[7] = Convert.ToByte(strAryTemp[3]);

        bySock5Send[8] = (byte)(iRemotePort/256);
        bySock5Send[9] = (byte)(iRemotePort%256);

        sProxyServer.Send(bySock5Send, bySock5Send.Length, SocketFlags.None);
        iRecCount = sProxyServer.Receive(bySock5Receive, bySock5Receive.Length, SocketFlags.None);

        if ( bySock5Receive[0]!=5 || bySock5Receive[1]!=0 )
        {
            sProxyServer.Close();
            throw new Exception("第二次连接Socks5代理返回数据出错。");
        }

        return true ;
    }

    else
    {
        if ( bySock5Receive[1]==2 ) 
            throw new Exception("代理服务器需要进行身份确认。");
        else return false ;
    }

}

#endregion

   关于socks5代理的详细文档,可以参看RFC 1928

   使用上面的代码需要有一个匿名的socks5代理服务器,然后调用:

private Socket GetSocket( string strIpAdd,  int iPort)
{
    IPAddress hostadd = Dns.Resolve(strIpAdd).AddressList[0];
    IPEndPoint EPhost = new IPEndPoint(hostadd, iPort);
    Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    s.Connect(EPhost);
    return s ;
}


sRemoteHost  =  GetSocket(proxyHost, proxyProt);
ConnectProxyServer("61.135.134.24", 80
, sRemoteHost);

   如果您需要使用非匿名的socks5代理,把RFC 1928后面关于用户验证的部分实现就可以了,由于我使用的都是匿名的socks5代理,所以没有做这个部分得工作

    

目录
相关文章
|
3月前
|
运维 监控 数据可视化
Python 网络请求架构——统一 SOCKS5 接入与配置管理
通过统一接入端点与标准化认证,集中管理配置、连接策略及监控,实现跨技术栈的一致性网络出口,提升系统稳定性、可维护性与可观测性。
|
3月前
|
存储 机器学习/深度学习 监控
网络管理监控软件的 C# 区间树性能阈值查询算法
针对网络管理监控软件的高效区间查询需求,本文提出基于区间树的优化方案。传统线性遍历效率低,10万条数据查询超800ms,难以满足实时性要求。区间树以平衡二叉搜索树结构,结合节点最大值剪枝策略,将查询复杂度从O(N)降至O(logN+K),显著提升性能。通过C#实现,支持按指标类型分组建树、增量插入与多维度联合查询,在10万记录下查询耗时仅约2.8ms,内存占用降低35%。测试表明,该方案有效解决高负载场景下的响应延迟问题,助力管理员快速定位异常设备,提升运维效率与系统稳定性。
257 4
|
4月前
|
Shell 开发工具 git
使用代理访问网络各项命令总结
工作中常需设置代理,容易导致环境混乱。本文总结了 SourceTree 无法拉取代码的问题,排查了环境变量、Git 全局配置及系统代理设置,最终通过清除 Git 代理配置解决。内容涵盖排查步骤、命令整理及脚本处理,帮助快速定位并解决代理相关网络问题。
259 3
|
负载均衡 网络协议 网络性能优化
动态IP代理技术详解及网络性能优化
动态IP代理技术通过灵活更换IP地址,广泛应用于数据采集、网络安全测试等领域。本文详细解析其工作原理,涵盖HTTP、SOCKS代理及代理池的实现方法,并提供代码示例。同时探讨配置动态代理IP后如何通过智能调度、负载均衡、优化协议选择等方式提升网络性能,确保高效稳定的网络访问。
1276 2
|
9月前
|
人工智能 搜索推荐 开发者
GPT-4o测评准确率竟不到1%!BrowseComp:OpenAI开源AI代理评测新基准,1266道高难度网络检索问题
OpenAI最新开源的BrowseComp基准包含1266个高难度网络检索问题,覆盖影视、科技、艺术等九大领域,其最新Deep Research模型以51.5%准确率展现复杂信息整合能力,为AI代理的浏览能力评估建立新标准。
690 4
GPT-4o测评准确率竟不到1%!BrowseComp:OpenAI开源AI代理评测新基准,1266道高难度网络检索问题
|
10月前
|
机器学习/深度学习 存储 人工智能
SAFEARENA: 评估自主网络代理的安全性
基于大语言模型的智能体在解决基于网络的任务方面正变得越来越熟练。随着这一能力的增强,也随之带来了更大的被恶意利用的风险,例如在在线论坛上发布虚假信息,或在网站上销售非法物质。为了评估这些风险,我们提出了SAFEARENA,这是第一个专注于故意滥用网络代理的基准测试。SAFEARENA包含四个网站上共计500个任务,其中250个是安全的,250个是有害的。我们将有害任务分为五类:虚假信息、非法活动、骚扰、网络犯罪和社会偏见,旨在评估网络代理的真实滥用情况。我们对包括GPT-4o、Claude-3.5 Sonnet、Qwen-2-VL 72B和Llama-3.2 90B在内的领先基于大语言模型的网
500 11
SAFEARENA: 评估自主网络代理的安全性
|
缓存 数据安全/隐私保护 Kotlin
Kotlin 中的网络请求代理设置最佳实践
Kotlin 中的网络请求代理设置最佳实践
|
10月前
|
缓存 监控 算法
基于 C# 网络套接字算法的局域网实时监控技术探究
在数字化办公与网络安全需求增长的背景下,局域网实时监控成为企业管理和安全防护的关键。本文介绍C#网络套接字算法在局域网实时监控中的应用,涵盖套接字创建、绑定监听、连接建立和数据传输等操作,并通过代码示例展示其实现方式。服务端和客户端通过套接字进行屏幕截图等数据的实时传输,保障网络稳定与信息安全。同时,文章探讨了算法的优缺点及优化方向,如异步编程、数据压缩与缓存、错误处理与重传机制,以提升系统性能。
269 2
|
缓存 负载均衡 安全
Swift中的网络代理设置与数据传输
Swift中的网络代理设置与数据传输
|
网络协议 Unix Linux
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
548 0