From b9601879d8e3b4580e23745f54c23cb5bcf3bc06 Mon Sep 17 00:00:00 2001 From: Jay Townsend Date: Sat, 7 Sep 2019 20:23:44 +0100 Subject: [PATCH 01/29] Remove uneeded code --- .gitignore | 1 + theHarvester/__main__.py | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 83c17fa5..9d272d9b 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ api-keys.yaml debug_results.txt tests/myparser.py venv +.mypy_cache diff --git a/theHarvester/__main__.py b/theHarvester/__main__.py index 533d9da6..9cf0b2fc 100644 --- a/theHarvester/__main__.py +++ b/theHarvester/__main__.py @@ -38,7 +38,6 @@ def start(): hunter, intelx, linkedin, linkedin_links, netcraft, securityTrails, threatcrowd, trello, twitter, vhost, virustotal, yahoo''') - parser.add_argument('-x', '--exclude', help='exclude options when using all sources', type=str) args = parser.parse_args() try: From e5eaa28acd372bfd8352b71822efa5a66848d2a1 Mon Sep 17 00:00:00 2001 From: csparks Date: Sat, 7 Sep 2019 23:50:53 +0000 Subject: [PATCH 02/29] asserted that links is a list of links --- tests/discovery/test_linkedin_links.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/discovery/test_linkedin_links.py b/tests/discovery/test_linkedin_links.py index 2dc6f3dc..9ff04f67 100644 --- a/tests/discovery/test_linkedin_links.py +++ b/tests/discovery/test_linkedin_links.py @@ -10,9 +10,7 @@ class TestGetLinks(object): search = linkedinsearch.SearchLinkedin("facebook.com", '100') search.process() links = search.get_links() - for link in links: - print(link) - + assert list(links) if __name__ == '__main__': pytest.main() From fcd2484bbb706114e07a405d2f13e83a5c147a46 Mon Sep 17 00:00:00 2001 From: Jay Townsend Date: Sun, 8 Sep 2019 00:54:15 +0100 Subject: [PATCH 03/29] update markup.py this code is no longer maintained upstream --- theHarvester/lib/markup.py | 235 ++++++++++++++++++------------------- 1 file changed, 113 insertions(+), 122 deletions(-) diff --git a/theHarvester/lib/markup.py b/theHarvester/lib/markup.py index c749b75a..20f74759 100644 --- a/theHarvester/lib/markup.py +++ b/theHarvester/lib/markup.py @@ -1,16 +1,19 @@ -# This code is in the public domain, it comes with absolutely no -# warranty and you can do absolutely whatever you want with it. +# This code is in the public domain, it comes +# with absolutely no warranty and you can do +# absolutely whatever you want with it. +# type: ignore -__date__ = '17 May 2007' -__version__ = '1.7' +__date__ = '16 March 2015' +__version__ = '1.10' __doc__ = """ This is markup.py - a Python module that attempts to make it easier to generate HTML/XML from a Python program in an intuitive, lightweight, customizable and pythonic way. +It works with both python 2 and 3. The code is in the public domain. -Version: {0} as of {1}. +Version: %s as of %s. Documentation and further info is at http://markup.sourceforge.net/ @@ -18,37 +21,47 @@ Please send bug reports, feature requests, enhancement ideas or questions to nogradi at gmail dot com. Installation: drop markup.py somewhere into your Python path. -""".format(__version__, __date__) +""" % (__version__, __date__) + + +basestring = str +String = str +long = int + +# tags which are reserved python keywords will be referred +# to by a leading underscore otherwise we end up with a syntax error +import keyword class Element: - """This class handles the addition of a new element.""" def __init__(self, tag, case='lower', parent=None): self.parent = parent - if case == 'lower': - self.tag = tag.lower() - else: + if case == 'upper': self.tag = tag.upper() + elif case == 'lower': + self.tag = tag.lower() + elif case == 'given': + self.tag = tag + else: + self.tag = tag def __call__(self, *args, **kwargs): if len(args) > 1: raise ArgumentError(self.tag) - # If class_ was defined in parent, it should be added to every element. + # if class_ was defined in parent it should be added to every element if self.parent is not None and self.parent.class_ is not None: if 'class_' not in kwargs: kwargs['class_'] = self.parent.class_ if self.parent is None and len(args) == 1: - x = [self.render(self.tag, False, myarg, mydict) - for myarg, mydict in _argsdicts(args, kwargs)] + x = [self.render(self.tag, False, myarg, mydict) for myarg, mydict in _argsdicts(args, kwargs)] return '\n'.join(x) elif self.parent is None and len(args) == 0: - x = [self.render(self.tag, True, myarg, mydict) - for myarg, mydict in _argsdicts(args, kwargs)] + x = [self.render(self.tag, True, myarg, mydict) for myarg, mydict in _argsdicts(args, kwargs)] return '\n'.join(x) if self.tag in self.parent.twotags: @@ -57,8 +70,7 @@ class Element: elif self.tag in self.parent.onetags: if len(args) == 0: for myarg, mydict in _argsdicts(args, kwargs): - # Here myarg is always None, because len( args ) = 0. - self.render(self.tag, True, myarg, mydict) + self.render(self.tag, True, myarg, mydict) # here myarg is always None, because len( args ) = 0 else: raise ClosingError(self.tag) elif self.parent.mode == 'strict_html' and self.tag in self.parent.deptags: @@ -70,13 +82,10 @@ class Element: """Append the actual tags to content.""" out = "<%s" % tag - for key, value in kwargs.items(): - # When value is None, that means stuff like <... checked>. - if value is not None: - # Strip this so class_ will mean class, etc. - key = key.strip('_') - # Special cases, maybe change _ to - overall? - if key == 'http_equiv': + for key, value in list(kwargs.items()): + if value is not None: # when value is None that means stuff like <... checked> + key = key.strip('_') # strip this so class_ will mean class, etc. + if key == 'http_equiv': # special cases, maybe change _ to - overall? key = 'http-equiv' elif key == 'accept_charset': key = 'accept-charset' @@ -116,11 +125,7 @@ class Element: class Page: - """This is our main class representing a document. Elements are added as - attributes of an instance of this class.""" - - def __init__(self, mode='strict_html', case='lower', - onetags=None, twotags=None, separator='\n', class_=None): + def __init__(self, mode='strict_html', case='lower', onetags=None, twotags=None, separator='\n', class_=None): """Stuff that effects the whole document. mode -- 'strict_html' for HTML 4.01 (default) @@ -130,6 +135,7 @@ class Page: case -- 'lower' element names will be printed in lower case (default) 'upper' they will be printed in upper case + 'given' element names will be printed as they are given onetags -- list or tuple of valid elements with opening tags only twotags -- list or tuple of valid elements with both opening and closing tags @@ -141,36 +147,16 @@ class Page: class_ -- a class that will be added to every element if defined""" - valid_onetags = [ - "AREA", - "BASE", - "BR", - "COL", - "FRAME", - "HR", - "IMG", - "INPUT", - "LINK", - "META", - "PARAM"] - valid_twotags = [ - "A", "ABBR", "ACRONYM", "ADDRESS", "B", "BDO", "BIG", "BLOCKQUOTE", "BODY", "BUTTON", - "CAPTION", "CITE", "CODE", "COLGROUP", "DD", "DEL", "DFN", "DIV", "DL", "DT", "EM", "FIELDSET", - "FORM", "FRAMESET", "H1", "H2", "H3", "H4", "H5", "H6", "HEAD", "HTML", "I", "IFRAME", "INS", - "KBD", "LABEL", "LEGEND", "LI", "MAP", "NOFRAMES", "NOSCRIPT", "OBJECT", "OL", "OPTGROUP", - "OPTION", "P", "PRE", "Q", "SAMP", "SCRIPT", "SELECT", "SMALL", "SPAN", "STRONG", "STYLE", - "SUB", "SUP", "TABLE", "TBODY", "TD", "TEXTAREA", "TFOOT", "TH", "THEAD", "TITLE", "TR", - "TT", "UL", "VAR"] + valid_onetags = ["AREA", "BASE", "BR", "COL", "FRAME", "HR", "IMG", "INPUT", "LINK", "META", "PARAM"] + valid_twotags = ["A", "ABBR", "ACRONYM", "ADDRESS", "B", "BDO", "BIG", "BLOCKQUOTE", "BODY", "BUTTON", + "CAPTION", "CITE", "CODE", "COLGROUP", "DD", "DEL", "DFN", "DIV", "DL", "DT", "EM", "FIELDSET", + "FORM", "FRAMESET", "H1", "H2", "H3", "H4", "H5", "H6", "HEAD", "HTML", "I", "IFRAME", "INS", + "KBD", "LABEL", "LEGEND", "LI", "MAP", "NOFRAMES", "NOSCRIPT", "OBJECT", "OL", "OPTGROUP", + "OPTION", "P", "PRE", "Q", "SAMP", "SCRIPT", "SELECT", "SMALL", "SPAN", "STRONG", "STYLE", + "SUB", "SUP", "TABLE", "TBODY", "TD", "TEXTAREA", "TFOOT", "TH", "THEAD", "TITLE", "TR", + "TT", "UL", "VAR"] deprecated_onetags = ["BASEFONT", "ISINDEX"] - deprecated_twotags = [ - "APPLET", - "CENTER", - "DIR", - "FONT", - "MENU", - "S", - "STRIKE", - "U"] + deprecated_twotags = ["APPLET", "CENTER", "DIR", "FONT", "MENU", "S", "STRIKE", "U"] self.header = [] self.content = [] @@ -178,23 +164,23 @@ class Page: self.case = case self.separator = separator - # init( ) sets it to True so we know that has to be printed at the end. + # init( ) sets it to True so we know that has to be printed at the end self._full = False self.class_ = class_ if mode == 'strict_html' or mode == 'html': self.onetags = valid_onetags - self.onetags += [str.lower(x) for x in self.onetags] + self.onetags += list(map(String.lower, self.onetags)) self.twotags = valid_twotags - self.twotags += [str.lower(x) for x in self.twotags] + self.twotags += list(map(String.lower, self.twotags)) self.deptags = deprecated_onetags + deprecated_twotags - self.deptags += [str.lower(x) for x in self.deptags] + self.deptags += list(map(String.lower, self.deptags)) self.mode = 'strict_html' elif mode == 'loose_html': self.onetags = valid_onetags + deprecated_onetags - self.onetags += [str.lower(x) for x in self.onetags] + self.onetags += list(map(String.lower, self.onetags)) self.twotags = valid_twotags + deprecated_twotags - self.onetags += [str.lower(x) for x in self.twotags] + self.twotags += list(map(String.lower, self.twotags)) self.mode = mode elif mode == 'xml': if onetags and twotags: @@ -210,8 +196,16 @@ class Page: raise ModeError(mode) def __getattr__(self, attr): + + # tags should start with double underscore if attr.startswith("__") and attr.endswith("__"): raise AttributeError(attr) + # tag with single underscore should be a reserved keyword + if attr.startswith('_'): + attr = attr.lstrip('_') + if attr not in keyword.kwlist: + raise AttributeError(attr) + return Element(attr, case=self.case, parent=self) def __str__(self): @@ -252,7 +246,7 @@ class Page: self.content.append(text) def init(self, lang='en', css=None, metainfo=None, title=None, header=None, - footer=None, charset=None, encoding=None, doctype=None, bodyattrs=None, script=None): + footer=None, charset=None, encoding=None, doctype=None, bodyattrs=None, script=None, base=None): """This method is used for complete documents with appropriate doctype, encoding, title, etc information. For an HTML/XML snippet omit this method. @@ -267,11 +261,14 @@ class Page: into meta element(s) as (ignored in xml mode) + base -- set the tag in + bodyattrs --a dictionary in the form { 'key':'value', ... } which will be added as attributes of the element as (ignored in xml mode) script -- dictionary containing src:type pairs, + or a list of [ 'src1', 'src2', ... ] in which case 'javascript' is assumed for all title -- the title of the document as a string to be inserted into a title element as my title (ignored in xml mode) @@ -303,10 +300,7 @@ class Page: self.html(lang=lang) self.head() if charset is not None: - self.meta( - http_equiv='Content-Type', - content="text/html; charset=%s" % - charset) + self.meta(http_equiv='Content-Type', content="text/html; charset=%s" % charset) if metainfo is not None: self.metainfo(metainfo) if css is not None: @@ -315,6 +309,8 @@ class Page: self.title(title) if script is not None: self.scripts(script) + if base is not None: + self.base(href='%s' % base) self.head.close() if bodyattrs is not None: self.body(**bodyattrs) @@ -334,45 +330,40 @@ class Page: self.header.append(doctype) def css(self, filelist): - """This convenience function is only useful for html. It adds CSS - stylesheet(s) to the document via the element.""" + """This convenience function is only useful for html. + It adds css stylesheet(s) to the document via the element.""" - if isinstance(filelist, str): - self.link( - href=filelist, - rel='stylesheet', - type='text/css', - media='all') + if isinstance(filelist, basestring): + self.link(href=filelist, rel='stylesheet', type='text/css', media='all') else: for file in filelist: - self.link( - href=file, - rel='stylesheet', - type='text/css', - media='all') + self.link(href=file, rel='stylesheet', type='text/css', media='all') def metainfo(self, mydict): - """This convenience function is only useful for html. It adds meta - information via the element, the argument is a dictionary of - the form { 'name':'content' }.""" + """This convenience function is only useful for html. + It adds meta information via the element, the argument is + a dictionary of the form { 'name':'content' }.""" if isinstance(mydict, dict): - for name, content in mydict.items(): + for name, content in list(mydict.items()): self.meta(name=name, content=content) else: - raise TypeError( - "Metainfo should be called with a dictionary argument of name:content pairs.") + raise TypeError("Metainfo should be called with a dictionary argument of name:content pairs.") def scripts(self, mydict): - """Only useful in html, mydict is dictionary of src:type pairs will - be rendered as """ + """Only useful in html, mydict is dictionary of src:type pairs or a list + of script sources [ 'src1', 'src2', ... ] in which case 'javascript' is assumed for type. + Will be rendered as """ if isinstance(mydict, dict): - for src, type in mydict.items(): + for src, type in list(mydict.items()): self.script('', src=src, type='text/%s' % type) else: - raise TypeError( - "Script should be given a dictionary of src:type pairs.") + try: + for src in mydict: + self.script('', src=src, type='text/javascript') + except: + raise TypeError("Script should be given a dictionary of src:type pairs or a list of javascript src's.") class _OneLiner: @@ -385,18 +376,26 @@ class _OneLiner: self.case = case def __getattr__(self, attr): + + # tags should start with double underscore if attr.startswith("__") and attr.endswith("__"): raise AttributeError(attr) + # tag with single underscore should be a reserved keyword + if attr.startswith('_'): + attr = attr.lstrip('_') + if attr not in keyword.kwlist: + raise AttributeError(attr) + return Element(attr, case=self.case, parent=None) oneliner = _OneLiner(case='lower') upper_oneliner = _OneLiner(case='upper') +given_oneliner = _OneLiner(case='given') def _argsdicts(args, mydict): - """A utility generator that pads argument list and dictionary values, will - only be called with len( args ) = 0, 1.""" + '''A utility generator that pads argument list and dictionary values, will only be called with len( args ) = 0, 1.''' if len(args) == 0: args = None, @@ -407,7 +406,9 @@ def _argsdicts(args, mydict): mykeys = list(mydict.keys()) myvalues = list(map(_totuple, list(mydict.values()))) + maxlength = max(list(map(len, [args] + myvalues))) + for i in range(maxlength): thisdict = {} for key, value in zip(mykeys, myvalues): @@ -424,11 +425,11 @@ def _argsdicts(args, mydict): def _totuple(x): - """Utility stuff to convert string, int, float, None or anything to a usable tuple.""" + """Utility stuff to convert string, int, long, float, None or anything to a usable tuple.""" - if isinstance(x, str): + if isinstance(x, basestring): out = x, - elif isinstance(x, (int, float)): + elif isinstance(x, (int, long, float)): out = str(x), elif x is None: out = None, @@ -441,7 +442,7 @@ def _totuple(x): def escape(text, newline=False): """Escape special html characters.""" - if isinstance(text, str): + if isinstance(text, basestring): if '&' in text: text = text.replace('&', '&') if '>' in text: @@ -465,7 +466,7 @@ _escape = escape def unescape(text): """Inverse of escape.""" - if isinstance(text, str): + if isinstance(text, basestring): if '&' in text: text = text.replace('&', '&') if '>' in text: @@ -479,19 +480,17 @@ def unescape(text): class Dummy: - """A dummy class for attaching attributes.""" pass doctype = Dummy() -doctype.frameset = "" -doctype.strict = "" -doctype.loose = "" +doctype.frameset = """""" +doctype.strict = """""" +doctype.loose = """""" class Russell: - """A dummy class that contains anything.""" def __contains__(self, item): @@ -499,7 +498,6 @@ class Russell: class MarkupError(Exception): - """All our exceptions subclass this.""" def __str__(self): @@ -507,48 +505,41 @@ class MarkupError(Exception): class ClosingError(MarkupError): - def __init__(self, tag): - self.message = "The element '{}' does not accept non-keyword arguments (has no closing tag)".format(tag) + self.message = "The element '%s' does not accept non-keyword arguments (has no closing tag)." % tag class OpeningError(MarkupError): - def __init__(self, tag): - self.message = "The element '{}' can not be opened.".format(tag) + self.message = "The element '%s' can not be opened." % tag class ArgumentError(MarkupError): - def __init__(self, tag): - self.message = "The element '{}' was called with more than one non-keyword argument.".format(tag) + self.message = "The element '%s' was called with more than one non-keyword argument." % tag class InvalidElementError(MarkupError): - def __init__(self, tag, mode): - self.message = "The element '{0}' is not valid for your mode '{1}'.".format( - tag, - mode) + self.message = "The element '%s' is not valid for your mode '%s'." % (tag, mode) class DeprecationError(MarkupError): - def __init__(self, tag): - self.message = "The element '{0}' is deprecated, instantiate markup.page with mode='loose_html' to allow it.".format(tag) + self.message = "The element '%s' is deprecated, instantiate markup.page with mode='loose_html' to allow it." % tag class ModeError(MarkupError): - def __init__(self, mode): - self.message = "Mode '{}' is invalid, possible values: strict_html, loose_html, xml.".format(mode) + self.message = "Mode '%s' is invalid, possible values: strict_html, html (alias for strict_html), loose_html, xml." % mode class CustomizationError(MarkupError): - def __init__(self): self.message = "If you customize the allowed elements, you must define both types 'onetags' and 'twotags'." if __name__ == '__main__': - print(__doc__) + import sys + + sys.stdout.write(__doc__) From eab9b116c064d87820006cd29f33a56b3c29af2d Mon Sep 17 00:00:00 2001 From: Jay Townsend Date: Sun, 8 Sep 2019 00:55:09 +0100 Subject: [PATCH 04/29] Move contributing to the correct place and file name convention --- .github/contributing.md => CONTRIBUTING.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) rename .github/contributing.md => CONTRIBUTING.md (67%) diff --git a/.github/contributing.md b/CONTRIBUTING.md similarity index 67% rename from .github/contributing.md rename to CONTRIBUTING.md index f6f816d5..ef5fd561 100644 --- a/.github/contributing.md +++ b/CONTRIBUTING.md @@ -1,6 +1,5 @@ # Contributing to theHarvester Project Welcome to theHarvester project, so you would like to contribute. - The following below must be met to get accepted. # CI @@ -12,7 +11,9 @@ For new modules a unit test for that module is required and we use pytest. # Coding Standards * No single letter variables and variable names must represent the action that it is performing * Have static typing on functions etc +* Make sure no errors are reported from mypy +* No issues reported with flake8 # Submitting Bugs -If you have a bug in a module that you want to submit an issue for and know how to write python code. -Please create a unit test for that bug and submit a fix for it \ No newline at end of file +If you find a bug in a module that you want to submit an issue for and know how to write python code. +Please create a unit test for that bug(If possible) and submit a fix for it as it would be a big help to the project. \ No newline at end of file From 6215ad370e1723edc99e9a42549484854c41755f Mon Sep 17 00:00:00 2001 From: Jay Townsend Date: Sun, 8 Sep 2019 01:16:16 +0100 Subject: [PATCH 05/29] Update CI --- .github/workflows/theHarvester.yml | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/.github/workflows/theHarvester.yml b/.github/workflows/theHarvester.yml index c006e4e9..1444e382 100644 --- a/.github/workflows/theHarvester.yml +++ b/.github/workflows/theHarvester.yml @@ -28,7 +28,22 @@ jobs: pip install -r requirements.txt - name: Run theHarvester run: | - python theHarvester.py -d metasploit.com -b baidu,bing,censys,crtsh,dnsdumpster,dogpile,duckduckgo,exalead,linkedin,netcraft,threatcrowd,trello,twitter,virustotal,yahoo + python theHarvester.py -d metasploit.com -b baidu + python theHarvester.py -d metasploit.com -b bing + python theHarvester.py -d metasploit.com -b censys + python theHarvester.py -d metasploit.com -b crtsh + python theHarvester.py -d metasploit.com -b dnsdumpster + python theHarvester.py -d metasploit.com -b dogpile + python theHarvester.py -d metasploit.com -b duckduckgo + python theHarvester.py -d metasploit.com -b exalead + python theHarvester.py -d metasploit.com -b linkedin + python theHarvester.py -d metasploit.com -b linkedin_links + python theHarvester.py -d metasploit.com -b netcraft + python theHarvester.py -d metasploit.com -b threatcrowd + python theHarvester.py -d metasploit.com -b trello + python theHarvester.py -d metasploit.com -b twitter + python theHarvester.py -d metasploit.com -b virustotal + python theHarvester.py -d metasploit.com -b yahoo - name: Lint with flake8 run: | # stop the build if there are Python syntax errors or undefined names From d01bbd7baa19e0a8dadd68cd22b7148c91323a79 Mon Sep 17 00:00:00 2001 From: Jay Townsend Date: Sun, 8 Sep 2019 01:19:19 +0100 Subject: [PATCH 06/29] More github CI updates --- .github/workflows/theHarvester.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/theHarvester.yml b/.github/workflows/theHarvester.yml index 1444e382..9ba64e71 100644 --- a/.github/workflows/theHarvester.yml +++ b/.github/workflows/theHarvester.yml @@ -36,6 +36,7 @@ jobs: python theHarvester.py -d metasploit.com -b dogpile python theHarvester.py -d metasploit.com -b duckduckgo python theHarvester.py -d metasploit.com -b exalead + python theHarvester.py -d metasploit.com -b google python theHarvester.py -d metasploit.com -b linkedin python theHarvester.py -d metasploit.com -b linkedin_links python theHarvester.py -d metasploit.com -b netcraft From 0b8e95c80ff76641ef59e4d9598a5d46287131a3 Mon Sep 17 00:00:00 2001 From: csparks Date: Sun, 8 Sep 2019 00:34:11 +0000 Subject: [PATCH 07/29] added new methods to pytester --- output.txt | 864 +++++++++++++++++++++++ tests/discovery/test_linkedin_links.py | 12 + tests/discovery/test_linkedin_links.txt | 5 + theHarvester/discovery/linkedinsearch.py | 1 + 4 files changed, 882 insertions(+) create mode 100644 output.txt create mode 100644 tests/discovery/test_linkedin_links.txt diff --git a/output.txt b/output.txt new file mode 100644 index 00000000..a2deedba --- /dev/null +++ b/output.txt @@ -0,0 +1,864 @@ + +******************************************************************* +* _ _ _ * +* | |_| |__ ___ /\ /\__ _ _ ____ _____ ___| |_ ___ _ __ * +* | __| _ \ / _ \ / /_/ / _` | '__\ \ / / _ \/ __| __/ _ \ '__| * +* | |_| | | | __/ / __ / (_| | | \ V / __/\__ \ || __/ | * +* \__|_| |_|\___| \/ /_/ \__,_|_| \_/ \___||___/\__\___|_| * +* * +* theHarvester 3.1.0.dev2 * +* Coded by Christian Martorella * +* Edge-Security Research * +* cmartorella@edge-security.com * +* * +******************************************************************* + +  +[*] Target: facebook.com +  +[*] Searching Linkedin.  + Searching 100 results. + Searching 200 results. + Searching 300 results. + Searching 400 results. + Searching 500 results. +site:linkedin.com/in facebook.com - Google Search

 
About 32,200,000 results
site:linkedin.com/in facebook.com - Google Search

Accessibility Links

Skip to main contentAccessibility help
Accessibility feedback
Page 2 of about 32,200,000 results (0.41 seconds) 

Footer Links

site:linkedin.com/in facebook.com - Google Search

Accessibility Links

Skip to main contentAccessibility help
Accessibility feedback
Page 3 of about 32,200,000 results (0.39 seconds) 

Footer Links

site:linkedin.com/in facebook.com - Google Search

 
Page 4 of about 331 results
site:linkedin.com/in facebook.com - Google Search

 

Your search - site:linkedin.com/in facebook.com - did not match any documents.

Suggestions:

  • Make sure all words are spelled correctly.
  • Try different keywords.
  • Try more general keywords.
  • Try fewer keywords.

+ +[*] Links found: 191 +--------------------- +https://www.linkedin.com/in/abdolf-hitcoln-9442904a +https://www.linkedin.com/in/abhinav-jain-88042b7 +https://www.linkedin.com/in/adobe-echosigndigita-trice-viola-43904a58 +https://www.linkedin.com/in/alyssa-morahan-916132a9 +https://www.linkedin.com/in/alyssa-ramsey-37939a3b +https://www.linkedin.com/in/amanda-squires-gil-2064b168 +https://www.linkedin.com/in/amexmall +https://www.linkedin.com/in/amit-jindal-7bb7514 +https://www.linkedin.com/in/ananddass +https://www.linkedin.com/in/andy-ponce-827939aa +https://www.linkedin.com/in/antanas-prismantas-2b6b6966 +https://www.linkedin.com/in/anthony-ortega-19921a111 +https://www.linkedin.com/in/antonio-lucio-72b6bb13 +https://www.linkedin.com/in/arthurgerigk +https://www.linkedin.com/in/ashley-j-0a35b0113 +https://www.linkedin.com/in/austin-silva-52aa2b9 +https://www.linkedin.com/in/becca-nation-33685476 +https://www.linkedin.com/in/bella-zarate-324b313b +https://www.linkedin.com/in/benigno-lopez-11690970 +https://www.linkedin.com/in/bentewright +https://www.linkedin.com/in/billvick +https://www.linkedin.com/in/bobscelestin +https://www.linkedin.com/in/bookswagbag +https://www.linkedin.com/in/bracelets-knotalot-55217975 +https://www.linkedin.com/in/bradley-osburn-84005443 +https://www.linkedin.com/in/brenda-phillips-johnson-6b0a62100 +https://www.linkedin.com/in/brionn-mitchell-8b14895a +https://www.linkedin.com/in/btw-pcs-826986115%3Ftrk%3Dpub-pbmap +https://www.linkedin.com/in/bymariandy +https://www.linkedin.com/in/cademetz +https://www.linkedin.com/in/candie-parrott-8b81b934 +https://www.linkedin.com/in/carleton-johnson-74024239 +https://www.linkedin.com/in/casey-ferry-81035148 +https://www.linkedin.com/in/catharsus-metal-98812140 +https://www.linkedin.com/in/chelsea-hensley-226a30172 +https://www.linkedin.com/in/cherry-fu-10637178 +https://www.linkedin.com/in/cherry-fu-152a8a31 +https://www.linkedin.com/in/chris-clarke-b02b9950 +https://www.linkedin.com/in/christina-lavalais-925a883a +https://www.linkedin.com/in/christopher-heine-85129760 +https://www.linkedin.com/in/coryllewellyn +https://www.linkedin.com/in/dan-witkoske-39350285 +https://www.linkedin.com/in/daniel-portillo-56b374162 +https://www.linkedin.com/in/dat888 +https://www.linkedin.com/in/datavortex +https://www.linkedin.com/in/david-dopfel-82916385 +https://www.linkedin.com/in/david-l-40379114a +https://www.linkedin.com/in/daviddylanthomas1 +https://www.linkedin.com/in/deana-wilson-kimbler-691b1166 +https://www.linkedin.com/in/deborahshane +https://www.linkedin.com/in/deepinsand +https://www.linkedin.com/in/dianne-boucaud-2628a7115 +https://www.linkedin.com/in/dog-religion-9b169056 +https://www.linkedin.com/in/domenicorugo +https://www.linkedin.com/in/eaglerock-barbershop-449aaa66 +https://www.linkedin.com/in/elkhorbat-lkhorbat-6028b33a +https://www.linkedin.com/in/ernesto-canope-31611717a +https://www.linkedin.com/in/ethio-funnypics-04b828b7 +https://www.linkedin.com/in/eulogia-rueda-2829ba171 +https://www.linkedin.com/in/fabrizio-gratelli-15008bba +https://www.linkedin.com/in/fiworie-facebook-com-caleb-fabian-57519043 +https://www.linkedin.com/in/frenchantiques4u-3-a2266752 +https://www.linkedin.com/in/gena-doyle-95885524%3Ftrk%3Dpublic_profile_browsemap_mini-profile_title +https://www.linkedin.com/in/gm-tuhin-ialam-546526b8 +https://www.linkedin.com/in/godwell-chan-04042239 +https://www.linkedin.com/in/gordon-goodermote-a2105033 +https://www.linkedin.com/in/granny-gee-1158aa45 +https://www.linkedin.com/in/gregorio-carrasco-leon-7045329a +https://www.linkedin.com/in/gulrukh-ahmed-56493b +https://www.linkedin.com/in/gwen-helmka-177aa830 +https://www.linkedin.com/in/haddy-sanyang-5213836a +https://www.linkedin.com/in/haikuhi-voskanyan-277392b1 +https://www.linkedin.com/in/hamido-bissmar-b1282953 +https://www.linkedin.com/in/hamza-ramada-a57b827b +https://www.linkedin.com/in/hari-ram-0a285b67 +https://www.linkedin.com/in/healthy-exercise-7380a8a0 +https://www.linkedin.com/in/hlrule +https://www.linkedin.com/in/ilovemyfamilyshirtdesign +https://www.linkedin.com/in/ja-porria-cooks-5ab99463 +https://www.linkedin.com/in/jaime-du-vergey-62686782 +https://www.linkedin.com/in/janet-chaney-883850150 +https://www.linkedin.com/in/jasminsmoots +https://www.linkedin.com/in/jaz-kaur-230a42108 +https://www.linkedin.com/in/jennifer-walsh-b47b06b +https://www.linkedin.com/in/jerry-gavaldon-6380a9155 +https://www.linkedin.com/in/jerry-jinks-38849313 +https://www.linkedin.com/in/jining +https://www.linkedin.com/in/jodyneran +https://www.linkedin.com/in/johanna-scheetz-aa3609146 +https://www.linkedin.com/in/johngauntt +https://www.linkedin.com/in/joseline-kavita-498aa520 +https://www.linkedin.com/in/joseph-ford-bb060899 +https://www.linkedin.com/in/katina-nance-4a5614170 +https://www.linkedin.com/in/katrina-byrd-3467ba19 +https://www.linkedin.com/in/kenneth-barton-41a187ba +https://www.linkedin.com/in/kimberlybirch +https://www.linkedin.com/in/komu-woverine-5058659a%3Ftrk%3Dpeople_directory +https://www.linkedin.com/in/lawayne-foster-24b372b +https://www.linkedin.com/in/lingjinsupermicro +https://www.linkedin.com/in/lisa-garlock-6994677b +https://www.linkedin.com/in/lisa-roznick-83279744%3Ftrk%3Dpub-pbmap +https://www.linkedin.com/in/loaded-dice-aa6a9895 +https://www.linkedin.com/in/loiq-saidov-39620a96 +https://www.linkedin.com/in/lori-gordon-landers-a273348b +https://www.linkedin.com/in/louann-brockett-8b471595 +https://www.linkedin.com/in/lynne-robinson-964277a7 +https://www.linkedin.com/in/manuel-philippe-ba2235153 +https://www.linkedin.com/in/marcelo-sauco-14015278 +https://www.linkedin.com/in/marsha-huckaby-00a86864 +https://www.linkedin.com/in/marwa-hussein-9113b623 +https://www.linkedin.com/in/maxtil-janas-9a5308a7 +https://www.linkedin.com/in/mcedward-laguerre-51843554 +https://www.linkedin.com/in/melanie-burke-letsdecorate +https://www.linkedin.com/in/melissa-spano-96487712 +https://www.linkedin.com/in/melissa-ward-50589579 +https://www.linkedin.com/in/mendel-gutnick-a3aa1542 +https://www.linkedin.com/in/mg-nyi-nyi-2ab224150 +https://www.linkedin.com/in/michael-mater-48762472 +https://www.linkedin.com/in/michele-mcluen-8378a070 +https://www.linkedin.com/in/michelletokunaga +https://www.linkedin.com/in/mikayla-patterson-691060128 +https://www.linkedin.com/in/mike-smith-21698582 +https://www.linkedin.com/in/mimi-eskenazi-a73b5156 +https://www.linkedin.com/in/missypoptart%3Ftrk%3Dpublic_profile_browsemap_mini-profile_title +https://www.linkedin.com/in/mochahontas-gaines-b26a1273 +https://www.linkedin.com/in/mohammad-ayaz-b152bb95 +https://www.linkedin.com/in/molly-molly-miskesutton-facebook-com-66375b84 +https://www.linkedin.com/in/monique-myers-54695210 +https://www.linkedin.com/in/nancybeardsleyart +https://www.linkedin.com/in/nate-marsh-77294790 +https://www.linkedin.com/in/nawras-albader-29245799 +https://www.linkedin.com/in/neba-martin-32152378 +https://www.linkedin.com/in/nilo-demarco-866bb069 +https://www.linkedin.com/in/ooh-raa-82687114 +https://www.linkedin.com/in/osmar-nicolas-rivero-13807452 +https://www.linkedin.com/in/patbogusz +https://www.linkedin.com/in/patric-ellis-194817123 +https://www.linkedin.com/in/patricia-cruz-95a36b112 +https://www.linkedin.com/in/paul-morrison-100702112 +https://www.linkedin.com/in/peggy-hill-4548aa134 +https://www.linkedin.com/in/peo-sium-24311a18a +https://www.linkedin.com/in/phillip-almaraz-2a478262 +https://www.linkedin.com/in/pierre-vikian/ +https://www.linkedin.com/in/rajkumar-tamang-4ab38317a +https://www.linkedin.com/in/rebecca-becks%25E2%2580%259D-devries-a4878310a +https://www.linkedin.com/in/renata-aryanti-a04160a +https://www.linkedin.com/in/renee-sanders-a5993b21 +https://www.linkedin.com/in/revjoey-emanuel-03264b12b +https://www.linkedin.com/in/richardbishopconsulting +https://www.linkedin.com/in/ritu-sharma-2245b63 +https://www.linkedin.com/in/rodneytabares +https://www.linkedin.com/in/rosa-rose-lamb-34099821 +https://www.linkedin.com/in/ross-burton-81957924 +https://www.linkedin.com/in/rossmolly +https://www.linkedin.com/in/ryan-newban-look-a3a32559 +https://www.linkedin.com/in/ryan-newban-look-a3a32559%3Ftrk%3Dpeople_directory +https://www.linkedin.com/in/s-o-s-e-1390959a%3Ftrk%3Dpub-pbmap +https://www.linkedin.com/in/sarah-salami-9818b597 +https://www.linkedin.com/in/sarah-wookey-265ba935 +https://www.linkedin.com/in/sayar-chit-683060184 +https://www.linkedin.com/in/seasonsofpain +https://www.linkedin.com/in/sherrie-gould-049252ba +https://www.linkedin.com/in/sherry-carrillo-guzman-01242594 +https://www.linkedin.com/in/sigisbert-mischler-2068b349 +https://www.linkedin.com/in/skeithpayne +https://www.linkedin.com/in/sly-scott-81005826 +https://www.linkedin.com/in/sofia-jimenez-949353149 +https://www.linkedin.com/in/sovannak-sonai-50296699 +https://www.linkedin.com/in/srinivas-gadde-a55b07112 +https://www.linkedin.com/in/subodhiyengar +https://www.linkedin.com/in/tanner-blaske-3a826340 +https://www.linkedin.com/in/tara-watson-8019b3a +https://www.linkedin.com/in/tassos-nastos-0736b575 +https://www.linkedin.com/in/tatiana-resetnikov-95684a7 +https://www.linkedin.com/in/thomas-vazquez-99560b11%3Ftrk%3Dpublic_profile_browsemap_mini-profile_title +https://www.linkedin.com/in/timbourgeois +https://www.linkedin.com/in/tony-sarnowski-373756a +https://www.linkedin.com/in/travis-zar-680236ab +https://www.linkedin.com/in/umam-pw-bab39561 +https://www.linkedin.com/in/vanessa-blessing-beier-23a47596 +https://www.linkedin.com/in/vickie-hall-24b3b8186 +https://www.linkedin.com/in/vicky-hetudubuc-971623133 +https://www.linkedin.com/in/victor-scott-9a967343 +https://www.linkedin.com/in/walid-abdulkarim-39508a88 +https://www.linkedin.com/in/williams63 +https://www.linkedin.com/in/wisal-khan-a7967b71 +https://www.linkedin.com/in/xelil-veh%25C3%25AAl-20233892 +https://www.linkedin.com/in/yonsoo-kwon-81624061 +https://www.linkedin.com/in/yuankai +https://www.linkedin.com/in/zach-mcantish-27631945 +https://www.linkedin.com/in/zayyarphyolin-kyawthuaung-441b1917b + +[*] No IPs found. + +[*] No emails found. + +[*] No hosts found. + + diff --git a/tests/discovery/test_linkedin_links.py b/tests/discovery/test_linkedin_links.py index 9ff04f67..bd5f5555 100644 --- a/tests/discovery/test_linkedin_links.py +++ b/tests/discovery/test_linkedin_links.py @@ -2,6 +2,7 @@ # coding=utf-8 from theHarvester.discovery import linkedinsearch import pytest +import re class TestGetLinks(object): @@ -12,5 +13,16 @@ class TestGetLinks(object): links = search.get_links() assert list(links) + def test_links_linkedin(self): + f = open("test_linkedin_links.txt").read() + reg_links = re.compile(r"url=https:\/\/www\.linkedin.com(.*?)&") + temp = reg_links.findall(f) + resul = [] + for x in temp: + y = x.replace("url=", "") + resul.append("https://www.linkedin.com" + y) + assert set(resul) + + if __name__ == '__main__': pytest.main() diff --git a/tests/discovery/test_linkedin_links.txt b/tests/discovery/test_linkedin_links.txt new file mode 100644 index 00000000..b8804830 --- /dev/null +++ b/tests/discovery/test_linkedin_links.txt @@ -0,0 +1,5 @@ +LinkedIn
https://www.linkedin.com/in/gm-tuhin-ialam-546526b8
Albany, New York Area - Facebook Advertising
Gm Tuhin.ialam. facebook.com at Facebook Advertising. Albany, New York Area.
+Marketing and Advertising. Facebook Advertising. 0 connections ...

NIKUL www.facebook.com/nikulact - Modeling - Self Modeling ...

https://in.linkedin.com/in/nikulact
Ahmedabad Area, India - Self Modeling
View NIKUL www.facebook.com/nikulact's profile on LinkedIn, the world's largest
+professional community. NIKUL has 1 job listed on their profile. See the ...

Victor Scott - Metal Band facebook.com/alchemyoftime - Alchemy of ...

https://www.linkedin.com/in/victor-scott-9a967343
Albany, New York Area - Alchemy of Time
Victor Scott. Metal Band facebook.com/alchemyoftime at Alchemy of Time. Albany
+, New York Area. Music. Alchemy of Time. 1 connection ...

elkhorbat lkhorbat - http://www.facebook.com/pages/elkhorbat ...

https://www.linkedin.com/in/elkhorbat-lkhorbat-6028b33a
United States - http://www.facebook.com/pages/elkhorbat/302997479939
View elkhorbat lkhorbat's profile on LinkedIn, the world's largest professional
+community. elkhorbat has 1 job listed on their profile. See the complete profile on
diff --git a/theHarvester/discovery/linkedinsearch.py b/theHarvester/discovery/linkedinsearch.py index 22a58699..0293218d 100644 --- a/theHarvester/discovery/linkedinsearch.py +++ b/theHarvester/discovery/linkedinsearch.py @@ -35,6 +35,7 @@ class SearchLinkedin: return rawres.people_linkedin() def get_links(self): + print(self.totalresults) links = myparser.Parser(self.totalresults, self.word) return links.links_linkedin() From 0bdf2a182a792e388133d57331b5eafb498deed9 Mon Sep 17 00:00:00 2001 From: csparks Date: Sun, 8 Sep 2019 00:59:58 +0000 Subject: [PATCH 08/29] reverted debugging code --- tests/discovery/test_linkedin_links.py | 5 ++++- theHarvester/discovery/linkedinsearch.py | 1 - 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/discovery/test_linkedin_links.py b/tests/discovery/test_linkedin_links.py index bd5f5555..fea9eb12 100644 --- a/tests/discovery/test_linkedin_links.py +++ b/tests/discovery/test_linkedin_links.py @@ -2,9 +2,11 @@ # coding=utf-8 from theHarvester.discovery import linkedinsearch import pytest +import os import re + class TestGetLinks(object): def test_get_links(self): @@ -14,7 +16,8 @@ class TestGetLinks(object): assert list(links) def test_links_linkedin(self): - f = open("test_linkedin_links.txt").read() + dir_path = os.path.dirname(os.path.realpath(__file__)) + f = open(dir_path + "/test_linkedin_links.txt").read() reg_links = re.compile(r"url=https:\/\/www\.linkedin.com(.*?)&") temp = reg_links.findall(f) resul = [] diff --git a/theHarvester/discovery/linkedinsearch.py b/theHarvester/discovery/linkedinsearch.py index 0293218d..22a58699 100644 --- a/theHarvester/discovery/linkedinsearch.py +++ b/theHarvester/discovery/linkedinsearch.py @@ -35,7 +35,6 @@ class SearchLinkedin: return rawres.people_linkedin() def get_links(self): - print(self.totalresults) links = myparser.Parser(self.totalresults, self.word) return links.links_linkedin() From 5fe745537fdd2022cda8c5def3bbfeeb5d53587f Mon Sep 17 00:00:00 2001 From: csparks Date: Sun, 8 Sep 2019 01:04:05 +0000 Subject: [PATCH 09/29] changed variable names in tests/test_linkedin_links.py --- tests/discovery/test_linkedin_links.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/discovery/test_linkedin_links.py b/tests/discovery/test_linkedin_links.py index fea9eb12..3d35d295 100644 --- a/tests/discovery/test_linkedin_links.py +++ b/tests/discovery/test_linkedin_links.py @@ -17,12 +17,12 @@ class TestGetLinks(object): def test_links_linkedin(self): dir_path = os.path.dirname(os.path.realpath(__file__)) - f = open(dir_path + "/test_linkedin_links.txt").read() + mock_response = open(dir_path + "/test_linkedin_links.txt").read() reg_links = re.compile(r"url=https:\/\/www\.linkedin.com(.*?)&") - temp = reg_links.findall(f) + temp = reg_links.findall(mock_response) resul = [] - for x in temp: - y = x.replace("url=", "") + for regex_item in temp: + stripped_url = regex_item.replace("url=", "") resul.append("https://www.linkedin.com" + y) assert set(resul) From 0004e9797d502146a53964ec571146425b0912b0 Mon Sep 17 00:00:00 2001 From: Jay Townsend Date: Sun, 8 Sep 2019 02:04:38 +0100 Subject: [PATCH 10/29] More github CI updates --- .github/workflows/theHarvester.yml | 34 +++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/.github/workflows/theHarvester.yml b/.github/workflows/theHarvester.yml index 9ba64e71..eb29e14f 100644 --- a/.github/workflows/theHarvester.yml +++ b/.github/workflows/theHarvester.yml @@ -26,24 +26,56 @@ jobs: - name: Install dependencies run: | pip install -r requirements.txt - - name: Run theHarvester + - name: Run theHarvester module baidu run: | python theHarvester.py -d metasploit.com -b baidu + - name: Run theHarvester module bing + run: | python theHarvester.py -d metasploit.com -b bing + - name: Run theHarvester module censys + run: | python theHarvester.py -d metasploit.com -b censys + - name: Run theHarvester module crtsh + run: | python theHarvester.py -d metasploit.com -b crtsh + - name: Run theHarvester module dnsdumpster + run: | python theHarvester.py -d metasploit.com -b dnsdumpster + - name: Run theHarvester module dogplie + run: | python theHarvester.py -d metasploit.com -b dogpile + - name: Run theHarvester module duckduckgo + run: | python theHarvester.py -d metasploit.com -b duckduckgo + - name: Run theHarvester module exalead + run: | python theHarvester.py -d metasploit.com -b exalead + - name: Run theHarvester module google + run: | python theHarvester.py -d metasploit.com -b google + - name: Run theHarvester module linkedin + run: | python theHarvester.py -d metasploit.com -b linkedin + - name: Run theHarvester module linkedin_links + run: | python theHarvester.py -d metasploit.com -b linkedin_links + - name: Run theHarvester module netcraft + run: | python theHarvester.py -d metasploit.com -b netcraft + - name: Run theHarvester module threatcrowd + run: | python theHarvester.py -d metasploit.com -b threatcrowd + - name: Run theHarvester module trello + run: | python theHarvester.py -d metasploit.com -b trello + - name: Run theHarvester module twitter + run: | python theHarvester.py -d metasploit.com -b twitter + - name: Run theHarvester module virustotal + run: | python theHarvester.py -d metasploit.com -b virustotal + - name: Run theHarvester module yahoo + run: | python theHarvester.py -d metasploit.com -b yahoo - name: Lint with flake8 run: | From 051098e92c2b35d1d89c37c597dd12cb34c619dd Mon Sep 17 00:00:00 2001 From: csparks Date: Sun, 8 Sep 2019 01:05:14 +0000 Subject: [PATCH 11/29] removed garbage file --- output.txt | 864 ----------------------------------------------------- 1 file changed, 864 deletions(-) delete mode 100644 output.txt diff --git a/output.txt b/output.txt deleted file mode 100644 index a2deedba..00000000 --- a/output.txt +++ /dev/null @@ -1,864 +0,0 @@ - -******************************************************************* -* _ _ _ * -* | |_| |__ ___ /\ /\__ _ _ ____ _____ ___| |_ ___ _ __ * -* | __| _ \ / _ \ / /_/ / _` | '__\ \ / / _ \/ __| __/ _ \ '__| * -* | |_| | | | __/ / __ / (_| | | \ V / __/\__ \ || __/ | * -* \__|_| |_|\___| \/ /_/ \__,_|_| \_/ \___||___/\__\___|_| * -* * -* theHarvester 3.1.0.dev2 * -* Coded by Christian Martorella * -* Edge-Security Research * -* cmartorella@edge-security.com * -* * -******************************************************************* - -  -[*] Target: facebook.com -  -[*] Searching Linkedin.  - Searching 100 results. - Searching 200 results. - Searching 300 results. - Searching 400 results. - Searching 500 results. -site:linkedin.com/in facebook.com - Google Search

 
About 32,200,000 results
site:linkedin.com/in facebook.com - Google Search

Accessibility Links

Skip to main contentAccessibility help
Accessibility feedback
Page 2 of about 32,200,000 results (0.41 seconds) 

Footer Links

site:linkedin.com/in facebook.com - Google Search

Accessibility Links

Skip to main contentAccessibility help
Accessibility feedback
Page 3 of about 32,200,000 results (0.39 seconds) 

Footer Links

site:linkedin.com/in facebook.com - Google Search

 
Page 4 of about 331 results
site:linkedin.com/in facebook.com - Google Search

 

Your search - site:linkedin.com/in facebook.com - did not match any documents.

Suggestions:

  • Make sure all words are spelled correctly.
  • Try different keywords.
  • Try more general keywords.
  • Try fewer keywords.

- -[*] Links found: 191 ---------------------- -https://www.linkedin.com/in/abdolf-hitcoln-9442904a -https://www.linkedin.com/in/abhinav-jain-88042b7 -https://www.linkedin.com/in/adobe-echosigndigita-trice-viola-43904a58 -https://www.linkedin.com/in/alyssa-morahan-916132a9 -https://www.linkedin.com/in/alyssa-ramsey-37939a3b -https://www.linkedin.com/in/amanda-squires-gil-2064b168 -https://www.linkedin.com/in/amexmall -https://www.linkedin.com/in/amit-jindal-7bb7514 -https://www.linkedin.com/in/ananddass -https://www.linkedin.com/in/andy-ponce-827939aa -https://www.linkedin.com/in/antanas-prismantas-2b6b6966 -https://www.linkedin.com/in/anthony-ortega-19921a111 -https://www.linkedin.com/in/antonio-lucio-72b6bb13 -https://www.linkedin.com/in/arthurgerigk -https://www.linkedin.com/in/ashley-j-0a35b0113 -https://www.linkedin.com/in/austin-silva-52aa2b9 -https://www.linkedin.com/in/becca-nation-33685476 -https://www.linkedin.com/in/bella-zarate-324b313b -https://www.linkedin.com/in/benigno-lopez-11690970 -https://www.linkedin.com/in/bentewright -https://www.linkedin.com/in/billvick -https://www.linkedin.com/in/bobscelestin -https://www.linkedin.com/in/bookswagbag -https://www.linkedin.com/in/bracelets-knotalot-55217975 -https://www.linkedin.com/in/bradley-osburn-84005443 -https://www.linkedin.com/in/brenda-phillips-johnson-6b0a62100 -https://www.linkedin.com/in/brionn-mitchell-8b14895a -https://www.linkedin.com/in/btw-pcs-826986115%3Ftrk%3Dpub-pbmap -https://www.linkedin.com/in/bymariandy -https://www.linkedin.com/in/cademetz -https://www.linkedin.com/in/candie-parrott-8b81b934 -https://www.linkedin.com/in/carleton-johnson-74024239 -https://www.linkedin.com/in/casey-ferry-81035148 -https://www.linkedin.com/in/catharsus-metal-98812140 -https://www.linkedin.com/in/chelsea-hensley-226a30172 -https://www.linkedin.com/in/cherry-fu-10637178 -https://www.linkedin.com/in/cherry-fu-152a8a31 -https://www.linkedin.com/in/chris-clarke-b02b9950 -https://www.linkedin.com/in/christina-lavalais-925a883a -https://www.linkedin.com/in/christopher-heine-85129760 -https://www.linkedin.com/in/coryllewellyn -https://www.linkedin.com/in/dan-witkoske-39350285 -https://www.linkedin.com/in/daniel-portillo-56b374162 -https://www.linkedin.com/in/dat888 -https://www.linkedin.com/in/datavortex -https://www.linkedin.com/in/david-dopfel-82916385 -https://www.linkedin.com/in/david-l-40379114a -https://www.linkedin.com/in/daviddylanthomas1 -https://www.linkedin.com/in/deana-wilson-kimbler-691b1166 -https://www.linkedin.com/in/deborahshane -https://www.linkedin.com/in/deepinsand -https://www.linkedin.com/in/dianne-boucaud-2628a7115 -https://www.linkedin.com/in/dog-religion-9b169056 -https://www.linkedin.com/in/domenicorugo -https://www.linkedin.com/in/eaglerock-barbershop-449aaa66 -https://www.linkedin.com/in/elkhorbat-lkhorbat-6028b33a -https://www.linkedin.com/in/ernesto-canope-31611717a -https://www.linkedin.com/in/ethio-funnypics-04b828b7 -https://www.linkedin.com/in/eulogia-rueda-2829ba171 -https://www.linkedin.com/in/fabrizio-gratelli-15008bba -https://www.linkedin.com/in/fiworie-facebook-com-caleb-fabian-57519043 -https://www.linkedin.com/in/frenchantiques4u-3-a2266752 -https://www.linkedin.com/in/gena-doyle-95885524%3Ftrk%3Dpublic_profile_browsemap_mini-profile_title -https://www.linkedin.com/in/gm-tuhin-ialam-546526b8 -https://www.linkedin.com/in/godwell-chan-04042239 -https://www.linkedin.com/in/gordon-goodermote-a2105033 -https://www.linkedin.com/in/granny-gee-1158aa45 -https://www.linkedin.com/in/gregorio-carrasco-leon-7045329a -https://www.linkedin.com/in/gulrukh-ahmed-56493b -https://www.linkedin.com/in/gwen-helmka-177aa830 -https://www.linkedin.com/in/haddy-sanyang-5213836a -https://www.linkedin.com/in/haikuhi-voskanyan-277392b1 -https://www.linkedin.com/in/hamido-bissmar-b1282953 -https://www.linkedin.com/in/hamza-ramada-a57b827b -https://www.linkedin.com/in/hari-ram-0a285b67 -https://www.linkedin.com/in/healthy-exercise-7380a8a0 -https://www.linkedin.com/in/hlrule -https://www.linkedin.com/in/ilovemyfamilyshirtdesign -https://www.linkedin.com/in/ja-porria-cooks-5ab99463 -https://www.linkedin.com/in/jaime-du-vergey-62686782 -https://www.linkedin.com/in/janet-chaney-883850150 -https://www.linkedin.com/in/jasminsmoots -https://www.linkedin.com/in/jaz-kaur-230a42108 -https://www.linkedin.com/in/jennifer-walsh-b47b06b -https://www.linkedin.com/in/jerry-gavaldon-6380a9155 -https://www.linkedin.com/in/jerry-jinks-38849313 -https://www.linkedin.com/in/jining -https://www.linkedin.com/in/jodyneran -https://www.linkedin.com/in/johanna-scheetz-aa3609146 -https://www.linkedin.com/in/johngauntt -https://www.linkedin.com/in/joseline-kavita-498aa520 -https://www.linkedin.com/in/joseph-ford-bb060899 -https://www.linkedin.com/in/katina-nance-4a5614170 -https://www.linkedin.com/in/katrina-byrd-3467ba19 -https://www.linkedin.com/in/kenneth-barton-41a187ba -https://www.linkedin.com/in/kimberlybirch -https://www.linkedin.com/in/komu-woverine-5058659a%3Ftrk%3Dpeople_directory -https://www.linkedin.com/in/lawayne-foster-24b372b -https://www.linkedin.com/in/lingjinsupermicro -https://www.linkedin.com/in/lisa-garlock-6994677b -https://www.linkedin.com/in/lisa-roznick-83279744%3Ftrk%3Dpub-pbmap -https://www.linkedin.com/in/loaded-dice-aa6a9895 -https://www.linkedin.com/in/loiq-saidov-39620a96 -https://www.linkedin.com/in/lori-gordon-landers-a273348b -https://www.linkedin.com/in/louann-brockett-8b471595 -https://www.linkedin.com/in/lynne-robinson-964277a7 -https://www.linkedin.com/in/manuel-philippe-ba2235153 -https://www.linkedin.com/in/marcelo-sauco-14015278 -https://www.linkedin.com/in/marsha-huckaby-00a86864 -https://www.linkedin.com/in/marwa-hussein-9113b623 -https://www.linkedin.com/in/maxtil-janas-9a5308a7 -https://www.linkedin.com/in/mcedward-laguerre-51843554 -https://www.linkedin.com/in/melanie-burke-letsdecorate -https://www.linkedin.com/in/melissa-spano-96487712 -https://www.linkedin.com/in/melissa-ward-50589579 -https://www.linkedin.com/in/mendel-gutnick-a3aa1542 -https://www.linkedin.com/in/mg-nyi-nyi-2ab224150 -https://www.linkedin.com/in/michael-mater-48762472 -https://www.linkedin.com/in/michele-mcluen-8378a070 -https://www.linkedin.com/in/michelletokunaga -https://www.linkedin.com/in/mikayla-patterson-691060128 -https://www.linkedin.com/in/mike-smith-21698582 -https://www.linkedin.com/in/mimi-eskenazi-a73b5156 -https://www.linkedin.com/in/missypoptart%3Ftrk%3Dpublic_profile_browsemap_mini-profile_title -https://www.linkedin.com/in/mochahontas-gaines-b26a1273 -https://www.linkedin.com/in/mohammad-ayaz-b152bb95 -https://www.linkedin.com/in/molly-molly-miskesutton-facebook-com-66375b84 -https://www.linkedin.com/in/monique-myers-54695210 -https://www.linkedin.com/in/nancybeardsleyart -https://www.linkedin.com/in/nate-marsh-77294790 -https://www.linkedin.com/in/nawras-albader-29245799 -https://www.linkedin.com/in/neba-martin-32152378 -https://www.linkedin.com/in/nilo-demarco-866bb069 -https://www.linkedin.com/in/ooh-raa-82687114 -https://www.linkedin.com/in/osmar-nicolas-rivero-13807452 -https://www.linkedin.com/in/patbogusz -https://www.linkedin.com/in/patric-ellis-194817123 -https://www.linkedin.com/in/patricia-cruz-95a36b112 -https://www.linkedin.com/in/paul-morrison-100702112 -https://www.linkedin.com/in/peggy-hill-4548aa134 -https://www.linkedin.com/in/peo-sium-24311a18a -https://www.linkedin.com/in/phillip-almaraz-2a478262 -https://www.linkedin.com/in/pierre-vikian/ -https://www.linkedin.com/in/rajkumar-tamang-4ab38317a -https://www.linkedin.com/in/rebecca-becks%25E2%2580%259D-devries-a4878310a -https://www.linkedin.com/in/renata-aryanti-a04160a -https://www.linkedin.com/in/renee-sanders-a5993b21 -https://www.linkedin.com/in/revjoey-emanuel-03264b12b -https://www.linkedin.com/in/richardbishopconsulting -https://www.linkedin.com/in/ritu-sharma-2245b63 -https://www.linkedin.com/in/rodneytabares -https://www.linkedin.com/in/rosa-rose-lamb-34099821 -https://www.linkedin.com/in/ross-burton-81957924 -https://www.linkedin.com/in/rossmolly -https://www.linkedin.com/in/ryan-newban-look-a3a32559 -https://www.linkedin.com/in/ryan-newban-look-a3a32559%3Ftrk%3Dpeople_directory -https://www.linkedin.com/in/s-o-s-e-1390959a%3Ftrk%3Dpub-pbmap -https://www.linkedin.com/in/sarah-salami-9818b597 -https://www.linkedin.com/in/sarah-wookey-265ba935 -https://www.linkedin.com/in/sayar-chit-683060184 -https://www.linkedin.com/in/seasonsofpain -https://www.linkedin.com/in/sherrie-gould-049252ba -https://www.linkedin.com/in/sherry-carrillo-guzman-01242594 -https://www.linkedin.com/in/sigisbert-mischler-2068b349 -https://www.linkedin.com/in/skeithpayne -https://www.linkedin.com/in/sly-scott-81005826 -https://www.linkedin.com/in/sofia-jimenez-949353149 -https://www.linkedin.com/in/sovannak-sonai-50296699 -https://www.linkedin.com/in/srinivas-gadde-a55b07112 -https://www.linkedin.com/in/subodhiyengar -https://www.linkedin.com/in/tanner-blaske-3a826340 -https://www.linkedin.com/in/tara-watson-8019b3a -https://www.linkedin.com/in/tassos-nastos-0736b575 -https://www.linkedin.com/in/tatiana-resetnikov-95684a7 -https://www.linkedin.com/in/thomas-vazquez-99560b11%3Ftrk%3Dpublic_profile_browsemap_mini-profile_title -https://www.linkedin.com/in/timbourgeois -https://www.linkedin.com/in/tony-sarnowski-373756a -https://www.linkedin.com/in/travis-zar-680236ab -https://www.linkedin.com/in/umam-pw-bab39561 -https://www.linkedin.com/in/vanessa-blessing-beier-23a47596 -https://www.linkedin.com/in/vickie-hall-24b3b8186 -https://www.linkedin.com/in/vicky-hetudubuc-971623133 -https://www.linkedin.com/in/victor-scott-9a967343 -https://www.linkedin.com/in/walid-abdulkarim-39508a88 -https://www.linkedin.com/in/williams63 -https://www.linkedin.com/in/wisal-khan-a7967b71 -https://www.linkedin.com/in/xelil-veh%25C3%25AAl-20233892 -https://www.linkedin.com/in/yonsoo-kwon-81624061 -https://www.linkedin.com/in/yuankai -https://www.linkedin.com/in/zach-mcantish-27631945 -https://www.linkedin.com/in/zayyarphyolin-kyawthuaung-441b1917b - -[*] No IPs found. - -[*] No emails found. - -[*] No hosts found. - - From 2a48c8bf9bce6dbd5d51c3e76d16399070378c19 Mon Sep 17 00:00:00 2001 From: Jay Townsend Date: Sun, 8 Sep 2019 02:13:13 +0100 Subject: [PATCH 12/29] Flake8 fix --- theHarvester/lib/markup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/theHarvester/lib/markup.py b/theHarvester/lib/markup.py index 20f74759..7466ab99 100644 --- a/theHarvester/lib/markup.py +++ b/theHarvester/lib/markup.py @@ -362,7 +362,7 @@ class Page: try: for src in mydict: self.script('', src=src, type='text/javascript') - except: + except Exception: raise TypeError("Script should be given a dictionary of src:type pairs or a list of javascript src's.") From 21a60220f9ad2d1b172cf1daab9bb52f783f6862 Mon Sep 17 00:00:00 2001 From: csparks Date: Sun, 8 Sep 2019 01:20:35 +0000 Subject: [PATCH 13/29] fixed pytest warnings --- tests/discovery/test_linkedin_links.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/discovery/test_linkedin_links.py b/tests/discovery/test_linkedin_links.py index 3d35d295..e1163509 100644 --- a/tests/discovery/test_linkedin_links.py +++ b/tests/discovery/test_linkedin_links.py @@ -13,7 +13,7 @@ class TestGetLinks(object): search = linkedinsearch.SearchLinkedin("facebook.com", '100') search.process() links = search.get_links() - assert list(links) + assert set(links) def test_links_linkedin(self): dir_path = os.path.dirname(os.path.realpath(__file__)) @@ -23,7 +23,7 @@ class TestGetLinks(object): resul = [] for regex_item in temp: stripped_url = regex_item.replace("url=", "") - resul.append("https://www.linkedin.com" + y) + resul.append("https://www.linkedin.com" + stripped_url) assert set(resul) From 703e9e16a75c95e02d02d9e486eca7e666e24138 Mon Sep 17 00:00:00 2001 From: csparks Date: Sun, 8 Sep 2019 01:29:07 +0000 Subject: [PATCH 14/29] closed the file after reading --- tests/discovery/test_linkedin_links.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/discovery/test_linkedin_links.py b/tests/discovery/test_linkedin_links.py index e1163509..5327f992 100644 --- a/tests/discovery/test_linkedin_links.py +++ b/tests/discovery/test_linkedin_links.py @@ -17,9 +17,11 @@ class TestGetLinks(object): def test_links_linkedin(self): dir_path = os.path.dirname(os.path.realpath(__file__)) - mock_response = open(dir_path + "/test_linkedin_links.txt").read() + mock_response = open(dir_path + "/test_linkedin_links.txt") + mock_response_content = mock_response.read() + mock_response.close() reg_links = re.compile(r"url=https:\/\/www\.linkedin.com(.*?)&") - temp = reg_links.findall(mock_response) + temp = reg_links.findall(mock_response_content) resul = [] for regex_item in temp: stripped_url = regex_item.replace("url=", "") From f08f96d171f59b6adae034fd6d1d67f4cbf6294b Mon Sep 17 00:00:00 2001 From: csparks Date: Sun, 8 Sep 2019 01:38:27 +0000 Subject: [PATCH 15/29] pylint and pytest --- tests/discovery/test_linkedin_links.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/discovery/test_linkedin_links.py b/tests/discovery/test_linkedin_links.py index 5327f992..80ea61ec 100644 --- a/tests/discovery/test_linkedin_links.py +++ b/tests/discovery/test_linkedin_links.py @@ -6,14 +6,13 @@ import os import re - class TestGetLinks(object): def test_get_links(self): search = linkedinsearch.SearchLinkedin("facebook.com", '100') search.process() links = search.get_links() - assert set(links) + assert list(links) def test_links_linkedin(self): dir_path = os.path.dirname(os.path.realpath(__file__)) From 69998ace68bb5d897849f248c394558164b290f7 Mon Sep 17 00:00:00 2001 From: csparks Date: Sun, 8 Sep 2019 01:52:31 +0000 Subject: [PATCH 16/29] returned single set for test instead of nested set --- theHarvester/parsers/myparser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/theHarvester/parsers/myparser.py b/theHarvester/parsers/myparser.py index 09c8f825..98b9fa93 100644 --- a/theHarvester/parsers/myparser.py +++ b/theHarvester/parsers/myparser.py @@ -84,7 +84,7 @@ class Parser: for x in self.temp: y = x.replace("url=", "") resul.append("https://www.linkedin.com" + y) - return set(resul) + return resul def people_linkedin(self): reg_people = re.compile(r'">[a-zA-Z0-9._ -]* \| LinkedIn') From 6a032d9c0c018a84af60e66b6f67c259b432e8a4 Mon Sep 17 00:00:00 2001 From: csparks Date: Sun, 8 Sep 2019 02:10:08 +0000 Subject: [PATCH 17/29] asserted the presence of a result --- tests/discovery/test_linkedin_links.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/discovery/test_linkedin_links.py b/tests/discovery/test_linkedin_links.py index 80ea61ec..31c316fd 100644 --- a/tests/discovery/test_linkedin_links.py +++ b/tests/discovery/test_linkedin_links.py @@ -12,7 +12,7 @@ class TestGetLinks(object): search = linkedinsearch.SearchLinkedin("facebook.com", '100') search.process() links = search.get_links() - assert list(links) + assert links def test_links_linkedin(self): dir_path = os.path.dirname(os.path.realpath(__file__)) From 8f614cf879541653f14fe553a0ab12ae908701bf Mon Sep 17 00:00:00 2001 From: csparks Date: Sun, 8 Sep 2019 02:18:54 +0000 Subject: [PATCH 18/29] assert [] --- tests/discovery/test_linkedin_links.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/discovery/test_linkedin_links.py b/tests/discovery/test_linkedin_links.py index 31c316fd..d1591120 100644 --- a/tests/discovery/test_linkedin_links.py +++ b/tests/discovery/test_linkedin_links.py @@ -12,7 +12,7 @@ class TestGetLinks(object): search = linkedinsearch.SearchLinkedin("facebook.com", '100') search.process() links = search.get_links() - assert links + assert [] def test_links_linkedin(self): dir_path = os.path.dirname(os.path.realpath(__file__)) From bd5c61a25ad746a04116175e2ebdf848dc33304c Mon Sep 17 00:00:00 2001 From: Jay Townsend Date: Sun, 8 Sep 2019 03:21:33 +0100 Subject: [PATCH 19/29] Add static typing to intelx parser and update gitignore --- .gitignore | 1 + theHarvester/parsers/intelxparser.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 9d272d9b..30769947 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ debug_results.txt tests/myparser.py venv .mypy_cache +.pytest_cache diff --git a/theHarvester/parsers/intelxparser.py b/theHarvester/parsers/intelxparser.py index 8c12b969..91c34aa7 100644 --- a/theHarvester/parsers/intelxparser.py +++ b/theHarvester/parsers/intelxparser.py @@ -4,7 +4,7 @@ class Parser: self.emails = set() self.hosts = set() - def parse_dictionaries(self, results): + def parse_dictionaries(self, results: dict) -> tuple: """ Parse method to parse json results :param results: Dictionary containing a list of dictionaries known as selectors From d92afaab637cf3aca8d902176be15f7491da4aab Mon Sep 17 00:00:00 2001 From: csparks Date: Sun, 8 Sep 2019 02:28:35 +0000 Subject: [PATCH 20/29] testing --- tests/discovery/test_linkedin_links.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/tests/discovery/test_linkedin_links.py b/tests/discovery/test_linkedin_links.py index d1591120..f115703c 100644 --- a/tests/discovery/test_linkedin_links.py +++ b/tests/discovery/test_linkedin_links.py @@ -1,6 +1,5 @@ #!/usr/bin/env python3 # coding=utf-8 -from theHarvester.discovery import linkedinsearch import pytest import os import re @@ -8,12 +7,6 @@ import re class TestGetLinks(object): - def test_get_links(self): - search = linkedinsearch.SearchLinkedin("facebook.com", '100') - search.process() - links = search.get_links() - assert [] - def test_links_linkedin(self): dir_path = os.path.dirname(os.path.realpath(__file__)) mock_response = open(dir_path + "/test_linkedin_links.txt") From c5cf08da2466c1e02b4034bb86eebd55bb460c71 Mon Sep 17 00:00:00 2001 From: csparks Date: Sun, 8 Sep 2019 02:54:59 +0000 Subject: [PATCH 21/29] assertion typeof == list --- tests/discovery/test_linkedin_links.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/discovery/test_linkedin_links.py b/tests/discovery/test_linkedin_links.py index f115703c..e9f00e17 100644 --- a/tests/discovery/test_linkedin_links.py +++ b/tests/discovery/test_linkedin_links.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 # coding=utf-8 +from theHarvester.discovery import linkedinsearch import pytest import os import re @@ -7,6 +8,12 @@ import re class TestGetLinks(object): + def test_get_links(self): + search = linkedinsearch.SearchLinkedin("facebook.com", '100') + search.process() + links = search.get_links() + assert type(links) == list + def test_links_linkedin(self): dir_path = os.path.dirname(os.path.realpath(__file__)) mock_response = open(dir_path + "/test_linkedin_links.txt") From f150abfabe61994ed9d79f3ccc2d442433d8e7ad Mon Sep 17 00:00:00 2001 From: csparks Date: Sun, 8 Sep 2019 16:11:59 +0000 Subject: [PATCH 22/29] changed single variable name in myparser.py --- theHarvester/parsers/myparser.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/theHarvester/parsers/myparser.py b/theHarvester/parsers/myparser.py index 98b9fa93..83a843c1 100644 --- a/theHarvester/parsers/myparser.py +++ b/theHarvester/parsers/myparser.py @@ -81,9 +81,9 @@ class Parser: reg_links = re.compile(r"url=https:\/\/www\.linkedin.com(.*?)&") self.temp = reg_links.findall(self.results) resul = [] - for x in self.temp: - y = x.replace("url=", "") - resul.append("https://www.linkedin.com" + y) + for regex in self.temp: + final_url = regex.replace("url=", "") + resul.append("https://www.linkedin.com" + final_url) return resul def people_linkedin(self): From 156eca3c86fcb854bbb3840e7b64061053ac67ea Mon Sep 17 00:00:00 2001 From: csparks Date: Sun, 8 Sep 2019 16:19:16 +0000 Subject: [PATCH 23/29] added filter function to constants --- theHarvester/discovery/constants.py | 24 +++++++++++++++++++++++- theHarvester/discovery/linkedinsearch.py | 2 +- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/theHarvester/discovery/constants.py b/theHarvester/discovery/constants.py index 7549c4c6..69a91936 100644 --- a/theHarvester/discovery/constants.py +++ b/theHarvester/discovery/constants.py @@ -2,7 +2,29 @@ import random googleUA = 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36' - +def splitter(links): + """ + Method that tries to remove duplicates + LinkedinLists pulls a lot of profiles with the same name. + This method triest to remove duplicates from the list. + :param links: list of links to remove duplicates from + :return: unique-ish list + """ + unique_list = [] + name_check = [] + for url in links: + tail = url.split("/")[-1] + if len(tail) == 2 or tail == "zh-cn": + tail = url.split("/")[-2] + name = tail.split("-") + if len(name) > 1: + joined_name = name[0] + name[1] + else: + joined_name = name[0] + if joined_name not in name_check: + unique_list.append(url) + name_check.append(joined_name) + return unique_list def filter(lst): """ diff --git a/theHarvester/discovery/linkedinsearch.py b/theHarvester/discovery/linkedinsearch.py index 22a58699..ef774df3 100644 --- a/theHarvester/discovery/linkedinsearch.py +++ b/theHarvester/discovery/linkedinsearch.py @@ -36,7 +36,7 @@ class SearchLinkedin: def get_links(self): links = myparser.Parser(self.totalresults, self.word) - return links.links_linkedin() + return splitter(links.links_linkedin()) def process(self): while self.counter < self.limit: From d2384336e40e97717f854bb33fc3d04ba6d55723 Mon Sep 17 00:00:00 2001 From: csparks Date: Sun, 8 Sep 2019 16:35:07 +0000 Subject: [PATCH 24/29] added new test for splitter function --- tests/discovery/test_linkedin_links.py | 14 ++++++++++++++ theHarvester/discovery/constants.py | 17 +++++++++-------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/tests/discovery/test_linkedin_links.py b/tests/discovery/test_linkedin_links.py index e9f00e17..9a469891 100644 --- a/tests/discovery/test_linkedin_links.py +++ b/tests/discovery/test_linkedin_links.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 # coding=utf-8 from theHarvester.discovery import linkedinsearch +from theHarvester.discovery.constants import splitter import pytest import os import re @@ -8,6 +9,19 @@ import re class TestGetLinks(object): + def test_splitter(self): + results = [ + 'https://www.linkedin.com/in/don-draper-b1045618', + 'https://www.linkedin.com/in/don-draper-b59210a', + 'https://www.linkedin.com/in/don-draper-b5bb50b3', + 'https://www.linkedin.com/in/don-draper-b83ba26', + 'https://www.linkedin.com/in/don-draper-b854a51' + ] + filtered_results = splitter(results) + assert len(filtered_results) == 1 + + + def test_get_links(self): search = linkedinsearch.SearchLinkedin("facebook.com", '100') search.process() diff --git a/theHarvester/discovery/constants.py b/theHarvester/discovery/constants.py index 69a91936..a849809b 100644 --- a/theHarvester/discovery/constants.py +++ b/theHarvester/discovery/constants.py @@ -2,6 +2,7 @@ import random googleUA = 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36' + def splitter(links): """ Method that tries to remove duplicates @@ -16,14 +17,14 @@ def splitter(links): tail = url.split("/")[-1] if len(tail) == 2 or tail == "zh-cn": tail = url.split("/")[-2] - name = tail.split("-") - if len(name) > 1: - joined_name = name[0] + name[1] - else: - joined_name = name[0] - if joined_name not in name_check: - unique_list.append(url) - name_check.append(joined_name) + name = tail.split("-") + if len(name) > 1: + joined_name = name[0] + name[1] + else: + joined_name = name[0] + if joined_name not in name_check: + unique_list.append(url) + name_check.append(joined_name) return unique_list def filter(lst): From e2035650a2032787d95526cba0af33e56d009be5 Mon Sep 17 00:00:00 2001 From: csparks Date: Sun, 8 Sep 2019 16:43:20 +0000 Subject: [PATCH 25/29] fixed overindent error from pytest --- tests/discovery/test_linkedin_links.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/tests/discovery/test_linkedin_links.py b/tests/discovery/test_linkedin_links.py index 9a469891..b0c710c0 100644 --- a/tests/discovery/test_linkedin_links.py +++ b/tests/discovery/test_linkedin_links.py @@ -11,17 +11,15 @@ class TestGetLinks(object): def test_splitter(self): results = [ - 'https://www.linkedin.com/in/don-draper-b1045618', - 'https://www.linkedin.com/in/don-draper-b59210a', - 'https://www.linkedin.com/in/don-draper-b5bb50b3', - 'https://www.linkedin.com/in/don-draper-b83ba26', - 'https://www.linkedin.com/in/don-draper-b854a51' - ] + 'https://www.linkedin.com/in/don-draper-b1045618', + 'https://www.linkedin.com/in/don-draper-b59210a', + 'https://www.linkedin.com/in/don-draper-b5bb50b3', + 'https://www.linkedin.com/in/don-draper-b83ba26', + 'https://www.linkedin.com/in/don-draper-b854a51' + ] filtered_results = splitter(results) assert len(filtered_results) == 1 - - def test_get_links(self): search = linkedinsearch.SearchLinkedin("facebook.com", '100') search.process() From bf769400797ba2e8380d9fe670d085894b333306 Mon Sep 17 00:00:00 2001 From: csparks Date: Sun, 8 Sep 2019 17:02:34 +0000 Subject: [PATCH 26/29] flake8 for contants.py --- theHarvester/discovery/constants.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/theHarvester/discovery/constants.py b/theHarvester/discovery/constants.py index a849809b..0fbe8c91 100644 --- a/theHarvester/discovery/constants.py +++ b/theHarvester/discovery/constants.py @@ -3,6 +3,7 @@ import random googleUA = 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36' + def splitter(links): """ Method that tries to remove duplicates @@ -27,6 +28,7 @@ def splitter(links): name_check.append(joined_name) return unique_list + def filter(lst): """ Method that filters list From e413a47c974a466fc27181abf4b8be1b89e48bb5 Mon Sep 17 00:00:00 2001 From: Christian Martorella Date: Tue, 10 Sep 2019 23:17:49 +0200 Subject: [PATCH 27/29] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index c1631fee..8c2ca5df 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,4 @@ ![theHarvester](https://github.com/laramies/theHarvester/blob/master/theHarvester-logo.png) - - [![Build Status](https://travis-ci.com/laramies/theHarvester.svg?branch=master)](https://travis-ci.com/laramies/theHarvester) [![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/laramies/theHarvester.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/laramies/theHarvester/context:python) [![Rawsec's CyberSecurity Inventory](https://inventory.rawsec.ml/img/badges/Rawsec-inventoried-FF5050_flat_without_logo.svg)](https://inventory.rawsec.ml/) From e341f81ef46a50d7ff89c7aab219ec8b9a4319f0 Mon Sep 17 00:00:00 2001 From: Christian Martorella Date: Tue, 10 Sep 2019 23:18:09 +0200 Subject: [PATCH 28/29] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8c2ca5df..46d9006d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ ![theHarvester](https://github.com/laramies/theHarvester/blob/master/theHarvester-logo.png) + [![Build Status](https://travis-ci.com/laramies/theHarvester.svg?branch=master)](https://travis-ci.com/laramies/theHarvester) [![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/laramies/theHarvester.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/laramies/theHarvester/context:python) [![Rawsec's CyberSecurity Inventory](https://inventory.rawsec.ml/img/badges/Rawsec-inventoried-FF5050_flat_without_logo.svg)](https://inventory.rawsec.ml/) From 368be965e595444c7d7e58ecaf54fdbaebcc2425 Mon Sep 17 00:00:00 2001 From: Christian Martorella Date: Tue, 10 Sep 2019 23:21:48 +0200 Subject: [PATCH 29/29] Update README.md spelling fix --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 46d9006d..91941510 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ Active: ------- * DNS brute force: dictionary brute force enumeration * DNS reverse lookup: reverse lookup of IP´s discovered in order to find hostnames -* DNS TDL expansion: TLD dictionary brute force enumeration +* DNS TLD expansion: TLD dictionary brute force enumeration Modules that require an API key: --------------------------------