C# 通过HTTP代理访问Socket来获取邮件

关键穿透代理的代码(通过HTTP代理获取TcpClent)

public class ClientHelper
    {
        public static TcpClient connectViaHTTPProxy(
            string targetHost,
            int targetPort,
            string httpProxyHost,
            int httpProxyPort,
            string proxyUserName,
            string proxyPassword)
        {
            var uriBuilder = new UriBuilder
            {
                Scheme = Uri.UriSchemeHttp,
                Host = httpProxyHost,
                Port = httpProxyPort
            };

            var proxyUri = uriBuilder.Uri;

            var request = WebRequest.Create(
                "http://" + targetHost + ":" + targetPort);

            var webProxy = new WebProxy(proxyUri);

            request.Proxy = webProxy;
            request.Method = "CONNECT";

            var credentials = new NetworkCredential(
                proxyUserName, proxyPassword);

            webProxy.Credentials = credentials;

            var response = request.GetResponse();

            var responseStream = response.GetResponseStream();
            Debug.Assert(responseStream != null);

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

            var rsType = responseStream.GetType();
            var connectionProperty = rsType.GetProperty("Connection", Flags);

            var connection = connectionProperty.GetValue(responseStream, 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 };
        }
    }

原文地址:http://www.replicator.org/journal/201011170043-net-connecting-a-tcpclient-through-an-http-proxy-with-authentication

时间: 2024-10-08 20:23:51

C# 通过HTTP代理访问Socket来获取邮件的相关文章

使用代理访问,且获取请求的响应值

//请求获取响应 public static StringBuffer senGet(String url){ StringBuffer result=new StringBuffer(); BufferedReader in =null; try { URL realUrl = new URL(url); // /创建代理服务器 InetSocketAddress addr = new InetSocketAddress("192.168.11.254", 8080); //http

Yii2:避免文件路径暴漏,代理访问文件

制作背景:公司要做第三方文件管理系统,客户有时候需要直接访问文件,但是我们又不想暴露文件路径,才有这代理访问 基本功能介绍:读取txt文档.读取图片,如果有需要,可以通过插件读取doc.pdf文档, http://www.yii2.com/uploads/temp/read.bmp是我的真实路径 控制器 <?php /** * Created by PhpStorm. * User: Administrator * Date: 2016/11/24 0024 * Time: 14:38 */ n

关于在J2EE里使用代理访问外网的问题

今天写了一段代码想在service里访问一个外部网站,在service的方法里写了如下代码 System.setProperty("http.proxyType", "4"); System.setProperty("http.proxyPort", port); System.setProperty("http.proxyHost", host); System.setProperty("http.proxySet

Nginx 防CC攻击拒绝代理访问

先大概说说简单的结构…前端一个Nginx反向代理,后端一个Nginx instance app for PHP…实际上就是个Discuz,之前面对CC攻击都是预警脚本或者走CDN,但是这次攻击者不再打流量,而是针对数据库请求页面进行攻击,如search操作…帖子ID F5等..从日志分析来看是从3个URL着手攻击的,当时使用Nginx 匹配$query_string 来return 503…不过会导致页面不能访问,所以想到这么一个折中的办法. 首先你看一段代理请求的NGINX日志: ##通过分析

多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合

在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了. 如果使用了反向代理软件,将http://192.168.1.110:2046/ 的URL反向代理为 http://www.javapeixun.com.cn / 的URL时,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1 或 192.168.1.

keepalived+nginx反向代理访问后端web服务器

 架设web服务器通过nginx反向代理访问,并通过keepalived配置nginx反向代理服务器和nginxweb 服务器的故障转移 1.系统:Centos6.6 2.反向代理:Keepalived+nginxproxy:  主机:PHP-API-P1       IP地址:192.168.0.111 主机:PHP-API-P2 IP地址:192.168.0.112 VIP :192.168.0.8 3.后端服务:Keepalived+nginx: 主机:PHP-API-S1 IP地址:19

Win8及Win10应用代理访问网络(不使用第三方工具)

在使用Win8及Win10应用会发现,如果设置了网络代理,比如pac或者localhost代理服务器,这时候App就会无法访问网络 原因是这些App都是在沙箱虚拟环境中运行,无法访问localhost.所以无法使用代理. 而事实上系统有为这些App提供设置选项,可以使用CheckNetIsolation.exe来修改. 用法如下: CheckNetIsolation.exe LoopbackExempt -a -n=microsoft.windowscommunicationsapps_xxxx

maven 学习---Maven启用代理访问

如果你的公司正在建立一个防火墙,并使用HTTP代理服务器来阻止用户直接连接到互联网.如果您使用代理,Maven将无法下载任何依赖. 为了使它工作,你必须声明在 Maven 的配置文件中设置代理服务器:settings.xml. 1. Maven配置文件 找到文件 {M2_HOME}/conf/settings.xml, 并把你的代理服务器信息配置写入.注:{M2_HOME}  => D:\software\yiibai.com\apache-maven {M2_HOME}/conf/settin

【转载】如何阻止网站被恶意反向代理访问(几种级别的解决方案)

最近有人用小站数据,利用反向代理技术,做了个小偷站.用户访问的是他的网址,但实质上内容数据确是我的,这是一起恶意反向代理事件. 什么是反向代理? 先说说正向代理的概念: 正向代理,也就是传说中的代理,他的工作原理就像一个跳板.简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器.这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我.从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并