示例#1
0
    def get(self, page):
        target = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        target.connect(self.proxy)

        print 'Sending Hey',
        target.send("HEY")
        s_id = target.recv(1000)
        print "Received id:", s_id

        target2 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        target2.connect(self.proxy)
        
        print 'Sending Hey',
        target2.send("HEY")
        s_id2 = target2.recv(1000)
        print "Received id:", s_id2
        
        from http import HTTPRequest
        
        r = HTTPRequest("GET", "http://www.google.com/", "HTTP/1.0", body="Give me your website!!!", headers={"HOST": "www.google.com"})
        msg = r.packToPack()
        
        target.send(s_id+" 1 1 SEND " + msg)
        print "GOT:", target.recv(100000)
        print "GOT:", target.recv(100000)
        target.send(s_id+" GOOD")
        
        r = HTTPRequest("GET", "http://inishia.com/", "HTTP/1.0", body="Give me your website!!!", headers={"HOST": "www.inishia.com"})
        msg = r.packToPack()
        
        target2.send(s_id2+" 1 1 SEND " + msg)
        print "GOT:", target2.recv(100000)
        print "GOT:", target2.recv(100000)
        target2.send(s_id2+" GOOD")
示例#2
0
 def __init__(self, language="EN"):
     self.request = HTTPRequest(URI('https://www.wnp.waseda.jp/portal',
                                    'portal.php'),
                                encoding='euc-jp')
     self.request.set_dummy_headers()
     self.request.set_parameter('JavaCHK', 1)
     self.request.set_parameter('LOGINCHECK', 1)
     self.language = language
     self.set_language()
     self.logged = False
     self.logged_cnavi = False
     self._user_info = {}
     self.session_id_encode_key = None
示例#3
0
    def http_req(self,
                 host: str = "127.0.0.1",
                 port: int = 50123,
                 file: str = "/",
                 method: str = "GET",
                 params: dict = None,
                 data: str = None):

        http_req = HTTPRequest(host=host)
        request = http_req.build_request(file=file,
                                         method=method,
                                         params=params,
                                         data=data)

        current_timeout = 0.1

        while True:
            self.server_socket.settimeout(current_timeout)

            if self.debug:
                print("{}{}Sending HTTP Request...{}".format(
                    bcolors.BOLD, bcolors.OKBLUE, bcolors.ENDC))
                print(request)

            self.send(message=request, host=host, port=port)

            if current_timeout > 2.0:
                raise TimeoutException("Timeout exceeded.")
                break

            try:
                data, addr = self.server_socket.recvfrom(self.buffer_size)

                if data == b"":
                    raise RuntimeError("Connection broken")
                else:
                    print("\n{}{}Received response:{}\n{}".format(
                        bcolors.BOLD, bcolors.OKBLUE, bcolors.ENDC,
                        data.decode()))
                    return self.process_response(data.decode())

            except socket.timeout:
                print("Request timed out. Trying again...\n")
                current_timeout *= 2
                continue
示例#4
0
    def logSites(self, packet):
        if packet.haslayer(TCP):
            data = packet.getlayer(TCP)

            try:
                request = HTTPRequest(data.load)
                print "%s %s%s" % (request.command, request.headers['host'],
                                   request.path)
            except:
                pass
示例#5
0
    def http_send(self,
                  host: str = "127.0.0.1",
                  file: str = "/",
                  method: str = "GET",
                  params: dict = None,
                  data: str = None):

        http_req = HTTPRequest(host=host)
        request = http_req.build_request(file=file,
                                         method=method,
                                         params=params,
                                         data=data)

        if self.debug:
            print("{}{}Sending HTTP Request...{}".format(
                bcolors.BOLD, bcolors.OKBLUE, bcolors.ENDC))
            print(request)

        self.send(request)
示例#6
0
 def __init__(self, language="EN"):
     self.request = HTTPRequest(URI('https://www.wnp.waseda.jp/portal', 'portal.php'), encoding='euc-jp')
     self.request.set_dummy_headers()
     self.request.set_parameter('JavaCHK', 1)
     self.request.set_parameter('LOGINCHECK', 1)
     self.language = language
     self.set_language()
     self.logged = False
     self.logged_cnavi = False
     self._user_info = {}
     self.session_id_encode_key = None
