Skip to content

Port Scanner

DEADCODEXO

The goal of this project is to create a Python tool that can scan one or multiple IP addresses for open ports within a specified range and retrieve banners from those ports. The tool is designed to be user-friendly, efficient, and capable of handling multiple IP addresses and port ranges.

Features

Technologies Used

Source Code

Feel free to modify this however you want.

import socket
import concurrent.futures
import ipaddress

def scan_port(ip, port, timeout=1):
    try:
        with socket.create_connection((ip, port), timeout=timeout) as sock:
            sock.settimeout(timeout)
            banner = sock.recv(1024).decode('utf-8', 'ignore').strip()
            return f"{ip} - {port} - {banner}"
    except (socket.timeout, ConnectionRefusedError):
        return None

def scan_ip(ip, start_port, end_port, output_file):
    with concurrent.futures.ThreadPoolExecutor(max_workers=100) as executor:
        futures = [executor.submit(scan_port, ip, port) for port in range(start_port, end_port + 1)]
        for future in concurrent.futures.as_completed(futures):
            result = future.result()
            if result:
                print(result)
                with open(output_file, 'a') as f:
                    f.write(result + '\n')

def main():
    output_file = input("Enter the output file name: ")
    ip_input = input("Enter IP address(es) (comma-separated for multiple): ")
    start_port = int(input("Enter start port: "))
    end_port = int(input("Enter end port: "))

    ip_list = [ip.strip() for ip in ip_input.split(',')]

    for ip in ip_list:
        try:
            ipaddress.ip_address(ip)
        except ValueError:
            print(f"Invalid IP address: {ip}")
            continue

        print(f"Scanning {ip}...")
        scan_ip(ip, start_port, end_port, output_file)

    print(f"Scan complete. Results saved to {output_file}")

if __name__ == "__main__":
    main()
Previous
Gemini AI Discord Bot
Next
Two Projects Added