finnoscarmax/network-scanner-tool

GitHub: finnoscarmax/network-scanner-tool

一款用于扫描附近 Wi‑Fi 网络并记录信号强度的 Python 教学工具,解决近距离无线网络发现与信号监控问题。

Stars: 0 | Forks: 0

# network-scanner-tool Python 工具,用于扫描附近的 Wi-Fi 网络并记录信号强度。开发中。 网络扫描工具 - 仅供教育用途 作者:finn-oscar-max 最后更新:2026年3月30日 ```python import subprocess import json import datetime import hashlib from typing import List, Dict class NetworkScanner: ``` Scans nearby Wi-Fi networks and logs access points. def __init__(self, interface: str = "wlan0"): self.interface = interface self.scan_results = [] self.log_file = "scan_log.json" def scan_networks(self) -> List[Dict]: """ Execute iwlist scan and parse results. """ try: output = subprocess.check_output( ["sudo", "iwlist", self.interface, "scan"], stderr=subprocess.DEVNULL, text=True ) return self._parse_scan(output) except subprocess.CalledProcessError: print("[ERROR] Scan failed. Check interface.") return [] def _parse_scan(self, raw_output: str) -> List[Dict]: """ Parse iwlist output into structured data. """ networks = [] current = {} for line in raw_output.split('\n'): line = line.strip() if 'Cell' in line: if current: networks.append(current) current = {} elif 'Address:' in line: current['bssid'] = line.split('Address: ')[1] elif 'ESSID:' in line: essid = line.split('ESSID:"')[1].rstrip('"') current['ssid'] = essid if essid else "[HIDDEN]" elif 'Quality=' in line: quality = line.split('Quality=')[1].split(' ')[0] current['signal'] = quality elif 'Encryption key:' in line: current['encrypted'] = 'on' in line.lower() if current: networks.append(current) return networks def log_results(self, networks: List[Dict]) -> None: """ Save scan results with timestamp. """ log_entry = { "timestamp": datetime.datetime.now().isoformat(), "networks": networks, "device_id": hashlib.sha256(b"finn-oscar-max").hexdigest()[:8] } with open(self.log_file, 'a') as f: json.dump(log_entry, f) f.write('\n') print(f"[+] Logged {len(networks)} networks to {self.log_file}") def check_signal_strength(self, bssid: str) -> int: """ Monitor specific BSSID for signal changes. Useful for proximity alerts. """ networks = self.scan_networks() for net in networks: if net.get('bssid') == bssid: quality = net.get('signal', '0/100') return int(quality.split('/')[0]) return -1 def run_monitor(self, target_bssid: str, interval: int = 5): """ Continuously monitor a target network. """ print(f"[*] Monitoring {target_bssid} every {interval} seconds...") try: while True: strength = self.check_signal_strength(target_bssid) if strength > 70: print(f"[!] Strong signal detected! Strength: {strength}") elif strength >= 0: print(f"[.] Signal strength: {strength}") else: print(f"[-] Target not found") time.sleep(interval) except KeyboardInterrupt: print("\n[*] Monitoring stopped") ``` if __name__ == "__main__": scanner = NetworkScanner() ``` # 示例用法 networks = scanner.scan_networks() scanner.log_results(networks) for net in networks[:5]: print(f"SSID: {net.get('ssid')} | BSSID: {net.get('bssid')} | Signal: {net.get('signal')}") ``` ```
标签:ETW劫持, Homebrew安装, iwlist, JSON日志, Python, Wi-Fi扫描, 二进制发布, 云存储安全, 信号强度, 信号质量, 子网发现, 开源工具, 接口扫描, 教育用途, 无后门, 无线探测, 无线网络, 日志记录, 系统分析, 网络分析, 网络安全教育, 网络工具, 网络扫描, 逆向工具