在渗透行业提及web的话,主要是客户端角度,常见的例子就是爬虫,但为了力求入门,我们简单梳理一下web服务器端,时间关系不做深层拓展。
一、服务器端
二、客户端
一、服务器端
先来简单梳理下几个概念:
CGI
CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户端HTML页面的接口,CGI程序可以是Python脚本,PERL脚本,SHELL脚本,C或者C++程序等。它会负责生成动态内容,然后返回给服务器,再由服务器转交给客户端。但在每次产生请求时,服务器都会fork and exec,每次都会有一个新的进程产生,开销较大,基本淘汰。
WSGI
(Web Server Gateway Interface),WSGI是作为Web服务器与Web应用程序或应用框架之间的一种低级别的接口,以提升可移植Web应用开发的共同点。WSGI是基于现存的CGI标准而设计的,可以看作是在CGI标准上的一个封装。
所以、我们在此选择WSGI作为web初步学习,首先选写一个函数用以实现基本逻辑,命名为:
其中,HTTP请求的所有输入信息都可以通过env获得,HTTP响应的输出都可以通过start_response()加上函数返回值作为Body。
然后再写一个一个服务模块,用以启动WSGI服务,并调用我们刚刚写的处理函数:
其中wsgiref是官方给出的一个实现了WSGI标准用于演示用的简单Python内置库,它实现了一个简单的WSGI Server和WSGI Application(在simple_server模块中),主要分为五个模块:simple_server, util, headers, handlers, validate。
浏览器
写到这里,我们遇上了一个新的烦恼,我们这里只是一个简单的响应,如果是复杂响应,再加上上百甚至上千条路径,分布着不同的功能,我们也要通过一层一层的判断它的请求方式、请求路径么?
所以我们需要在WSGI接口之上能进一步抽象,让我们专注于用一个函数处理一个URL,至于URL到函数的映射以及服务响应问题,就交给Web框架来做。
于是,就引出了web框架的概念,近些年来随着python排名的飙升,框架也着实不少:CubicWeb,Django,Web2py,Weppy、Zope2、 Bottle,CherryPy,Falcon,Flask,Pyramid,Tornado,Web.py、Wheezy.web……
作为入门非开发需要,我们选择轻型框架flask简单演示,老规矩,改写上述例子:
省一张截图,跟WSGI结果一致,关于,Flask默认的Server监听端口为5000。
但愿没有讲太多,说好不拓展的。其实flask使用的就是装饰器,早在函数章节我们已经详细分析过了。更多其它关于web框架的使用我们在此就不多说了,上述内容也只是为了对python的web服务端形成一个基础性逻辑的认识。
二、客户端
urllib、urllib2库为python标准库,用于进行url请求,然而在实际使用中,要面对各种编码问题,所以我们选择自称HTTP for Humans的第三方库requests进行入门学习。
请求url,无非是为了数据,或者说是便捷享受服务,具象一下无非就是api或者是爬虫等,我们本次以api为例。
话说,很多网站都是主动提供api的,如百度翻译、地图等服务,以及我们此次用到的站长工具,当然,服务也是付费的,合情合理,同时也表示支持!
但我们此次不用做商业用途,仅供练习,所以选择了站长工具的IP查询功能进行举例,自行尝试使用burp等抓包工具进行数据包捕获。重放次数过多的话应该会被封IP吧,反正cmd5会的,这完全是为了方便个人使用,懒得开浏览器~
其中url请求由requests模块完成,数据捕获与处理由re模块进行正则匹配。
既然讲到了这里,我们就尝试一下综合以上所学,将我们的小脚本使用flask布在服务器上!
首先改写下我们的脚本,用于flask调用,命名为为IpWhere:
服务器端进行flask框架调用:
时间关系,没有进行界面优化,只是做了个简单的button,看下效果:
丑是丑了点>,
关于数据处理这一块,如果是某些api返回json文件,可以通过调用json模块进行处理,如果是其它类型,大家可以像这样借助正则匹配或者借助bs4等第三方插件进行处理。
显然,web方面的应用会是之后的重点,作为基础入门,今天就到这里~
领取专属 10元无门槛券
私享最新 技术干货