From 6a4301d7fcbf8b0653a1ffc5300598c4dfdd4a42 Mon Sep 17 00:00:00 2001 From: joon Date: Sun, 2 Jun 2024 11:24:21 -0700 Subject: [PATCH 1/3] Decouple geoip and ASN lookups from Shodan results --- pyproject.toml | 2 +- wtfis/clients/base.py | 4 +- wtfis/clients/ipwhois.py | 9 +-- wtfis/clients/types.py | 22 ++++++++ wtfis/handlers/base.py | 31 ++++++---- wtfis/handlers/domain.py | 35 +++++++----- wtfis/handlers/ip.py | 20 ++++--- wtfis/main.py | 28 ++++++---- wtfis/models/{common.py => base.py} | 33 ++++++++++- wtfis/models/ip2whois.py | 2 +- wtfis/models/ipwhois.py | 48 ++++++---------- wtfis/models/passivetotal.py | 2 +- wtfis/models/shodan.py | 8 ++- wtfis/{ => models}/types.py | 22 ++++++-- wtfis/models/virustotal.py | 2 +- wtfis/ui/base.py | 87 ++++++++++++++++------------- wtfis/ui/view.py | 73 ++++++++++++------------ 17 files changed, 259 insertions(+), 169 deletions(-) create mode 100644 wtfis/clients/types.py rename wtfis/models/{common.py => base.py} (56%) rename wtfis/{ => models}/types.py (55%) diff --git a/pyproject.toml b/pyproject.toml index 7cf7ae1..574f5ca 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,7 +29,7 @@ classifiers = [ "Topic :: Security", ] dependencies = [ - "pydantic~=2.7.0", + "pydantic~=2.7.2", "python-dotenv~=1.0.1", "requests~=2.31.0", "rich~=13.7.1", diff --git a/wtfis/clients/base.py b/wtfis/clients/base.py index b80e127..640a97a 100644 --- a/wtfis/clients/base.py +++ b/wtfis/clients/base.py @@ -4,8 +4,8 @@ from typing import Optional, Union -from wtfis.models.common import WhoisBase -from wtfis.types import DomainEnrichmentType, IpEnrichmentType +from wtfis.models.base import WhoisBase +from wtfis.models.types import DomainEnrichmentType, IpEnrichmentType class AbstractAttribute: diff --git a/wtfis/clients/ipwhois.py b/wtfis/clients/ipwhois.py index 26bfc6b..7a13115 100644 --- a/wtfis/clients/ipwhois.py +++ b/wtfis/clients/ipwhois.py @@ -1,5 +1,6 @@ from wtfis.clients.base import BaseIpEnricherClient, BaseRequestsClient -from wtfis.models.ipwhois import IpWhois, IpWhoisMap +from wtfis.models.ipwhois import IpWhoisMap +from wtfis.models.ipwhois import IpWhois from typing import Optional @@ -19,9 +20,9 @@ def _get_ipwhois(self, ip: str) -> Optional[IpWhois]: return IpWhois.model_validate(result) if result.get("success") is True else None def enrich_ips(self, *ips: str) -> IpWhoisMap: - ipwhois_map = {} + map_ = {} for ip in ips: ipwhois = self._get_ipwhois(ip) if ipwhois: - ipwhois_map[ipwhois.ip] = ipwhois - return IpWhoisMap.model_validate(ipwhois_map) + map_[ipwhois.ip] = ipwhois + return IpWhoisMap.model_validate(map_) diff --git a/wtfis/clients/types.py b/wtfis/clients/types.py new file mode 100644 index 0000000..9a72a3d --- /dev/null +++ b/wtfis/clients/types.py @@ -0,0 +1,22 @@ +""" +Type aliases +""" +from typing import Union + +from wtfis.clients.ip2whois import Ip2WhoisClient +from wtfis.clients.ipwhois import IpWhoisClient +from wtfis.clients.passivetotal import PTClient +from wtfis.clients.virustotal import VTClient + + +# IP geolocation and ASN client types +IpGeoAsnClientType = Union[ + IpWhoisClient, +] + +# IP whois client types +IpWhoisClientType = Union[ + Ip2WhoisClient, + PTClient, + VTClient, +] diff --git a/wtfis/handlers/base.py b/wtfis/handlers/base.py index c962800..e6c0c39 100644 --- a/wtfis/handlers/base.py +++ b/wtfis/handlers/base.py @@ -15,19 +15,17 @@ from wtfis.clients.abuseipdb import AbuseIpDbClient from wtfis.clients.greynoise import GreynoiseClient -from wtfis.clients.ip2whois import Ip2WhoisClient -from wtfis.clients.ipwhois import IpWhoisClient -from wtfis.clients.passivetotal import PTClient from wtfis.clients.shodan import ShodanClient from wtfis.clients.urlhaus import UrlHausClient from wtfis.clients.virustotal import VTClient from wtfis.models.abuseipdb import AbuseIpDbMap -from wtfis.models.common import WhoisBase +from wtfis.models.base import WhoisBase from wtfis.models.greynoise import GreynoiseIpMap -from wtfis.models.ipwhois import IpWhoisMap from wtfis.models.shodan import ShodanIpMap from wtfis.models.urlhaus import UrlHausMap +from wtfis.models.types import IpGeoAsnMapType from wtfis.models.virustotal import Domain, IpAddress +from wtfis.clients.types import IpGeoAsnClientType, IpWhoisClientType from wtfis.ui.theme import Theme from wtfis.utils import error_and_exit, refang @@ -69,8 +67,9 @@ def __init__( console: Console, progress: Progress, vt_client: VTClient, - ip_enricher_client: Union[IpWhoisClient, ShodanClient], - whois_client: Union[Ip2WhoisClient, PTClient, VTClient], + ip_geoasn_client: IpGeoAsnClientType, + whois_client: IpWhoisClientType, + shodan_client: Optional[ShodanClient], greynoise_client: Optional[GreynoiseClient], abuseipdb_client: Optional[AbuseIpDbClient], urlhaus_client: Optional[UrlHausClient], @@ -82,16 +81,18 @@ def __init__( # Clients self._vt = vt_client - self._enricher = ip_enricher_client + self._geoasn = ip_geoasn_client self._whois = whois_client + self._shodan = shodan_client self._greynoise = greynoise_client self._abuseipdb = abuseipdb_client self._urlhaus = urlhaus_client # Dataset containers self.vt_info: Union[Domain, IpAddress] - self.ip_enrich: Union[IpWhoisMap, ShodanIpMap] = IpWhoisMap.empty() + self.geoasn: IpGeoAsnMapType self.whois: WhoisBase + self.shodan: ShodanIpMap = ShodanIpMap.empty() self.greynoise: GreynoiseIpMap = GreynoiseIpMap.empty() self.abuseipdb: AbuseIpDbMap = AbuseIpDbMap.empty() self.urlhaus: UrlHausMap = UrlHausMap.empty() @@ -105,9 +106,15 @@ def fetch_data(self) -> None: return NotImplemented # type: ignore # pragma: no coverage @common_exception_handler - @failopen_exception_handler("_enricher") - def _fetch_ip_enrichments(self, *ips: str) -> None: - self.ip_enrich = self._enricher.enrich_ips(*ips) + @failopen_exception_handler("_geoasn") + def _fetch_geoasn(self, *ips: str) -> None: + self.geoasn = self._geoasn.enrich_ips(*ips) + + @common_exception_handler + @failopen_exception_handler("_shodan") + def _fetch_shodan(self, *ips: str) -> None: + if self._shodan: + self.shodan = self._shodan.enrich_ips(*ips) @common_exception_handler @failopen_exception_handler("_greynoise") diff --git a/wtfis/handlers/domain.py b/wtfis/handlers/domain.py index 5f8db3c..11431ed 100644 --- a/wtfis/handlers/domain.py +++ b/wtfis/handlers/domain.py @@ -1,7 +1,7 @@ """ Logic handler for domain and hostname inputs """ -from typing import Optional, Union +from typing import Optional from requests.exceptions import HTTPError from rich.console import Console @@ -9,9 +9,6 @@ from wtfis.clients.abuseipdb import AbuseIpDbClient from wtfis.clients.greynoise import GreynoiseClient -from wtfis.clients.ip2whois import Ip2WhoisClient -from wtfis.clients.ipwhois import IpWhoisClient -from wtfis.clients.passivetotal import PTClient from wtfis.clients.shodan import ShodanClient from wtfis.clients.urlhaus import UrlHausClient from wtfis.clients.virustotal import VTClient @@ -23,6 +20,7 @@ ) from wtfis.models.virustotal import Resolutions +from wtfis.clients.types import IpGeoAsnClientType, IpWhoisClientType class DomainHandler(BaseHandler): @@ -32,15 +30,16 @@ def __init__( console: Console, progress: Progress, vt_client: VTClient, - ip_enricher_client: Union[IpWhoisClient, ShodanClient], - whois_client: Union[Ip2WhoisClient, PTClient, VTClient], + ip_geoasn_client: IpGeoAsnClientType, + whois_client: IpWhoisClientType, + shodan_client: Optional[ShodanClient], greynoise_client: Optional[GreynoiseClient], abuseipdb_client: Optional[AbuseIpDbClient], urlhaus_client: Optional[UrlHausClient], max_resolutions: int = 0, ): - super().__init__(entity, console, progress, vt_client, ip_enricher_client, - whois_client, greynoise_client, abuseipdb_client, urlhaus_client) + super().__init__(entity, console, progress, vt_client, ip_geoasn_client, whois_client, + shodan_client, greynoise_client, abuseipdb_client, urlhaus_client) # Extended attributes self.max_resolutions = max_resolutions @@ -77,25 +76,31 @@ def fetch_data(self): self.progress.update(task_v, completed=100) if self.resolutions and self.resolutions.data: - task_r = self.progress.add_task(f"Fetching IP enrichments from {self._enricher.name}") - self.progress.update(task_r, advance=50) - self._fetch_ip_enrichments(*self.resolutions.ip_list(self.max_resolutions)) - self.progress.update(task_r, completed=100) + task_g = self.progress.add_task(f"Fetching IP location and ASN from {self._geoasn.name}") + self.progress.update(task_g, advance=50) + self._fetch_geoasn(*self.resolutions.ip_list(self.max_resolutions)) + self.progress.update(task_g, completed=100) + + if self._shodan: + task_s = self.progress.add_task(f"Fetching IP data from {self._shodan.name}") + self.progress.update(task_s, advance=50) + self._fetch_shodan(*self.resolutions.ip_list(self.max_resolutions)) + self.progress.update(task_s, completed=100) if self._greynoise: - task_g = self.progress.add_task(f"Fetching IP enrichments from {self._greynoise.name}") + task_g = self.progress.add_task(f"Fetching IP data from {self._greynoise.name}") self.progress.update(task_g, advance=50) self._fetch_greynoise(*self.resolutions.ip_list(self.max_resolutions)) self.progress.update(task_g, completed=100) if self._abuseipdb: - task_g = self.progress.add_task(f"Fetching IP enrichments from {self._abuseipdb.name}") + task_g = self.progress.add_task(f"Fetching IP data from {self._abuseipdb.name}") self.progress.update(task_g, advance=50) self._fetch_abuseipdb(*self.resolutions.ip_list(self.max_resolutions)) self.progress.update(task_g, completed=100) if self._urlhaus: - task_u = self.progress.add_task(f"Fetching domain enrichments from {self._urlhaus.name}") + task_u = self.progress.add_task(f"Fetching domain data from {self._urlhaus.name}") self.progress.update(task_u, advance=50) self._fetch_urlhaus() self.progress.update(task_u, completed=100) diff --git a/wtfis/handlers/ip.py b/wtfis/handlers/ip.py index 088268c..118948f 100644 --- a/wtfis/handlers/ip.py +++ b/wtfis/handlers/ip.py @@ -25,25 +25,31 @@ def fetch_data(self): self._fetch_vt_ip_address() self.progress.update(task_v, completed=100) - task_i = self.progress.add_task(f"Fetching IP enrichments from {self._enricher.name}") - self.progress.update(task_i, advance=50) - self._fetch_ip_enrichments(self.entity) - self.progress.update(task_i, completed=100) + task_g = self.progress.add_task(f"Fetching IP location and ASN from {self._geoasn.name}") + self.progress.update(task_g, advance=50) + self._fetch_geoasn(self.entity) + self.progress.update(task_g, completed=100) + + if self._shodan: + task_s = self.progress.add_task(f"Fetching IP data from {self._shodan.name}") + self.progress.update(task_s, advance=50) + self._fetch_shodan(self.entity) + self.progress.update(task_s, completed=100) if self._urlhaus: - task_u = self.progress.add_task(f"Fetching IP enrichments from {self._urlhaus.name}") + task_u = self.progress.add_task(f"Fetching IP data from {self._urlhaus.name}") self.progress.update(task_u, advance=50) self._fetch_urlhaus() self.progress.update(task_u, completed=100) if self._greynoise: - task_g = self.progress.add_task(f"Fetching IP enrichments from {self._greynoise.name}") + task_g = self.progress.add_task(f"Fetching IP data from {self._greynoise.name}") self.progress.update(task_g, advance=50) self._fetch_greynoise(self.entity) self.progress.update(task_g, completed=100) if self._abuseipdb: - task_a = self.progress.add_task(f"Fetching IP enrichments from {self._abuseipdb.name}") + task_a = self.progress.add_task(f"Fetching IP data from {self._abuseipdb.name}") self.progress.update(task_a, advance=50) self._fetch_abuseipdb(self.entity) self.progress.update(task_a, completed=100) diff --git a/wtfis/main.py b/wtfis/main.py index beaad17..51377cc 100644 --- a/wtfis/main.py +++ b/wtfis/main.py @@ -8,7 +8,6 @@ from rich.progress import Progress from typing import Union from wtfis.clients.abuseipdb import AbuseIpDbClient - from wtfis.clients.greynoise import GreynoiseClient from wtfis.clients.ip2whois import Ip2WhoisClient from wtfis.clients.ipwhois import IpWhoisClient @@ -108,12 +107,9 @@ def generate_entity_handler( # Virustotal client vt_client = VTClient(os.environ["VT_API_KEY"]) - # IP enrichment client selector - enricher_client: Union[IpWhoisClient, ShodanClient] = ( - ShodanClient(os.environ["SHODAN_API_KEY"]) - if args.use_shodan - else IpWhoisClient() - ) + # IP geolocation and ASN client selector + # TODO: add more options + ip_geoasn_client = IpWhoisClient() # Whois client selector # Order of use based on set envvars: @@ -129,6 +125,12 @@ def generate_entity_handler( else: whois_client = vt_client + shodan_client = ( + ShodanClient(os.environ["SHODAN_API_KEY"]) + if args.use_shodan + else None + ) + # Greynoise client (optional) greynoise_client = ( GreynoiseClient(os.environ["GREYNOISE_API_KEY"]) @@ -156,8 +158,9 @@ def generate_entity_handler( console=console, progress=progress, vt_client=vt_client, - ip_enricher_client=enricher_client, + ip_geoasn_client=ip_geoasn_client, whois_client=whois_client, + shodan_client=shodan_client, greynoise_client=greynoise_client, abuseipdb_client=abuseipdb_client, urlhaus_client=urlhaus_client, @@ -170,8 +173,9 @@ def generate_entity_handler( console=console, progress=progress, vt_client=vt_client, - ip_enricher_client=enricher_client, + ip_geoasn_client=ip_geoasn_client, whois_client=whois_client, + shodan_client=shodan_client, greynoise_client=greynoise_client, abuseipdb_client=abuseipdb_client, urlhaus_client=urlhaus_client, @@ -191,8 +195,9 @@ def generate_view( console, entity.vt_info, entity.resolutions, + entity.geoasn, entity.whois, - entity.ip_enrich, + entity.shodan, entity.greynoise, entity.abuseipdb, entity.urlhaus, @@ -202,8 +207,9 @@ def generate_view( view = IpAddressView( console, entity.vt_info, + entity.geoasn, entity.whois, - entity.ip_enrich, + entity.shodan, entity.greynoise, entity.abuseipdb, entity.urlhaus, diff --git a/wtfis/models/common.py b/wtfis/models/base.py similarity index 56% rename from wtfis/models/common.py rename to wtfis/models/base.py index 3ad9bdb..723cea1 100644 --- a/wtfis/models/common.py +++ b/wtfis/models/base.py @@ -1,9 +1,11 @@ +from __future__ import annotations + import abc import sys -from pydantic import BaseModel, BeforeValidator +from pydantic import BaseModel, BeforeValidator, ConfigDict, RootModel from pydantic.v1.validators import str_validator -from typing import List, Optional +from typing import List, Mapping, Optional if sys.version_info >= (3, 9): from typing import Annotated @@ -33,3 +35,30 @@ class WhoisBase(BaseModel, abc.ABC): date_changed: Optional[str] = None date_expires: Optional[str] = None dnssec: Optional[str] = None + + +class IpGeoAsnBase(BaseModel, abc.ABC): + """ Use to normalize IP geolocation and ASN fields """ + model_config = ConfigDict(coerce_numbers_to_str=True) + + ip: str + + # Geolocation + city: Optional[str] + continent: Optional[str] + country: Optional[str] + region: Optional[str] + + # ASN + asn: Optional[str] + org: Optional[str] + isp: Optional[str] + domain: Optional[str] + + +class IpGeoAsnMapBase(RootModel, abc.ABC): + root: Mapping[str, IpGeoAsnBase] + + @classmethod + def empty(cls) -> IpGeoAsnMapBase: + return cls.model_validate({}) diff --git a/wtfis/models/ip2whois.py b/wtfis/models/ip2whois.py index f7abb06..7a25fe9 100644 --- a/wtfis/models/ip2whois.py +++ b/wtfis/models/ip2whois.py @@ -1,7 +1,7 @@ from pydantic import Field, field_validator, model_validator from typing import List, Optional -from wtfis.models.common import WhoisBase +from wtfis.models.base import WhoisBase class Whois(WhoisBase): diff --git a/wtfis/models/ipwhois.py b/wtfis/models/ipwhois.py index c3897f7..bab1d88 100644 --- a/wtfis/models/ipwhois.py +++ b/wtfis/models/ipwhois.py @@ -1,45 +1,33 @@ +""" +ipwhois datamodels +API doc: https://ipwhois.io/documentation +""" from __future__ import annotations -from pydantic import BaseModel, Field, RootModel from typing import Dict -from wtfis.models.common import LaxStr +from pydantic import AliasPath, Field +from wtfis.models.base import IpGeoAsnBase, IpGeoAsnMapBase -class Flag(BaseModel): - img: str - emoji: str - emoji_unicode: str +class IpWhois(IpGeoAsnBase): + # Metadata + source: str = "IPWhois" -class Connection(BaseModel): - asn: LaxStr - org: str - isp: str - domain: str - - -class IpWhois(BaseModel): + # Results ip: str - success: bool - type_: str = Field(alias="type") - continent: str - continent_code: str - country: str - country_code: str - region: str - region_code: str city: str - is_eu: bool - postal: str - calling_code: str - capital: str - borders: str - flag: Flag - connection: Connection + region: str + country: str + continent: str + asn: str = Field(validation_alias=AliasPath("connection", "asn")) + org: str = Field(validation_alias=AliasPath("connection", "org")) + isp: str = Field(validation_alias=AliasPath("connection", "isp")) + domain: str = Field(validation_alias=AliasPath("connection", "domain")) -class IpWhoisMap(RootModel): +class IpWhoisMap(IpGeoAsnMapBase): root: Dict[str, IpWhois] @classmethod diff --git a/wtfis/models/passivetotal.py b/wtfis/models/passivetotal.py index 2fe59b9..717bb2f 100644 --- a/wtfis/models/passivetotal.py +++ b/wtfis/models/passivetotal.py @@ -1,7 +1,7 @@ from pydantic import Field, model_validator from typing import List, Optional -from wtfis.models.common import WhoisBase +from wtfis.models.base import WhoisBase class Whois(WhoisBase): diff --git a/wtfis/models/shodan.py b/wtfis/models/shodan.py index cd57696..0282720 100644 --- a/wtfis/models/shodan.py +++ b/wtfis/models/shodan.py @@ -1,8 +1,10 @@ +from __future__ import annotations + from collections import defaultdict, namedtuple from pydantic import BaseModel, RootModel from typing import Dict, List, Optional -from wtfis.models.common import LaxStr +from wtfis.models.base import LaxStr class PortData(BaseModel): @@ -43,3 +45,7 @@ def group_ports_by_product(self) -> dict: class ShodanIpMap(RootModel): root: Dict[str, ShodanIp] + + @classmethod + def empty(cls) -> ShodanIpMap: + return cls.model_validate({}) diff --git a/wtfis/types.py b/wtfis/models/types.py similarity index 55% rename from wtfis/types.py rename to wtfis/models/types.py index 0ff68da..73d2241 100644 --- a/wtfis/types.py +++ b/wtfis/models/types.py @@ -5,18 +5,30 @@ from wtfis.models.abuseipdb import AbuseIpDbMap from wtfis.models.greynoise import GreynoiseIpMap -from wtfis.models.ipwhois import IpWhoisMap +from wtfis.models.ipwhois import IpWhois, IpWhoisMap from wtfis.models.shodan import ShodanIpMap from wtfis.models.urlhaus import UrlHausMap -# IP enrichment types + +# IP enrichment map types IpEnrichmentType = Union[ + AbuseIpDbMap, GreynoiseIpMap, IpWhoisMap, ShodanIpMap, UrlHausMap, - AbuseIpDbMap, ] -# Domain/FQDN enrichment types -DomainEnrichmentType = UrlHausMap +# Domain/FQDN enrichment map types +DomainEnrichmentType = Union[ + UrlHausMap, +] + +# IP geolocation and ASN types +IpGeoAsnType = Union[ + IpWhois, +] + +IpGeoAsnMapType = Union[ + IpWhoisMap, +] diff --git a/wtfis/models/virustotal.py b/wtfis/models/virustotal.py index 527185a..d85fe8f 100644 --- a/wtfis/models/virustotal.py +++ b/wtfis/models/virustotal.py @@ -1,7 +1,7 @@ from pydantic import BaseModel, Field, RootModel, field_validator, model_validator from typing import Any, Dict, List, Optional -from wtfis.models.common import LaxStr, WhoisBase +from wtfis.models.base import LaxStr, WhoisBase class BaseData(BaseModel): diff --git a/wtfis/ui/base.py b/wtfis/ui/base.py index 893f957..2f844bc 100644 --- a/wtfis/ui/base.py +++ b/wtfis/ui/base.py @@ -11,11 +11,10 @@ from rich.text import Text from typing import Any, Generator, List, Optional, Tuple, Union from wtfis.models.abuseipdb import AbuseIpDb, AbuseIpDbMap - -from wtfis.models.common import WhoisBase +from wtfis.models.base import WhoisBase from wtfis.models.greynoise import GreynoiseIp, GreynoiseIpMap -from wtfis.models.ipwhois import IpWhois, IpWhoisMap from wtfis.models.shodan import ShodanIp, ShodanIpMap +from wtfis.models.types import IpGeoAsnMapType, IpGeoAsnType from wtfis.models.virustotal import ( LastAnalysisStats, PopularityRanks, @@ -38,16 +37,18 @@ def __init__( self, console: Console, entity: Any, + ip_geoasn: IpGeoAsnMapType, whois: Optional[WhoisBase], - ip_enrich: Union[IpWhoisMap, ShodanIpMap], + shodan: ShodanIpMap, greynoise: GreynoiseIpMap, abuseipdb: AbuseIpDbMap, urlhaus: UrlHausMap, ) -> None: self.console = console self.entity = entity + self.ip_geoasn = ip_geoasn self.whois = whois - self.ip_enrich = ip_enrich + self.shodan = shodan self.greynoise = greynoise self.abuseipdb = abuseipdb self.urlhaus = urlhaus @@ -298,8 +299,11 @@ def _gen_asn_text( .append(")")) return text - def _get_ip_enrichment(self, ip: str) -> Optional[Union[IpWhois, ShodanIp]]: - return self.ip_enrich.root[ip] if ip in self.ip_enrich.root.keys() else None + def _get_geoasn_enrichment(self, ip: str) -> Optional[IpGeoAsnType]: + return self.ip_geoasn.root[ip] if ip in self.ip_geoasn.root.keys() else None + + def _get_shodan_enrichment(self, ip: str) -> Optional[ShodanIp]: + return self.shodan.root[ip] if ip in self.shodan.root.keys() else None def _get_greynoise_enrichment(self, ip: str) -> Optional[GreynoiseIp]: return self.greynoise.root[ip] if ip in self.greynoise.root.keys() else None @@ -363,41 +367,48 @@ def _gen_vt_section(self) -> RenderableType: self._gen_heading_text("VirusTotal") ) - def _gen_ip_enrich_section(self) -> Optional[RenderableType]: - """ IP enrichment section. Applies to IP views only """ - enrich = self._get_ip_enrichment(self.entity.data.id_) + def _gen_ip_geoasn_section(self) -> Optional[RenderableType]: + """ IP location and ASN section. Applies to IP views only """ + enrich = self._get_geoasn_enrichment(self.entity.data.id_) data: List[Tuple[Union[str, Text], Union[RenderableType, None]]] = [] if enrich: - if isinstance(enrich, IpWhois): - # IPWhois - section_title = "IPwhois" - asn = self._gen_asn_text(enrich.connection.asn, enrich.connection.org) - data += [ - ("ASN:", asn), - ("ISP:", enrich.connection.isp), - ("Location:", smart_join(enrich.city, enrich.region, enrich.country)), - ] - else: - # Shodan - section_title = "Shodan" - asn = self._gen_asn_text(enrich.asn, enrich.org) - tags = smart_join(*enrich.tags, style=self.theme.tags) if enrich.tags else None - services_field = self._gen_linked_field_name( - "Services", - hyperlink=f"{self.shodan_gui_baseurl}/{self.entity.data.id_}" - ) - data += [ - ("ASN:", asn), - ("ISP:", enrich.isp), - ("Location:", smart_join(enrich.city, enrich.region_name, enrich.country_name)), - ("OS:", enrich.os), - (services_field, self._gen_shodan_services(enrich)), - ("Tags:", tags), - ("Last Scan:", Timestamp(f"{enrich.last_update}+00:00").render), # Timestamps are UTC - # (source: Google) - ] + section_title = enrich.source + asn = self._gen_asn_text(enrich.asn, enrich.org) + data += [ + ("ASN:", asn), + ("ISP:", enrich.isp), + ("Location:", smart_join(enrich.city, enrich.region, enrich.country)), + ] + return self._gen_section( + + self._gen_table(*data), + self._gen_heading_text(section_title) + ) + + return None # No enrichment data + + def _gen_shodan_section(self) -> Optional[RenderableType]: + """ Shodan section. Applies to IP views only """ + enrich = self._get_shodan_enrichment(self.entity.data.id_) + + data: List[Tuple[Union[str, Text], Union[RenderableType, None]]] = [] + + if enrich: + section_title = "Shodan" + tags = smart_join(*enrich.tags, style=self.theme.tags) if enrich.tags else None + services_field = self._gen_linked_field_name( + "Services", + hyperlink=f"{self.shodan_gui_baseurl}/{self.entity.data.id_}" + ) + data += [ + ("OS:", enrich.os), + (services_field, self._gen_shodan_services(enrich)), + ("Tags:", tags), + ("Last Scan:", Timestamp(f"{enrich.last_update}+00:00").render), # Timestamps are UTC + # (source: Google) + ] return self._gen_section( self._gen_table(*data), diff --git a/wtfis/ui/view.py b/wtfis/ui/view.py index d34653f..6bfb9c9 100644 --- a/wtfis/ui/view.py +++ b/wtfis/ui/view.py @@ -10,11 +10,11 @@ from typing import List, Optional, Tuple, Union from wtfis.models.abuseipdb import AbuseIpDbMap -from wtfis.models.common import WhoisBase +from wtfis.models.base import WhoisBase from wtfis.models.greynoise import GreynoiseIpMap -from wtfis.models.ipwhois import IpWhois, IpWhoisMap from wtfis.models.shodan import ShodanIpMap from wtfis.models.urlhaus import UrlHausMap +from wtfis.models.types import IpGeoAsnMapType from wtfis.models.virustotal import ( Domain, IpAddress, @@ -34,14 +34,15 @@ def __init__( console: Console, entity: Domain, resolutions: Optional[Resolutions], + ip_geoasn: IpGeoAsnMapType, whois: WhoisBase, - ip_enrich: Union[IpWhoisMap, ShodanIpMap], + shodan: ShodanIpMap, greynoise: GreynoiseIpMap, abuseipdb: AbuseIpDbMap, urlhaus: UrlHausMap, max_resolutions: int = 3, ) -> None: - super().__init__(console, entity, whois, ip_enrich, greynoise, abuseipdb, urlhaus) + super().__init__(console, entity, ip_geoasn, whois, shodan, greynoise, abuseipdb, urlhaus) self.resolutions = resolutions self.max_resolutions = max_resolutions @@ -87,40 +88,34 @@ def resolutions_panel(self) -> Optional[Panel]: ("Resolved:", Timestamp(attributes.date).render), ] - # IP Enrichment - enrich = self._get_ip_enrichment(attributes.ip_address) - - if enrich: - if isinstance(enrich, IpWhois): - # IPWhois - asn = self._gen_asn_text(enrich.connection.asn, enrich.connection.org) - data += [ - ("ASN:", asn), - ("ISP:", enrich.connection.isp), - ("Location:", smart_join(enrich.city, enrich.region, enrich.country)), - ] - else: - # Shodan - asn = self._gen_asn_text(enrich.asn, enrich.org) - tags = smart_join(*enrich.tags, style=self.theme.tags) if enrich.tags else None - services_field = self._gen_linked_field_name( - "Services", - hyperlink=f"{self.shodan_gui_baseurl}/{attributes.ip_address}" - ) - data += [ - ("ASN:", asn), - ("ISP:", enrich.isp), - ("Location:", smart_join(enrich.city, enrich.region_name, enrich.country_name)), - ("OS:", enrich.os), - (services_field, self._gen_shodan_services(enrich)), - ("Tags:", tags), - ("Last Scan:", Timestamp(f"{enrich.last_update}+00:00").render), # Timestamps are UTC - # (source: Google) - ] + # IP geolocation and ASN + geoasn = self._get_geoasn_enrichment(attributes.ip_address) + if geoasn: + asn = self._gen_asn_text(geoasn.asn, geoasn.org) + data += [ + ("ASN:", asn), + ("ISP:", geoasn.isp), + ("Location:", smart_join(geoasn.city, geoasn.region, geoasn.country)), + ] + + # Shodan + shodan = self._get_shodan_enrichment(attributes.ip_address) + if shodan: + tags = smart_join(*shodan.tags, style=self.theme.tags) if shodan.tags else None + services_field = self._gen_linked_field_name( + "Services", + hyperlink=f"{self.shodan_gui_baseurl}/{attributes.ip_address}" + ) + data += [ + ("OS:", shodan.os), + (services_field, self._gen_shodan_services(shodan)), + ("Tags:", tags), + # ("Last Scan:", Timestamp(f"{shodan.last_update}+00:00").render), # Timestamps are UTC + # # (source: Google) + ] # Greynoise greynoise = self._get_greynoise_enrichment(attributes.ip_address) - if greynoise: data += [self._gen_greynoise_tuple(greynoise)] @@ -190,18 +185,20 @@ def __init__( self, console: Console, entity: IpAddress, + ip_geoasn: IpGeoAsnMapType, whois: WhoisBase, - ip_enrich: Union[IpWhoisMap, ShodanIpMap], + shodan: ShodanIpMap, greynoise: GreynoiseIpMap, abuseipdb: AbuseIpDbMap, urlhaus: UrlHausMap, ) -> None: - super().__init__(console, entity, whois, ip_enrich, greynoise, abuseipdb, urlhaus) + super().__init__(console, entity, ip_geoasn, whois, shodan, greynoise, abuseipdb, urlhaus) def ip_panel(self) -> Panel: content = [self._gen_vt_section()] # VT section for section in ( - self._gen_ip_enrich_section(), # IP enrich section + self._gen_ip_geoasn_section(), # IP location and ASN section + self._gen_shodan_section(), # Shodan section self._gen_urlhaus_section(), # URLhaus section self._gen_ip_other_section(), # Other section ): From 540de5511e8c8fda2ac15ba403fc5b1a6fa3a871 Mon Sep 17 00:00:00 2001 From: joon Date: Sun, 2 Jun 2024 20:50:44 -0700 Subject: [PATCH 2/3] Update tests and upgrade requests --- pyproject.toml | 4 +- tests/test_cli.py | 18 ++-- tests/test_clients.py | 6 +- tests/test_handlers.py | 60 ++++++++--- tests/test_ui_domain_view.py | 166 +++++++++++------------------ tests/test_ui_ip_view.py | 199 +++++++++++++++++++++++++++-------- wtfis/clients/shodan.py | 9 +- wtfis/handlers/base.py | 3 +- wtfis/models/base.py | 2 +- wtfis/ui/base.py | 8 +- wtfis/ui/view.py | 10 +- 11 files changed, 296 insertions(+), 189 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 574f5ca..ea7205d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ classifiers = [ dependencies = [ "pydantic~=2.7.2", "python-dotenv~=1.0.1", - "requests~=2.31.0", + "requests~=2.32.3", "rich~=13.7.1", "shodan~=1.31.0", ] @@ -65,7 +65,7 @@ dependencies = [ "mypy", "pytest", "pytest-cov", - "types-requests~=2.31.0", + "types-requests~=2.32.0", ] [tool.hatch.envs.default.scripts] typecheck = "mypy -p {args:wtfis}" diff --git a/tests/test_cli.py b/tests/test_cli.py index 1f34cd2..5b3cd5c 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -408,10 +408,12 @@ def test_handler_domain_1(self, fake_load_dotenv_1): assert entity.console == console assert entity.progress == progress assert isinstance(entity._vt, VTClient) - assert isinstance(entity._enricher, IpWhoisClient) + assert isinstance(entity._geoasn, IpWhoisClient) assert isinstance(entity._whois, PTClient) + assert entity._shodan is None assert entity._greynoise is None assert entity._urlhaus is None + assert entity._abuseipdb is None unset_env_vars() @patch("sys.argv", ["main", "www.example[.]com", "-s", "-g", "-u", "-m", "5"]) @@ -423,8 +425,9 @@ def test_handler_domain_2(self, fake_load_dotenv_1): progress = simulate_progress(console), entity = generate_entity_handler(parse_args(), console, progress) assert entity.max_resolutions == 5 - assert isinstance(entity._enricher, ShodanClient) + assert isinstance(entity._geoasn, IpWhoisClient) assert isinstance(entity._whois, PTClient) + assert isinstance(entity._shodan, ShodanClient) assert isinstance(entity._greynoise, GreynoiseClient) assert isinstance(entity._urlhaus, UrlHausClient) unset_env_vars() @@ -464,7 +467,7 @@ def test_handler_ip_1(self, fake_load_dotenv_1): assert entity.console == console assert entity.progress == progress assert isinstance(entity._vt, VTClient) - assert isinstance(entity._enricher, IpWhoisClient) + assert isinstance(entity._geoasn, IpWhoisClient) assert isinstance(entity._whois, PTClient) assert entity._greynoise is None assert entity._urlhaus is None @@ -478,8 +481,9 @@ def test_handler_ip_2(self, fake_load_dotenv_1): console = Console() progress = simulate_progress(console), entity = generate_entity_handler(parse_args(), console, progress) - assert isinstance(entity._enricher, ShodanClient) + assert isinstance(entity._geoasn, IpWhoisClient) assert isinstance(entity._whois, PTClient) + assert isinstance(entity._shodan, ShodanClient) assert isinstance(entity._greynoise, GreynoiseClient) assert isinstance(entity._urlhaus, UrlHausClient) assert isinstance(entity._abuseipdb, AbuseIpDbClient) @@ -496,8 +500,9 @@ def test_view_domain_1(self, m_domain_view, test_data): console=MagicMock(), progress=MagicMock(), vt_client=MagicMock(), - ip_enricher_client=MagicMock(), + ip_geoasn_client=MagicMock(), whois_client=MagicMock(), + shodan_client=MagicMock(), greynoise_client=MagicMock(), abuseipdb_client=MagicMock(), urlhaus_client=MagicMock(), @@ -516,8 +521,9 @@ def test_view_ip_1(self, m_ip_view, test_data): console=MagicMock(), progress=MagicMock(), vt_client=MagicMock(), - ip_enricher_client=MagicMock(), + ip_geoasn_client=MagicMock(), whois_client=MagicMock(), + shodan_client=MagicMock(), greynoise_client=MagicMock(), abuseipdb_client=MagicMock(), urlhaus_client=MagicMock(), diff --git a/tests/test_clients.py b/tests/test_clients.py index 6078f4b..806dc34 100644 --- a/tests/test_clients.py +++ b/tests/test_clients.py @@ -2,13 +2,15 @@ import pytest from unittest.mock import MagicMock, patch +from shodan import APIError + from wtfis.clients.abuseipdb import AbuseIpDbClient from wtfis.clients.base import requests from wtfis.clients.greynoise import GreynoiseClient from wtfis.clients.ip2whois import Ip2WhoisClient from wtfis.clients.ipwhois import IpWhoisClient from wtfis.clients.passivetotal import PTClient -from wtfis.clients.shodan import APIError, Shodan, ShodanClient +from wtfis.clients.shodan import Shodan, ShodanClient from wtfis.clients.urlhaus import UrlHausClient from wtfis.clients.virustotal import VTClient from wtfis.models.ipwhois import IpWhoisMap @@ -172,7 +174,7 @@ def test_get_ip_apierror_invalid_key(self, mock_shodan_host, shodan_client): shodan_client.enrich_ips("thisdoesntmatter") assert e.type == APIError - assert str(e.value) == "Invalid Shodan API key" + assert str(e.value) == "Invalid API key" @patch.object(Shodan, "host") def test_get_ip_apierror_other(self, mock_shodan_host, shodan_client): diff --git a/tests/test_handlers.py b/tests/test_handlers.py index a408ec7..b7a0b9a 100644 --- a/tests/test_handlers.py +++ b/tests/test_handlers.py @@ -10,6 +10,7 @@ from wtfis.clients.greynoise import GreynoiseClient from wtfis.clients.ipwhois import IpWhoisClient from wtfis.clients.passivetotal import PTClient +from wtfis.clients.shodan import ShodanClient from wtfis.clients.urlhaus import UrlHausClient from wtfis.clients.virustotal import VTClient from wtfis.handlers.domain import DomainHandler @@ -25,8 +26,9 @@ def generate_domain_handler(max_resolutions=3): console=Console(), progress=MagicMock(), vt_client=VTClient("dummykey"), - ip_enricher_client=IpWhoisClient(), + ip_geoasn_client=IpWhoisClient(), whois_client=PTClient("dummyuser", "dummykey"), + shodan_client=ShodanClient("dummykey"), greynoise_client=GreynoiseClient("dummykey"), abuseipdb_client=AbuseIpDbClient("dummykey"), urlhaus_client=UrlHausClient(), @@ -40,8 +42,9 @@ def generate_ip_handler(): console=Console(), progress=MagicMock(), vt_client=VTClient("dummykey"), - ip_enricher_client=IpWhoisClient(), + ip_geoasn_client=IpWhoisClient(), whois_client=PTClient("dummyuser", "dummykey"), + shodan_client=ShodanClient("dummykey"), greynoise_client=GreynoiseClient("dummykey"), abuseipdb_client=AbuseIpDbClient("dummykey"), urlhaus_client=UrlHausClient(), @@ -70,16 +73,18 @@ def test_fetch_data_1(self, domain_handler, test_data): handler._fetch_vt_domain = MagicMock() handler._fetch_vt_resolutions = MagicMock() - handler._fetch_ip_enrichments = MagicMock() + handler._fetch_geoasn = MagicMock() handler._fetch_whois = MagicMock() + handler._fetch_shodan = MagicMock() handler._fetch_greynoise = MagicMock() handler._fetch_urlhaus = MagicMock() handler.fetch_data() handler._fetch_vt_domain.assert_called_once() handler._fetch_vt_resolutions.assert_called_once() - handler._fetch_ip_enrichments.assert_called_once() + handler._fetch_geoasn.assert_called_once() handler._fetch_whois.assert_called_once() + handler._fetch_shodan.assert_called_once() handler._fetch_greynoise.assert_called_once() handler._fetch_urlhaus.assert_called_once() @@ -88,21 +93,23 @@ def test_fetch_data_2(self, domain_handler): handler = domain_handler(0) handler._fetch_vt_domain = MagicMock() handler._fetch_vt_resolutions = MagicMock() - handler._fetch_ip_enrichments = MagicMock() + handler._fetch_geoasn = MagicMock() handler._fetch_whois = MagicMock() + handler._fetch_shodan = MagicMock() handler._fetch_greynoise = MagicMock() handler._fetch_urlhaus = MagicMock() handler.fetch_data() handler._fetch_vt_domain.assert_called_once() handler._fetch_vt_resolutions.assert_not_called() - handler._fetch_ip_enrichments.assert_not_called() + handler._fetch_geoasn.assert_not_called() handler._fetch_whois.assert_called_once() + handler._fetch_shodan.assert_not_called() handler._fetch_greynoise.assert_not_called() handler._fetch_urlhaus.assert_called_once() - assert handler.ip_enrich == IpWhoisMap.model_validate({}) - assert handler.ip_enrich.root == {} + assert handler.geoasn == IpWhoisMap.model_validate({}) + assert handler.geoasn.root == {} @patch.object(requests.Session, "get") def test_vt_http_error(self, mock_requests_get, domain_handler, capsys): @@ -173,7 +180,7 @@ def test_ipwhois_http_error(self, mock_requests_get, domain_handler, capsys, tes mock_resp.status_code = 500 mock_requests_get.return_value = mock_resp - handler._fetch_ip_enrichments(*["1.2.3.4", "1.2.3.5"]) + handler._fetch_geoasn(*["1.2.3.4", "1.2.3.5"]) assert handler.warnings[0].startswith("Could not fetch IPWhois: 500 Server Error:") handler.print_warnings() @@ -191,12 +198,12 @@ def test_ipwhois_validation_error(self, mock_requests_get, domain_handler, capsy mock_requests_get.return_value = mock_resp with pytest.raises(SystemExit) as e: - handler._fetch_ip_enrichments("1.2.3.4") + handler._fetch_geoasn("1.2.3.4") capture = capsys.readouterr() assert capture.err.startswith( - "Data model validation error: 16 validation errors for IpWhois\n" + "Data model validation error: 9 validation errors for IpWhois\n" ) assert e.type == SystemExit assert e.value.code == 1 @@ -374,16 +381,18 @@ def test_entity_refang(self, ip_handler): def test_fetch_data(self, ip_handler): handler = ip_handler() handler._fetch_vt_ip_address = MagicMock() - handler._fetch_ip_enrichments = MagicMock() + handler._fetch_geoasn = MagicMock() handler._fetch_whois = MagicMock() + handler._fetch_shodan = MagicMock() handler._fetch_greynoise = MagicMock() handler._fetch_urlhaus = MagicMock() handler._fetch_abuseipdb = MagicMock() handler.fetch_data() handler._fetch_vt_ip_address.assert_called_once() - handler._fetch_ip_enrichments.assert_called_once() + handler._fetch_geoasn.assert_called_once() handler._fetch_whois.assert_called_once() + handler._fetch_shodan.assert_called_once() handler._fetch_greynoise.assert_called_once() handler._fetch_urlhaus.assert_called_once() handler._fetch_abuseipdb.assert_called_once() @@ -438,7 +447,7 @@ def test_ipwhois_http_error(self, mock_requests_get, ip_handler, capsys): mock_resp.status_code = 502 mock_requests_get.return_value = mock_resp - handler._fetch_ip_enrichments("1.2.3.4") + handler._fetch_geoasn("1.2.3.4") assert handler.warnings[0].startswith("Could not fetch IPWhois: 502 Server Error:") handler.print_warnings() @@ -473,16 +482,35 @@ def test_ipwhois_validation_error(self, mock_requests_get, ip_handler, capsys): mock_requests_get.return_value = mock_resp with pytest.raises(SystemExit) as e: - handler._fetch_ip_enrichments("1.2.3.4") + handler._fetch_geoasn("1.2.3.4") capture = capsys.readouterr() assert capture.err.startswith( - "Data model validation error: 16 validation errors for IpWhois\n" + "Data model validation error: 9 validation errors for IpWhois\n" ) assert e.type == SystemExit assert e.value.code == 1 + @patch.object(requests.Session, "get") + def test_shodan_api_error(self, mock_requests_get, ip_handler, capsys): + """ + Test fail open behavior of Shodan on invalid API key + """ + handler = ip_handler() + mock_resp = requests.models.Response() + + mock_resp.status_code = 401 + mock_resp._content = b'' + mock_requests_get.return_value = mock_resp + + handler._fetch_shodan("1.2.3.4") + assert handler.warnings[0].startswith("Could not fetch Shodan: Invalid API key") + + handler.print_warnings() + capture = capsys.readouterr() + assert capture.out.startswith("WARN: Could not fetch Shodan: Invalid API key") + @patch.object(requests.Session, "get") def test_greynoise_http_error(self, mock_requests_get, ip_handler, capsys): """ diff --git a/tests/test_ui_domain_view.py b/tests/test_ui_domain_view.py index b082f17..6f15b16 100644 --- a/tests/test_ui_domain_view.py +++ b/tests/test_ui_domain_view.py @@ -17,6 +17,7 @@ from wtfis.models.ip2whois import Whois as Ip2Whois from wtfis.models.ipwhois import IpWhoisMap from wtfis.models.passivetotal import Whois as PTWhois +from wtfis.models.shodan import ShodanIpMap from wtfis.models.urlhaus import UrlHausMap from wtfis.models.virustotal import ( Domain, @@ -31,17 +32,18 @@ def view01(test_data, mock_ipwhois_get): """ gist.github.com with PT whois. Complete test of all panels. Also test print(). """ resolutions = Resolutions.model_validate(json.loads(test_data("vt_resolutions_gist.json"))) - ipwhois_pool = json.loads(test_data("ipwhois_gist.json")) - ipwhois_client = IpWhoisClient() - ipwhois_client._get_ipwhois = MagicMock(side_effect=lambda ip: mock_ipwhois_get(ip, ipwhois_pool)) - ip_enrich = ipwhois_client.enrich_ips(*resolutions.ip_list(3)) + geoasn_pool = json.loads(test_data("ipwhois_gist.json")) + geoasn_client = IpWhoisClient() + geoasn_client._get_ipwhois = MagicMock(side_effect=lambda ip: mock_ipwhois_get(ip, geoasn_pool)) + geoasn_enrich = geoasn_client.enrich_ips(*resolutions.ip_list(3)) return DomainView( console=Console(), entity=Domain.model_validate(json.loads(test_data("vt_domain_gist.json"))), resolutions=resolutions, + geoasn=geoasn_enrich, whois=PTWhois.model_validate(json.loads(test_data("pt_whois_gist.json"))), - ip_enrich=ip_enrich, + shodan=ShodanIpMap.model_validate({}), greynoise=GreynoiseIpMap.model_validate({}), abuseipdb=AbuseIpDbMap.model_validate({}), urlhaus=UrlHausMap.model_validate({}), @@ -58,8 +60,9 @@ def view02(test_data): console=Console(), entity=MagicMock(), resolutions=Resolutions.model_validate(json.loads(test_data("vt_resolutions_gist.json"))), + geoasn=IpWhoisMap.model_validate({}), whois=VTWhois.model_validate(json.loads(test_data("vt_whois_gist.json"))), - ip_enrich=IpWhoisMap.model_validate({}), + shodan=ShodanIpMap.model_validate({}), greynoise=GreynoiseIpMap.model_validate({}), abuseipdb=AbuseIpDbMap.model_validate({}), urlhaus=MagicMock(), @@ -74,8 +77,9 @@ def view03(test_data): console=Console(), entity=MagicMock(), resolutions=MagicMock(), + geoasn=MagicMock(), whois=VTWhois.model_validate(json.loads(test_data("vt_whois_bbc.json"))), - ip_enrich=MagicMock(), + shodan=MagicMock(), greynoise=MagicMock(), abuseipdb=MagicMock(), urlhaus=MagicMock(), @@ -92,8 +96,9 @@ def view04(test_data): console=Console(), entity=Domain.model_validate(json.loads(test_data("vt_domain_google.json"))), resolutions=None, + geoasn=MagicMock(), whois=MagicMock(), - ip_enrich=MagicMock(), + shodan=MagicMock(), greynoise=MagicMock(), abuseipdb=MagicMock(), urlhaus=MagicMock(), @@ -107,8 +112,9 @@ def view05(test_data): console=Console(), entity=Domain.model_validate(json.loads(test_data("vt_domain_tucows.json"))), resolutions=MagicMock(), + geoasn=MagicMock(), whois=MagicMock(), - ip_enrich=MagicMock(), + shodan=MagicMock(), greynoise=MagicMock(), abuseipdb=MagicMock(), urlhaus=MagicMock(), @@ -122,8 +128,9 @@ def view06(test_data): console=Console(), entity=MagicMock(), resolutions=MagicMock(), + geoasn=MagicMock(), whois=VTWhois.model_validate(json.loads(test_data("vt_whois_example_2.json"))), - ip_enrich=MagicMock(), + shodan=MagicMock(), greynoise=MagicMock(), abuseipdb=MagicMock(), urlhaus=MagicMock(), @@ -131,21 +138,27 @@ def view06(test_data): @pytest.fixture() -def view07(test_data, mock_shodan_get_ip): - """ gist.github.com with Shodan. Only test resolution and IP enrich. """ +def view07(test_data, mock_ipwhois_get, mock_shodan_get_ip): + """ gist.github.com with Shodan. Only test resolution, geoasn and Shodan. """ resolutions = Resolutions.model_validate(json.loads(test_data("vt_resolutions_gist.json"))) + geoasn_pool = json.loads(test_data("ipwhois_gist.json")) + geoasn_client = IpWhoisClient() + geoasn_client._get_ipwhois = MagicMock(side_effect=lambda ip: mock_ipwhois_get(ip, geoasn_pool)) + geoasn_enrich = geoasn_client.enrich_ips(*resolutions.ip_list(3)) + shodan_pool = json.loads(test_data("shodan_gist.json")) shodan_client = ShodanClient(MagicMock()) shodan_client._get_ip = MagicMock(side_effect=lambda ip: mock_shodan_get_ip(ip, shodan_pool)) - ip_enrich = shodan_client.enrich_ips(*resolutions.ip_list(3)) + shodan_enrich = shodan_client.enrich_ips(*resolutions.ip_list(3)) return DomainView( console=Console(), entity=MagicMock(), resolutions=resolutions, + geoasn=geoasn_enrich, whois=MagicMock(), - ip_enrich=ip_enrich, + shodan=shodan_enrich, greynoise=GreynoiseIpMap.model_validate({}), abuseipdb=AbuseIpDbMap.model_validate({}), urlhaus=MagicMock(), @@ -154,20 +167,21 @@ def view07(test_data, mock_shodan_get_ip): @pytest.fixture() def view08(test_data, mock_shodan_get_ip): - """ www.wired.com with Shodan. Only test resolution and IP enrich. """ + """ www.wired.com with Shodan. Only test resolution and Shodan. """ resolutions = Resolutions.model_validate(json.loads(test_data("vt_resolutions_wired.json"))) shodan_pool = json.loads(test_data("shodan_wired.json")) shodan_client = ShodanClient(MagicMock()) shodan_client._get_ip = MagicMock(side_effect=lambda ip: mock_shodan_get_ip(ip, shodan_pool)) - ip_enrich = shodan_client.enrich_ips(*resolutions.ip_list(1)) + shodan_enrich = shodan_client.enrich_ips(*resolutions.ip_list(1)) return DomainView( console=Console(), entity=MagicMock(), resolutions=resolutions, + geoasn=IpWhoisMap.model_validate({}), whois=MagicMock(), - ip_enrich=ip_enrich, + shodan=shodan_enrich, greynoise=GreynoiseIpMap.model_validate({}), abuseipdb=AbuseIpDbMap.model_validate({}), urlhaus=MagicMock(), @@ -177,13 +191,13 @@ def view08(test_data, mock_shodan_get_ip): @pytest.fixture() def view09(test_data, mock_shodan_get_ip, mock_greynoise_get, mock_abuseipdb_get): - """ one.one.one.one with Shodan, Greynoise and AbuseIPDB. Only test resolution and IP enrich. """ + """ one.one.one.one with Shodan, Greynoise and AbuseIPDB. Only test mentioned services. """ resolutions = Resolutions.model_validate(json.loads(test_data("vt_resolutions_one.json"))) shodan_pool = json.loads(test_data("shodan_one.json")) shodan_client = ShodanClient(MagicMock()) shodan_client._get_ip = MagicMock(side_effect=lambda ip: mock_shodan_get_ip(ip, shodan_pool)) - ip_enrich = shodan_client.enrich_ips(*resolutions.ip_list(1)) + shodan_enrich = shodan_client.enrich_ips(*resolutions.ip_list(1)) greynoise_pool = json.loads(test_data("greynoise_one.json")) greynoise_client = GreynoiseClient("dummykey") @@ -199,8 +213,9 @@ def view09(test_data, mock_shodan_get_ip, mock_greynoise_get, mock_abuseipdb_get console=Console(), entity=MagicMock(), resolutions=resolutions, + geoasn=MagicMock(), whois=MagicMock(), - ip_enrich=ip_enrich, + shodan=shodan_enrich, greynoise=greynoise_enrich, abuseipdb=abuseipdb_enrich, urlhaus=MagicMock(), @@ -215,8 +230,9 @@ def view10(test_data): console=Console(), entity=MagicMock(), resolutions=MagicMock(), + geoasn=MagicMock(), whois=VTWhois.model_validate(json.loads(test_data("vt_whois_foo.json"))), - ip_enrich=MagicMock(), + shodan=MagicMock(), greynoise=GreynoiseIpMap.model_validate({}), abuseipdb=AbuseIpDbMap.model_validate({}), urlhaus=MagicMock(), @@ -225,20 +241,21 @@ def view10(test_data): @pytest.fixture() def view11(test_data, mock_shodan_get_ip): - """ gist.github.com with Shodan. Only test IP enrich. Test empty open ports. """ + """ gist.github.com with Shodan. Only test Shodan. Test empty open ports. """ resolutions = Resolutions.model_validate(json.loads(test_data("vt_resolutions_gist.json"))) shodan_pool = json.loads(test_data("shodan_gist_2.json")) shodan_client = ShodanClient(MagicMock()) shodan_client._get_ip = MagicMock(side_effect=lambda ip: mock_shodan_get_ip(ip, shodan_pool)) - ip_enrich = shodan_client.enrich_ips(*resolutions.ip_list(3)) + shodan_enrich = shodan_client.enrich_ips(*resolutions.ip_list(3)) return DomainView( console=Console(), entity=MagicMock(), resolutions=resolutions, + geoasn=MagicMock(), whois=MagicMock(), - ip_enrich=ip_enrich, + shodan=shodan_enrich, greynoise=GreynoiseIpMap.model_validate({}), abuseipdb=AbuseIpDbMap.model_validate({}), urlhaus=MagicMock(), @@ -252,8 +269,9 @@ def view12(test_data): console=Console(), entity=MagicMock(), resolutions=MagicMock(), + geoasn=MagicMock(), whois=Ip2Whois.model_validate(json.loads(test_data("ip2whois_whois_hotmail.json"))), - ip_enrich=MagicMock(), + shodan=MagicMock(), greynoise=MagicMock(), abuseipdb=MagicMock(), urlhaus=MagicMock(), @@ -267,8 +285,9 @@ def view13(test_data): console=Console(), entity=MagicMock(), resolutions=MagicMock(), + geoasn=MagicMock(), whois=Ip2Whois.model_validate(json.loads(test_data("ip2whois_whois_bbc.json"))), - ip_enrich=MagicMock(), + shodan=MagicMock(), greynoise=MagicMock(), abuseipdb=MagicMock(), urlhaus=MagicMock(), @@ -280,10 +299,10 @@ def view14(test_data, mock_ipwhois_get, mock_urlhaus_get): """ Same as view01() but with Urlhaus enrichment. Test URLhaus only. """ resolutions = Resolutions.model_validate(json.loads(test_data("vt_resolutions_gist.json"))) - ipwhois_pool = json.loads(test_data("ipwhois_gist.json")) - ipwhois_client = IpWhoisClient() - ipwhois_client._get_ipwhois = MagicMock(side_effect=lambda ip: mock_ipwhois_get(ip, ipwhois_pool)) - ip_enrich = ipwhois_client.enrich_ips(*resolutions.ip_list(3)) + geoasn_pool = json.loads(test_data("ipwhois_gist.json")) + geoasn_client = IpWhoisClient() + geoasn_client._get_ipwhois = MagicMock(side_effect=lambda ip: mock_ipwhois_get(ip, geoasn_pool)) + geoasn_enrich = geoasn_client.enrich_ips(*resolutions.ip_list(3)) urlhaus_pool = json.loads(test_data("urlhaus_gist.json")) urlhaus_client = UrlHausClient() @@ -294,8 +313,9 @@ def view14(test_data, mock_ipwhois_get, mock_urlhaus_get): console=Console(), entity=Domain.model_validate(json.loads(test_data("vt_domain_gist.json"))), resolutions=resolutions, + geoasn=geoasn_enrich, whois=PTWhois.model_validate(json.loads(test_data("pt_whois_gist.json"))), - ip_enrich=ip_enrich, + shodan=ShodanIpMap.model_validate({}), greynoise=GreynoiseIpMap.model_validate({}), abuseipdb=AbuseIpDbMap.model_validate({}), urlhaus=urlhaus_enrich, @@ -952,23 +972,20 @@ def test_resolutions_panel(self, view07, theme, display_timestamp): spans=[Span(0, 8, "link https://www.shodan.io/host/13.234.210.38")] ), "Tags:", - "Last Scan:", ] assert group[1].columns[1].style == theme.table_value assert group[1].columns[1].justify == "left" assert group[1].columns[1]._cells == [ Text("0/94 malicious", spans=[Span(0, 14, theme.info)]), display_timestamp("2022-08-06T14:56:20Z"), - Text( - "16509 (Amazon Data Services India)", - spans=[Span(7, 33, theme.asn_org)] - ), + Text("16509 (Amazon Data Services India)", spans=[Span(7, 33, "bright_white")]), "Amazon.com, Inc.", Text( - "Mumbai, India", + "Mumbai, Maharashtra, India", spans=[ Span(6, 8, "default"), - ] + Span(19, 21, "default") + ], ), Text( "22/tcp, 80/tcp, 443/tcp", @@ -989,7 +1006,6 @@ def test_resolutions_panel(self, view07, theme, display_timestamp): Span(0, 5, 'bright_white on black') ] ), - display_timestamp("2022-08-21T07:21:05Z") ] # Spacing @@ -1020,23 +1036,20 @@ def test_resolutions_panel(self, view07, theme, display_timestamp): "Services:", spans=[Span(0, 8, "link https://www.shodan.io/host/192.30.255.113")] ), - "Last Scan:", ] assert group[1].columns[1].style == theme.table_value assert group[1].columns[1].justify == "left" assert group[1].columns[1]._cells == [ Text("1/94 malicious", spans=[Span(0, 14, theme.error)]), display_timestamp("2022-06-21T18:10:54Z"), - Text( - "36459 (GitHub, Inc.)", - spans=[Span(7, 19, theme.asn_org)] - ), + Text("36459 (GitHub, Inc.)", spans=[Span(7, 19, "bright_white")]), "GitHub, Inc.", Text( - "Seattle, United States", + "Seattle, Washington, United States", spans=[ Span(7, 9, "default"), - ] + Span(19, 21, "default") + ], ), Text( "22/tcp, 80/tcp, 443/tcp", @@ -1051,7 +1064,6 @@ def test_resolutions_panel(self, view07, theme, display_timestamp): Span(19, 23, theme.transport) ] ), - display_timestamp("2022-08-21T22:33:53Z") ] # Spacing @@ -1086,23 +1098,20 @@ def test_resolutions_panel(self, view07, theme, display_timestamp): spans=[Span(0, 8, "link https://www.shodan.io/host/13.234.176.102")] ), "Tags:", - "Last Scan:", ] assert table.columns[1].style == theme.table_value assert table.columns[1].justify == "left" assert table.columns[1]._cells == [ Text("0/94 malicious", spans=[Span(0, 14, theme.info)]), display_timestamp("2015-08-17T07:11:53Z"), - Text( - "16509 (Amazon Data Services India)", - spans=[Span(7, 33, theme.asn_org)] - ), + Text("16509 (Amazon Data Services India)", spans=[Span(7, 33, "bright_white")]), "Amazon.com, Inc.", Text( - "Mumbai, India", + "Mumbai, Maharashtra, India", spans=[ Span(6, 8, "default"), - ] + Span(19, 21, "default") + ], ), Text( "22/tcp, 80/tcp, 443/tcp", @@ -1123,7 +1132,6 @@ def test_resolutions_panel(self, view07, theme, display_timestamp): Span(0, 5, 'bright_white on black') ] ), - display_timestamp("2022-08-21T02:13:35Z") ] # Old timestamp warning @@ -1167,32 +1175,17 @@ def test_resolutions_panel(self, view08, theme, display_timestamp): spans=[Span(0, 8, 'link https://virustotal.com/gui/ip-address/199.232.34.194')], ), "Resolved:", - "ASN:", - "ISP:", - "Location:", Text( "Services:", spans=[Span(0, 8, "link https://www.shodan.io/host/199.232.34.194")] ), "Tags:", - "Last Scan:", ] assert group[1].columns[1].style == theme.table_value assert group[1].columns[1].justify == "left" assert group[1].columns[1]._cells == [ Text("0/93 malicious", spans=[Span(0, 14, theme.info)]), display_timestamp("2022-06-03T22:32:19Z"), - Text( - "54113 (Fastly, Inc.)", - spans=[Span(7, 19, theme.asn_org)] - ), - "Fastly, Inc.", - Text( - "Atlanta, United States", - spans=[ - Span(7, 9, "default"), - ] - ), Text( "Varnish HTTP Cache (80/tcp)\nOther (443/tcp)", spans=[ @@ -1210,7 +1203,6 @@ def test_resolutions_panel(self, view08, theme, display_timestamp): Span(0, 3, 'bright_white on black'), ] ), - display_timestamp("2022-08-21T01:33:13Z") ] # Spacing @@ -1255,14 +1247,10 @@ def test_resolutions_panel(self, view09, theme, display_timestamp): spans=[Span(0, 8, 'link https://virustotal.com/gui/ip-address/1.0.0.1')], ), "Resolved:", - "ASN:", - "ISP:", - "Location:", Text( "Services:", spans=[Span(0, 8, "link https://www.shodan.io/host/1.0.0.1")] ), - "Last Scan:", Text( "GreyNoise:", spans=[Span(0, 9, "link https://viz.greynoise.io/riot/1.0.0.1")] @@ -1277,17 +1265,6 @@ def test_resolutions_panel(self, view09, theme, display_timestamp): assert table.columns[1]._cells == [ Text("2/94 malicious", spans=[Span(0, 14, theme.error)]), display_timestamp("2020-08-01T22:07:20Z"), - Text( - "13335 (APNIC and Cloudflare DNS Resolver project)", - spans=[Span(7, 48, theme.asn_org)], - ), - "Cloudflare, Inc.", - Text( - "Los Angeles, United States", - spans=[ - Span(11, 13, "default"), - ] - ), Text( ( "CloudFlare (80/tcp, 8080/tcp)\nOther (53/tcp, 53/udp, 443/tcp, 2082/tcp, " @@ -1323,7 +1300,6 @@ def test_resolutions_panel(self, view09, theme, display_timestamp): Span(96, 100, theme.transport), ] ), - display_timestamp("2022-08-22T02:35:34Z"), Text( "✓ riot ✗ noise ✓ benign", spans=[ @@ -1406,35 +1382,19 @@ def test_resolutions_panel(self, view11, theme, display_timestamp): spans=[Span(0, 8, 'link https://virustotal.com/gui/ip-address/13.234.210.38')], ), "Resolved:", - "ASN:", - "ISP:", - "Location:", "Tags:", - "Last Scan:", ] assert group[1].columns[1].style == theme.table_value assert group[1].columns[1].justify == "left" assert group[1].columns[1]._cells == [ Text("0/94 malicious", spans=[Span(0, 14, theme.info)]), display_timestamp("2022-08-06T14:56:20Z"), - Text( - "16509 (Amazon Data Services India)", - spans=[Span(7, 33, theme.asn_org)] - ), - "Amazon.com, Inc.", - Text( - "Mumbai, India", - spans=[ - Span(6, 8, "default"), - ] - ), Text( "cloud", spans=[ Span(0, 5, theme.tags) ] ), - display_timestamp("2022-08-21T07:21:05Z") ] diff --git a/tests/test_ui_ip_view.py b/tests/test_ui_ip_view.py index 7770c95..bd74e39 100644 --- a/tests/test_ui_ip_view.py +++ b/tests/test_ui_ip_view.py @@ -24,25 +24,30 @@ @pytest.fixture() -def view01(test_data, mock_abuseipdb_get, mock_ipwhois_get, mock_greynoise_get, mock_urlhaus_get): +def view01(test_data, mock_abuseipdb_get, mock_ipwhois_get, mock_shodan_get_ip, mock_greynoise_get, mock_urlhaus_get): """ 1.1.1.1 with PT whois. Complete test of all panels. Also test print(). """ ip = "1.1.1.1" - abuseipdb_pool = json.loads(test_data("abuseipdb_1.1.1.1_red.json")) - abuseipdb_client = AbuseIpDbClient("dummykey") - abuseipdb_client._get_ip = MagicMock(side_effect=lambda ip: mock_abuseipdb_get(ip, abuseipdb_pool)) - abuseipdb_enrich = abuseipdb_client.enrich_ips(ip) + geoasn_pool = json.loads(test_data("ipwhois_1.1.1.1.json")) + geoasn_client = IpWhoisClient() + geoasn_client._get_ipwhois = MagicMock(side_effect=lambda ip: mock_ipwhois_get(ip, geoasn_pool)) + geoasn_enrich = geoasn_client.enrich_ips(ip) - ipwhois_pool = json.loads(test_data("ipwhois_1.1.1.1.json")) - ipwhois_client = IpWhoisClient() - ipwhois_client._get_ipwhois = MagicMock(side_effect=lambda ip: mock_ipwhois_get(ip, ipwhois_pool)) - ip_enrich = ipwhois_client.enrich_ips(ip) + shodan_pool = json.loads(test_data("shodan_1.1.1.1.json")) + shodan_client = ShodanClient(MagicMock()) + shodan_client._get_ip = MagicMock(side_effect=lambda ip: mock_shodan_get_ip(ip, shodan_pool)) + shodan_enrich = shodan_client.enrich_ips(ip) greynoise_pool = json.loads(test_data("greynoise_1.1.1.1.json")) greynoise_client = GreynoiseClient("dummykey") greynoise_client._get_ip = MagicMock(side_effect=lambda ip: mock_greynoise_get(ip, greynoise_pool)) greynoise_enrich = greynoise_client.enrich_ips(ip) + abuseipdb_pool = json.loads(test_data("abuseipdb_1.1.1.1_red.json")) + abuseipdb_client = AbuseIpDbClient("dummykey") + abuseipdb_client._get_ip = MagicMock(side_effect=lambda ip: mock_abuseipdb_get(ip, abuseipdb_pool)) + abuseipdb_enrich = abuseipdb_client.enrich_ips(ip) + urlhaus_pool = json.loads(test_data("urlhaus_1.1.1.1.json")) urlhaus_client = UrlHausClient() urlhaus_client._get_host = MagicMock(side_effect=lambda ip: mock_urlhaus_get(ip, urlhaus_pool)) @@ -51,8 +56,9 @@ def view01(test_data, mock_abuseipdb_get, mock_ipwhois_get, mock_greynoise_get, return IpAddressView( console=Console(), entity=IpAddress.model_validate(json.loads(test_data("vt_ip_1.1.1.1.json"))), + geoasn=geoasn_enrich, whois=PTWhois.model_validate(json.loads(test_data("pt_whois_1.1.1.1.json"))), - ip_enrich=ip_enrich, + shodan=shodan_enrich, greynoise=greynoise_enrich, abuseipdb=abuseipdb_enrich, urlhaus=urlhaus_enrich, @@ -60,13 +66,18 @@ def view01(test_data, mock_abuseipdb_get, mock_ipwhois_get, mock_greynoise_get, @pytest.fixture() -def view02(test_data, mock_shodan_get_ip, mock_greynoise_get): +def view02(test_data, mock_ipwhois_get, mock_shodan_get_ip, mock_greynoise_get): """ 1.1.1.1 with Shodan and Greynoise. Test the whole IP panel. """ ip = "1.1.1.1" + geoasn_pool = json.loads(test_data("ipwhois_1.1.1.1.json")) + geoasn_client = IpWhoisClient() + geoasn_client._get_ipwhois = MagicMock(side_effect=lambda ip: mock_ipwhois_get(ip, geoasn_pool)) + geoasn_enrich = geoasn_client.enrich_ips(ip) + shodan_pool = json.loads(test_data("shodan_1.1.1.1.json")) shodan_client = ShodanClient(MagicMock()) shodan_client._get_ip = MagicMock(side_effect=lambda ip: mock_shodan_get_ip(ip, shodan_pool)) - ip_enrich = shodan_client.enrich_ips(ip) + shodan_enrich = shodan_client.enrich_ips(ip) greynoise_pool = json.loads(test_data("greynoise_1.1.1.1.json")) greynoise_client = GreynoiseClient("dummykey") @@ -76,8 +87,9 @@ def view02(test_data, mock_shodan_get_ip, mock_greynoise_get): return IpAddressView( console=Console(), entity=IpAddress.model_validate(json.loads(test_data("vt_ip_1.1.1.1.json"))), + geoasn=geoasn_enrich, whois=MagicMock(), - ip_enrich=ip_enrich, + shodan=shodan_enrich, greynoise=greynoise_enrich, abuseipdb=MagicMock(), urlhaus=UrlHausMap.model_validate({}), @@ -90,8 +102,9 @@ def view03(test_data): return IpAddressView( console=Console(), entity=MagicMock(), + geoasn=MagicMock(), whois=VTWhois.model_validate(json.loads(test_data("vt_whois_1.1.1.1.json"))), - ip_enrich=MagicMock(), + shodan=MagicMock(), greynoise=MagicMock(), abuseipdb=MagicMock(), urlhaus=MagicMock(), @@ -107,8 +120,9 @@ def view04(test_data): return IpAddressView( console=Console(), entity=IpAddress.model_validate(json.loads(test_data("vt_ip_142.251.220.110.json"))), + geoasn=IpWhoisMap.model_validate({}), whois=MagicMock(), - ip_enrich=IpWhoisMap.model_validate({}), + shodan=MagicMock(), greynoise=GreynoiseIpMap.model_validate({}), abuseipdb=MagicMock(), urlhaus=UrlHausMap.model_validate({}), @@ -127,8 +141,9 @@ def view05(test_data, mock_greynoise_get): return IpAddressView( console=Console(), entity=IpAddress.model_validate(json.loads(test_data("vt_ip_1.1.1.1.json"))), + geoasn=IpWhoisMap.model_validate({}), whois=MagicMock(), - ip_enrich=IpWhoisMap.model_validate({}), + shodan=MagicMock(), greynoise=greynoise_enrich, abuseipdb=MagicMock(), urlhaus=UrlHausMap.model_validate({}), @@ -147,8 +162,9 @@ def view06(test_data, mock_greynoise_get): return IpAddressView( console=Console(), entity=IpAddress.model_validate(json.loads(test_data("vt_ip_1.1.1.1.json"))), + geoasn=IpWhoisMap.model_validate({}), whois=MagicMock(), - ip_enrich=IpWhoisMap.model_validate({}), + shodan=MagicMock(), greynoise=greynoise_enrich, abuseipdb=MagicMock(), urlhaus=MagicMock(), @@ -167,8 +183,9 @@ def view07(test_data, mock_abuseipdb_get): return IpAddressView( console=Console(), entity=IpAddress.model_validate(json.loads(test_data("vt_ip_1.1.1.1.json"))), + geoasn=IpWhoisMap.model_validate({}), whois=MagicMock(), - ip_enrich=IpWhoisMap.model_validate({}), + shodan=MagicMock(), greynoise=MagicMock(), abuseipdb=abuseipdb_enrich, urlhaus=MagicMock(), @@ -187,8 +204,9 @@ def view08(test_data, mock_abuseipdb_get): return IpAddressView( console=Console(), entity=IpAddress.model_validate(json.loads(test_data("vt_ip_1.1.1.1.json"))), + geoasn=IpWhoisMap.model_validate({}), whois=MagicMock(), - ip_enrich=IpWhoisMap.model_validate({}), + shodan=MagicMock(), greynoise=MagicMock(), abuseipdb=abuseipdb_enrich, urlhaus=MagicMock(), @@ -204,9 +222,10 @@ def test_ip_panel(self, view01, theme, display_timestamp): # Sections vt_section = ip.renderable.renderables[0] - enrich_section = ip.renderable.renderables[2] - urlhaus_section = ip.renderable.renderables[4] - other_section = ip.renderable.renderables[6] + geoasn_section = ip.renderable.renderables[2] + shodan_section = ip.renderable.renderables[4] + urlhaus_section = ip.renderable.renderables[6] + other_section = ip.renderable.renderables[8] # Line breaks between sections assert ip.renderable.renderables[1] == "" @@ -255,15 +274,15 @@ def test_ip_panel(self, view01, theme, display_timestamp): ] # - # IP enrich section + # IP location and ASN section # # Heading - assert enrich_section.renderables[0] == Text("IPwhois") - assert enrich_section.renderables[0].style == theme.heading_h1 + assert geoasn_section.renderables[0] == Text("IPWhois") + assert geoasn_section.renderables[0].style == theme.heading_h1 # Table - table = enrich_section.renderables[1] + table = geoasn_section.renderables[1] assert type(table) is Table assert table.columns[0].style == theme.table_field assert table.columns[0].justify == "left" @@ -283,12 +302,86 @@ def test_ip_panel(self, view01, theme, display_timestamp): Text( "Sydney, New South Wales, Australia", spans=[ - Span(6, 8, 'default'), - Span(23, 25, 'default'), + Span(6, 8, "default"), + Span(23, 25, "default"), ] ), ] + # + # Shodan section + # + + # Heading + assert shodan_section.renderables[0] == Text("Shodan") + assert shodan_section.renderables[0].style == theme.heading_h1 + + # Table + table = shodan_section.renderables[1] + assert type(table) is Table + assert table.columns[0].style == theme.table_field + assert table.columns[0].justify == "left" + assert table.columns[0]._cells == [ + Text( + "Services:", + spans=[Span(0, 8, 'link https://www.shodan.io/host/1.1.1.1')], + ), + "Last Scan:", + ] + assert table.columns[1].style == theme.table_value + assert table.columns[1].justify == "left" + assert table.columns[1]._cells == [ + Text( + ( + "Cisco router tftpd (69/udp)\nCloudFlare (80/tcp, 8080/tcp, 8880/tcp)\n" + "DrayTek Vigor Router (443/tcp)\nOther (53/tcp, 53/udp, 161/udp, " + "2082/tcp, 2083/tcp, 2086/tcp, 2087/tcp, 8443/tcp)" + ), + spans=[ + Span(0, 18, theme.product), + Span(20, 22, theme.port), + Span(22, 26, theme.transport), + Span(28, 38, theme.product), + Span(40, 42, theme.port), + Span(42, 46, theme.transport), + Span(46, 48, "default"), + Span(48, 52, theme.port), + Span(52, 56, theme.transport), + Span(56, 58, "default"), + Span(58, 62, theme.port), + Span(62, 66, theme.transport), + Span(68, 88, theme.product), + Span(90, 93, theme.port), + Span(93, 97, theme.transport), + Span(99, 104, theme.product), + Span(106, 108, theme.port), + Span(108, 112, theme.transport), + Span(112, 114, "default"), + Span(114, 116, theme.port), + Span(116, 120, theme.transport), + Span(120, 122, "default"), + Span(122, 125, theme.port), + Span(125, 129, theme.transport), + Span(129, 131, "default"), + Span(131, 135, theme.port), + Span(135, 139, theme.transport), + Span(139, 141, "default"), + Span(141, 145, theme.port), + Span(145, 149, theme.transport), + Span(149, 151, "default"), + Span(151, 155, theme.port), + Span(155, 159, theme.transport), + Span(159, 161, "default"), + Span(161, 165, theme.port), + Span(165, 169, theme.transport), + Span(169, 171, "default"), + Span(171, 175, theme.port), + Span(175, 179, theme.transport), + ] + ), + display_timestamp("2022-09-04T01:03:56Z"), + ] + # # Urlhaus section # @@ -453,8 +546,9 @@ def test_ip_panel(self, view02, theme, display_timestamp): # Sections vt_section = ip.renderable.renderables[0] - enrich_section = ip.renderable.renderables[2] - other_section = ip.renderable.renderables[4] + geoasn_section = ip.renderable.renderables[2] + shodan_section = ip.renderable.renderables[4] + other_section = ip.renderable.renderables[6] # Line breaks between sections assert ip.renderable.renderables[1] == "" @@ -502,15 +596,15 @@ def test_ip_panel(self, view02, theme, display_timestamp): ] # - # IP enrich section + # IP location and ASN section # # Heading - assert enrich_section.renderables[0] == Text("Shodan") - assert enrich_section.renderables[0].style == theme.heading_h1 + assert geoasn_section.renderables[0] == Text("IPWhois") + assert geoasn_section.renderables[0].style == theme.heading_h1 # Table - table = enrich_section.renderables[1] + table = geoasn_section.renderables[1] assert type(table) is Table assert table.columns[0].style == theme.table_field assert table.columns[0].justify == "left" @@ -518,11 +612,6 @@ def test_ip_panel(self, view02, theme, display_timestamp): "ASN:", "ISP:", "Location:", - Text( - "Services:", - spans=[Span(0, 8, 'link https://www.shodan.io/host/1.1.1.1')], - ), - "Last Scan:", ] assert table.columns[1].style == theme.table_value assert table.columns[1].justify == "left" @@ -533,9 +622,37 @@ def test_ip_panel(self, view02, theme, display_timestamp): ), "Cloudflare, Inc.", Text( - "Los Angeles, United States", - spans=[Span(11, 13, "default")] + "Sydney, New South Wales, Australia", + spans=[ + Span(6, 8, "default"), + Span(23, 25, "default") + ], + ), + ] + + # + # Shodan section + # + + # Heading + assert shodan_section.renderables[0] == Text("Shodan") + assert shodan_section.renderables[0].style == theme.heading_h1 + + # Table + table = shodan_section.renderables[1] + assert type(table) is Table + assert table.columns[0].style == theme.table_field + assert table.columns[0].justify == "left" + assert table.columns[0]._cells == [ + Text( + "Services:", + spans=[Span(0, 8, 'link https://www.shodan.io/host/1.1.1.1')], ), + "Last Scan:", + ] + assert table.columns[1].style == theme.table_value + assert table.columns[1].justify == "left" + assert table.columns[1]._cells == [ Text( ( "Cisco router tftpd (69/udp)\nCloudFlare (80/tcp, 8080/tcp, 8880/tcp)\n" diff --git a/wtfis/clients/shodan.py b/wtfis/clients/shodan.py index 4f784e9..2573c37 100644 --- a/wtfis/clients/shodan.py +++ b/wtfis/clients/shodan.py @@ -1,5 +1,4 @@ from shodan import Shodan -from shodan.exception import APIError from typing import Optional from wtfis.clients.base import BaseClient, BaseIpEnricherClient @@ -18,13 +17,7 @@ def name(self) -> str: return "Shodan" def _get_ip(self, ip: str) -> Optional[ShodanIp]: - try: - return ShodanIp.model_validate(self.s.host(ip, minify=False)) - except APIError as e: - if str(e) == "Invalid API key": - raise APIError("Invalid Shodan API key") - else: - raise + return ShodanIp.model_validate(self.s.host(ip, minify=False)) def enrich_ips(self, *ips: str) -> ShodanIpMap: shodan_map = {} diff --git a/wtfis/handlers/base.py b/wtfis/handlers/base.py index e6c0c39..f79765e 100644 --- a/wtfis/handlers/base.py +++ b/wtfis/handlers/base.py @@ -21,6 +21,7 @@ from wtfis.models.abuseipdb import AbuseIpDbMap from wtfis.models.base import WhoisBase from wtfis.models.greynoise import GreynoiseIpMap +from wtfis.models.ipwhois import IpWhoisMap from wtfis.models.shodan import ShodanIpMap from wtfis.models.urlhaus import UrlHausMap from wtfis.models.types import IpGeoAsnMapType @@ -90,7 +91,7 @@ def __init__( # Dataset containers self.vt_info: Union[Domain, IpAddress] - self.geoasn: IpGeoAsnMapType + self.geoasn: IpGeoAsnMapType = IpWhoisMap.empty() # Default to ipwhois self.whois: WhoisBase self.shodan: ShodanIpMap = ShodanIpMap.empty() self.greynoise: GreynoiseIpMap = GreynoiseIpMap.empty() diff --git a/wtfis/models/base.py b/wtfis/models/base.py index 723cea1..1d36424 100644 --- a/wtfis/models/base.py +++ b/wtfis/models/base.py @@ -61,4 +61,4 @@ class IpGeoAsnMapBase(RootModel, abc.ABC): @classmethod def empty(cls) -> IpGeoAsnMapBase: - return cls.model_validate({}) + return cls.model_validate({}) # pragma: no coverage diff --git a/wtfis/ui/base.py b/wtfis/ui/base.py index 2f844bc..4457cb2 100644 --- a/wtfis/ui/base.py +++ b/wtfis/ui/base.py @@ -37,7 +37,7 @@ def __init__( self, console: Console, entity: Any, - ip_geoasn: IpGeoAsnMapType, + geoasn: IpGeoAsnMapType, whois: Optional[WhoisBase], shodan: ShodanIpMap, greynoise: GreynoiseIpMap, @@ -46,7 +46,7 @@ def __init__( ) -> None: self.console = console self.entity = entity - self.ip_geoasn = ip_geoasn + self.geoasn = geoasn self.whois = whois self.shodan = shodan self.greynoise = greynoise @@ -300,7 +300,7 @@ def _gen_asn_text( return text def _get_geoasn_enrichment(self, ip: str) -> Optional[IpGeoAsnType]: - return self.ip_geoasn.root[ip] if ip in self.ip_geoasn.root.keys() else None + return self.geoasn.root[ip] if ip in self.geoasn.root.keys() else None def _get_shodan_enrichment(self, ip: str) -> Optional[ShodanIp]: return self.shodan.root[ip] if ip in self.shodan.root.keys() else None @@ -367,7 +367,7 @@ def _gen_vt_section(self) -> RenderableType: self._gen_heading_text("VirusTotal") ) - def _gen_ip_geoasn_section(self) -> Optional[RenderableType]: + def _gen_geoasn_section(self) -> Optional[RenderableType]: """ IP location and ASN section. Applies to IP views only """ enrich = self._get_geoasn_enrichment(self.entity.data.id_) diff --git a/wtfis/ui/view.py b/wtfis/ui/view.py index 6bfb9c9..dcadcd8 100644 --- a/wtfis/ui/view.py +++ b/wtfis/ui/view.py @@ -34,7 +34,7 @@ def __init__( console: Console, entity: Domain, resolutions: Optional[Resolutions], - ip_geoasn: IpGeoAsnMapType, + geoasn: IpGeoAsnMapType, whois: WhoisBase, shodan: ShodanIpMap, greynoise: GreynoiseIpMap, @@ -42,7 +42,7 @@ def __init__( urlhaus: UrlHausMap, max_resolutions: int = 3, ) -> None: - super().__init__(console, entity, ip_geoasn, whois, shodan, greynoise, abuseipdb, urlhaus) + super().__init__(console, entity, geoasn, whois, shodan, greynoise, abuseipdb, urlhaus) self.resolutions = resolutions self.max_resolutions = max_resolutions @@ -185,19 +185,19 @@ def __init__( self, console: Console, entity: IpAddress, - ip_geoasn: IpGeoAsnMapType, + geoasn: IpGeoAsnMapType, whois: WhoisBase, shodan: ShodanIpMap, greynoise: GreynoiseIpMap, abuseipdb: AbuseIpDbMap, urlhaus: UrlHausMap, ) -> None: - super().__init__(console, entity, ip_geoasn, whois, shodan, greynoise, abuseipdb, urlhaus) + super().__init__(console, entity, geoasn, whois, shodan, greynoise, abuseipdb, urlhaus) def ip_panel(self) -> Panel: content = [self._gen_vt_section()] # VT section for section in ( - self._gen_ip_geoasn_section(), # IP location and ASN section + self._gen_geoasn_section(), # IP location and ASN section self._gen_shodan_section(), # Shodan section self._gen_urlhaus_section(), # URLhaus section self._gen_ip_other_section(), # Other section From f89492e7b04dca31b73b8a874e1ff7098fa214fd Mon Sep 17 00:00:00 2001 From: joon Date: Sun, 2 Jun 2024 20:59:10 -0700 Subject: [PATCH 3/3] Update screenshot --- imgs/example-ip.png | Bin 100708 -> 107433 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/imgs/example-ip.png b/imgs/example-ip.png index 453862c9ceff7db79df231d1cc71975cde18fd2e..8556ccf2349b1a45ca883c44d5a78b6967c16323 100644 GIT binary patch literal 107433 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 n5;E$DqzzJV#f@Yjl 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ϐca=+&Y=Kh=Dbn!d!@H&MbU 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%0AN1i>YVD)(iB)!wq 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�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