├── InSpy.py
├── LICENSE
├── README.md
├── lib
├── __init__.py
├── __init__.pyc
├── export.py
├── export.pyc
├── http.py
├── http.pyc
├── logger.py
├── logger.pyc
├── soup.py
├── soup.pyc
├── workbench.py
└── workbench.pyc
├── logs
└── .gitignore
├── requirements.txt
└── wordlists
├── title-list-large.txt
└── title-list-small.txt
/InSpy.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python2
2 | # Copyright (c) 2018 Jonathan Broche (@LeapSecurity)
3 |
4 | import argparse, sys, os
5 | from lib.http import *
6 | from lib.workbench import *
7 | from lib.soup import *
8 | from lib.export import *
9 | from lib.logger import *
10 |
11 |
12 | parser = argparse.ArgumentParser(description='InSpy - A LinkedIn enumeration tool by Jonathan Broche (@LeapSecurity)', version="3.0.1")
13 | parser.add_argument('company', help="Company name to use for tasks.")
14 | parser.add_argument('--domain', help="Company domain to use for searching.")
15 | parser.add_argument('--email', help="Email format to create email addresses with. [Accepted Formats: first.last@xyz.com, last.first@xyz.com, firstl@xyz.com, lfirst@xyz.com, flast@xyz.com, lastf@xyz.com, first@xyz.com, last@xyz.com]")
16 | parser.add_argument('--titles', metavar='file', default="wordlists/title-list-small.txt", nargs='?', help="Discover employees by title and/or department. Titles and departments are imported from a new line delimited file. [Default: title-list-small.txt]")
17 | outgroup = parser.add_argument_group(title="Output Options")
18 | outgroup.add_argument('--html', metavar='file', help="Print results in HTML file.")
19 | outgroup.add_argument('--csv', metavar='file', help="Print results in CSV format.")
20 | outgroup.add_argument('--json', metavar='file', help="Print results in JSON.")
21 | outgroup.add_argument('--xml', metavar='file', help="Print results in XML.")
22 |
23 | if len(sys.argv) == 1:
24 | parser.print_help()
25 | sys.exit(1)
26 |
27 | args = parser.parse_args()
28 | start_logger(args.company)
29 | hunterapi = "" #insert hunterio api key here
30 |
31 | email = args.email
32 | domain = args.domain
33 |
34 |
35 | print "\nInSpy {}".format(parser.version)
36 |
37 | try:
38 | if domain and not email: #search hunterio for email format
39 | email = get_email_format(args.domain, hunterapi)
40 | if email and not domain: #search clearbit for domain
41 | domain = get_domain(args.company)
42 | if not email and not domain: #no domain or email provided - fully automate it
43 | domain = get_domain(args.company)
44 | if domain:
45 | email = get_email_format(domain, hunterapi)
46 |
47 | if email and domain:
48 |
49 | email = email.replace("{", "").replace("}","")
50 |
51 | print "\nDomain: {}, Email Format: {}\n".format(domain, email)
52 |
53 | employees = {}
54 |
55 | if os.path.exists(os.path.abspath(args.titles)):
56 | for response in search_linkedin(args.company, os.path.abspath(args.titles)):
57 | for name, title in get_employees(soupify(response)).items():
58 | if args.company.lower() in title.lower():
59 | if not name in employees:
60 | employees[name] = title
61 | print "\n{} Employees identified".format(len(employees.keys()))
62 | else:
63 | print os.path.abspath(args.titles)
64 | print "No such file or directory: '{}'".format(args.titles)
65 |
66 | if employees:
67 | #output employees
68 | for name, title in employees.iteritems():
69 | print "{} {}".format(name, title[:50].replace('&', '&'))
70 |
71 | #craft emails
72 | emails = create_emails(employees, domain, email)
73 |
74 |
75 | if emails:
76 | #output emails
77 | print "\nEmails crafted\n".format(len(emails.keys()))
78 | for name, email in emails.items():
79 | print email
80 |
81 | #export results
82 | if args.html:
83 | output("html", args.html, args.company, domain, employees, emails)
84 | if args.xml:
85 | output("xml", args.xml, args.company, domain, employees, emails)
86 | if args.json:
87 | output("json", args.json, args.company, domain, employees, emails)
88 | if args.csv:
89 | output("csv", args.csv, args.company, domain, employees, emails)
90 | except (KeyboardInterrupt, SystemExit):
91 | print "\nTerminated script.\n"
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2018 Leap Security
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # InSpy
2 |
3 | ⛔ [DEPRECATED]. This repo is no longer being maintained.
4 |
5 | ## Introduction
6 | -----
7 |
8 | InSpy is a python based LinkedIn enumeration tool.
9 |
10 | Version 3.0 introduces the automation of domain and email retrieval in addition to randomized headers and xml output support.
11 |
12 | ## Installation
13 | -----
14 |
15 | Run `pip install -r requirements.txt` within the cloned InSpy directory.
16 |
17 | Obtain an API key from [HunterIO](https://hunter.io/) and insert it into the hunterio variable within InSpy.py (line 29).
18 |
19 | ## Help
20 | -----
21 |
22 | ```
23 | InSpy - A LinkedIn enumeration tool by Jonathan Broche (@LeapSecurity)
24 |
25 | positional arguments:
26 | company Company name to use for tasks.
27 |
28 | optional arguments:
29 | -h, --help show this help message and exit
30 | -v, --version show program's version number and exit
31 | --domain DOMAIN Company domain to use for searching.
32 | --email EMAIL Email format to create email addresses with. [Accepted
33 | Formats: first.last@xyz.com, last.first@xyz.com,
34 | firstl@xyz.com, lfirst@xyz.com, flast@xyz.com,
35 | lastf@xyz.com, first@xyz.com, last@xyz.com]
36 | --titles [file] Discover employees by title and/or department. Titles and
37 | departments are imported from a new line delimited file.
38 | [Default: title-list-small.txt]
39 |
40 | Output Options:
41 | --html file Print results in HTML file.
42 | --csv file Print results in CSV format.
43 | --json file Print results in JSON.
44 | --xml file Print results in XML.
45 | ```
46 |
--------------------------------------------------------------------------------
/lib/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jobroche/InSpy/e886bb2af6010eff6031cdf7a753c15757f43bbc/lib/__init__.py
--------------------------------------------------------------------------------
/lib/__init__.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jobroche/InSpy/e886bb2af6010eff6031cdf7a753c15757f43bbc/lib/__init__.pyc
--------------------------------------------------------------------------------
/lib/export.py:
--------------------------------------------------------------------------------
1 | import json, os, xml.dom.minidom, time, csv
2 | from xml.etree.ElementTree import Element, SubElement, tostring
3 |
4 | def output(format, file, company, domain, employees, emails):
5 | if format == "xml":
6 | oxml(file, company, domain, employees, emails)
7 | if format == "csv":
8 | ocsv(file, company, domain, employees, emails)
9 | if format == "html":
10 | ohtml(file, company, domain, employees, emails)
11 | if format == "json":
12 | ojson(file, company, domain, employees, emails)
13 |
14 | #CSV
15 | def ocsv(filename, company, domain, employees, emails):
16 | with open(os.path.abspath(filename), 'a') as csvfile:
17 | fieldnames = ["Employee Name", "Title", "Email"]
18 | writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
19 | writer.writeheader()
20 | for name, title in employees.iteritems():
21 | writer.writerow({"Employee Name": name, "Title": title.replace('&', '&'), "Email": emails[name]})
22 |
23 | #JSON
24 | def ojson(file, company, domain, employees, emails):
25 | employee_json = []
26 |
27 | for name, title in employees.iteritems():
28 | employee_json.append({"name": name, "title": title.replace('&', '&'), "email": emails[name]})
29 |
30 | full_json = {
31 | "company": {"name":company, "domain": domain},
32 | "employees": employee_json
33 | }
34 |
35 | with open(os.path.abspath(file), 'w') as f:
36 | f.write(json.dumps(full_json))
37 |
38 | #XML
39 | def oxml(file, company, domain, employees, emails):
40 | top = Element('InSpy')
41 | cxml = SubElement(top, 'Company')
42 |
43 | #company name
44 | cnxml = SubElement(cxml, "Name")
45 | cnxml.text = company
46 | #company domain
47 | cdxml = SubElement(cxml, "Domain")
48 | cdxml.text = domain
49 |
50 | echild = SubElement(top, 'Employees')
51 |
52 | for name, title in employees.iteritems():
53 |
54 | employee = SubElement(echild, "Employee")
55 | #name
56 | nxml = SubElement(employee, "Name")
57 | nxml.text = name
58 | #title
59 | txml = SubElement(employee, "Title")
60 | txml.text = title.replace("&", "&")
61 | #email
62 | exml = SubElement(employee, "Email")
63 | exml.text = emails[name]
64 |
65 | fxml = xml.dom.minidom.parseString(tostring(top))
66 |
67 | with open(os.path.abspath(file), 'w') as f:
68 | f.write(fxml.toprettyxml())
69 |
70 | #HTML
71 | def ohtml(file, company, domain, employees, emails):
72 | employee_html = []
73 |
74 | for name, title in employees.iteritems():
75 | employee_html.append("
{name} | {title} | {email} |
".format(name=name, title=title, email=emails[name]))
76 |
77 | page = """
78 |
79 | InSpy - {company}
80 |
81 |
82 |
83 | InSpy
84 | Company: {company}
Date: {time}
85 |
86 |
87 | Employee Name |
88 | Title |
89 | E-mail |
90 |
91 | {html}
92 |
93 |
94 |
95 |
96 | """.format(company=company, time=time.strftime("%Y/%m/%d %H:%M:%S"), html=employee_html)
97 |
98 | with open(os.path.abspath(file), 'w') as f:
99 | f.write(page)
--------------------------------------------------------------------------------
/lib/export.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jobroche/InSpy/e886bb2af6010eff6031cdf7a753c15757f43bbc/lib/export.pyc
--------------------------------------------------------------------------------
/lib/http.py:
--------------------------------------------------------------------------------
1 |
2 | import requests, random
3 | from logger import *
4 | #requests.packages.urllib3.disable_warnings()
5 |
6 | def random_header():
7 |
8 | agents = ['Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0',
9 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36',
10 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.13+ (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2',
11 | 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36 OPR/38.0.2220.41',
12 | 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36']
13 |
14 | return {'User-Agent': random.choice(agents),'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'}
15 |
16 | def http_request(url):
17 |
18 | try:
19 | r = requests.get(url, timeout=3, headers=random_header())
20 |
21 | if r.status_code == 200:
22 | if "linkedin.com" in url:
23 | return {"status": r.status_code, "response": r.text}
24 | else:
25 | return {"status": r.status_code, "response": r.json()}
26 | else:
27 | return {"status": r.status_code, "response": ""}
28 |
29 | except requests.exceptions.Timeout as e:
30 | print "Error: Timed out."
31 | logging.error(e)
32 | except Exception as e:
33 | logging.error(e)
--------------------------------------------------------------------------------
/lib/http.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jobroche/InSpy/e886bb2af6010eff6031cdf7a753c15757f43bbc/lib/http.pyc
--------------------------------------------------------------------------------
/lib/logger.py:
--------------------------------------------------------------------------------
1 | import logging, sys, time
2 |
3 | time_format = time.strftime("%Y-%m-%d %H:%M:%S")
4 |
5 | def start_logger(company):
6 | handler = logging.FileHandler('./logs/{}_{}.log'.format(company.replace(' ', '_'), time_format.replace(' ', '_')))
7 | handler.setFormatter(logging.Formatter("%(asctime)s %(levelname)s - %(message)s"))
8 |
9 | logger = logging.getLogger()
10 | logger.propagate = False
11 | logger.addHandler(handler)
12 | logger.setLevel(logging.INFO)
13 | logging.getLogger("requests").setLevel(logging.DEBUG)
--------------------------------------------------------------------------------
/lib/logger.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jobroche/InSpy/e886bb2af6010eff6031cdf7a753c15757f43bbc/lib/logger.pyc
--------------------------------------------------------------------------------
/lib/soup.py:
--------------------------------------------------------------------------------
1 | import BeautifulSoup, json
2 |
3 | def soupify(response):
4 | try:
5 | soupd = BeautifulSoup.BeautifulSoup(response)
6 | return soupd
7 | except (AttributeError, TypeError) as e:
8 | pass
9 | except Exception as e:
10 | print "Error: {}".format(e)
11 |
12 | def get_employees(soup):
13 | try:
14 | employees = {}
15 | for n, t in zip(soup.findAll('a', {"class": "professional__name"}), soup.findAll("p", {"class" : "professional__headline"})):
16 | name = n.getText().encode('ascii','ignore')
17 | title = t.getText().encode('ascii','ignore')
18 | if name and title:
19 | employees[name] = title
20 | return employees
21 | except (AttributeError, TypeError) as e:
22 | pass
23 | except Exception as e:
24 | print "Error: {}".format(e)
25 |
26 |
--------------------------------------------------------------------------------
/lib/soup.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jobroche/InSpy/e886bb2af6010eff6031cdf7a753c15757f43bbc/lib/soup.pyc
--------------------------------------------------------------------------------
/lib/workbench.py:
--------------------------------------------------------------------------------
1 | import re, json, HTMLParser, unicodedata
2 | from http import *
3 | from logger import *
4 |
5 |
6 | def get_domain(company): #Clearbit API - clearbit.com
7 |
8 | clearbit_request = "https://autocomplete.clearbit.com/v1/companies/suggest?query={}".format(company)
9 | clearbit_results = []
10 | domain = ""
11 |
12 | r = http_request(clearbit_request)
13 |
14 | if len(r["response"]) >=1:
15 | for element in r["response"]:
16 | if company.lower() == element['name'].lower():
17 | clearbit_results.append({"name" : element['name'], "domain":element['domain']})
18 |
19 | if len(clearbit_results) == 1: #return domain if one result
20 | domain = clearbit_results[0]["domain"]
21 | elif len(clearbit_results) > 1: #prompt user if multiple domains identified
22 | print "Multiple domains identified for company. Which one is the target?"
23 | for index, result in enumerate(clearbit_results):
24 | print "{}) Name: {}, Domain: {}".format(index, result["name"], result["domain"])
25 | choice = input()
26 | domain = clearbit_results[choice]["domain"]
27 |
28 | if domain:
29 | return domain
30 | else:
31 | logging.error("Clearbit API - HTTP {} Error".format(r["status"]))
32 | print "InSpy could not identify the domain name. Use --domain."
33 |
34 |
35 | def get_email_format(domain, apikey): #HunterIO API - hunter.io
36 | hunter_request = "https://api.hunter.io/v2/domain-search?domain={domain}&api_key={api}".format(domain=domain, api=apikey)
37 | emailformat = ""
38 |
39 | r = http_request(hunter_request)
40 |
41 | if r["status"] == 200:
42 | for k,v in r["response"].iteritems():
43 | if k == 'data':
44 | if v['pattern']:
45 | emailformat = v['pattern']
46 | logging.info("HunterIO Returned Email Format: {}".format(emailformat))
47 | else:
48 | logging.error("HunterIO - HTTP {} Error".format(r["status"]))
49 |
50 | if emailformat:
51 | return emailformat
52 | else:
53 | print "InSpy could not identify the email format. Use --email."
54 |
55 | def search_linkedin(company, file):
56 | titles = []
57 | responses = []
58 |
59 | with open(file) as f:
60 | for title in f.readlines():
61 | titles.append(title.rstrip())
62 |
63 | for title in titles:
64 | response = http_request("https://www.linkedin.com/title/{}-at-{}".format(title.replace(' ', '-'), company.replace(' ', '-')))
65 | if response["status"] == 200:
66 | responses.append(response["response"])
67 | elif response["status"] == 999: #LinkedIn doesn't like InSpy
68 | logging.error("LinkedIn Search - HTTP 999 Error Crawling {}".format(title))
69 | pass
70 | else:
71 | logging.error("LinkedIn Search - HTTP {} Error Crawling {}".format(response["status"], title))
72 | pass
73 | return responses
74 |
75 |
76 | #craft emails
77 | def create_emails(employees, domain, eformat):
78 | hparser=HTMLParser.HTMLParser()
79 | emails = {}
80 |
81 | for name in employees.keys(): #split up employee name by first, last name
82 | try:
83 | first = hparser.unescape([n.split() for n in name.split(',',1)][0][0])
84 | last = hparser.unescape([n.split() for n in name.split(',',1)][0][-1])
85 | except UnicodeDecodeError:
86 | first = [n.split() for n in name.split(',',1)][0][0]
87 | last = [n.split() for n in name.split(',',1)][0][-1]
88 |
89 | #create emails
90 | email = "{}@{}".format(format_email(eformat.split("@")[0], first.lower(), last.lower()), domain)
91 |
92 | if email:
93 | emails[name] = email
94 |
95 | if emails:
96 | return emails
97 |
98 | def format_email(eformat, first, last):
99 | try:
100 | formats = {
101 | 'first.last': '{}.{}'.format(first,last),
102 | 'last.first': '{}.{}'.format(last,first),
103 | 'firstlast': '{}{}'.format(first,last),
104 | 'lastfirst': '{}{}'.format(last,first),
105 | 'first_last': '{}_{}'.format(first,last),
106 | 'last_first': '{}_{}'.format(last,first),
107 | 'firstl':'{}{}'.format(first,last[0]),
108 | 'lfirst':'{}{}'.format(last[0],first),
109 | 'flast': '{}{}'.format(first[0],last),
110 | 'lastf': '{}{}'.format(last,first[0]),
111 | 'first': first,
112 | 'last': last
113 | }
114 | return formats[eformat]
115 | except Exception as e:
116 | print e
--------------------------------------------------------------------------------
/lib/workbench.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jobroche/InSpy/e886bb2af6010eff6031cdf7a753c15757f43bbc/lib/workbench.pyc
--------------------------------------------------------------------------------
/logs/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | requests==2.20.1
2 | BeautifulSoup==3.2.1
3 |
--------------------------------------------------------------------------------
/wordlists/title-list-large.txt:
--------------------------------------------------------------------------------
1 | .net developer
2 | accessibility specialist
3 | accountant
4 | administrator
5 | agile business analyst
6 | agile coach
7 | agile project manager
8 | analyst
9 | analytics specialist
10 | application developer
11 | application manager
12 | application support analyst
13 | application support engineer
14 | applications engineer
15 | associate
16 | associate developer
17 | auditor
18 | billing analyst
19 | build engineer
20 | build manager
21 | business analyst
22 | business architect
23 | business intelligence engineer
24 | business relationship manager
25 | business systems analyst
26 | chairman
27 | change manager
28 | chief architect
29 | CEO
30 | chief executive officer
31 | CIO
32 | chief information officer
33 | CSO
34 | chief security officer
35 | CTO
36 | chief technology officer
37 | cloud architect
38 | cloud consultant
39 | cloud product and project manager
40 | cloud services developer
41 | cloud software and network engineer
42 | cloud system administrator
43 | cloud system engineer
44 | communication systems design manager
45 | computer and information research scientist
46 | computer and information systems manager
47 | computer and related services manager
48 | computer application development manager
49 | computer applications manager
50 | computer department co-ordinator
51 | computer development division head
52 | computer facility manager
53 | computer graphics animator
54 | computer legacy systems manager
55 | computer manager
56 | computer network architect
57 | computer networks manager
58 | computer programmer
59 | computer programs manager
60 | computer projects manager
61 | computer software design manager
62 | computer system operations manager
63 | computer systems analyst
64 | computer systems development manager
65 | computer systems manager
66 | computerized information systems manager
67 | computerized technical information manager
68 | configuration manager
69 | consultant
70 | content manager
71 | content strategist
72 | contracts manager
73 | controller
74 | coordinator
75 | counsel
76 | customer support administrator
77 | customer support specialist
78 | data analyst
79 | data architect
80 | data center manager
81 | data center support specialist
82 | data center system administrator
83 | data centre manager
84 | data migration architect
85 | data modeler
86 | data processing and systems analysis manager
87 | data processing director
88 | data processing manager
89 | data processing planning manager
90 | data quality manager
91 | data scientist
92 | DBA
93 | database administrator
94 | database analyst
95 | database developer
96 | deputy
97 | desktop support manager
98 | desktop support specialist
99 | desktop support technician
100 | developer
101 | development
102 | devops manager
103 | digital marketing manager
104 | director
105 | director of delivery
106 | director of information systems
107 | director of operations
108 | director of technology
109 | director of technology management
110 | disaster recovery specialist
111 | electronic data processing manager
112 | EDP manager
113 | electronic data processing (EDP) manager
114 | engagement director
115 | engineer
116 | enterprise architect
117 | enterprise solutions architect
118 | erp analyst
119 | executive
120 | financial
121 | foreman
122 | frameworks specialist
123 | front end developer
124 | front-end designer
125 | front-end developer
126 | full-stack developer
127 | game architect
128 | game designer
129 | game developer
130 | graphic designer
131 | growth hacker
132 | help desk specialist
133 | help desk technician
134 | hr
135 | human resources
136 | information architect
137 | information assurance engineer
138 | information security architect
139 | information systems development director
140 | information systems manager
141 | information systems operations director
142 | information technology development manager
143 | information technology director
144 | information technology implementation manager
145 | information technology integration manager
146 | infrastructure manager
147 | integration architect
148 | interaction designer
149 | Internet systems administrator
150 | IT analyst
151 | IT auditor
152 | IT coordinator
153 | IT development manager
154 | IT director
155 | IT implementation manager
156 | IT integration manager
157 | IT manager
158 | IT risk manager
159 | IT support manager
160 | IT support specialist
161 | IT systems administrator
162 | java developer
163 | junior software engineer
164 | lead developer
165 | management information system manager
166 | management information systems director
167 | manager
168 | marketing
169 | marketing technologist
170 | MIS director
171 | MIS manager
172 | mobile app developer
173 | mobile developer
174 | network administrator
175 | network analyst
176 | network and computer systems administrator
177 | network architect
178 | network design manager
179 | network engineer
180 | network security architect
181 | network systems administrator
182 | nurse
183 | occupational
184 | operations analyst
185 | outsourcing manager
186 | owner
187 | partner
188 | pathologist
189 | payroll
190 | pharmacist
191 | president
192 | process analyst
193 | product
194 | product manager
195 | program manager
196 | programmer
197 | programmer analyst
198 | project
199 | project manager
200 | python developer
201 | QA specialist
202 | quality assurance specialist
203 | quality assurance manager
204 | recruiter
205 | ruby on rails developer
206 | sales engineer
207 | secretary
208 | security
209 | security engineer
210 | security specialist
211 | security testing engineer
212 | senior applications engineer
213 | senior database administrator
214 | senior network architect
215 | senior network engineer
216 | senior network system administrator
217 | senior programmer
218 | senior programmer analyst
219 | senior security specialist
220 | senior software engineer
221 | senior support specialist
222 | senior system administrator
223 | senior system analyst
224 | senior system architect
225 | senior system designer
226 | senior systems analyst
227 | senior systems software engineer
228 | senior web administrator
229 | senior web developer
230 | seo consultant
231 | service delivery manager
232 | service desk operator
233 | social media manager
234 | software
235 | software architect
236 | software developer
237 | software developers
238 | software development manager
239 | software development managers
240 | software engineer
241 | software engineering director
242 | software engineering manager
243 | software quality assurance analyst
244 | solution architect
245 | sql developer
246 | sr. applications engineer
247 | sr. database administrator
248 | sr. network architect
249 | sr. network engineer
250 | sr. network system administrator
251 | sr. programmer
252 | sr. programmer analyst
253 | sr. security specialist
254 | sr. software engineer
255 | sr. support specialist
256 | sr. system administrator
257 | sr. system analyst
258 | sr. system architect
259 | sr. system designer
260 | sr. systems analyst
261 | sr. systems software engineer
262 | sr. web administrator
263 | sr. web developer
264 | storage engineer
265 | supervisor
266 | support specialist
267 | system architect
268 | systems - computer systems manager
269 | systems administrator
270 | systems analyst
271 | systems designer
272 | systems development - computer systems manager
273 | systems development manager
274 | systems engineer
275 | systems implementation manager
276 | systems integration manager
277 | systems manager
278 | systems operations manager
279 | systems software engineer
280 | technical account manager
281 | technical lead
282 | technical operations officer
283 | technical specialist
284 | technical support engineer
285 | technical support representative
286 | technical support specialist
287 | technician
288 | technology architect
289 | telecommunications specialist
290 | test analyst
291 | test automation engineer
292 | therapist
293 | training
294 | treasurer
295 | ui architect
296 | ui designer
297 | ux designer
298 | virtualization architect
299 | web administrator
300 | web analytics developer
301 | web designer
302 | web developer
303 | webmaster
304 | wordpress developer
305 |
--------------------------------------------------------------------------------
/wordlists/title-list-small.txt:
--------------------------------------------------------------------------------
1 | sales
2 | marketing
3 | human resources
4 | finance
5 | accounting
6 | inventory
7 | quality assurance
8 | insurance
9 | licenses
10 | operational
11 | customer service
12 | staff
13 | research & development
14 | management
15 | administration
16 | engineering
17 | it
18 | is
19 | strategy
20 | other
--------------------------------------------------------------------------------