import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class PingBing {
private InetAddress ip;
private JFrame basicFrame;
private JPanel leftPanel, rightPanel, statusPanel;
private JTextArea pingTextArea, onlineTextArea;
private JScrollPane leftScrollPane, rightScrollPane;
private JTextField inputIP, inputTTL;
private JLabel labelIP, labelTTL, statusLabel;
private JButton btnStart, btnStop;
private JMenuBar menuBar;
private JMenu menu;
private JMenuItem exitMenuItem;
private String start;
private int ttl;
private boolean scan = true;
private int number;
private Vector online = new Vector();
public PingBing() {
}
public static void main(String[] args) {
// TODO Auto-generated method stub
PingBing app = new PingBing();
app.buildGUI();
}
public void buildGUI() {
// JFrame.setDefaultLookAndFeelDecorated(true);
basicFrame = new JFrame("PingBing");
basicFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
basicFrame.getContentPane().setLayout(new BorderLayout());
//menu
menuBar = new JMenuBar();
menu = new JMenu("Menu");
exitMenuItem = new JMenuItem("Exit");
menu.add(exitMenuItem);
menuBar.add(menu);
//leftPanel
leftPanel = new JPanel();
pingTextArea = new JTextArea(20,20);
pingTextArea.setFont(new Font("Arial",Font.PLAIN,10));
pingTextArea.setBackground(Color.WHITE);
pingTextArea.setLineWrap(true);
leftScrollPane = new JScrollPane();
leftScrollPane.setViewportView(pingTextArea);
leftPanel.add(leftScrollPane,BorderLayout.CENTER);
leftPanel.setBorder(BorderFactory.createTitledBorder("pinging"));
//rightPanel
rightPanel = new JPanel();
onlineTextArea = new JTextArea(20,20);
onlineTextArea.setFont(new Font("Arial",Font.PLAIN,10));
onlineTextArea.setBackground(Color.WHITE);
onlineTextArea.setLineWrap(true);
rightScrollPane = new JScrollPane();
rightScrollPane.setViewportView(onlineTextArea);
rightPanel.add(rightScrollPane,BorderLayout.CENTER);
rightPanel.setBorder(BorderFactory.createTitledBorder("online"));
//statusPanel
statusPanel = new JPanel(new BorderLayout());
btnStart = new JButton("start");
btnStop = new JButton("stop");
//btnStart.setEnabled(false);
statusLabel = new JLabel(" Not Scanning.");
statusLabel.setBorder(BorderFactory.createEtchedBorder());
statusPanel.add(btnStart,BorderLayout.WEST);
//statusPanel.add(btnStop, BorderLayout.WEST);
statusPanel.add(statusLabel);
//listeners toevoegen
//exitMenuItem.addActionListener(new MenuHandler());
btnStart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
start = "192.168.0.1";
ttl = 2000;
scan = true;
ping();
}
});
btnStop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
scan = false;
}
});
//menu en panels toevoegen aan frame
basicFrame.getContentPane().add(menuBar,BorderLayout.NORTH);
basicFrame.getContentPane().add(leftPanel,BorderLayout.WEST);
basicFrame.getContentPane().add(rightPanel,BorderLayout.EAST);
basicFrame.getContentPane().add(statusPanel,BorderLayout.SOUTH);
//visualiseren van frame
basicFrame.setSize(425,400);
basicFrame.setLocation(200,200);
basicFrame.setVisible(true);
basicFrame.setResizable(false);
}
public void ping() {
do {
if (ttl < 1500) {
int test = JOptionPane.showConfirmDialog(null, "You should provide a higher TTL to get a trustworthy result. Do you want to enter a new TTL value?", "warning", JOptionPane.YES_NO_OPTION);
if (test == 0) {
ttl = Integer.parseInt(JOptionPane.showInputDialog(null, "TTL in ms: ", "PingBing", JOptionPane.QUESTION_MESSAGE));
}
else {
break;
}
}
}
while (ttl < 1500);
//replace . by : to perform String.split
String startEncoded = start.replace('.',':');
//starting ip
String[] splitStart = startEncoded.split(":");
int lengthStart = splitStart.length;
//check if ip is valid
for (int i=0; i<lengthStart; i++) {
if (Integer.parseInt(splitStart[i]) < 0 || Integer.parseInt(splitStart[i]) > 255) {
JOptionPane.showConfirmDialog(null, "please enter a valid ip", "error", JOptionPane.DEFAULT_OPTION);
new PingBing();
}
if (Integer.parseInt(splitStart[lengthStart-1]) <= 0 || Integer.parseInt(splitStart[lengthStart-1]) >= 255) {
JOptionPane.showConfirmDialog(null, "please enter a valid ip", "error", JOptionPane.DEFAULT_OPTION);
new PingBing();
}
}
number = Integer.parseInt(splitStart[lengthStart-1]);
//System.out.println("scan started...");
//ping ip's
try {
while (scan) {
ip = InetAddress.getByName(start);
System.out.println("pinging " + ip);
//refresh frame
basicFrame.getContentPane().remove(statusPanel);
basicFrame.getContentPane().invalidate();
statusLabel.setText("wicked");
basicFrame.getContentPane().add(statusPanel, BorderLayout.SOUTH);
basicFrame.getContentPane().validate();
basicFrame.getContentPane().repaint();
if (ip.isReachable(ttl)) {
pingTextArea.append(" --> online");
online.addElement(ip);
onlineTextArea.append(ip + "\n");
}
if (number < 254) {
number++;
start = splitStart[0] + "." + splitStart[1] + "." + splitStart[2] + "." + number;
}
else {
scan = false;
//System.out.println("\n\nscan finished");
}
}
}
catch (UnknownHostException uhe) {
//uhe.printStackTrace();
JOptionPane.showConfirmDialog(null, "please enter a valid ip", "error", JOptionPane.DEFAULT_OPTION);
new PingBing();
}
catch (IOException ioe) {
ioe.printStackTrace();
}
}
}