def detectCountryFromPhone(self, srcPhoneNumber: str) -> str: """Lookup name of country from phone number region code. Args: srcPhoneNumber (str): phone number Returns: str: country name """ if not isinstance(srcPhoneNumber, str): return None try: phoneNumber = phonenumbers.parse(srcPhoneNumber) except Exception: self.debug(f"Skipped invalid phone number: {srcPhoneNumber}") return None try: countryCode = region_code_for_country_code( phoneNumber.country_code) except Exception: self.debug( f"Lookup of region code failed for phone number: {srcPhoneNumber}" ) return None if not countryCode: return None return SpiderFootHelpers.countryNameFromCountryCode( countryCode.upper())
def detectCountryFromIBAN(self, srcIBAN: str) -> str: """Detect name of country from IBAN. Args: srcIBAN (str): IBAN Returns: str: country name """ if not isinstance(srcIBAN, str): return None return SpiderFootHelpers.countryNameFromCountryCode(srcIBAN[0:2])
def handleEvent(self, event): eventName = event.eventType srcModuleName = event.module eventData = event.data if self.errorState: return if self.opts['api_key'] == "": self.error("You enabled sfp_numverify but did not set an API key!") self.errorState = True return if eventData in self.results: return self.results[eventData] = True self.debug(f"Received event, {eventName}, from {srcModuleName}") data = self.query(eventData) if data is None: self.debug("No phone information found for " + eventData) return evt = SpiderFootEvent("RAW_RIR_DATA", str(data), self.__name__, event) self.notifyListeners(evt) if data.get('country_code'): country = SpiderFootHelpers.countryNameFromCountryCode( data.get('country_code')) location = ', '.join( [_f for _f in [data.get('location'), country] if _f]) evt = SpiderFootEvent("GEOINFO", location, self.__name__, event) self.notifyListeners(evt) else: self.debug("No location information found for " + eventData) if data.get('carrier'): evt = SpiderFootEvent("PROVIDER_TELCO", data.get('carrier'), self.__name__, event) self.notifyListeners(evt) else: self.debug("No carrier information found for " + eventData)
def test_countryNameFromCountryCode_argument_countryCode_should_return_country_as_a_string( self): country_name = SpiderFootHelpers.countryNameFromCountryCode('US') self.assertIsInstance(country_name, str) self.assertEqual(country_name, "United States")
def handleEvent(self, event): eventName = event.eventType srcModuleName = event.module eventData = event.data if self.errorState: return if eventData in self.results: return if self.opts['api_key'] == "": self.error("You enabled sfp_jsonwhoiscom but did not set an API key!") self.errorState = True return self.results[eventData] = True self.debug(f"Received event, {eventName}, from {srcModuleName}") res = self.queryDomain(eventData) if res is None: self.debug(f"No information found for domain {eventData}") return evt = SpiderFootEvent('RAW_RIR_DATA', str(res), self.__name__, event) self.notifyListeners(evt) dns_providers = list() nameservers = res.get('nameservers') if nameservers: for nameserver in nameservers: if nameserver: nameserver_name = nameserver.get('name') if nameserver_name: dns_providers.append(nameserver_name) contacts = list() registrant_contacts = res.get('registrant_contacts') if registrant_contacts: for contact in registrant_contacts: contacts.append(contact) admin_contacts = res.get('admin_contacts') if admin_contacts: for contact in admin_contacts: contacts.append(contact) technical_contacts = res.get('technical_contacts') if technical_contacts: for contact in technical_contacts: contacts.append(contact) emails = list() names = list() phones = list() locations = list() for contact in contacts: email = contact.get('email') if email: if SpiderFootHelpers.validEmail(email): emails.append(email) name = contact.get("name") if name: names.append(name) phone = contact.get('phone') if phone: phone = phone.replace(" ", "").replace("-", "").replace("(", "").replace(")", "").replace(".", "") phones.append(phone) country = SpiderFootHelpers.countryNameFromCountryCode(contact.get('country_code')) location = ', '.join([_f for _f in [contact.get('address'), contact.get('city'), contact.get('state'), contact.get('zip'), country] if _f]) if location: locations.append(location) for email in set(emails): mail_domain = email.lower().split('@')[1] if self.getTarget().matches(mail_domain, includeChildren=True): if email.split("@")[0] in self.opts['_genericusers'].split(","): evttype = "EMAILADDR_GENERIC" else: evttype = "EMAILADR" evt = SpiderFootEvent(evttype, email, self.__name__, event) self.notifyListeners(evt) else: evt = SpiderFootEvent("AFFILIATE_EMAILADDR", email, self.__name__, event) self.notifyListeners(evt) if eventName in ["DOMAIN_NAME"]: raw = res.get('raw') if raw: evt = SpiderFootEvent("DOMAIN_WHOIS", raw, self.__name__, event) self.notifyListeners(evt) registrar = res.get("registrar") if registrar: registrar_name = registrar.get("name") if registrar_name: evt = SpiderFootEvent("DOMAIN_REGISTRAR", registrar_name, self.__name__, event) self.notifyListeners(evt) for dns_provider in set(dns_providers): evt = SpiderFootEvent("PROVIDER_DNS", dns_provider, self.__name__, event) self.notifyListeners(evt) for name in set(names): evt = SpiderFootEvent("RAW_RIR_DATA", f"Possible full name {name}", self.__name__, event) self.notifyListeners(evt) for phone in set(phones): evt = SpiderFootEvent("PHONE_NUMBER", phone, self.__name__, event) self.notifyListeners(evt) for location in set(locations): evt = SpiderFootEvent("PHYSICAL_ADDRESS", location, self.__name__, event) self.notifyListeners(evt) if eventName in ["AFFILIATE_DOMAIN_NAME"]: raw = res.get('raw') if raw: evt = SpiderFootEvent("AFFILIATE_DOMAIN_WHOIS", raw, self.__name__, event) self.notifyListeners(evt) available = res.get('available?') if available: evt = SpiderFootEvent("AFFILIATE_DOMAIN_UNREGISTERED", eventData, self.__name__, event) self.notifyListeners(evt)