天天看点

http 请求头回显

代码速记:

<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>'&lt;html&gt;&lt;head&gt;&lt;title&gt;Echo HTTP Header&lt;/title&gt;&lt;/head&gt;'</code> 

<code>        </code><code>html </code><code>+</code><code>=</code> <code>'&lt;body&gt;&lt;div&gt;'</code>

<code>        </code><code>html </code><code>+</code><code>=</code> <code>'&lt;font color="blue"&gt;%s - %s - %s&lt;/font&gt;&lt;br/&gt;&lt;br/&gt;'</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>'&lt;font color="red"&gt;%s&lt;/font&gt;&lt;br/&gt;'</code> <code>%</code> <code>line</code>

<code>            </code><code>else</code><code>:</code>

<code>                </code><code>line </code><code>=</code> <code>'&lt;font color="black"&gt;%s&lt;/font&gt;&lt;br/&gt;'</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>'&lt;/div&gt;&lt;/body&gt;&lt;/html&gt;'</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