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本地代理转发相关推荐

  1. python黑网站_python

    这里写自定python 初学python 记录下有关的知识 names = ["kelo", "diya", "kandao", " ...

  2. python 实现网站_python 实现网站_用web.py实现python网站版hello world网页

    github源码安装 浏览器打开https://github.com/webpy/webpy,下载源码zip格式,解压出来.cmd打开,cd到解压目录,输入 python setup.py insta ...

  3. python主网站_python主网站提供的集成开发环境名称为IDLE

    [填空题]P:你努力,Q:你失败."除非你努力,否则你将失败"的命题符号化为___________. [判断题]同一笔经济业务,现金流的方向依分析所处的角度不同而不同. [判断题] ...

  4. 有哪些免费自学python的网站_Python学习网站有哪些?Python基础教程网站推荐

    Python学习网站有哪些?Python基础教程网站推荐:菜鸟教程.PHP中文网.PHP中文网.W3C.Reddit.博学谷.python中文学习大本营.Python 3 Module of the ...

  5. 2021-10-30为了看小说选择用Python从网站中爬取至本地

    前言:为了看一本小说,我是访问了各大网站终于在一个小众网站找到了!于是为了不让资源流逝我毅然决然的选择把他下载下来,结果.... 那没办法了啊,只有自己来了. 下面分四部分来完成 1.导库 impor ...

  6. python 数组升序_python简单数据清洗和分析

    利用python学习了简单一维数组和二维数组,明白了集合.数组.字典大概的关联,并学会从中点用不同的数组类型进行更好的分析. 读取excel文件,开始进行最简单的数据清洗. 将购药时间重新命名为销售时 ...

  7. python星期计算_Python简单计算给定某一年的某一天是星期几示例

    本文实例讲述了Python简单计算给定某一年的某一天是星期几.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #计算某特定天使星期几 #蔡勒公式:w=y+[y/4]+[ ...

  8. python加密程序_Python 简单的可逆加密程序

    简单加密 1.[代码][Python]代码 #coding=utf-8 ''''' Description: 可逆的加密与解密 Environment: python2.5.x Author:ideh ...

  9. python简短语法_python 简单语法入门

    人生苦短,我用python python之所以比较容易入门就是它的语法相对来说比较简单 下面就以一个简单hello,world为例来简单说下python中语法 import os #导入系统模块 de ...

最新文章

  1. 使用 Elixir 开发嵌入式系统: 使用DS18B20传感器测量体温
  2. html5插件教程,HTML5教程 | HTML5 time元素
  3. 俄罗斯方块游戏笔记(一)——砖块样式配置窗体
  4. nginx代理设置域名跳转/域名重定向
  5. 实战|利用机器学习解决一个多分类任务
  6. Java基础——类加载机制
  7. 零基础入门stm32需要学这些东西
  8. Java中整型的缓存机制
  9. 百度计算机视觉暑期实习面经(成功上岸!已拿offer)
  10. srve0255e尚未定义要怎么办_斜视怎么办?日常的护理工作有哪些?
  11. 赶在世界末日前完成的2012年全年总结
  12. python 学习(八—1) 项目:生成随机的测试试卷文件
  13. Oracle 实现小计、合计
  14. 乐视x820android最新版本,乐视MAX2|MIUI10|安卓8.1|最终完美版|极速_最新最全的乐Max2ROM刷机包下载、刷机教程_...
  15. 函数设计中参数的规则
  16. 开发板------OK6410
  17. AI基础课正式进入高中教材,新课标改革2018秋季执行!
  18. Java 抽奖系统扩展
  19. 编译原理——说明语句翻译
  20. 数据仓库ods层是啥意思_一文读懂大数据仓库建设

热门文章

  1. java oscache 缓存_Java]用OSCache进行缓存对象
  2. Kotlin学习笔记 第二章 类与对象 第一节类与继承(补)
  3. Android 内存泄漏分析(完)
  4. Android VideoView播放视频遇到的问题
  5. 例子---年倒计时/JS日期对象类型
  6. java怎么安装_Java桌面应用程序篇:发展历史以及程序的应用
  7. 计算机语言学家,著名计算语言学家冯志伟为人文学院师生作专题讲座
  8. android 多进程 坑,Android 开发中踩过的坑之八:多进程问题
  9. eclipse和idea代码通用吗_25个JavaScript代码简写技巧(下篇)
  10. xposed hook java_[原创]Android Hook 系列教程(一) Xposed Hook 原理分析