示例#7
0
def proxy_mangle_request(req):
    """
    Takes in an HTTP request and opens the user's editor of choice to modify
    the request in JSON form. Returns a modified request.
    """

    # Get control of the terminal
    term_mutex.acquire()

    try:
        # Write json to the temp file
        with tempfile.NamedTemporaryFile(delete=False) as tf:
            tfName = tf.name
            tf.write(req_to_json(req))

        # Edit it
        editor = os.environ['EDITOR']
        subprocess.call([editor, tfName])

        # Read the temp file again
        fobj = open(tfName)
        req_dict = json.load(fobj)
        try:
            req_dict['headers']['Cookie'] = '; '.join(req_dict['headers']['Cookie'])
        except KeyError:
            pass

        # Put the headers back into lists by themselves
        for k, v in req_dict['headers'].iteritems():
            req_dict['headers'][k] = [v]
        
        newreq = HTTPRequest(method = req_dict['method'],
                             url = req.url,
                             proto = req_dict['protocol'],
                             headers = req_dict['headers'],
                             body = req_dict['body'])

        # Delete the temp file
        fobj.close()
        os.remove(tfName)

        return newreq

    finally:
        # Whenever we finish, give up control of the terminal
        term_mutex.release()
示例#8
0
文件: agent.py 项目: xyzlat/palette
 def handle_method(self, method):
     self.server.log.info(method +' ' + self.path)
     res = None
     try:
         req = HTTPRequest(self, method)
         if req.path == '/archive':
             res = self.handle_archive(req)
         elif req.path == '/auth':
             res = self.handle_auth(req)
         elif req.path == '/cli':
             res = self.handle_cli(req)
         elif req.path == '/file':
             res = self.handle_file(req)
         elif req.path == '/ping':
             res = req.response
         else:
             raise http.HTTPNotFound(req.path)
     except http.HTTPException, e:
         e.handler = self
         res = e
示例#9
0
from http import HTTPRequest, HTTPResponse
from calc import Calculator
from bcolors import bcolors

http_req = HTTPRequest(host="127.0.0.1")
http_resp = HTTPResponse()
calc = Calculator()

exp = ""
while True:
    print("{}{}Type in your expression: {}".format(bcolors.OKBLUE,
                                                   bcolors.BOLD, bcolors.ENDC),
          end="")
    exp = input()

    print()

    if exp == "exit":
        break

    request = http_req.build_request(method="POST", params={"expression": exp})

    print("{}Making HTTP request...{}".format(bcolors.OKGREEN, bcolors.ENDC))
    print("----------------------")
    print(request, "\n")

    print("{}Evaluating expression...{}".format(bcolors.OKGREEN, bcolors.ENDC))
    print("------------------------")

    try:
        result = calc.evaluate(exp)
