- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机网络实验1_蔡鹏_113031072剖析
哈尔滨工业大学
计算机网络
实验报告
(2016年度季学期)
实验一 HTTP代理服务器的设计与实现
# -*- coding: utf-8 -*-
Created on Sun May 08 14:45:35 2016
@author: CP
import socket,select
import sys
import thread
from multiprocessing import Process
class Proxy:
def __init__(self,soc):
self.client,_=soc.accept()
self.target=None
self.request_url=None
self.BUFSIZE=4096
self.method=None
self.targetHost=None
def getClientRequest(self): #获得句柄client
request=self.client.recv(self.BUFSIZE)
if not request:
return None
cn=request.find(\n)
firstLine=request[:cn]
print firstLine[:len(firstLine)-9]
line=firstLine.split()
self.method=line[0]
self.targetHost=line[1]
return request
def commonMethod(self,request): #首行处理除connect以外其他方法
tmp=self.targetHost.split(/)
net=tmp[0]+//+tmp[2]
request=request.replace(net,)
targetAddr=self.getTargetInfo(tmp[2])
try:
(fam,_,_,_,addr)=socket.getaddrinfo(targetAddr[0],targetAddr[1])[0]
except Exception as e:
print e
return
self.target=socket.socket(fam)
self.target.connect(addr)
self.target.send(request)
self.nonblocking()
def run(self):
request=self.getClientRequest()
if request:
if self.method in [GET,POST,PUT,DELETE,HAVE]:
monMethod(request)
def nonblocking(self):
inputs=[self.client,self.target]
while True:
readable,writeable,errs=select.select(inputs,[],inputs,3)
if errs:
break
for soc in readable:
data=soc.recv(self.BUFSIZE)
if data:
if soc is self.client:
self.target.send(data)
elif soc is self.target:
self.client.send(data)
else:
break
self.client.close()
self.target.close()
def getTargetInfo(self,host):
port=0
site=None
if : in host:
tmp=host.split(:)
site=tmp[0]
port=int(tmp[1])
else:
site=host
port=80
return site,port
if __name__==__main__:
host =
port = 6666
backlog = 5
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
server.bind((host,port))
server.listen(5)
while True:
thread.start_new_thread(Proxy(server).run,())
# p=Process(target=Proxy(server).run, args=()) #多进程
# p.start()
实验结果:
实验体会
了解了http协议的请
您可能关注的文档
- 2012年湖南省娄底市中考数学试卷分析.doc
- 2012年烟台中考政治试题及答案分析.doc
- 2012年环境影响评价考试练习题及答案分析.doc
- 2012年4月21日磷酸培训(工艺安全设备)分析.ppt
- 2012年生产部工作总结分析.doc
- 2012年初一期末地理试题4分析.doc
- 2012年福州市中考语文试卷及答案分析.doc
- 2012年版《汽车保修制度》(公交车)分析.doc
- 计算机网络CH1概述剖析.ppt
- 2012年职业能力综合测试一(B卷)分析.doc
- 计算机网络实验-使用Wireshark分析IP协议剖析.docx
- 2013-2014学年度建筑环境测试技术习题分析.doc
- 2012经济学专业考研择校专题分析.ppt
- 2013-2014学年度第一学期期中考试八年级数学试题分析.pptx
- 2013-2014学年第一学期九年级期末试卷1分析.doc
- 计算机网络总复习-2016剖析.ppt
- 2012高考化学二轮复习攻略:专题1_物质的组成、性质与分类_化学用语ppt课件分析.ppt
- 2013-2014学年高中化学第3章《化学与材料的发展》综合检测新人教版选修2分析.doc
- 2013--2015年最完整版,植物的激素调节,生物高考题分析.doc
- 2013-2014学年高中化学第4章第3节电解池第2课时课时作业新人教版选修4分析.doc
最近下载
- Q开关Nd YAG激光治疗机临床应用参考资料.doc VIP
- 空杯心态培训.ppt VIP
- 2025数字低空网络架构白皮书.pdf VIP
- 2024年福建省厦门市城市管理行政执法局招聘历年【综合基础知识500题】高频考点模拟试题及参考答案解析.docx VIP
- KL-M型Q开关Nd:YAG激光治疗机临床资料.doc VIP
- 福建省龙岩市2024-2025学年高一下学期期末考试 数学试卷含答案.pdf VIP
- 国产Q开关Nd-YAG双波长脉冲激光联合迪维霜治疗雀斑疗效观察.doc VIP
- 幸福生活从感恩开始_‘感恩心态’培训.pptx VIP
- 感恩心态培训.pptx VIP
- Q开关Nd-YAG激光治疗文身护理体会.doc VIP
文档评论(0)