diff --git a/pscanner/__init__.py b/pscanner/__init__.py index 5d04701..f35888d 100644 --- a/pscanner/__init__.py +++ b/pscanner/__init__.py @@ -2,19 +2,22 @@ # # SPDX-License-Identifier: MIT import ipaddress -from pythonping import ping import socket from typing import List from colorama import init, Fore +from icmplib import async_multiping, ping, multiping init() GREEN = Fore.GREEN RESET = Fore.RESET GRAY = Fore.LIGHTBLACK_EX +def are_alive(addresses: List[str]) -> List[str]: + hosts = multiping(addresses) + return [ host.address for host in hosts if host.is_alive ] def is_host_alive(host: str) -> bool: - if ping(host, timeout=1, count=1).success(): + if ping(host, timeout=1, count=1).is_alive: return True else: print(f"{GRAY}{host:15} is not alive {RESET}") diff --git a/pscanner/cli/__init__.py b/pscanner/cli/__init__.py index 55cddd9..d89cb59 100644 --- a/pscanner/cli/__init__.py +++ b/pscanner/cli/__init__.py @@ -1,8 +1,9 @@ # SPDX-FileCopyrightText: 2022-present U.N. Owen # # SPDX-License-Identifier: MIT +import asyncio import click -from pscanner import is_port_open, is_subnet, hosts_in_subnet, is_host_alive +from pscanner import are_alive, async_are_alive, is_port_open, is_subnet, hosts_in_subnet, is_host_alive from ..__about__ import __version__ @@ -16,8 +17,12 @@ from ..__about__ import __version__ @click.pass_context def pscanner(ctx: click.Context, host, port): if is_subnet(host): - for ip in hosts_in_subnet(host): - if is_host_alive(str(ip)): + hosts = [ str(_) for _ in hosts_in_subnet(host) ] + print(f"pinging {len(hosts)} hosts") + #alive_hosts = asyncio.run(async_are_alive(hosts), debug=True) + alive_hosts = are_alive(hosts) + print(f"found {len(alive_hosts)} alive") + for ip in alive_hosts: is_port_open(str(ip), port) else: if is_host_alive(host): diff --git a/pyproject.toml b/pyproject.toml index 75d8b81..4e947b6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,7 +25,7 @@ classifiers = [ ] dependencies = [ "click", - "pythonping" + "icmplib" ] dynamic = ["version"]