示例#10
0
class NetPortalAPI:
    def __init__(self, language="EN"):
        self.request = HTTPRequest(URI('https://www.wnp.waseda.jp/portal',
                                       'portal.php'),
                                   encoding='euc-jp')
        self.request.set_dummy_headers()
        self.request.set_parameter('JavaCHK', 1)
        self.request.set_parameter('LOGINCHECK', 1)
        self.language = language
        self.set_language()
        self.logged = False
        self.logged_cnavi = False
        self._user_info = {}
        self.session_id_encode_key = None

    def set_language(self):
        self.request.set_parameter('HID_P14', self.language)

    @property
    def user_info(self):
        if not self.logged:
            raise NetPortalException(
                "Need to login to get user info from API.")
        return self._user_info

    def login(self, username, password):
        self.request.uri.url = 'portal.php'
        self.request.method = "GET"
        response = self.request.send()
        self.request.set_cookies(response.cookies)
        if not 'PHPSESSID' in response.cookies:
            raise NetPortalException("Could not get PHPSESSID")
        self.net_portal_sessid = response.cookies['PHPSESSID']
        self.request.set_parameter('PHPSESSID',
                                   response.cookies['PHPSESSID'].value)
        self.request.uri.url = 'portalLogin.php'
        response = self.request.send()
        self.request.set_cookies(response.cookies)
        if not 'PHP_Sessionid' in response.cookies:
            raise NetPortalException("Could not get PHP_Sessionid")

        self.request.uri.url = 'portal.php'
        self.request.remove_parameter('PHPSESSID')
        self.request.set_parameter('PHP_Sessionid',
                                   response.cookies['PHP_Sessionid'].value)
        self.request.set_parameter('loginid', username)
        self.request.set_parameter('passwd', password)
        self.request.method = "POST"
        response = self.request.send()

        # check if password was correct
        if not 'Admission_Key' in response.cookies:
            return False

        self.request.set_cookies(response.cookies)

        body = BeautifulSoup(response.get_body())
        link = body.find("frame", {'name': 'LeftMenu'})['src']
        self._get_left_menu_info(URI.parse(link, is_relative=True))
        self.logged = True
        return True

    def _get_left_menu_info(self, uri):
        # get left menu
        self.request.uri.url = uri.url
        self.request.reset_parameters()
        self.request.method = "GET"
        for (key, value) in uri.params.items():
            self.request.set_parameter(key, value)

        response = self.request.send()
        self.request.set_cookies(response.cookies)

        # parse left menu

        body = BeautifulSoup(response.get_body())

        # get hidden form with personal info
        form = body.find("form", {'name': 'LinkIndication'})
        self.request.reset_parameters()
        for field in form.find_all("input"):
            self.request.set_parameter(field['name'], field['value'])
            if field['name'] in info_input.keys():
                info_input[field['name']](field['value'], self._user_info)

        # get missing info from JS
        missing_info = [
            "LinkURL", "CateCode", "MenuCode", "UrlCode", "LogData",
            "MenuLinkName"
        ]
        reg = ".*?MenuLinkOpen\(" + (
            "\'(.*?)\'," *
            5) + "\'(.*?)\'\).*"  # regex for JS function call params -_-'
        # info written in the last script of the first table

        target_script = body.find("table").find_all("script")[-1]
        for line in str(target_script).splitlines():
            if "coursenavi/index3.php" in line:
                m = re.match(reg, line)
                if not m:
                    raise NetPortalException(
                        "Could not parse course navi link")
                # missing info captured in groups 1 to 6
                for (key, value) in zip(missing_info,
                                        [m.group(i) for i in range(1, 7)]):
                    self.request.set_parameter(
                        key.decode("utf-8"), value.decode("utf-8")
                    )  # BeautifulSoup encodes in utf by default
                break

        self.request.uri.url = "LogOutput.php"
        self.request.method = "POST"
        response = self.request.send()

        # prepare data to log to course navi
        self.request.set_cookies(response.cookies)
        body = BeautifulSoup(response.get_body())
        self.cnavi_data = {}
        for field in body.find_all("input"):
            self.cnavi_data[field['name']] = field['value']

    def login_cnavi(self):
        if not self.logged:
            raise NetPortalException("Need to login before login to cnavi")
        self.request.uri = URI('https://cnavi.waseda.jp',
                               'coursenavi/index2.php')
        self.request.method = "POST"
        self.request.set_parameters(self.cnavi_data)
        self.request.encoding = "utf-8"
        self.request.remove_cookie(
            "PHPSESSID")  # different PHPSESSID for this domain

        response = self.request.send()
        self.request.set_cookies(response.cookies)
        self.cnavi_data.clear()
        body = BeautifulSoup(response.get_body())

        for field in body.find_all("input"):
            self.cnavi_data[field['name']] = field['value']
        self.request.set_parameters(self.cnavi_data)
        self.request.uri.url = "index.php"

        self.logged_cnavi = True

    def get_all_subjects(self):
        subjects = {}
        for cat in ['attending', 'to_attend', 'attended']:
            subjects.update(self.get_subjects(cat))
        return subjects

    def get_subjects(self, subject_category='attending'):
        if not self.logged_cnavi:
            raise NetPortalException("Need to login to cnavi to get subjects")
        self.request.set_parameter('ControllerParameters', 'ZX14SubCon')
        self.request.set_parameter('hidListMode',
                                   subjects_category[subject_category])
        response = self.request.send()
        body = BeautifulSoup(response.get_body())
        subjects_container = body.find('div', {'id': 'wKTable'}).find("ul")
        ids = []
        folders = []
        for subject in subjects_container.find_all("li"):
            info = subject.find('p', {'class': 'w-col6'})
            ids.append(info.find('input', {'name': 'chkbox[]'})['value'])
            folders.append(
                info.find('input', {'name': 'folder_id[]'})['value'])

        subjects = {}
        # ids are in the form "yyyyIDIDIDID"
        # use IDIDIDID as dictionary key
        # zip with folders to iterate on all needed information
        for (k, y, f) in map(lambda (s, f): (s[4:], s[:4], f),
                             zip(ids, folders)):
            subjects.setdefault(k, {"folder_id": f, "years": []})
            subjects[k]["years"].append(y)

        return subjects
