- 论坛徽章:
- 0
|
1.说说你对TCP/IP协议的了解有多少。
我对tcp/ip的了解主要通过 http协议分析来的。因为在做一些网络安全的工作。需要进行Http协议的分析,
以及对构成http 协议的底层tcp/ip协议要了解。特别是进行数据转发,ip路由选路,修改ip包的地址.TCP协议里
因为只是接触了SOCKET通信,建立一个代理服务器,可以做为中间人,话说http协议一点不安全,Https有
优点。
2.说说你对Python基础知识的了解有多少。
现在的工作都是用python来完成的,所以基础是有的,呵呵。做的很杂,pyQt 做过,
web框架django等也做过,现在接触http协议较多。
3.说说你读完本章节后的感谢。(图书链接在下方)
以前看过《python网络编程》。看了本书的目录感到比较实用,作者的写作态度较好,很认真。
希望得到这本书,哈哈
4.请给出一段跟网络编程相关的Python代码并简单说明一下它的功能。
实现一个简单的http代理服务器- #-*- coding: UTF-8 -*-
- import socket,select
- import sys
- import thread
- from multiprocessing import Process
- class Proxy:
- def __init__(self,client):
- self.client=client
- self.target=None
- self.request_url=None
- self.BUFSIZE=4096
- self.method=None
- self.targetHost=None
- def getClientRequest(self):
- 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):
- 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 connectMethod(self,request): #对于CONNECT处理可以添加在这里
- pass
- def run(self):
- request=self.getClientRequest()
- if request:
- if self.method in ['GET','POST','PUT',"DELETE",'HAVE']:
- self.commonMethod(request)
- elif self.method=='CONNECT':
- self.connectMethod(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
- class ProxyServer:
- def __init__(self,host,port):
- 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)
- def run(self):
- self.server.bind((host,port))
- self.server.listen(5)
- while True:
- client,_=self.server.accept()
- thread.start_new_thread(Proxy(client).run,())
- # p=Process(target=Proxy(server).run, args=()) #多进程
- # p.start()
- if __name__=='__main__':
- host = '0.0.0.0'
- port = 8088
- print 'proxy server is starting at',host,':',port
- ProxyServer(host,port).run()
-
-
-
-
复制代码 |
|