同步操作将从 yeqingchen1/sqlmap 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#!/usr/bin/env python"""Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/)See the file 'LICENSE' for copying permission"""import base64import datetimeimport ioimport reimport timefrom lib.core.bigarray import BigArrayfrom lib.core.convert import getBytesfrom lib.core.convert import getTextfrom lib.core.settings import VERSIONfrom thirdparty.six.moves import BaseHTTPServer as _BaseHTTPServerfrom thirdparty.six.moves import http_client as _http_client# Reference: https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/HAR/Overview.html# http://www.softwareishard.com/har/viewer/class HTTPCollectorFactory(object):def __init__(self, harFile=False):self.harFile = harFiledef create(self):return HTTPCollector()class HTTPCollector(object):def __init__(self):self.messages = BigArray()self.extendedArguments = {}def setExtendedArguments(self, arguments):self.extendedArguments = argumentsdef collectRequest(self, requestMessage, responseMessage, startTime=None, endTime=None):self.messages.append(RawPair(requestMessage, responseMessage,startTime=startTime, endTime=endTime,extendedArguments=self.extendedArguments))def obtain(self):return {"log": {"version": "1.2","creator": {"name": "sqlmap", "version": VERSION},"entries": [pair.toEntry().toDict() for pair in self.messages],}}class RawPair(object):def __init__(self, request, response, startTime=None, endTime=None, extendedArguments=None):self.request = getBytes(request)self.response = getBytes(response)self.startTime = startTimeself.endTime = endTimeself.extendedArguments = extendedArguments or {}def toEntry(self):return Entry(request=Request.parse(self.request), response=Response.parse(self.response),startTime=self.startTime, endTime=self.endTime,extendedArguments=self.extendedArguments)class Entry(object):def __init__(self, request, response, startTime, endTime, extendedArguments):self.request = requestself.response = responseself.startTime = startTime or 0self.endTime = endTime or 0self.extendedArguments = extendedArgumentsdef toDict(self):out = {"request": self.request.toDict(),"response": self.response.toDict(),"cache": {},"timings": {"send": -1,"wait": -1,"receive": -1,},"time": int(1000 * (self.endTime - self.startTime)),"startedDateTime": "%s%s" % (datetime.datetime.fromtimestamp(self.startTime).isoformat(), time.strftime("%z")) if self.startTime else None}out.update(self.extendedArguments)return outclass Request(object):def __init__(self, method, path, httpVersion, headers, postBody=None, raw=None, comment=None):self.method = methodself.path = pathself.httpVersion = httpVersionself.headers = headers or {}self.postBody = postBodyself.comment = comment.strip() if comment else commentself.raw = raw@classmethoddef parse(cls, raw):request = HTTPRequest(raw)return cls(method=request.command,path=request.path,httpVersion=request.request_version,headers=request.headers,postBody=request.rfile.read(),comment=request.comment,raw=raw)@propertydef url(self):host = self.headers.get("Host", "unknown")return "http://%s%s" % (host, self.path)def toDict(self):out = {"httpVersion": self.httpVersion,"method": self.method,"url": self.url,"headers": [dict(name=key.capitalize(), value=value) for key, value in self.headers.items()],"cookies": [],"queryString": [],"headersSize": -1,"bodySize": -1,"comment": getText(self.comment),}if self.postBody:contentType = self.headers.get("Content-Type")out["postData"] = {"mimeType": contentType,"text": getText(self.postBody).rstrip("\r\n"),}return outclass Response(object):extract_status = re.compile(b'\\((\\d{3}) (.*)\\)')def __init__(self, httpVersion, status, statusText, headers, content, raw=None, comment=None):self.raw = rawself.httpVersion = httpVersionself.status = statusself.statusText = statusTextself.headers = headersself.content = contentself.comment = comment.strip() if comment else comment@classmethoddef parse(cls, raw):altered = rawcomment = b""if altered.startswith(b"HTTP response [") or altered.startswith(b"HTTP redirect ["):stream = io.BytesIO(raw)first_line = stream.readline()parts = cls.extract_status.search(first_line)status_line = "HTTP/1.0 %s %s" % (getText(parts.group(1)), getText(parts.group(2)))remain = stream.read()altered = getBytes(status_line) + b"\r\n" + remaincomment = first_lineresponse = _http_client.HTTPResponse(FakeSocket(altered))response.begin()try:content = response.read()except _http_client.IncompleteRead:content = raw[raw.find("\r\n\r\n") + 4:].rstrip("\r\n")return cls(httpVersion="HTTP/1.1" if response.version == 11 else "HTTP/1.0",status=response.status,statusText=response.reason,headers=response.msg,content=content,comment=comment,raw=raw)def toDict(self):content = {"mimeType": self.headers.get("Content-Type"),"text": self.content,"size": len(self.content or "")}binary = set([b'0円', b'1円'])if any(c in binary for c in self.content):content["encoding"] = "base64"content["text"] = getText(base64.b64encode(self.content))else:content["text"] = getText(content["text"])return {"httpVersion": self.httpVersion,"status": self.status,"statusText": self.statusText,"headers": [dict(name=key.capitalize(), value=value) for key, value in self.headers.items() if key.lower() != "uri"],"cookies": [],"content": content,"headersSize": -1,"bodySize": -1,"redirectURL": "","comment": getText(self.comment),}class FakeSocket(object):# Original source:# https://stackoverflow.com/questions/24728088/python-parse-http-response-stringdef __init__(self, response_text):self._file = io.BytesIO(response_text)def makefile(self, *args, **kwargs):return self._fileclass HTTPRequest(_BaseHTTPServer.BaseHTTPRequestHandler):# Original source:# https://stackoverflow.com/questions/4685217/parse-raw-http-headersdef __init__(self, request_text):self.comment = Noneself.rfile = io.BytesIO(request_text)self.raw_requestline = self.rfile.readline()if self.raw_requestline.startswith(b"HTTP request ["):self.comment = self.raw_requestlineself.raw_requestline = self.rfile.readline()self.error_code = self.error_message = Noneself.parse_request()def send_error(self, code, message):self.error_code = codeself.error_message = message
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。