那个站在中间的男人,使用Python就能直接操控你的上网请求

点击“简说Python”,选择“星标公众号”

福利干货,第一时间送达!

那个站在中间的男人,使用Python就能直接操控你的上网请求_第1张图片

图片by@unsplash


本文授权转载自学习Python的正确姿势,禁二次转载

作者:小帅b

阅读文本大概需要 7 分钟。


那个站在中间的男人,使用Python就能直接操控你的上网请求_第2张图片

有一天,小明问小黑说:

“世界上最帅的人是谁?”


那个站在中间的男人,使用Python就能直接操控你的上网请求_第3张图片


正文开始

不知道你有没有听过一个词叫做:MITM, 也就是 man in the middle〔attack〕,意思就是中间人攻击。


比如你在跟你另一半(单身狗,暂时假设你有另一半640)网上聊天的时候,本来你们聊得好好的,哥们聊得挺嗨啊。突然间,小帅b在走进了你们两的网络通讯之间,并且跟你们两同时建立了联系,这时候,你原本要发给你另一半的信息,被我拦截下来了,而这时候我还可以对你要发的数据进行篡改,然后再发给你的另一半。你们两还全然不知,以为就是对方说的话。



那个站在中间的男人,使用Python就能直接操控你的上网请求_第4张图片



这就是中间的人,坏坏,这时候你可能想到了 mitmproxy,它不止是可以像 直接使用 Python 写一些脚本进行中间操控。



那个站在中间的男人,使用Python就能直接操控你的上网请求_第5张图片



那么,怎么玩呢?


正是因为 mitmproxy 这种比较牛逼的请求拦截定制化骚操作,使得它又一不小心成了我们爬虫的一个工具,使用它我们可以更加方便的爬取一些 APP 上面的数据。


安装起来特别简单,pip install 下就可以了,使用如下命令安装:


pip install mitmproxy


那个站在中间的男人,使用Python就能直接操控你的上网请求_第6张图片


就是这么一顿下载之后,你就成为了中间的人了,这时候你的电脑就有了 mitmproxymitmdumpmitmweb 这三个牛逼的东西,其实它们本质都一样,只是交互的方式不同:


mitmproxy 主要是以控制台的方式交互


那个站在中间的男人,使用Python就能直接操控你的上网请求_第7张图片



mitmdump  要是以命令行的方式交互



那个站在中间的男人,使用Python就能直接操控你的上网请求_第8张图片



mitmweb 就是以 web 的形式进行交互



那个站在中间的男人,使用Python就能直接操控你的上网请求_第9张图片



反正都差不多的,你用哪个都行:


那个站在中间的男人,使用Python就能直接操控你的上网请求_第10张图片



这时候你想要启动 mitm ,只需要直接输入名称就可以了,比如我这里要启动 mitmweb:



640?wx_fmt=png


可以看到它就绑定了 8080 的端口,用来监听,这时候我们如果使用 8080 端口进行代理上网,就可以直接获取到请求数据了。


而 8081 这个端口就是用来运行 mitm 交互界面的,浏览器打开 127.0.0.1:8081 就是这个样子:



那个站在中间的男人,使用Python就能直接操控你的上网请求_第11张图片



想要使用 Chrome 以及 8080 端口代理运行,你可以使用命令行打开:



google-chrome --proxy-server=127.0.0.1:8080 --ignore-certificate-errors


  

如果你用的是 windows 系统的话,上面命令的 google-chrome 换成你的 chrome.exe 路径,后面的 --ignore-certificate-errors 主要是忽略一下证书,打开之后我们输入百度:



那个站在中间的男人,使用Python就能直接操控你的上网请求_第12张图片



这个时候我们就可以在中间人(mitmweb)那里看到百度的请求了:



那个站在中间的男人,使用Python就能直接操控你的上网请求_第13张图片



点进去一个具体的请求,你会发现右边的面板很清晰的给你展示了请求和返回的数据:



那个站在中间的男人,使用Python就能直接操控你的上网请求_第14张图片

那个站在中间的男人,使用Python就能直接操控你的上网请求_第15张图片



看到这里,我知道你又想坏坏了,篡改一下请求和返回的数据?


简单,在这里定义你要修改的地方,比如我要对百度的请求的数据进行修改,那就在这里输入 baidu:



640?wx_fmt=png



这时候我们重新在 8080 代理的 Chrome 请求一下百度,你会发现,中间人这边先拦截了请求了:



640?wx_fmt=png



这时候我们点击右边那支笔,就可以直接修改请求数据了:



那个站在中间的男人,使用Python就能直接操控你的上网请求_第16张图片



因为我这里只是直接请求首页,没有表单数据,我就不修改了,直接让它去请求百度的服务器,我们可以点击上面 Flow 菜单下的 resume 按钮就可以直接执行了:



那个站在中间的男人,使用Python就能直接操控你的上网请求_第17张图片



