Sinisterly
[HC Official] Scout Port Scanner - Printable Version

+- Sinisterly (https://sinister.ly)
+-- Forum: Hacking (https://sinister.ly/Forum-Hacking)
+--- Forum: Hacking Tools (https://sinister.ly/Forum-Hacking-Tools)
+--- Thread: [HC Official] Scout Port Scanner (/Thread-HC-Official-Scout-Port-Scanner)

Pages: 1 2


[HC Official] Scout Port Scanner - Solixious - 12-21-2013

Hello friends. Today I would like to present to you a port scanner I made in java lately along with its source code. Feel free to modify and redistribute it, but do give me credits if you use this source. If you find any bugs in the software, report it here or email me at arcanist@programmer.net

Screen Shots :
[Image: up1.png]

[Image: up2.png]

Source Code :

PortScanner.java
Code:
package ps;

import java.net.Inet4Address;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import javax.swing.SwingUtilities;
/**
*
* @author The Arcanist
* Feel free to modify and redistribute this code.
* If you wish to report any bug or suggest anything, email me at arcanist@programmer.net or fing me in Hack Community
*/
public class PortScanner {
    
    public static InetAddress TARGET;
    public static PortScannerGUI psg;
    public static boolean stop=false;
    public static ExecutorService es;
    public static int qty,scnd;
    
    public static void scan() {
        if(psg!=null) {
            qty=65536;
            scnd=-1;
            updateProgress();
        }
        es=Executors.newFixedThreadPool(5);
        display("Scanning Ports on Host "+TARGET+"...");
        for(int i=1;i<65536;i++) {
            es.submit(new PortScan(i));
        }
        es.shutdown();
    }
    
    public static void scan(int lowerPort,int upperPort) {
        if(psg!=null) {
            qty=upperPort-lowerPort;
            scnd=-1;
            ProgressUpdate pu=new ProgressUpdate();
            Thread t=new Thread(pu);
            t.start();
            updateProgress();
        }
        es=Executors.newFixedThreadPool(5);
        display("Scanning Ports on Host "+TARGET+"...");
        for(int i=lowerPort;i<=upperPort;i++) {
            es.submit(new PortScan(i));
            
        }
        es.shutdown();
    }
    
    public static void scan(int ports[]) {
        if(psg!=null) {
            qty=ports.length;
            scnd=-1;
            ProgressUpdate pu=new ProgressUpdate();
            Thread t=new Thread(pu);
            t.start();
            updateProgress();
        }
        es=Executors.newFixedThreadPool(5);
        display("Scanning Ports on Host "+TARGET+"...");
        for(int i=0;i<ports.length;i++) {
            es.submit(new PortScan(ports[i]));
        }
        es.shutdown();
    }
    
    public static void updateProgress() {
        scnd++;
        if(scnd>=qty && !ProgressUpdate.stop) {
            ProgressUpdate.stop=true;
            psg.updateProgress(100);
            psg.addToLog("Scan Completed!");
            psg.scanOver();
        }
    }
    
    public static void stopScan() {
        es.shutdownNow();
    }
    
    public static void display(String str) {
        if(psg==null) {
            System.out.println(str);
        }
        else {
            psg.addToLog(str);
        }
    }
    
    public static void main(String args[]) {
        String host;
        
        int argl=args.length;
        if(argl==0) {
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    psg=new PortScannerGUI();
                }
            });
        }
        else {
            switch(argl) {
            case 1:
                host=args[0];
                try {
                    TARGET=Inet4Address.getByName(host);
                }
                catch(UnknownHostException e) {
                    display("Error : Unknown Host "+host);
                    System.exit(-2);
                }
                scan();
                break;
            case 2:
                host=args[0];
                String param=args[1];

                try {
                    TARGET=Inet4Address.getByName(host);
                }
                catch(UnknownHostException e) {
                    display("Error : Unknown Host "+host);
                    System.exit(-2);
                }
                
                int index=param.indexOf('-');
                if(index>0 && index<param.length() && param.lastIndexOf('-')==index) {
                    String range[]=param.split("-");
                    int upperPort=0,lowerPort=0;
                    try {
                        lowerPort=Integer.parseInt(range[0]);
                        upperPort=Integer.parseInt(range[1]);
                        if(lowerPort<0 || lowerPort>65536 || upperPort<0 || upperPort>65536)
                            throw new NumberFormatException();
                    }
                    catch(NumberFormatException e) {
                        display("Error : The Port numbers must be integer values between 0 and 65536.");
                        System.exit(-1);
                    }
                    scan(lowerPort,upperPort);
                }
                else {
                    
                    String ports[]=param.split(",");
                    int portList[]=new int[ports.length];
                    try {
                        for(int i=ports.length-1;i>=0;i--) {
                            portList[i]=Integer.parseInt(ports[i]);
                            if(portList[i]<0 || portList[i]>65536)
                                throw new NumberFormatException();
                        }
                    }
                    catch(NumberFormatException e) {
                        System.out.println("Error : The Port numbers must be integer values between 0 and 65536.");
                        System.exit(-1);
                    }
                    scan(portList);
                }
                
                break;
            default:
                System.out.println("Error in format of parameters");
            }
        }
    }
}

