package ch.rakudave.jnetmap.plugins;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.util.Arrays;
import javax.swing.Icon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import net.xeoh.plugins.base.annotations.PluginImplementation;
import ch.rakudave.jnetmap.controller.Scheduler;
import ch.rakudave.jnetmap.model.device.Device;
import ch.rakudave.jnetmap.util.Icons;
import ch.rakudave.jnetmap.util.Misc;
import ch.rakudave.jnetmap.util.Settings;
import ch.rakudave.jnetmap.util.SwingHelper;
import ch.rakudave.jnetmap.util.logging.Logger;
import ch.rakudave.jnetmap.view.preferences.PreferencePanel;
@PluginImplementation
public class WiresharkLauncher implements RightClickAction {
@Override
public void execute(final Device d) {
Scheduler.execute(new Runnable() {
@Override
public void run() {
Process process = null;
try {
String[] commandAndArgs = Misc.concat(Settings.get("wireshark.command", "wireshark").split(" "), new String[] { "-i", "any", "-k", "-f", "host "+SwingHelper.interfaceSelector(d)});
Logger.trace("Running wireshark: "+Arrays.toString(commandAndArgs));
process = Runtime.getRuntime().exec(commandAndArgs);
process.waitFor();
} catch (Exception ex) {
Logger.warn("Unable to wireshark", ex);
} finally {
if (process != null) process.destroy();
}
}
});
}
@Override
public String getAuthor() {
return "rakudave";
}
@Override
public String getDescription() {
return "Launches Wireshark with a capture-filter for the selected device";
}
@Override
public Icon getIcon() {
return Icons.fromBase64("iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABKVBMVEULCwspkL8cfKkggrAkiLYaKC8jhrQlibgrksIwm8wihLIIIS4fgK4njLsmi7oef60ceqYIIy8fga86qd0slMQLJjIKJTI0oNIKKDYKKTcumMgul8c4ptkkh7Ypj74egK0njbwCCw47q98ulsYJIy8ZVnIOLTsnfaUnjLojh7UWTWYleaAmirk0m8slirgcXHgggK0ef6wdX30tlsYnf6cRNkg5ptgha4wTOUsVP1Mtkb4ulsUPLjwylcQ9ruMTOEkxmssKJDEdfqshcZYYTGM1odM2o9YUPU8tksARPlMlibcxnM0vl8c1odQaUmwjdpwKIzAdfaoLKjgwmckkdJkWTGUYSmIJJzUPLz0KJDAPM0Moj74rk8MJICsNLDsojr0ojbwjbpAphK/laYYvAAAAAXRSTlNANjqZ9gAAAOFJREFUeF5Fz8OWBUEMBuBKGU1cGkPbtm3j/R9i0rOZZJGTb5GTnxDhXF9cKGLHV07gHtFpJvnY0ASXzIsEcXSHcR8ANASKTTmEfO9Vz0b7R3zOEFo2gJoZHHiYeYLAPhPnDTe1WVwaP5j8zkAWiWMnMDs3v9BNl1dWgeegoLa2nm50N7eqoLaJSzjs7u3X0/rhUQ94AW/I4PjntHReurjUbYlwzdSNvjXG3N03FYtJ57FceXnVb1kG7x+Vcgcfo4nlfvvzy1c2oS4HGjIrGw3JWhQBw+XkeWGIMxJ/8f9LkF+TihkINq+IwQAAAABJRU5ErkJggg==");
}
@Override
public String getPluginName() {
return "Wireshark Launcher";
}
@Override
@SuppressWarnings("serial")
public PreferencePanel getSettingsPanel() {
final JTextField command = new JTextField(Settings.get("wireshark.command", "wireshark"));
PreferencePanel p = new PreferencePanel() {
@Override
public void save() {
Settings.put("wireshark.command", command.getText());
}
};
p.setLayout(new BorderLayout());
JPanel inner = new JPanel(new GridLayout(0, 1, 5, 5));
inner.add(new JLabel("Wireshark command:"));
inner.add(command);
p.add(inner, BorderLayout.NORTH);
return p;
}
@Override
public boolean hasSettings() {
return true;
}
}