{"id":20292490,"url":"https://github.com/mauricelambert/networkscanner","last_synced_at":"2025-04-11T11:22:29.319Z","repository":{"id":57445749,"uuid":"328264362","full_name":"mauricelambert/NetworkScanner","owner":"mauricelambert","description":"This package implements an asynchronous network scanner.","archived":false,"fork":false,"pushed_at":"2023-05-02T10:44:20.000Z","size":48,"stargazers_count":8,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-25T07:41:37.046Z","etag":null,"topics":["async","asyncio","host-discovery","network-analysis","network-scanner","pypi-package","python3","scanner","scapy"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mauricelambert.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-01-09T23:14:47.000Z","updated_at":"2024-11-18T13:22:09.000Z","dependencies_parsed_at":"2022-09-26T16:31:21.905Z","dependency_job_id":null,"html_url":"https://github.com/mauricelambert/NetworkScanner","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mauricelambert%2FNetworkScanner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mauricelambert%2FNetworkScanner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mauricelambert%2FNetworkScanner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mauricelambert%2FNetworkScanner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mauricelambert","download_url":"https://codeload.github.com/mauricelambert/NetworkScanner/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248382129,"owners_count":21094541,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["async","asyncio","host-discovery","network-analysis","network-scanner","pypi-package","python3","scanner","scapy"],"created_at":"2024-11-14T15:17:34.014Z","updated_at":"2025-04-11T11:22:29.297Z","avatar_url":"https://github.com/mauricelambert.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"![NetworkScanner logo](https://mauricelambert.github.io/info/python/security/NetworkScanner_small.png \"NetworkScanner logo\")\r\n\r\n# NetworkScanner\r\n\r\n## Description\r\n\r\nThis package implements an asynchronous network scanner (using scapy or asyncio).\r\n\r\n## Requirements\r\n\r\nThis package require: \r\n - python3\r\n - python3 Standard Library\r\n - PythonToolsKit\r\n\r\nOptional:\r\n - Scapy\r\n\r\n## Installation\r\n\r\n```bash\r\npip install NetworkScanner \r\n```\r\n\r\n## Usages\r\n\r\n### Command lines\r\n\r\n```bash\r\n# Python executable\r\npython3 NetworkScanner.pyz -h\r\n# or\r\nchmod u+x NetworkScanner.pyz\r\n./NetworkScanner.pyz --help\r\n\r\n# Python module\r\npython3 -m NetworkScanner -t 172.18.0.1-172.18.0.15\r\n\r\n# Entry point (console)\r\nNetworkScanner -d --noping --hostname --ports 22 80 -p 445 139 443 -T 1 -R -s -t 172.18.0.0/28\r\nNetworkScanner -i 172.18.0. -P -t 172.18.0.0/28 # Passive scan using scapy sniffer\r\n```\r\n\r\n### Python3\r\n\r\n```python\r\n# Simple usage to print results in your console\r\nfrom NetworkScanner import NetworkScanner, logger\r\nscanner = NetworkScanner({\"172.18.0.1\", \"172.18.0.3\"})\r\nscanner.scan()      # Without scapy\r\n\r\n# Custom behaviors\r\n\r\ndef do_IP_UP(ip, reason, detail = None):\r\n    print(f\"{ip} is UP ({reason} {detail})\")\r\n\r\nscanner.handle_UP = do_IP_UP\r\nscanner.scan(True)  # With scapy\r\n\r\nscanner.hosts_up    # List of IP addresses used\r\nscanner.hosts_down  # List of unused IP addresses\r\n\r\nfrom scapy.all import *\r\nscanner = NetworkScanner({\"172.18.0.1\"}, False, [22, 80], False, True, False, 1, conf.iface)\r\nscanner.handle_UP = do_IP_UP\r\nscanner.handle_DOWN = print\r\nscanner.scan()\r\n\r\nlogger.setLevel(10) # debug mode\r\n\r\nclass CustomNetworkScanner(NetworkScanner):\r\n    def handle_UP(self, ip: str, detection_type: str, details = None): # details is a kwarg\r\n        print(f\"IP: {ip} is UP (detection type: {detection_type}, details: {details}\")\r\n    def handle_DOWN(self, ip: str):\r\n        print(f\"IP: {ip} is DOWN\")\r\n\r\nscanner = NetworkScanner({\"172.18.0.1\", \"172.18.0.3\"})\r\nscanner.scan()\r\nscanner.scan(passive=True) # passive mode using scapy sniffer\r\n```\r\n\r\n## Useful usages\r\n\r\nWith scapy, *hosts discovery (best performances)*:\r\n\r\n```bash\r\nNetworkScanner --noping -T 1 -t [targets]\r\n```\r\n\r\n```python\r\nfrom NetworkScanner import NetworkScanner\r\nfrom scapy.all import conf\r\n\r\nscanner = NetworkScanner(\r\n    {},\r\n    ping=False,\r\n    ports=[],\r\n    arp=True,\r\n    hostname=False,\r\n    real_time=False,\r\n    timeout=1,\r\n    iface=conf.iface,\r\n)\r\nscanner.scan(True)\r\n```\r\n\r\nWithout scapy, *hosts discovery*:\r\n\r\n```bash\r\nNetworkScanner -t [targets]\r\n```\r\n\r\n```python\r\nfrom NetworkScanner import NetworkScanner\r\nscanner = NetworkScanner(\r\n    {},\r\n    ping=True,\r\n    ports=[],\r\n    arp=True,\r\n    hostname=False,\r\n    real_time=False,\r\n    timeout=1,\r\n)\r\nscanner.scan()\r\n```\r\n\r\nWithout scapy, *opened port \u0026\u0026 hosts discovery*:\r\n\r\n```python\r\nfrom NetworkScanner import NetworkScanner\r\n\r\ndef host_up(ip: str, method: str, port: int = None):\r\n    if method == 'tcp':\r\n        print(f\"{ip}:{port} is open.\")\r\n    else:\r\n        print(f\"{ip} is UP.\")\r\n\r\nscanner = NetworkScanner(\r\n    {},\r\n    ping=False,\r\n    ports=[22, 80, 443],\r\n    arp=True,\r\n    hostname=False,\r\n    real_time=False,\r\n    timeout=1,\r\n)\r\nscanner.handle_UP = host_up\r\nscanner.scan(False)\r\n```\r\n\r\n## Links\r\n\r\n - [Github Page](https://github.com/mauricelambert/NetworkScanner)\r\n - [Pypi](https://pypi.org/project/NetworkScanner/)\r\n - [Documentation](https://mauricelambert.github.io/info/python/security/NetworkScanner.html)\r\n - [Executable](https://mauricelambert.github.io/info/python/security/NetworkScanner.pyz)\r\n\r\n## Help\r\n\r\n```text\r\nusage: NetworkScanner.py [-h] [--interface INTERFACE] --targets TARGETS [TARGETS ...] [--noping] [--noarp]\r\n                         [--hostname] [--ports PORTS [PORTS ...]] [--timeout TIMEOUT] [--no-realtime] [--debug]\r\n                         [--print-ip] [--force-asynchronous] [--passive-scan]\r\n\r\nThis program scans networks and IP address ranges.\r\n\r\noptions:\r\n  -h, --help            show this help message and exit\r\n  --interface INTERFACE, -i INTERFACE\r\n                        Part of the IP, MAC or name of the interface\r\n  --targets TARGETS [TARGETS ...], -t TARGETS [TARGETS ...]\r\n                        Targets from networks and IP address ranges.\r\n  --noping, -g          No ping detection. [Without scapy ping is required for ARP detection]\r\n  --noarp, -A           No arp cache.\r\n  --hostname, -H        Test the hostname resolution to defined if host is UP (longer).\r\n  --ports PORTS [PORTS ...], -p PORTS [PORTS ...]\r\n                        Test the TCP port connections to defined if the host is UP.\r\n  --timeout TIMEOUT, -T TIMEOUT\r\n                        Connections timeout.\r\n  --no-realtime, -R     Do not print results in real time.\r\n  --debug, -d           Debug mode (logger level debug).\r\n  --print-ip, -I        Print only the IP address if UP.\r\n  --force-asynchronous, --async, -a\r\n                        Force asynchronous mode, using asyncio instead of scapy.\r\n  --passive-scan, --passive, -P\r\n                        Passive scan, sniff the network packets to identify who is up. This scan is endless because\r\n                        you can never be sure to have detected all the IP addresses.\r\n```\r\n\r\n## Licence\r\n\r\nLicensed under the [GPL, version 3](https://www.gnu.org/licenses/).\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmauricelambert%2Fnetworkscanner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmauricelambert%2Fnetworkscanner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmauricelambert%2Fnetworkscanner/lists"}