代码速记:
<code>#encoding: utf-8</code>
<code>#author: walker</code>
<code>#date: 2017-07-24</code>
<code>#summary: 回显http头,可用于匿名度检测</code>
<code>#sys.version: '3.5.2 (default, Nov 17 2016, 17:05:23) \n[GCC 5.4.0 20160609]'</code>
<code>import</code> <code>argparse</code>
<code>from</code> <code>colored </code><code>import</code> <code>fg, bg, attr</code>
<code>from</code> <code>http.server </code><code>import</code> <code>HTTPServer, BaseHTTPRequestHandler</code>
<code>class</code> <code>EchoHTTPHandler(BaseHTTPRequestHandler):</code>
<code> </code><code>#将请求头包装成html,便于返回给http客户端</code>
<code> </code><code>def</code> <code>text_to_html(</code><code>self</code><code>, req_head):</code>
<code> </code><code>html </code><code>=</code> <code>'<html><head><title>Echo HTTP Header</title></head>'</code>
<code> </code><code>html </code><code>+</code><code>=</code> <code>'<body><div>'</code>
<code> </code><code>html </code><code>+</code><code>=</code> <code>'<font color="blue">%s - %s - %s</font><br/><br/>'</code> <code>%</code> <code>(</code><code>self</code><code>.client_address, </code><code>self</code><code>.request_version, </code><code>self</code><code>.path)</code>
<code> </code><code>for</code> <code>line </code><code>in</code> <code>req_head.split(</code><code>'\n'</code><code>):</code>
<code> </code><code>line </code><code>=</code> <code>line.strip()</code>
<code> </code><code>if</code> <code>line.startswith(</code><code>'Via:'</code><code>) </code><code>or</code> <code>line.startswith(</code><code>'X-Forwarded-For:'</code><code>):</code>
<code> </code><code>line </code><code>=</code> <code>'<font color="red">%s</font><br/>'</code> <code>%</code> <code>line</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>line </code><code>=</code> <code>'<font color="black">%s</font><br/>'</code> <code>%</code> <code>line</code>
<code> </code><code>html </code><code>+</code><code>=</code> <code>line</code>
<code> </code><code>html </code><code>+</code><code>=</code> <code>'</div></body></html>'</code>
<code> </code><code>return</code> <code>html</code>
<code> </code><code>#响应get请求,打印http头,并返回给http客户端</code>
<code> </code><code>def</code> <code>do_GET(</code><code>self</code><code>):</code>
<code> </code><code>print</code><code>(</code><code>'%s - %s - %s'</code> <code>%</code> <code>(</code><code>self</code><code>.client_address, </code><code>self</code><code>.request_version, </code><code>self</code><code>.path))</code>
<code> </code><code>print</code><code>(</code><code>type</code><code>(</code><code>self</code><code>.client_address))</code>
<code> </code><code>print</code><code>(</code><code>'### request headers ###'</code><code>)</code>
<code> </code><code>req_head </code><code>=</code> <code>str</code><code>(</code><code>self</code><code>.headers)</code>
<code> </code><code>line </code><code>=</code> <code>'%s%s%s'</code> <code>%</code> <code>(fg(</code><code>'red'</code><code>), line, attr(</code><code>'reset'</code><code>))</code>
<code> </code><code>print</code><code>(line)</code>
<code> </code><code>self</code><code>.send_response(</code><code>200</code><code>)</code>
<code> </code><code>self</code><code>.end_headers()</code>
<code> </code><code>self</code><code>.wfile.write(</code><code>self</code><code>.text_to_html(req_head).encode(</code><code>'utf8'</code><code>))</code>
<code> </code>
<code> </code>
<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>'__main__'</code><code>:</code>
<code> </code><code>parser </code><code>=</code> <code>argparse.ArgumentParser(description</code><code>=</code><code>'Echo HTTP server.'</code><code>)</code>
<code> </code><code>parser.add_argument(</code><code>'-a'</code><code>, </code><code>'--address'</code><code>, </code><code>help</code><code>=</code><code>'default: 0.0.0.0'</code><code>)</code>
<code> </code><code>parser.add_argument(</code><code>'-p'</code><code>, </code><code>'--port'</code><code>, </code><code>help</code><code>=</code><code>'default: 8080'</code><code>, </code><code>type</code><code>=</code><code>int</code><code>)</code>
<code> </code><code>args </code><code>=</code> <code>parser.parse_args()</code>
<code> </code><code>server </code><code>=</code> <code>HTTPServer((args.address </code><code>or</code> <code>'0.0.0.0'</code><code>, args.port </code><code>or</code> <code>8080</code><code>), EchoHTTPHandler)</code>
<code> </code><code>server.serve_forever()</code>
【http json 回显】
<code>#!/usr/bin/env python3</code>
<code> </code>
<code>from</code> <code>http.server </code><code>import</code> <code>BaseHTTPRequestHandler, HTTPServer</code>
<code>from</code> <code>urllib.parse </code><code>import</code> <code>urlparse</code>
<code>import</code> <code>json</code>
<code>class</code> <code>RequestHandler(BaseHTTPRequestHandler):</code>
<code> </code><code>parsed_path </code><code>=</code> <code>urlparse(</code><code>self</code><code>.path)</code>
<code> </code><code>self</code><code>.wfile.write(json.dumps({</code>
<code> </code><code>'method'</code><code>: </code><code>self</code><code>.command,</code>
<code> </code><code>'path'</code><code>: </code><code>self</code><code>.path,</code>
<code> </code><code>'real_path'</code><code>: parsed_path.query,</code>
<code> </code><code>'query'</code><code>: parsed_path.query,</code>
<code> </code><code>'request_version'</code><code>: </code><code>self</code><code>.request_version,</code>
<code> </code><code>'protocol_version'</code><code>: </code><code>self</code><code>.protocol_version</code>
<code> </code><code>}).encode())</code>
<code> </code><code>return</code>
<code> </code><code>def</code> <code>do_POST(</code><code>self</code><code>):</code>
<code> </code><code>#content_len = int(self.headers.getheader('content-length'))</code>
<code> </code><code>content_len </code><code>=</code> <code>int</code><code>(</code><code>self</code><code>.headers[</code><code>'Content-Length'</code><code>])</code>
<code> </code><code>post_body </code><code>=</code> <code>self</code><code>.rfile.read(content_len)</code>
<code> </code><code>data </code><code>=</code> <code>json.loads(post_body)</code>
<code> </code><code>'protocol_version'</code><code>: </code><code>self</code><code>.protocol_version,</code>
<code> </code><code>'body'</code><code>: data</code>
<code> </code><code>server </code><code>=</code> <code>HTTPServer((</code><code>'localhost'</code><code>, </code><code>8000</code><code>), RequestHandler)</code>
<code> </code><code>print</code><code>(</code><code>'Starting server at http://localhost:8000'</code><code>)</code>
相关阅读:
本文转自walker snapshot博客51CTO博客,原文链接http://blog.51cto.com/walkerqt/1950505如需转载请自行联系原作者
RQSLT