示例#11
0
class NetPortalAPI:
    def __init__(self, language="EN"):
        self.request = HTTPRequest(URI('https://www.wnp.waseda.jp/portal', 'portal.php'), encoding='euc-jp')
        self.request.set_dummy_headers()
        self.request.set_parameter('JavaCHK', 1)
        self.request.set_parameter('LOGINCHECK', 1)
        self.language = language
        self.set_language()
        self.logged = False
        self.logged_cnavi = False
        self._user_info = {}
        self.session_id_encode_key = None

    def set_language(self):
        self.request.set_parameter('HID_P14', self.language)

    @property
    def user_info(self):
        if not self.logged:
            raise NetPortalException("Need to login to get user info from API.")
        return self._user_info

    def login(self, username, password):
        self.request.uri.url = 'portal.php'
        self.request.method = "GET"
        response = self.request.send()
        self.request.set_cookies(response.cookies)
        if not 'PHPSESSID' in response.cookies:
            raise NetPortalException("Could not get PHPSESSID")
        self.net_portal_sessid = response.cookies['PHPSESSID']
        self.request.set_parameter('PHPSESSID', response.cookies['PHPSESSID'].value)
        self.request.uri.url = 'portalLogin.php'
        response = self.request.send()
        self.request.set_cookies(response.cookies)
        if not 'PHP_Sessionid' in response.cookies:
          raise NetPortalException("Could not get PHP_Sessionid")

        self.request.uri.url = 'portal.php'
        self.request.remove_parameter('PHPSESSID')
        self.request.set_parameter('PHP_Sessionid', response.cookies['PHP_Sessionid'].value)
        self.request.set_parameter('loginid', username)
        self.request.set_parameter('passwd', password)
        self.request.method = "POST"
        response = self.request.send()

        # check if password was correct
        if not 'Admission_Key' in response.cookies:
            return False

        self.request.set_cookies(response.cookies)

        body = BeautifulSoup(response.get_body())
        link = body.find("frame", {'name': 'LeftMenu'})['src']
        self._get_left_menu_info(URI.parse(link, is_relative=True))
        self.logged = True
        return True

    def _get_left_menu_info(self, uri):
        # get left menu
        self.request.uri.url = uri.url
        self.request.reset_parameters()
        self.request.method = "GET"
        for (key, value) in uri.params.items():
            self.request.set_parameter(key, value)

        response = self.request.send()
        self.request.set_cookies(response.cookies)

        # parse left menu

        body = BeautifulSoup(response.get_body())

        # get hidden form with personal info
        form = body.find("form", {'name': 'LinkIndication'})
        self.request.reset_parameters()
        for field in form.find_all("input"):
            self.request.set_parameter(field['name'], field['value'])
            if field['name'] in info_input.keys():
                info_input[field['name']](field['value'], self._user_info)

        # get missing info from JS
        missing_info = ["LinkURL", "CateCode", "MenuCode", "UrlCode", "LogData", "MenuLinkName"]
        reg = ".*?MenuLinkOpen\(" + ("\'(.*?)\'," * 5) + "\'(.*?)\'\).*"  # regex for JS function call params -_-'
        # info written in the last script of the first table

        target_script = body.find("table").find_all("script")[-1]
        for line in str(target_script).splitlines():
            if "coursenavi/index3.php" in line:
                m = re.match(reg, line)
                if not m:
                    raise NetPortalException("Could not parse course navi link")
                # missing info captured in groups 1 to 6
                for (key, value) in zip(missing_info, [m.group(i) for i in range(1, 7)]):
                    self.request.set_parameter(key.decode("utf-8"), value.decode("utf-8"))  # BeautifulSoup encodes in utf by default
                break

        self.request.uri.url = "LogOutput.php"
        self.request.method = "POST"
        response = self.request.send()

        # prepare data to log to course navi
        self.request.set_cookies(response.cookies)
        body = BeautifulSoup(response.get_body())
        self.cnavi_data = {}
        for field in body.find_all("input"):
            self.cnavi_data[field['name']] = field['value']

    def login_cnavi(self):
        if not self.logged:
            raise NetPortalException("Need to login before login to cnavi")
        self.request.uri = URI('https://cnavi.waseda.jp', 'coursenavi/index2.php')
        self.request.method = "POST"
        self.request.set_parameters(self.cnavi_data)
        self.request.encoding = "utf-8"
        self.request.remove_cookie("PHPSESSID")  # different PHPSESSID for this domain

        response = self.request.send()
        self.request.set_cookies(response.cookies)
        self.cnavi_data.clear()
        body = BeautifulSoup(response.get_body())

        for field in body.find_all("input"):
            self.cnavi_data[field['name']] = field['value']
        self.request.set_parameters(self.cnavi_data)
        self.request.uri.url = "index.php"

        self.logged_cnavi = True

    def get_all_subjects(self):
        subjects = {}
        for cat in ['attending', 'to_attend', 'attended']:
            subjects.update(self.get_subjects(cat))
        return subjects

    def get_subjects(self, subject_category='attending'):
        if not self.logged_cnavi:
            raise NetPortalException("Need to login to cnavi to get subjects")
        self.request.set_parameter('ControllerParameters', 'ZX14SubCon')
        self.request.set_parameter('hidListMode', subjects_category[subject_category])
        response = self.request.send()
        body = BeautifulSoup(response.get_body())
        subjects_container = body.find('div', {'id': 'wKTable'}).find("ul")
        ids = []
        folders = []
        for subject in subjects_container.find_all("li"):
            info = subject.find('p', {'class': 'w-col6'})
            ids.append(info.find('input', {'name': 'chkbox[]'})['value'])
            folders.append(info.find('input', {'name': 'folder_id[]'})['value'])

        subjects = {}
        # ids are in the form "yyyyIDIDIDID"
        # use IDIDIDID as dictionary key
        # zip with folders to iterate on all needed information
        for (k, y, f) in map(lambda (s, f): (s[4:], s[:4], f), zip(ids, folders)):
            subjects.setdefault(k, {"folder_id": f, "years": []})
            subjects[k]["years"].append(y)

        return subjects
