May 19, 2010

I was playing around with Java again, and decided to attempt to create a GUI for my SubDomainer app. Here is the resulting code:

import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.*;
import java.util.*;

public class SubDomainerGUI extends JFrame implements ActionListener
{
DataOutputStream output;

JPanel firstRow = new JPanel();
JPanel secondRow = new JPanel();

JPanel fieldPanel = new JPanel();
JPanel buttonPanel = new JPanel();

JLabel targetLabel = new JLabel("Target URL: ");
JTextField targetURL = new JTextField(20);
JLabel reminderOne = new JLabel("Please enter the target URL without 'www.' attached.");

JButton scanButton = new JButton("Scan");
JButton exitButton = new JButton("Exit");

public static void main(String[] args)
{
SubDomainerGUI f = new SubDomainerGUI();
f.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
f.setSize(400,170);
f.setTitle("SubDomainer");
f.setResizable(false);
f.setLocation(200,200);
f.setVisible(true);
}

public SubDomainerGUI()
{
Container c = getContentPane();
c.setLayout((new BorderLayout()));
fieldPanel.setLayout(new GridLayout(4,2));
FlowLayout rowSetup = new FlowLayout(FlowLayout.CENTER);
firstRow.setLayout(rowSetup);
secondRow.setLayout(rowSetup);
buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER));

firstRow.add(targetLabel);
firstRow.add(targetURL);

secondRow.add(reminderOne);

fieldPanel.add(firstRow);
fieldPanel.add(secondRow);

buttonPanel.add(scanButton);
buttonPanel.add(exitButton);

c.add(fieldPanel, BorderLayout.CENTER);
c.add(buttonPanel, BorderLayout.SOUTH);

scanButton.addActionListener(this);
exitButton.addActionListener(this);

try
{
output = new DataOutputStream(new FileOutputStream("SubDomainer_Results.txt"));
}

catch (IOException ex)
{
System.exit(1);
}

addWindowListener(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
int answer = JOptionPane.showConfirmDialog(null, "Are you sure you want to exit?", "Exit", JOptionPane.YES_NO_OPTION);
if (answer == JOptionPane.YES_OPTION)
finish();
}
}
);
}

public void actionPerformed(ActionEvent e)
{
String arg = e.getActionCommand();

if (arg == "Scan")
{
try
{
String subdomains[] = {"access", "admin", "backup", "backup2", "beta", "cgi", "code", "customers", "database", "db", "dev", "download", "downloads", "email", "finance", "ftp", "gateway", "guest", "help", "helpdesk", "internal", "intranet", "kb", "login", "mail", "mailhost", "mailserver", "ns1", "ns2", "partners", "products", "proxy", "secret", "secure", "server", "test", "webmail", "www2", "www3"};
try
{
InetAddress ipaddress = InetAddress.getByName(targetURL.getText());
output.writeUTF("\n");
output.writeUTF("Scanning " + targetURL.getText() + " (" + ipaddress.getHostAddress() + ") \n");
output.writeUTF("-----------------------------------------------\n");
}
catch ( UnknownHostException e1)
{
JOptionPane.showMessageDialog(null,"ERROR: Host IP address cannot be resolved.", "Error in URL", JOptionPane.ERROR_MESSAGE);
finish();
}

for (int i = 0; i <>
{
String newhostname = subdomains[i] + "." + targetURL.getText();
try
{
InetAddress newipaddress = InetAddress.getByName(newhostname);
output.writeUTF("\n");
output.writeUTF(newhostname + " (" + newipaddress.getHostAddress() + ") EXISTS \n");
}
catch(UnknownHostException e2)
{
output.writeUTF("");
}
}


JOptionPane.showMessageDialog(null,"The scan results have been saved.","Scan Successful", JOptionPane.INFORMATION_MESSAGE);
}

catch(IOException ex)
{
System.exit(1);
}
finish();
}

else
{
try
{
output.close();
}
catch(IOException c)
{
System.exit(1);
}
finish();
}
}

public static void finish()
{
System.exit(0);
}
}

4 comments:

  1. Getting adventurous huh. I would change 2 things.

    1. read the subdomans you search for from a file instead of hard coding them.

    2. Move the code that does the search out of the ui and in its own class. That will allow a commandline version and the gui version to use the same class without duplicating the code.

    Looks good though.

    ReplyDelete
  2. Good idea on using a file instead of an array, that would make it alot easier to add/remove from the list.

    I'll see about moving the code into its own class.

    ReplyDelete
  3. I would also create a separate class to read the subdomains from the file. This again allows for code reuse and not duplicated.

    ReplyDelete
  4. Java is an OO language. Use objects and not make it procedural. Just a tipperoo.

    ReplyDelete

Subscribe to RSS Feed Follow me on Twitter!