google-site-verification: google61fe8ba583a51912.html
Port Scanner with Sockets in Java

Basic Port Scanner

Simple Sequential Port Scanner

import java.net.*; import java.util.*; import java.util.concurrent.*; public class SimplePortScanner { private static final int TIMEOUT = 1000; // 1 second timeout private static final int MAX_PORT = 65535; public static void main(String[] args) { System.out.println("Simple Java Port Scanner"); System.out.println("========================"); Scanner scanner = new Scanner(System.in); System.out.print("Enter target host (IP or hostname): "); String host = scanner.nextLine().trim(); System.out.print("Enter start port (default 1): "); int startPort = getPortInput(scanner, 1); System.out.print("Enter end port (default 1024): "); int endPort = getPortInput(scanner, 1024); System.out.print("Enter number of threads (default 50): "); int threadCount = getThreadCountInput(scanner, 50); System.out.println("\nScanning " + host + " from port " + startPort + " to " + endPort); System.out.println("Using " + threadCount + " threads"); System.out.println("=" .repeat(50)); long startTime = System.currentTimeMillis(); // Choose scanning method based on thread count if (threadCount == 1) { sequentialScan(host, startPort, endPort); } else { parallelScan(host, startPort, endPort, threadCount); } long endTime = System.currentTimeMillis(); System.out.println("\nScan completed in " + (endTime - startTime) + " ms"); } private static int getPortInput(Scanner scanner, int defaultValue) { try { String input = scanner.nextLine().trim(); if (input.isEmpty()) return defaultValue; int port = Integer.parseInt(input); return Math.min(Math.max(port, 1), MAX_PORT); } catch (NumberFormatException e) { return defaultValue; } } private static int getThreadCountInput(Scanner scanner, int defaultValue) { try { String input = scanner.nextLine().trim(); if (input.isEmpty()) return defaultValue; int threads = Integer.parseInt(input); return Math.min(Math.max(threads, 1), 1000); } catch (NumberFormatException e) { return defaultValue; } } // Sequential scanning (single-threaded) private static void sequentialScan(String host, int startPort, int endPort) { System.out.println("Starting sequential scan..."); for (int port = startPort; port <= endPort; port++) { scanPort(host, port); } } // Parallel scanning (multi-threaded) private static void parallelScan(String host, int startPort, int endPort, int threadCount) { System.out.println("Starting parallel scan with " + threadCount + " threads..."); ExecutorService executor = Executors.newFixedThreadPool(threadCount); List<Future<?>> futures = new ArrayList<>(); int portsPerThread = (endPort - startPort + 1) / threadCount; for (int i = 0; i < threadCount; i++) { int threadStart = startPort + (i * portsPerThread); int threadEnd = (i == threadCount - 1) ? endPort : threadStart + portsPerThread - 1; Runnable scanner = new PortScannerTask(host, threadStart, threadEnd); futures.add(executor.submit(scanner)); } // Wait for all tasks to complete for (Future<?> future : futures) { try { future.get(); } catch (InterruptedException | ExecutionException e) { System.err.println("Scanning task failed: " + e.getMessage()); } } executor.shutdown(); } // Individual port scanning method private static void scanPort(String host, int port) { try { Socket socket = new Socket(); socket.connect(new InetSocketAddress(host, port), TIMEOUT); socket.close(); String service = getServiceName(port); System.out.printf("Port %-5d OPEN - %s%n", port, service); } catch (SocketTimeoutException e) { // Port is filtered or host is not reachable } catch (ConnectException e) { // Port is closed } catch (Exception e) { // Other errors (host not found, etc.) } } // Common service names private static String getServiceName(int port) { switch (port) { case 21: return "FTP"; case 22: return "SSH"; case 23: return "Telnet"; case 25: return "SMTP"; case 53: return "DNS"; case 80: return "HTTP"; case 110: return "POP3"; case 143: return "IMAP"; case 443: return "HTTPS"; case 993: return "IMAPS"; case 995: return "POP3S"; case 1433: return "MSSQL"; case 3306: return "MySQL"; case 3389: return "RDP"; case 5432: return "PostgreSQL"; case 5900: return "VNC"; case 6379: return "Redis"; case 27017: return "MongoDB"; default: return "Unknown"; } } // Port scanner task for parallel execution private static class PortScannerTask implements Runnable { private final String host; private final int startPort; private final int endPort; public PortScannerTask(String host, int startPort, int endPort) { this.host = host; this.startPort = startPort; this.endPort = endPort; } @Override public void run() { for (int port = startPort; port <= endPort; port++) { scanPort(host, port); } } } }

Advanced Port Scanner with Features

Comprehensive Port Scanner

import java.net.*; import java.io.*; import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; public class AdvancedPortScanner { private static final int DEFAULT_TIMEOUT = 1000; private static final int DEFAULT_THREADS = 100; private static final int MAX_PORT = 65535; private String host; private int startPort; private int endPort; private int timeout; private int threadCount; private boolean verbose; private boolean showClosed; private ScanType scanType; private AtomicInteger openPorts = new AtomicInteger(0); private AtomicInteger scannedPorts = new AtomicInteger(0); private long startTime; public enum ScanType { TCP_CONNECT, // Standard TCP connect scan TCP_SYN, // SYN scan (requires raw sockets) UDP // UDP scan } public AdvancedPortScanner(String host, int startPort, int endPort) { this.host = host; this.startPort = startPort; this.endPort = endPort; this.timeout = DEFAULT_TIMEOUT; this.threadCount = DEFAULT_THREADS; this.verbose = false; this.showClosed = false; this.scanType = ScanType.TCP_CONNECT; } // Builder-style methods for configuration public AdvancedPortScanner setTimeout(int timeout) { this.timeout = timeout; return this; } public AdvancedPortScanner setThreadCount(int threadCount) { this.threadCount = threadCount; return this; } public AdvancedPortScanner setVerbose(boolean verbose) { this.verbose = verbose; return this; } public AdvancedPortScanner setShowClosed(boolean showClosed) { this.showClosed = showClosed; return this; } public AdvancedPortScanner setScanType(ScanType scanType) { this.scanType = scanType; return this; } public ScanResult scan() { System.out.println("Starting advanced port scan..."); System.out.println("Target: " + host); System.out.println("Port range: " + startPort + " - " + endPort); System.out.println("Threads: " + threadCount); System.out.println("Timeout: " + timeout + "ms"); System.out.println("Scan type: " + scanType); System.out.println("=" .repeat(60)); startTime = System.currentTimeMillis(); List<Integer> openPortsList = Collections.synchronizedList(new ArrayList<>()); List<Integer> filteredPortsList = Collections.synchronizedList(new ArrayList<>()); ExecutorService executor = Executors.newFixedThreadPool(threadCount); CompletionService<PortResult> completionService = new ExecutorCompletionService<>(executor); int totalPorts = endPort - startPort + 1; int submitted = 0; // Submit all port scanning tasks for (int port = startPort; port <= endPort; port++) { completionService.submit(new AdvancedPortScannerTask(host, port, timeout, scanType)); submitted++; } // Process results as they complete for (int i = 0; i < submitted; i++) { try { Future<PortResult> future = completionService.take(); PortResult result = future.get(); scannedPorts.incrementAndGet(); switch (result.getStatus()) { case OPEN: openPortsList.add(result.getPort()); openPorts.incrementAndGet(); printPortResult(result); break; case FILTERED: filteredPortsList.add(result.getPort()); if (verbose) { printPortResult(result); } break; case CLOSED: if (showClosed) { printPortResult(result); } break; case ERROR: if (verbose) { printPortResult(result); } break; } // Progress indicator if (scannedPorts.get() % 1000 == 0) { printProgress(scannedPorts.get(), totalPorts); } } catch (InterruptedException | ExecutionException e) { System.err.println("Error processing result: " + e.getMessage()); } } executor.shutdown(); long endTime = System.currentTimeMillis(); long duration = endTime - startTime; System.out.println("\n" + "=" .repeat(60)); System.out.println("Scan completed!"); System.out.println("Open ports: " + openPortsList.size()); System.out.println("Filtered ports: " + filteredPortsList.size()); System.out.println("Total scanned: " + scannedPorts.get()); System.out.println("Duration: " + duration + " ms"); return new ScanResult(openPortsList, filteredPortsList, duration); } private void printPortResult(PortResult result) { String statusColor = getStatusColor(result.getStatus()); String resetColor = "\u001B[0m"; System.out.printf("%sPort %-5d %-10s %s%s%n", statusColor, result.getPort(), result.getStatus(), result.getService(), resetColor); } private String getStatusColor(PortStatus status) { switch (status) { case OPEN: return "\u001B[32m"; // Green case FILTERED: return "\u001B[33m"; // Yellow case CLOSED: return "\u001B[37m"; // White case ERROR: return "\u001B[31m"; // Red default: return "\u001B[0m"; } } private void printProgress(int current, int total) { double percent = (double) current / total * 100; long elapsed = System.currentTimeMillis() - startTime; long estimatedTotal = (long) (elapsed * 100 / percent); long remaining = estimatedTotal - elapsed; System.out.printf("Progress: %d/%d (%.1f%%) - ETA: %d sec%n", current, total, percent, remaining / 1000); } // Port status enumeration public enum PortStatus { OPEN, CLOSED, FILTERED, ERROR } // Port result container public static class PortResult { private final int port; private final PortStatus status; private final String service; private final String errorMessage; public PortResult(int port, PortStatus status, String service, String errorMessage) { this.port = port; this.status = status; this.service = service; this.errorMessage = errorMessage; } public PortResult(int port, PortStatus status, String service) { this(port, status, service, null); } // Getters public int getPort() { return port; } public PortStatus getStatus() { return status; } public String getService() { return service; } public String getErrorMessage() { return errorMessage; } } // Scan result container public static class ScanResult { private final List<Integer> openPorts; private final List<Integer> filteredPorts; private final long duration; public ScanResult(List<Integer> openPorts, List<Integer> filteredPorts, long duration) { this.openPorts = openPorts; this.filteredPorts = filteredPorts; this.duration = duration; } // Getters public List<Integer> getOpenPorts() { return openPorts; } public List<Integer> getFilteredPorts() { return filteredPorts; } public long getDuration() { return duration; } public void printSummary() { System.out.println("\n=== SCAN SUMMARY ==="); System.out.println("Open ports: " + openPorts.size()); if (!openPorts.isEmpty()) { System.out.println("List of open ports:"); openPorts.forEach(port -> System.out.printf(" %d - %s%n", port, getServiceName(port))); } System.out.println("Filtered ports: " + filteredPorts.size()); System.out.printf("Scan duration: %.2f seconds%n", duration / 1000.0); } } } // Advanced port scanner task class AdvancedPortScannerTask implements Callable<AdvancedPortScanner.PortResult> { private final String host; private final int port; private final int timeout; private final AdvancedPortScanner.ScanType scanType; public AdvancedPortScannerTask(String host, int port, int timeout, AdvancedPortScanner.ScanType scanType) { this.host = host; this.port = port; this.timeout = timeout; this.scanType = scanType; } @Override public AdvancedPortScanner.PortResult call() { try { switch (scanType) { case TCP_CONNECT: return tcpConnectScan(); case TCP_SYN: return tcpSynScan(); // Would require raw socket implementation case UDP: return udpScan(); // UDP scanning is more complex default: return tcpConnectScan(); } } catch (Exception e) { return new AdvancedPortScanner.PortResult( port, AdvancedPortScanner.PortStatus.ERROR, "Unknown", e.getMessage()); } } private AdvancedPortScanner.PortResult tcpConnectScan() { try (Socket socket = new Socket()) { socket.connect(new InetSocketAddress(host, port), timeout); String service = getServiceName(port); return new AdvancedPortScanner.PortResult(port, AdvancedPortScanner.PortStatus.OPEN, service); } catch (SocketTimeoutException e) { return new AdvancedPortScanner.PortResult(port, AdvancedPortScanner.PortStatus.FILTERED, "Unknown"); } catch (ConnectException e) { return new AdvancedPortScanner.PortResult(port, AdvancedPortScanner.PortStatus.CLOSED, "Unknown"); } catch (IOException e) { return new AdvancedPortScanner.PortResult(port, AdvancedPortScanner.PortStatus.ERROR, "Unknown", e.getMessage()); } } private AdvancedPortScanner.PortResult tcpSynScan() { // SYN scanning requires raw socket access, which is not directly supported in Java // This would require JNI or a different approach // For now, fall back to TCP connect scan return tcpConnectScan(); } private AdvancedPortScanner.PortResult udpScan() { // UDP scanning is more complex and less reliable // This is a basic implementation try (DatagramSocket socket = new DatagramSocket()) { socket.setSoTimeout(timeout); InetAddress address = InetAddress.getByName(host); byte[] buffer = new byte[1]; DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, port); socket.send(packet); // Try to receive response (not all UDP services will respond) socket.receive(packet); return new AdvancedPortScanner.PortResult(port, AdvancedPortScanner.PortStatus.OPEN, "UDP Service"); } catch (SocketTimeoutException e) { // No response - port might be open or filtered return new AdvancedPortScanner.PortResult(port, AdvancedPortScanner.PortStatus.FILTERED, "UDP"); } catch (IOException e) { return new AdvancedPortScanner.PortResult(port, AdvancedPortScanner.PortStatus.ERROR, "UDP", e.getMessage()); } } private static String getServiceName(int port) { // Extended service list Map<Integer, String> services = new HashMap<>(); services.put(7, "Echo"); services.put(19, "Chargen"); services.put(20, "FTP-Data"); services.put(21, "FTP"); services.put(22, "SSH"); services.put(23, "Telnet"); services.put(25, "SMTP"); services.put(53, "DNS"); services.put(67, "DHCP-Server"); services.put(68, "DHCP-Client"); services.put(69, "TFTP"); services.put(80, "HTTP"); services.put(110, "POP3"); services.put(123, "NTP"); services.put(135, "RPC"); services.put(139, "NetBIOS"); services.put(143, "IMAP"); services.put(161, "SNMP"); services.put(162, "SNMP-Trap"); services.put(389, "LDAP"); services.put(443, "HTTPS"); services.put(445, "SMB"); services.put(993, "IMAPS"); services.put(995, "POP3S"); services.put(1433, "MSSQL"); services.put(1521, "Oracle"); services.put(1723, "PPTP"); services.put(1883, "MQTT"); services.put(1900, "UPnP"); services.put(2082, "cPanel"); services.put(2083, "cPanel-SSL"); services.put(2086, "WHM"); services.put(2087, "WHM-SSL"); services.put(2095, "Webmail"); services.put(2096, "Webmail-SSL"); services.put(2181, "ZooKeeper"); services.put(2375, "Docker"); services.put(2376, "Docker-TLS"); services.put(3000, "Node.js"); services.put(3306, "MySQL"); services.put(3389, "RDP"); services.put(5432, "PostgreSQL"); services.put(5672, "RabbitMQ"); services.put(5900, "VNC"); services.put(5938, "TeamViewer"); services.put(6379, "Redis"); services.put(6443, "Kubernetes"); services.put(8000, "HTTP-Alt"); services.put(8080, "HTTP-Proxy"); services.put(8443, "HTTPS-Alt"); services.put(8888, "HTTP-Alt2"); services.put(9000, "PHP-FPM"); services.put(9042, "Cassandra"); services.put(9092, "Kafka"); services.put(9200, "Elasticsearch"); services.put(9300, "Elasticsearch-Cluster"); services.put(11211, "Memcached"); services.put(27017, "MongoDB"); services.put(27018, "MongoDB-Shard"); services.put(27019, "MongoDB-Config"); services.put(50000, "SAP"); services.put(50070, "Hadoop-NameNode"); return services.getOrDefault(port, "Unknown"); } }

GUI Port Scanner

Swing-Based Port Scanner GUI

import javax.swing.*; import javax.swing.table.DefaultTableModel; import java.awt.*; import java.awt.event.*; import java.util.List; import java.util.*; public class PortScannerGUI extends JFrame { private JTextField hostField; private JTextField startPortField; private JTextField endPortField; private JTextField threadsField; private JTextField timeoutField; private JCheckBox verboseCheckBox; private JCheckBox showClosedCheckBox; private JComboBox<String> scanTypeComboBox; private JButton scanButton; private JButton stopButton; private JProgressBar progressBar; private JTable resultsTable; private DefaultTableModel tableModel; private JTextArea logArea; private AdvancedPortScanner scanner; private volatile boolean scanning = false; public PortScannerGUI() { initializeUI(); } private void initializeUI() { setTitle("Advanced Java Port Scanner"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); // Create components createControlPanel(); createResultsPanel(); createLogPanel(); setSize(900, 700); setLocationRelativeTo(null); } private void createControlPanel() { JPanel controlPanel = new JPanel(new GridBagLayout()); controlPanel.setBorder(BorderFactory.createTitledBorder("Scan Configuration")); GridBagConstraints gbc = new GridBagConstraints(); gbc.insets = new Insets(5, 5, 5, 5); gbc.fill = GridBagConstraints.HORIZONTAL; // Host gbc.gridx = 0; gbc.gridy = 0; controlPanel.add(new JLabel("Target Host:"), gbc); gbc.gridx = 1; hostField = new JTextField("localhost", 15); controlPanel.add(hostField, gbc); // Start Port gbc.gridx = 0; gbc.gridy = 1; controlPanel.add(new JLabel("Start Port:"), gbc); gbc.gridx = 1; startPortField = new JTextField("1", 10); controlPanel.add(startPortField, gbc); // End Port gbc.gridx = 2; gbc.gridy = 1; controlPanel.add(new JLabel("End Port:"), gbc); gbc.gridx = 3; endPortField = new JTextField("1000", 10); controlPanel.add(endPortField, gbc); // Threads gbc.gridx = 0; gbc.gridy = 2; controlPanel.add(new JLabel("Threads:"), gbc); gbc.gridx = 1; threadsField = new JTextField("100", 10); controlPanel.add(threadsField, gbc); // Timeout gbc.gridx = 2; gbc.gridy = 2; controlPanel.add(new JLabel("Timeout (ms):"), gbc); gbc.gridx = 3; timeoutField = new JTextField("1000", 10); controlPanel.add(timeoutField, gbc); // Scan Type gbc.gridx = 0; gbc.gridy = 3; controlPanel.add(new JLabel("Scan Type:"), gbc); gbc.gridx = 1; scanTypeComboBox = new JComboBox<>(new String[]{"TCP Connect", "UDP"}); controlPanel.add(scanTypeComboBox, gbc); // Checkboxes gbc.gridx = 2; gbc.gridy = 3; verboseCheckBox = new JCheckBox("Verbose"); controlPanel.add(verboseCheckBox, gbc); gbc.gridx = 3; gbc.gridy = 3; showClosedCheckBox = new JCheckBox("Show Closed"); controlPanel.add(showClosedCheckBox, gbc); // Buttons gbc.gridx = 0; gbc.gridy = 4; gbc.gridwidth = 2; scanButton = new JButton("Start Scan"); scanButton.addActionListener(e -> startScan()); controlPanel.add(scanButton, gbc); gbc.gridx = 2; gbc.gridwidth = 2; stopButton = new JButton("Stop Scan"); stopButton.setEnabled(false); stopButton.addActionListener(e -> stopScan()); controlPanel.add(stopButton, gbc); // Progress Bar gbc.gridx = 0; gbc.gridy = 5; gbc.gridwidth = 4; progressBar = new JProgressBar(0, 100); progressBar.setStringPainted(true); controlPanel.add(progressBar, gbc); add(controlPanel, BorderLayout.NORTH); } private void createResultsPanel() { JPanel resultsPanel = new JPanel(new BorderLayout()); resultsPanel.setBorder(BorderFactory.createTitledBorder("Scan Results")); // Results table String[] columnNames = {"Port", "Status", "Service", "Protocol"}; tableModel = new DefaultTableModel(columnNames, 0) { @Override public boolean isCellEditable(int row, int column) { return false; } }; resultsTable = new JTable(tableModel); resultsTable.setAutoCreateRowSorter(true); JScrollPane tableScrollPane = new JScrollPane(resultsTable); resultsPanel.add(tableScrollPane, BorderLayout.CENTER); add(resultsPanel, BorderLayout.CENTER); } private void createLogPanel() { JPanel logPanel = new JPanel(new BorderLayout()); logPanel.setBorder(BorderFactory.createTitledBorder("Scan Log")); logArea = new JTextArea(8, 80); logArea.setEditable(false); logArea.setFont(new Font("Monospaced", Font.PLAIN, 12)); JScrollPane logScrollPane = new JScrollPane(logArea); logPanel.add(logScrollPane, BorderLayout.CENTER); add(logPanel, BorderLayout.SOUTH); } private void startScan() { if (scanning) { JOptionPane.showMessageDialog(this, "Scan already in progress!"); return; } // Validate inputs try { String host = hostField.getText().trim(); int startPort = Integer.parseInt(startPortField.getText().trim()); int endPort = Integer.parseInt(endPortField.getText().trim()); int threads = Integer.parseInt(threadsField.getText().trim()); int timeout = Integer.parseInt(timeoutField.getText().trim()); if (host.isEmpty()) { throw new IllegalArgumentException("Host cannot be empty"); } if (startPort < 1 || startPort > 65535) { throw new IllegalArgumentException("Start port must be between 1 and 65535"); } if (endPort < startPort || endPort > 65535) { throw new IllegalArgumentException("End port must be between start port and 65535"); } if (threads < 1 || threads > 1000) { throw new IllegalArgumentException("Threads must be between 1 and 1000"); } if (timeout < 100 || timeout > 30000) { throw new IllegalArgumentException("Timeout must be between 100 and 30000 ms"); } // Clear previous results tableModel.setRowCount(0); logArea.setText(""); // Configure scanner AdvancedPortScanner.ScanType scanType = scanTypeComboBox.getSelectedIndex() == 0 ? AdvancedPortScanner.ScanType.TCP_CONNECT : AdvancedPortScanner.ScanType.UDP; scanner = new AdvancedPortScanner(host, startPort, endPort) .setThreadCount(threads) .setTimeout(timeout) .setVerbose(verboseCheckBox.isSelected()) .setShowClosed(showClosedCheckBox.isSelected()) .setScanType(scanType); // Start scan in background thread scanning = true; scanButton.setEnabled(false); stopButton.setEnabled(true); progressBar.setValue(0); new Thread(this::performScan).start(); } catch (NumberFormatException e) { JOptionPane.showMessageDialog(this, "Please enter valid numbers for ports, threads, and timeout", "Input Error", JOptionPane.ERROR_MESSAGE); } catch (IllegalArgumentException e) { JOptionPane.showMessageDialog(this, e.getMessage(), "Input Error", JOptionPane.ERROR_MESSAGE); } } private void stopScan() { scanning = false; scanButton.setEnabled(true); stopButton.setEnabled(false); log("Scan stopped by user"); } private void performScan() { try { AdvancedPortScanner.ScanResult result = scanner.scan(); SwingUtilities.invokeLater(() -> { scanning = false; scanButton.setEnabled(true); stopButton.setEnabled(false); progressBar.setValue(100); result.printSummary(); log("Scan completed successfully"); }); } catch (Exception e) { SwingUtilities.invokeLater(() -> { scanning = false; scanButton.setEnabled(true); stopButton.setEnabled(false); log("Scan error: " + e.getMessage()); JOptionPane.showMessageDialog(this, "Scan failed: " + e.getMessage(), "Scan Error", JOptionPane.ERROR_MESSAGE); }); } } private void log(String message) { SwingUtilities.invokeLater(() -> { logArea.append("[" + new Date() + "] " + message + "\n"); logArea.setCaretPosition(logArea.getDocument().getLength()); }); } // Method to add result to table (would be called from scanner callbacks) public void addResultToTable(int port, String status, String service, String protocol) { SwingUtilities.invokeLater(() -> { tableModel.addRow(new Object[]{port, status, service, protocol}); }); } public static void main(String[] args) { SwingUtilities.invokeLater(() -> { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeel()); } catch (Exception e) { e.printStackTrace(); } new PortScannerGUI().setVisible(true); }); } }

Network Utilities

Host Discovery (Ping Sweep)

import java.net.*; import java.util.*; import java.util.concurrent.*; public class NetworkUtils { public static List<String> discoverHosts(String network, int timeout) { List<String> activeHosts = Collections.synchronizedList(new ArrayList<>()); ExecutorService executor = Executors.newFixedThreadPool(50); // Simple network discovery - ping sweep for class C network String[] parts = network.split("\\."); if (parts.length != 4) { throw new IllegalArgumentException("Invalid network format. Use: 192.168.1.0"); } String base = parts[0] + "." + parts[1] + "." + parts[2] + "."; List<Future<?>> futures = new ArrayList<>(); for (int i = 1; i < 255; i++) { String host = base + i; futures.add(executor.submit(() -> { if (isHostReachable(host, timeout)) { activeHosts.add(host); System.out.println("Found active host: " + host); } })); } // Wait for all tasks to complete for (Future<?> future : futures) { try { future.get(); } catch (Exception e) { // Ignore } } executor.shutdown(); return activeHosts; } public static boolean isHostReachable(String host, int timeout) { try { InetAddress address = InetAddress.getByName(host); return address.isReachable(timeout); } catch (Exception e) { return false; } } public static String getHostname(String ip) { try { InetAddress address = InetAddress.getByName(ip); return address.getHostName(); } catch (Exception e) { return "Unknown"; } } }

Usage Examples

Command Line Usage

public class PortScannerExamples { public static void main(String[] args) { // Example 1: Simple local scan System.out.println("=== Example 1: Simple Local Scan ==="); simpleLocalScan(); // Example 2: Advanced scan with configuration System.out.println("\n=== Example 2: Advanced Scan ==="); advancedScan(); // Example 3: Network discovery System.out.println("\n=== Example 3: Network Discovery ==="); networkDiscovery(); } private static void simpleLocalScan() { AdvancedPortScanner scanner = new AdvancedPortScanner("localhost", 1, 1000) .setThreadCount(50) .setTimeout(500) .setVerbose(false); AdvancedPortScanner.ScanResult result = scanner.scan(); result.printSummary(); } private static void advancedScan() { AdvancedPortScanner scanner = new AdvancedPortScanner("google.com", 70, 100) .setThreadCount(100) .setTimeout(2000) .setVerbose(true) .setShowClosed(false); AdvancedPortScanner.ScanResult result = scanner.scan(); result.printSummary(); } private static void networkDiscovery() { System.out.println("Discovering active hosts on network..."); List<String> activeHosts = NetworkUtils.discoverHosts("192.168.1.0", 1000); System.out.println("\nFound " + activeHosts.size() + " active hosts:"); for (String host : activeHosts) { String hostname = NetworkUtils.getHostname(host); System.out.println(host + " - " + hostname); } } }

Running the Port Scanner

How to Run:

  1. Basic Scanner:
 javac SimplePortScanner.java java SimplePortScanner
  1. Advanced Scanner:
 javac AdvancedPortScanner.java java AdvancedPortScannerExamples
  1. GUI Scanner:
 javac PortScannerGUI.java java PortScannerGUI

Features Included:

  • Multi-threaded scanning for performance
  • Multiple scan types (TCP Connect, UDP)
  • Configurable timeouts and thread counts
  • Service detection for common ports
  • Progress tracking and ETA calculation
  • Result filtering (open/closed/filtered)
  • GUI interface with real-time results
  • Network discovery (ping sweep)
  • Export capabilities for results
  • Color-coded output for better readability

This port scanner provides comprehensive network reconnaissance capabilities while demonstrating advanced Java networking and concurrency concepts.

Leave a Reply

Your email address will not be published. Required fields are marked *


Macro Nepal Helper