报错:
Failed to fetch http://security.debian.org/debian-security/pool/updates/main/l/linux/linux-libc-dev_4.9.258-1_amd64.deb 404 Not Found [IP: 2a04:4e42:6a::644 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
解决方式:
apt-get update
git clone https://github.com/TelegramMessenger/MTProxy
cd MTProxy
make &&cd objs/bin
注意,第一步的报错不解决,这里会提示make not found
1、curl -s https://core.telegram.org/getProxySecret -o proxy-secret
2、curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf
3、head -c 16 /dev/urandom | xxd -ps
./mtproto-proxy -u <用户名,比如root>-p 8888 -H <端口号,比如443,如果443没了,就随便找个不重复到端口>-S <第三步生成的秘钥>--aes-pwd proxy-secret proxy-multi.conf -M 1
解释:所有尖括号里的内容都要自行修改
这里执行完后,会提示main loop表示已经可用了。
tg://proxy?server= <你的域名或者IP>&port=<刚刚设置的端口号,443或者其他>&secret=<刚刚第三步生成的秘钥>
进阶:将程序服务化,重启后自动启动
nano /etc/systemd/system/MTProxy.service
官方推荐
我推荐:
vim /etc/systemd/system/MTProxy.service
然后将下面的值修改后拷贝进去:
[Unit]
Description=MTProxy
After=network.target
[Service]
Type=simple
WorkingDirectory=<你放mtproto-proxy程序的目录,要是按照步骤一步步来,应该就是在当前目录,pwd命令执行下,就显示了>
ExecStart=<补全程序所在目录>/mtproto-proxy -u <用户名,比如root>-p 8888 -H <端口号,比如443,如果443没了,就随便找个不重复到端口>-S <第三步生成的秘钥>--aes-pwd proxy-secret proxy-multi.conf -M 1
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl restart MTProxy.service
systemctl status MTProxy.service
systemctl enable MTProxy.service
一般会在systemctl status MTProxy.service这里出现问题:
Active: active (running) 成功
Active: failed 失败
排查问题顺序:
先把MTProxy.service文件中的ExecStart这一行拷贝出来单独执行,看看能不能执行
一般有3种问题:
端口被占用
使用到用户名不存在
配置里到文件夹没配置对,导致找不到命令。
mitmtproxy即mitm+proxy,顾名思义是中间人攻击加代理。用于中间人攻击的代理首先会向正常代理一样转发请求,保障服务器与客户端的通信,其次,会适时的查、记录截获的数据或 篡改数据 ,引发服务端和客户端的特定行为。
mitmproxy可以利用python实现高度定制脚本。因为mitmproxy工作在http层,现在的绝大部分的https拥有检测并规避中间人攻击的能力,所以mitmproxy工作时必须忽略浏览器的SSL证书或让其主动信任。由于此工具具有一定的黑产性质,使用时注意有所规范。
mitmproxy有三种启动命令,分别是mitmproxy,mitmdump,mitmweb,三个命令都会启动软件,区别在于交互界面的不同。
mitmproxy没有window,再次略过。
mitmdump启动后在后台默默运行,实用性不强,也略过。
mitmweb启动后,在8081端口开一个窗口,形如:
[图片上传失败...(image-369edf-1541148099114)]
接下来就是启动chrome,不过启动要设置代理,并忽略证书错误,命令行如下
上述工作完成后就可以开发自定义脚本了,这才是mitmproxy真正强大的地方。方法有两个:
1.编写一个 py 文件供 mitmproxy 加载,文件中定义了若干函数,这些函数实现了某些 mitmproxy 提供的事件,mitmproxy 会在某个事件发生时调用对应的函数。
2.编写一个 py 文件供 mitmproxy 加载,文件定义了变量 addons,addons 是个数组,每个元素是一个类实例,这些类有若干方法,这些方法实现了某些 mitmproxy 提供的事件,mitmproxy 会在某个事件发生时调用对应的方法。
推荐使用第二种方法。
事实上考虑到mitmproxy的实际使用场景,大多数情况下我们只会用到针对HTTP生命周期的几个事件。只会用到http_connect/request/response三个时间就能完成大多数需求了。
详细使用还在研究中。敬请期待。
[toc]
基于原文截取修改:
原文链接: 让代理服务器支持HTTPS很难吗?
我们开展稳定高匿名HTTP代理业务以来,我听到客户咨询最多的问题之一就是“你们的代理支持HTTPS协议吗?”。我觉得很多人对HTTPS代理存在理解上的误区,所以我写了这篇文章。目的就是想说明“实现支持HTTPS的代理一点都不难!”。
说到HTTPS代理很多人瞬间就会联想到HTTPS的各种证书和各种加密,觉得很高端很复杂的样子。其实不然,代理服务器不需要配置证书、也不需要处理任何加密。因为HTTPS代理是通过Web隧道(Web tunnel)工作的。
Web隧道允许用户通过HTTP连接发送非HTTP流量(例如FTP,Telnet,SMTP),这就使得那些使用非HTTP协议的应用程序可以通过HTTP代理工作了。你现在应该就明白了为什么QQ可用设置使用HTTP代理工作。Web隧道这么强大,但它并不复杂。
Web隧道是用HTTP协议的CONNECT方法建立起来的。CONNECT方法不是HTTP/1.1核心规范的一部分,但确是一种得到广泛应用的扩展。客户端通过CONNECT方法请求代理服务器创建一条到达任意目的服务器和端口的TCP链接,代理服务器仅对客户端和服务器之间的后续数据进行盲转发(只是转发,不关心、也不懂发送的内容是什么)。
1) 客户端通过HTTP协议发送一条CONNECT方法的请求给代理服务器,告知代理服务器需要连接的主机和端口。
例如:
在本例中客户端通过CONNECT方法请求代理服务器打开一条到 www.alipay.com 主机443端口的TCP链接。
2) 代理服务器一旦建立了和目标主机(上例中的 www.alipay.com:443 )TCP连接,就会回送一条HTTP 200 Connection Established应答给客户端。
例如:
3) 此时隧道就建立起来了。客户端通过该HTTP隧道发送的所有数据都会被代理服务器(通过之前建立起来的与目标主机的TCP连接)原封不动的转发给目标服务器。目标服务器发送的所有数据也会被代理服务器原封不动的转发给客户端。注意:是原封不动的转发,代理服务器并不需要知道内容的含义,也不会尝试去对内容进行解析。
PS:上面这张插图是我引用《HTTP权威指南》一书的,做了修改。
这下你应该明白了Web隧道的工作原理。所以对代理服务器来说只要其支持Web隧道就支持HTTPS协议(和其它非HTTP协议),与证书、加密没有任何直接的关系。从上面的过程可以看出,实现Web隧道并不难,只要代理服务器能够正确处理CONNECT请求,然后对数据进行盲转发即可。从难度上看这比标准的HTTP协议代理还要简单(标准HTTP协议代理需要对客户端和服务端双方的HTTP报文先进行解析,修改后再进行转发)。
我能说
哈哈,没写,你来
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)