使用TcpClient绕过代理

时间:2012-07-29 15:02:16

标签: c# networking proxy tcpclient

我正在尝试编写本地代理应用程序。我知道代理应用程序在理论上如何工作。 我已经完成了处理传入连接的所有事情。但问题是如何将请求客户端请求发送到指定的Url。当我尝试使用TcpClient创建与指定的Url和端口的连接时,它会抛出以下异常:

  

没有这样的主人知道

编辑:我认为我应该绕过像FireFox甚至系统代理集这样的代理。

任何想法都会有所帮助。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

基于colinsmith提供的链接,我已经完成了使用TcpClient绕过代理。我是这样做的:

    public static TcpClient CreateTcpClient(string url)
    {
        var webRequest = WebRequest.Create(url);
        webRequest.Proxy = null;

        var webResponse = webRequest.GetResponse();
        var resposeStream = webResponse.GetResponseStream();

        const BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Instance;

        var rsType = resposeStream.GetType();
        var connectionProperty = rsType.GetProperty("Connection", flags);

        var connection = connectionProperty.GetValue(resposeStream, null);
        var connectionType = connection.GetType();
        var networkStreamProperty = connectionType.GetProperty("NetworkStream", flags);

        var networkStream = networkStreamProperty.GetValue(connection, null);
        var nsType = networkStream.GetType();
        var socketProperty = nsType.GetProperty("Socket", flags);
        var socket = (Socket)socketProperty.GetValue(networkStream, null);

        return new TcpClient { Client = socket };
    }

希望对别人有所帮助。