F12E14

Network Scanning Tool
 avatar
unknown
python
25 days ago
1.7 kB
8
Indexable
import socket
from concurrent.futures import ThreadPoolExecutor

def banner_grab(ip, port):
    """Attempts to grab the service banner from the target port."""
    try:
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
            s.settimeout(2)
            s.connect((ip, port))
            s.sendall(b'GET / HTTP/1.1\r\n\r\n')
            banner = s.recv(1024).decode().strip()
            return banner
    except Exception:
        return None


def scan_port(ip, port):
    """Scans a single port to check if it's open."""
    try:
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
            s.settimeout(1)
            result = s.connect_ex((ip, port))
            if result == 0:
                banner = banner_grab(ip, port)
                print(f"[+] Open Port: {port} - Service: {banner or 'Unknown'}")
                return port, banner
    except Exception:
        pass
    return None


def scan_target(ip, ports):
    """Scans the target IP for open ports."""
    print(f"Scanning Target: {ip}")
    with ThreadPoolExecutor(max_workers=50) as executor:
        results = executor.map(lambda port: scan_port(ip, port), ports)
    print("[*] Scan Complete!")


def main():
    print("=== Simple Python Network Scanner ===")
    target_ip = input("Enter Target IP Address: ").strip()
    ports = input("Enter Port Range (e.g., 1-1000): ").strip()

    try:
        start_port, end_port = map(int, ports.split('-'))
        ports_to_scan = range(start_port, end_port + 1)
    except ValueError:
        print("Invalid port range. Use format: start-end (e.g., 1-65535)")
        return

    scan_target(target_ip, ports_to_scan)


if __name__ == "__main__":
    main()
Leave a Comment