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

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

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

    制作背景:公司要做第三方文件管理系统,客户有时候需要直接访问文件,但是我们又不想暴露文件路径,才有这代理访问 基本功能介绍:读取txt文档.读取图片,如果有需要,可以通过插件读取doc.pdf文档, ...

  2. CentOS6.3搭建Nginx代理访问MongoDB GridFS图片资源

    PHP可以直接读取MongoDB GridFS中的图片并显示到页面中,但对PHP的压力就大了.偶然机会,了解到Nginx可以代理访问,实现过程如下: 1.工具准备 安装一些必要的编译工具及库,这里是直 ...

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

    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...

  4. Nginx 防CC攻击拒绝代理访问

    先大概说说简单的结构…前端一个Nginx反向代理,后端一个Nginx instance app for PHP…实际上就是个Discuz,之前面对CC攻击都是预警脚本或者走CDN,但是这次攻击者不再打 ...

  5. 如何让 curl 命令通过代理访问

    如何让 curl 命令通过代理访问 Linux.中国 - 开源中文社区 2018-01-18 8909 阅读 技术 我的系统管理员给我提供了如下代理信息: IP: 202.54.1.1 Port: 3 ...

  6. Python3.x:免费代理ip的批量获取并入库

    Python3.x:免费代理ip的批量获取并入库 一.简介 网络爬虫的世界,向来都是一场精彩的攻防战.现在许多网站的反爬虫机制在不断的完善,其中最令人头疼的,莫过于直接封锁你的ip.但是道高一尺魔高一 ...

  7. squid正向代理访问外网

    目录 一.前言 二.Squid安装 三.客户端设置 四.验证 五.Python请求 六.写在最后 一.前言 1)我们可能会碰到这样的需求,客户端Client-1需要访问Server-1,但由于各种各样 ...

  8. cxf设置代理访问webservice接口

    由于业务上的需要,需要访问第三方提供的webservice接口,但由于公司做了对外访问的限制,不设置代理是不能外网的,如果使用http设置代理访问外网还是比较容易的,但使用cxf有点不知道从哪里入手. ...

  9. HttpWebRequest代理访问网站

    private void button1_Click(object sender, EventArgs e) { string str ="http://www.7y8.com/V/ip.a ...

随机推荐

  1. vue在使用ajax获取数据时,两种方法(jquery和vue_resource)

    @{    Layout = null;} <!DOCTYPE html> <html><head>    <meta name="viewport ...

  2. 【转】几种Java序列化方式的实现

    0.前言 本文主要对几种常见Java序列化方式进行实现.包括Java原生以流的方法进行的序列化.Json序列化.FastJson序列化.Protobuff序列化. 1.Java原生序列化 Java原生 ...

  3. 【学习笔记】深入理解js原型和闭包(6)——继承

    为何用“继承”为标题,而不用“原型链”? 原型链如果解释清楚了很容易理解,不会与常用的java/C#产生混淆.而“继承”确实常用面向对象语言中最基本的概念,但是java中的继承与javascript中 ...

  4. innerHTML的性能问题

    看到一遍文章When innerHTML isn’t Fast Enough,反应了innerHTML在操作量大了以后的性能下降的问题. 并且给出了一个replaceHTML的函数 function  ...

  5. 常用的-->查找算法与排序算法

    顺序查找 从列表第一个元素开始,顺序进行搜索,直到找到为止. 二分查找 从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半. li = [1, 2, ...

  6. mysql登录(linux)

    一.修改配置文件 查询路径 find / -name my.cnf 修改文件 vi my.cnf [mysqld]下面加上skip-grant-tables 二.登录数据库 重启mysql servi ...

  7. Spread / Rest 操作符

    Spread / Rest 操作符指的是 ...,具体是 Spread 还是 Rest 需要看上下文语境. 当被用于迭代器中时,它是一个 Spread 操作符:(参数为数组) function foo ...

  8. ::Sleep(0)的使用

    ::Sleep(0)的使用 This function causes a thread to relinquish the remainder of its time slice and become ...

  9. modify django app models.py adn settings.py

    from django.db import models from django.contrib import admin # from personal import models class Us ...

  10. 错误的语法:"create view必须是批处理中仅有的语句"

    编写脚本提示: 错误的语法:"create view必须是批处理中仅有的语句" FROM sys.views WHERE name = 'v_CS_UserRoleNames' ) ...