示例#12
0
from http import HTTPRequest, HTTPResponse, HTTPParser

http_parser = HTTPParser()

http_req = HTTPRequest(host="127.0.0.1")

print(http_req.build_request(method="POST", params={"expression": "+ 1 2"}),
      "\n")

request1 = http_req.build_request(method="POST",
                                  file="/testfilename",
                                  params={"expression": "* 5 6"})

print("Request 1:")
print(request1)
print("Parsed request:", http_parser.parse_request(request1))

http_resp = HTTPResponse()

response1 = http_resp.build_response(status=406, data=-1)
parsed_response1 = http_parser.parse_response(response1)
print()

print("Response 1:")
print(response1, "\n")
print("Status:", parsed_response1['status'])
print("Header Fields:", parsed_response1['fields'])
print("Data:", parsed_response1['data'])

response2 = http_resp.build_response(status=200, data="10")
parsed_response2 = http_parser.parse_response(response2)
import socket
from http import HTTPRequest, HTTPResponse, HTTPParser

server = "www.inspirasonho.com.br"
file = "/sobre"

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((server, 80))

hreq = HTTPRequest(host=server)
request = hreq.build_request(method="GET", file=file)

print("Request:")
print(request)
print("----\n")

s.send(request.encode())

response = s.recv(4096)

print("Response:")
print(response.decode())
print()
print("Response Length:", len(response))