PortScan.java
Code:
package ps;

import java.io.IOException;
import java.net.Socket;

public class PortScan implements Runnable{
    
    private int port;
    
    public PortScan(int port) {
        this.port=port;
    }
    
    @Override
    public void run() {
        @SuppressWarnings("unused")
        Socket socket=null;
        try {
            socket=new Socket(PortScanner.TARGET,port);
            display();
            PortScanner.updateProgress();
        }
        catch(IOException e) {
            PortScanner.updateProgress();
            //when the exception is thrown, the port was closed
        }
    }
    
    public void display() {
        if(PortScanner.psg==null) {
            System.out.print("Port "+port+" is open on host "+PortScanner.TARGET);
            if(Ports.ports.get(port)!=null)
                System.out.println(" : "+Ports.ports.get(port));
        }
        else {
            if(Ports.ports.get(port)!=null)
                PortScanner.psg.addToLog("Port "+port+" is open on host "+PortScanner.TARGET+
                        " : "+Ports.ports.get(port));
            else
                PortScanner.psg.addToLog("Port "+port+" is open on host "+PortScanner.TARGET);
        }
    }
}

Ports.java
Code:
package ps;

import java.util.HashMap;

public class Ports {
    static HashMap<Integer,String> ports;
    static {
        ports=new HashMap<Integer,String>();
        ports.put(1, "TCP Port Service Multiplexer (TCPMUX)");
        ports.put(5, "Remote Job Entry (RJE)");
        ports.put(7, "ECHO");
        ports.put(18, "Message Send Protocol (MSP)");
        ports.put(20, "FTP Data Transfer");
        ports.put(21, "FTP Control (Command)");
        ports.put(22, "SSH Remote Login Protocol");
        ports.put(23, "Telnet");
        ports.put(25, "Simple Mail Transfer Protocol (SMTP)");
        ports.put(29, "MSG ICP");
        ports.put(37, "Time Protocol");
        ports.put(42, "Host Name Server (Nameserv)");
        ports.put(43, "Whois");
        ports.put(49, "Login Host Protocol (Login)");
        ports.put(53, "Domain Name System (DNS)");
        ports.put(69, "Trivial File Transfer Protocol (TFTP)");
        ports.put(70, "Gopher Services");
        ports.put(79, "Finger");
        ports.put(80, "HTTP");
        ports.put(103, "X 400 Standard");
        ports.put(108, "SNA Gateway Access Server");
        ports.put(109, "Post Office Protocol v2 (POP2)");
        ports.put(110, "Post Office protocol v3 (POP3)");
        ports.put(115, "Simple File Transfer Protocol (SFTP)");
        ports.put(118, "SQL Services");
        ports.put(119, "Network News Transfer Protocol (NNTP)");
        ports.put(137, "NetBIOS Name Service");
        ports.put(139, "NetBIOS Datagram Service");
        ports.put(143, "Interim Mail Access Protocol (IMAP)");
        ports.put(150, "NetBIOS Session Service");
        ports.put(156, "SQL Server");
        ports.put(161, "Simple Network Management Protocol (SNMP)");
        ports.put(179, "Border Gateway Protocol (BGP)");
        ports.put(190, "Gateway Access Control Protocol (GACP)");
        ports.put(194, "Internet Relay Chat (IRC)");
        ports.put(197, "Directory Location Service (DLS)");
        ports.put(389, "Lightweight Directory Access Protocol (LDAP)");
        ports.put(444, "Simple Network Paging Protocol (SNPP)");
        ports.put(445, "Microsoft DS");
        ports.put(458, "Apple Quicktime");
        ports.put(546, "DHCP Client");
        ports.put(547, "DHCP Server");
        ports.put(563, "SNEWS");
        ports.put(569, "MSN");
        ports.put(1080, "Socks");
    }
    
}