服务器返回数据的时候,又被我们(中间人)拦截下来了,此时我们又可以修改服务器返回的数据了:



那个站在中间的男人,使用Python就能直接操控你的上网请求_第18张图片


你看这标题:


那个站在中间的男人,使用Python就能直接操控你的上网请求_第19张图片



我们改成:帅b老仙,法力无边



那个站在中间的男人,使用Python就能直接操控你的上网请求_第20张图片



写完之后,右上角打个勾,然后再点击一下上面的 resume :



那个站在中间的男人,使用Python就能直接操控你的上网请求_第21张图片



可以看到浏览器的标题变了:



640?wx_fmt=png





那个站在中间的男人,使用Python就能直接操控你的上网请求_第22张图片




可能你看到这里会想,这...和 fiddler 差不多嘛,好吧,接下来就给你展示一下,它真正厉害的地方,把 Python 当做中间人,对请求和返回数据进行操控smiley_44.png


开始撸一下代码,我们创建一个 mitm_shuaib.py



那个站在中间的男人,使用Python就能直接操控你的上网请求_第23张图片




在这里我们把 mitmproxy 导进来,接着定义了 addons ,在这个列表里面我可以定义一些实例,每个实例都可以自己去定义想要的中间操作。


实例里面的定义的方法是和 mitmproxy 内部的机制挂钩的,比如请求时会调用到 requests , 响应时会调用 response 方法,我们的脚本逻辑主要就是在这些地方实现的。


比如我们这里用到了 request 方法,也就是当我们进行请求的时候,中间人在这里就可以拦截到请求,每次访问我们就 +1 ,然后打印一下。


保存好我们的脚本,然后使用 mitmweb 来执行:


mitmweb -s mitm_shuaib.py


这时候脚本就运行了,开了 8080 端口代理:



那个站在中间的男人,使用Python就能直接操控你的上网请求_第24张图片



老样子,我们开个 8080 端口代理的浏览器来访问,这时候每次请求就被我知道了,看以下就是每次请求被我发现后打印的数据:



那个站在中间的男人,使用Python就能直接操控你的上网请求_第25张图片



这就说明,我们的脚本已经可以了,但是这样玩有点不过瘾,我们继续玩下 Python 脚本,在请求的时候,和数据返回的时候,来搞点事情怎么样?


来玩个有趣的,就是让对方在百度搜索的时候,不管搜什么内容,我们都把它改成搜 “世界上最帅的男人” ,然后把百度返回的结果改成“世界上最帅的男人是小帅b”。 


哈哈哈哈,先让我笑一会~




那个站在中间的男人,使用Python就能直接操控你的上网请求_第26张图片




我们先定义一个帅b实例:



640?wx_fmt=png



然后我们再拦截一下百度的搜索请求,在这里我们简单的判断一下,如果不是百度的请求我们就放行,如果是的话,我们就把搜索的关键词给改了,不管他搜什么,我们都改成去搜索:世界上最帅的人!



那个站在中间的男人,使用Python就能直接操控你的上网请求_第27张图片



接着就是数据的返回,很简单,把返回含有 “世界上最帅的人” 臭不要脸的改为 “世界上最帅的人是小帅b”。



那个站在中间的男人,使用Python就能直接操控你的上网请求_第28张图片



也就是这样:



那个站在中间的男人,使用Python就能直接操控你的上网请求_第29张图片



好了,我们来运行一波吧,执行脚本:



640?wx_fmt=png



执行代理访问,然后随便搜索一下:



可以看到,本来搜索的是“hahah”,但都直接被改成搜索 “世界上最帅的人”,并且返回的是 “世界上最帅的人是小帅b” 了,哈哈哈。

那个站在中间的男人,使用Python就能直接操控你的上网请求_第30张图片

好吧,小帅b最帅~

这就是 mitmproxy 的牛逼之处,可以让我们使用 Python 直接操作上网数据,可能你会问了:“如何操作手机上的请求数据呢?”、“怎么使用它来爬取手机上的数据呢?”


昨天最佳留言读者:27,
请于2日内联系微信:jjxksa888,领取奖励。

那个站在中间的男人,使用Python就能直接操控你的上网请求_第31张图片

激励一下
也希望每个人
都能早日突破自己
做个自律的人




今日留言主题
说说你看了本文后的感触?
或者一句激励自己的话?
(字数不少于15字)
我会选出一名同学赠出下面书籍
TensorFlow+PyTorch深度学习从算法到实战

北京大学出版社赞助

《TensorFlow+PyTorch深度学习从算法到实战》

从深度学习框架到开发理念的跃迁

那个站在中间的男人,使用Python就能直接操控你的上网请求_第32张图片
扫码查看书籍详情

2小时快速掌握Python基础知识要点

完整Python基础知识要点




640?wx_fmt=jpeg
学Python | 聊赚钱
 
      
640?wx_fmt=png
给个[在看]

你可能感兴趣的:(那个站在中间的男人,使用Python就能直接操控你的上网请求)