python黑网站_Python简单实现HTTP本地代理转发
1.需要了解知识
socket模块
Fiddler工具HTTP抓包的原理就是设置本地代理然后,获取请求报文—转发报文----获取服务器返回值—请求报文…的一系列操作,前提是设置浏览器的本地代理IP和端口号,一般代理IP都设置为127.0.0.1,端口为8080。IE浏览器中设置代理位置:Internet选项----连接----局域网设置–取消自动检测设置和使用自动配置脚本—勾选“为LAN代理服务器” 并填写地址IP+Port。IE浏览器设置过后便会在本地只要有HTTP/HTTPS请求都要通过这个代理。
## 自动设置本地请求代理IP和端口
```python
import winreg#为操作注册表的库
def disableProxy(proxy):
proxy = ""
xpath = "Software\Microsoft\Windows\CurrentVersion\Internet Settings"
try:
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, xpath, 0, winreg.KEY_WRITE)
winreg.SetValueEx(key, "ProxyEnable", 0, winreg.REG_DWORD, 0)
winreg.SetValueEx(key, "1ProxyServer", 0, winreg.REG_SZ, proxy)
except Exception as e:
print("ERROR: " + str(e.args))
finally:
None
proxy=ip+":"+port
disableProxy(proxy)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
**winreg*
*读取用的方法是OpenKey方法:打开特定的key
_winreg.OpenKey(key,sub_key,res=0,sam=KEY_READ)
socket模块中有几个函数
server=socket.socket()-----创建套接字
server.bind(("127.0.0.1",8000))----绑定本地这个IP和端口
server.listen(3)------等待客户端连接(这里的客户端是值本地PC所有HTTP请求中都会先到这儿)
c,addr=server.accept()-----建立客户端连接 返回connection 对象 表示已连接到客户端。
while true:
c..recv(1024)--接收TCP数据,数据以字符串形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他信息,通常可以忽略。
c.sendall(msg)--- 完整发送TCP数据,完整发送TCP数据。将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。
```python
import socket
import thread
import urlparse
import select
BUFLEN=8192
class Proxy(object):
def __init__(self,conn,addr):
self.source=conn
self.request=""
self.headers={}
self.destnation=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.run()
def get_headers(self):#获取头部信息
header=''
while True:
header+=self.source.recv(BUFLEN)
print header
index=header.find('\n')
if index >0:
break
#firstLine,self.request=header.split('\r\n',1)
print "header"
print header
firstLine=header[:index]
self.request=header[index+1:]
self.headers['method'],self.headers['path'],self.headers['protocol']=firstLine.split()
def conn_destnation(self):
url=urlparse.urlparse(self.headers['path'])
hostname=url[1]
port="80"
if hostname.find(':') >0:
addr,port=hostname.split(':')
else:
addr=hostname
port=int(port)
ip=socket.gethostbyname(addr)
print ip,port
try:
self.destnation.connect((ip, port))# 主动初始化TCP服务器连接,。一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。
data = "%s %s %s\r\n" % (self.headers['method'], self.headers['path'], self.headers['protocol'])
self.destnation.send(data + self.request)#发送TCP数据,将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。
print "data" + "\n", data
print "request" + "\n", self.request
except Exception as e :
print e.message
pass
def renderto(self):
readsocket=[self.destnation]
while True:
data=''
(rlist,wlist,elist)=select.select(readsocket,[],[],3)#第一个参数是我们需要监听可读的套接字, 第二个参数是我们需要监听可写的套接字, 第三个参数使我们需要监听异常的套接字, 第四个则是时间限制设置.
if rlist:
data=rlist[0].recv(BUFLEN)#接收TCP数据,数据以字符串形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他信息,通常可以忽略。
if len(data)>0:
self.source.send(data)
else:
break
def run(self):
self.get_headers()
self.conn_destnation()
self.renderto()
class Server(object):
def __init__(self,host,port,handler=Proxy):
self.host=host
self.port=port
self.server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.server.bind((host,port))
self.server.listen(5)
self.handler=handler
def start(self):
while True:
try:
conn,addr=self.server.accept()
thread.start_new_thread(self.handler,(conn,addr))
except:
pass
if __name__=='__main__':
s=Server('127.0.0.1',5055)
s.start()1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
python黑网站_Python简单实现HTTP本地代理转发相关推荐
- python黑网站_python
这里写自定python 初学python 记录下有关的知识 names = ["kelo", "diya", "kandao", " ...
- python 实现网站_python 实现网站_用web.py实现python网站版hello world网页
github源码安装 浏览器打开https://github.com/webpy/webpy,下载源码zip格式,解压出来.cmd打开,cd到解压目录,输入 python setup.py insta ...
- python主网站_python主网站提供的集成开发环境名称为IDLE
[填空题]P:你努力,Q:你失败."除非你努力,否则你将失败"的命题符号化为___________. [判断题]同一笔经济业务,现金流的方向依分析所处的角度不同而不同. [判断题] ...
- 有哪些免费自学python的网站_Python学习网站有哪些?Python基础教程网站推荐
Python学习网站有哪些?Python基础教程网站推荐:菜鸟教程.PHP中文网.PHP中文网.W3C.Reddit.博学谷.python中文学习大本营.Python 3 Module of the ...
- 2021-10-30为了看小说选择用Python从网站中爬取至本地
前言:为了看一本小说,我是访问了各大网站终于在一个小众网站找到了!于是为了不让资源流逝我毅然决然的选择把他下载下来,结果.... 那没办法了啊,只有自己来了. 下面分四部分来完成 1.导库 impor ...
- python 数组升序_python简单数据清洗和分析
利用python学习了简单一维数组和二维数组,明白了集合.数组.字典大概的关联,并学会从中点用不同的数组类型进行更好的分析. 读取excel文件,开始进行最简单的数据清洗. 将购药时间重新命名为销售时 ...
- python星期计算_Python简单计算给定某一年的某一天是星期几示例
本文实例讲述了Python简单计算给定某一年的某一天是星期几.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #计算某特定天使星期几 #蔡勒公式:w=y+[y/4]+[ ...
- python加密程序_Python 简单的可逆加密程序
简单加密 1.[代码][Python]代码 #coding=utf-8 ''''' Description: 可逆的加密与解密 Environment: python2.5.x Author:ideh ...
- python简短语法_python 简单语法入门
人生苦短,我用python python之所以比较容易入门就是它的语法相对来说比较简单 下面就以一个简单hello,world为例来简单说下python中语法 import os #导入系统模块 de ...
最新文章
- 使用 Elixir 开发嵌入式系统: 使用DS18B20传感器测量体温
- html5插件教程,HTML5教程 | HTML5 time元素
- 俄罗斯方块游戏笔记(一)——砖块样式配置窗体
- nginx代理设置域名跳转/域名重定向
- 实战|利用机器学习解决一个多分类任务
- Java基础——类加载机制
- 零基础入门stm32需要学这些东西
- Java中整型的缓存机制
- 百度计算机视觉暑期实习面经(成功上岸!已拿offer)
- srve0255e尚未定义要怎么办_斜视怎么办?日常的护理工作有哪些?
- 赶在世界末日前完成的2012年全年总结
- python 学习(八—1) 项目:生成随机的测试试卷文件
- Oracle 实现小计、合计
- 乐视x820android最新版本,乐视MAX2|MIUI10|安卓8.1|最终完美版|极速_最新最全的乐Max2ROM刷机包下载、刷机教程_...
- 函数设计中参数的规则
- 开发板------OK6410
- AI基础课正式进入高中教材,新课标改革2018秋季执行!
- Java 抽奖系统扩展
- 编译原理——说明语句翻译
- 数据仓库ods层是啥意思_一文读懂大数据仓库建设
热门文章
- java oscache 缓存_Java]用OSCache进行缓存对象
- Kotlin学习笔记 第二章 类与对象 第一节类与继承(补)
- Android 内存泄漏分析(完)
- Android VideoView播放视频遇到的问题
- 例子---年倒计时/JS日期对象类型
- java怎么安装_Java桌面应用程序篇:发展历史以及程序的应用
- 计算机语言学家,著名计算语言学家冯志伟为人文学院师生作专题讲座
- android 多进程 坑,Android 开发中踩过的坑之八:多进程问题
- eclipse和idea代码通用吗_25个JavaScript代码简写技巧(下篇)
- xposed hook java_[原创]Android Hook 系列教程(一) Xposed Hook 原理分析