ProgressUpdate.java
Code:
package ps;

public class ProgressUpdate extends Thread {
    
    public static boolean stop=false;
    @Override
    public void run() {
        stop=false;
        while(!stop) {
            PortScanner.psg.updateProgress((int)(((float)PortScanner.scnd/PortScanner.qty)*100));
            try {
                Thread.sleep(100);
            }
            catch(InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    public void stopProg() {
        stop=true;
    }
}

PortScannerGUI.java
Code:
package ps;

import java.awt.Color;
import java.awt.Font;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.net.Inet4Address;
import java.net.UnknownHostException;

import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;

import static java.awt.GraphicsDevice.WindowTranslucency.*;


public class PortScannerGUI implements ItemListener,ActionListener{
    
    private JFrame frame;
    
    private JLabel hostLabel,rangeLabel,toLabel,specificLabel1,specificLabel2,logLabel;
    
    private JTextField hostField,startRangeField,endRangeField,specificField;
    
    private JTextArea logArea;
    
    private JScrollPane logScroll;
    
    private ButtonGroup radioGroup;
    
    private JRadioButton rangeRadio,specificRadio;
    
    private JButton startButton,stopButton,exitButton;
    
    private JProgressBar progressBar;
    
    private StringBuffer logString;
    
    private JLabel logo,header;
    
    private boolean scanState;
    
    public PortScannerGUI() {
        frame=new JFrame("Scout Port Scanner");
        frame.setBounds(200, 20, 600, 700);
        frame.setResizable(false);
        frame.setLayout(null);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setIconImage(Toolkit.getDefaultToolkit().getImage("logo.png"));
        
        hostLabel=new JLabel("Host");
        hostLabel.setBounds(20,100,100,30);
        
        hostField=new JTextField(16);
        hostField.setBounds(120,100,300,30);
        hostField.setText("127.0.0.1");
        
        radioGroup=new ButtonGroup();
        
        rangeRadio=new JRadioButton("Scan in a range");
        rangeRadio.setBounds(20,150,200,30);
        rangeRadio.setSelected(true);
        rangeRadio.addItemListener(this);
        specificRadio=new JRadioButton("Scan specific ports");
        specificRadio.setBounds(20,250,200,30);
        specificRadio.addItemListener(this);
        
        radioGroup.add(rangeRadio);
        radioGroup.add(specificRadio);
        
        rangeLabel=new JLabel("Range");
        rangeLabel.setBounds(20,200,100,30);
        
        startRangeField=new JTextField(16);
        startRangeField.setBounds(120,200,70,30);
        startRangeField.setText("1");
        
        toLabel=new JLabel("to");
        toLabel.setBounds(200,200,30,30);
        
        endRangeField=new JTextField(16);
        endRangeField.setBounds(220,200,70,30);
        endRangeField.setText("1024");
        
        specificLabel1=new JLabel("Port Numbers");
        specificLabel1.setBounds(20,310,100,30);
        
        specificField=new JTextField(16);
        specificField.setBounds(120,310,300,30);
        
        specificLabel2=new JLabel("(enter port numbers separated by a single comma)");
        specificLabel2.setBounds(120,340,300,30);
        
        startButton=new JButton("Start");
        startButton.setBounds(450,100,100,30);
        startButton.addActionListener(this);
        stopButton=new JButton("Stop");
        stopButton.setBounds(450,140,100,30);
        stopButton.addActionListener(this);
        exitButton=new JButton("Exit");
        exitButton.setBounds(450, 180, 100, 30);
        exitButton.addActionListener(this);
        
        progressBar=new JProgressBar();
        progressBar.setBounds(20,390,540,30);
        progressBar.setStringPainted(true);
        
        logLabel=new JLabel("Scan Log");
        logLabel.setBounds(20,440,100,30);
        
        logArea=new JTextArea();
        logArea.setEditable(false);
        
        logScroll=new JScrollPane(logArea);
        logScroll.setBounds(20,470,540,200);
        
        logString=new StringBuffer();
        
        
        
        logo=new JLabel();
        logo.setIcon(new ImageIcon(Toolkit.getDefaultToolkit().getImage("logo.png")));
        logo.setBounds(30,20,42,50);
        
        header=new JLabel("Scout Port Scanner v-1.0");
        header.setFont(new Font(Font.MONOSPACED,Font.BOLD,30));
        header.setBounds(105, 20, 450, 50);
        
        
        frame.add(logo);
        frame.add(header);
        frame.add(hostLabel);
        frame.add(hostField);
        frame.add(rangeRadio);
        frame.add(specificRadio);
        frame.add(rangeLabel);
        frame.add(startRangeField);
        frame.add(toLabel);
        frame.add(endRangeField);
        frame.add(specificLabel1);
        frame.add(specificField);
        frame.add(specificLabel2);
        frame.add(startButton);
        frame.add(stopButton);
        frame.add(exitButton);
        frame.add(progressBar);
        frame.add(logLabel);
        frame.add(logScroll);
        
        updateSelected();
        updateSelected2();

        setTheme();
        
        GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice gd=ge.getDefaultScreenDevice();
        
        if(gd.isWindowTranslucencySupported(TRANSLUCENT)) {
            frame.setOpacity(0.9f);
        }
        
        frame.setVisible(true);
        
        scanState=false;
    }
    
    public void updateSelected() {
        if(specificRadio.isSelected()) {
            
            rangeLabel.setEnabled(false);
            startRangeField.setEnabled(false);
            endRangeField.setEnabled(false);
            toLabel.setEnabled(false);
            
            specificLabel1.setEnabled(true);
            specificField.setEnabled(true);
            specificLabel2.setEnabled(true);
        }
        else if(rangeRadio.isSelected()){

            rangeLabel.setEnabled(true);
            startRangeField.setEnabled(true);
            endRangeField.setEnabled(true);
            toLabel.setEnabled(true);
            
            specificLabel1.setEnabled(false);
            specificField.setEnabled(false);
            specificLabel2.setEnabled(false);
        }
    }
    
    public void updateSelected2() {
        if(scanState) {
            stopButton.setEnabled(true);
            exitButton.setEnabled(false);
            startButton.setEnabled(false);
        }
        else {
            stopButton.setEnabled(false);
            exitButton.setEnabled(true);
            startButton.setEnabled(true);
        }
    }
    
    public void updateProgress(int val) {
        progressBar.setValue(val);
    }
    
    public void addToLog(String str) {
        String s=new String(logString);
        if(!s.equals(s.replace(str, "")))
            return;
        logString.append(str);
        logString.append("\n");
        logArea.setText(new String(logString));
    }
    
    public void scanOver() {
        scanState=false;
        updateSelected2();
    }
    
    public void setTheme() {
        
        frame.setUndecorated(true);
        
        try {
            for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    UIManager.setLookAndFeel(info.getClassName());
                   break;
                }
            }
        }
            
       catch (Exception e) {
        }
        
        UIManager.put("nimbusBase", Color.red);
        UIManager.put("nimbusBlueGrey", Color.black);
        UIManager.put("control", Color.black);
        UIManager.put("nimbusOrange", Color.red);
        UIManager.put("nimbusLightBackground", Color.darkGray);
        UIManager.put("text", Color.white);
        UIManager.put("nimbusDisabledText", Color.darkGray);
        UIManager.put("nimbusSelectionBackground", Color.red);
        
        

        
        SwingUtilities.updateComponentTreeUI(frame);
        
    }
    
    @Override
    public void itemStateChanged(ItemEvent e) {
        updateSelected();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        Object event=e.getSource();
        if(event==exitButton) {
            frame.dispose();
        }
        else if(event==startButton) {
            try {
                PortScanner.TARGET=Inet4Address.getByName(hostField.getText());
            }
            catch(UnknownHostException e1){
                e1.printStackTrace();
            }
            
            logString=new StringBuffer();
            
            if(rangeRadio.isSelected()) {
                int upper=0,lower=0;
                try {
                    upper=Integer.parseInt(endRangeField.getText());
                    lower=Integer.parseInt(startRangeField.getText());
                    if(upper<1 || upper>65536 || lower<1 || lower>65536) {
                        throw new NumberFormatException();
                    }
                }
                catch(NumberFormatException e1 ){
                    addToLog("Error : The Port numbers must be integer values between 0 and 65536.");
                    return;
                }
                PortScanner.scan(lower,upper);
                scanState=true;
                updateSelected2();
            }
            else if(specificRadio.isSelected()){
                String str[]=specificField.getText().split(",");
                int ports[]=new int[str.length];
                for(int i=0;i<str.length;i++) {
                    try {
                        ports[i]=Integer.parseInt(str[i].trim());
                    }
                    catch(NumberFormatException e1) {
                        addToLog("Error : The Port numbers must be integer values between 0 and 65536.");
                        return;
                    }
                }
                PortScanner.scan(ports);
                scanState=true;
                updateSelected2();
            }
        }
        else if(event==stopButton) {
            PortScanner.stopScan();
            scanState=false;
            updateSelected2();
        }
        
    }
}

Requirements : JDK 1.7 or higher will be required to compile and execute the above code successfully.

Download : https://www.mediafire.com/?tb5bbx39lsip5u4

Regards


RE: Scout Port Scanner - chmod - 12-22-2013

This looks great and is fast one suggestion though would be to add an option to scan a range of IP's such as 127.0.0.1/254

Have you though about submitting this to the official HC tools?


RE: Scout Port Scanner - Solixious - 12-22-2013

@chmod
I do plan on applying for this to be an HC's Official Tool after removing any bugs that are discovered in this initial phase of release.
I will add the feature of scanning a range of ip soon.
Thank you for your feedback.

Regards


RE: Scout Port Scanner - CPlus - 12-23-2013

That GUI looks great, am no fan of Java but that swayd my mind a bit.
Cheers


RE: Scout Port Scanner - Legolas - 12-25-2013

Yeah,
the GUI is nice.
I havenot occupated with Java yet,
but as i saw from sources,
it shouldnot be difficult.

Keep up the good work bro.

-Legolas-


RE: [HC Official] Scout Port Scanner - bbshotgun - 01-29-2014

(12-22-2013, 05:52 PM)chmod Wrote: This looks great and is fast one suggestion though would be to add an option to scan a range of IP's such as 127.0.0.1/254

Have you though about submitting this to the official HC tools?

It would definitely be great if it supported CIDR however how is this different than nmap or zenmap? Where can it be different and new?


RE: [HC Official] Scout Port Scanner - chmod - 01-29-2014

(01-29-2014, 12:45 AM)bbshotgun Wrote:
(12-22-2013, 05:52 PM)chmod Wrote: This looks great and is fast one suggestion though would be to add an option to scan a range of IP's such as 127.0.0.1/254

Have you though about submitting this to the official HC tools?

It would definitely be great if it supported CIDR however how is this different than nmap or zenmap? Where can it be different and new?

To answer your question it is no different to zenmap tbh other then the fact it was coded by the OP, it offers less functionality really but does complete a scan faster, looks nice as well.


RE: [HC Official] Scout Port Scanner - bbshotgun - 01-29-2014

(01-29-2014, 01:09 AM)chmod Wrote:
(01-29-2014, 12:45 AM)bbshotgun Wrote:
(12-22-2013, 05:52 PM)chmod Wrote: This looks great and is fast one suggestion though would be to add an option to scan a range of IP's such as 127.0.0.1/254

Have you though about submitting this to the official HC tools?

It would definitely be great if it supported CIDR however how is this different than nmap or zenmap? Where can it be different and new?

To answer your question it is no different to zenmap tbh other then the fact it was coded by the OP, it offers less functionality really but does complete a scan faster, looks nice as well.

I do have to say it is quite a bit faster.


RE: [HC Official] Scout Port Scanner - cyber_d3face - 02-06-2014

This looks awesome I look forward to trying this tool out on some of my software and computer's. I always love looking at peoples handwork especially when they give it away for free, Thank YOU for keeping this community alive


RE: [HC Official] Scout Port Scanner - Psycho_Coder - 03-26-2014

Good work. I got a bug with the progress bar. It doesn't reach 100% ever. Also there are a few coding semantics which you could follow so that it makes you code more readable Smile

Will tell you tomorrow!