TEST ONT
unknown
java
3 years ago
7.7 kB
13
Indexable
package os;
import app.Main;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.StringTokenizer;
import javax.swing.JOptionPane;
/**
* Clase utilizada para todas las operaciones con Linux
*
* @author Luis.
*/
public class OSLinux implements OSStructure {
private String device = "";
private boolean privileges = false;
public OSLinux() {
checkPrivileges();
}
/**
* Método utilizado para obtener el listado de redes disponibles.
* @return Devuelve un array con todas las redes y sus datos.
*/
public ArrayList<ArrayList<String>> getSSIDs() {
Main.startPB("Obteniendo redes disponibles");
ArrayList<ArrayList<String>> ssids = new ArrayList();
try {
if (privileges) {
getDevice();
File nets = new File("nets");
BufferedReader br = new BufferedReader(new FileReader(nets));
ArrayList<String> ssid = new ArrayList();
String line, auth = "";
while ((line = br.readLine()) != null) {
line = line.trim();
if (line.indexOf("Address")!=-1) {
if (ssid.size()>0 && !auth.equals("")) {
ssid.add(null); ssid.add(auth);
ssids.add(ssid);
auth = "";
}
ssid = new ArrayList();
ssid.add(null);
String bssid = line.substring(line.length()-17);
ssid.add(bssid.toUpperCase());
auth = "WEP";
}
if (line.indexOf("ESSID")!=-1) {
StringTokenizer st = new StringTokenizer(line, "\"");
st.nextToken();
String essid = st.nextToken().trim();
if (!essid.equals("\\x00")) ssid.set(0, essid);
else ssid.add(0, "(oculta)");
}
if (line.indexOf("WPA2")!=-1) auth = "WPA2";
else if (!auth.equals("WPA2") && line.indexOf("WPA")!=-1) auth = "WPA";
}
if (ssid.size()>0 && !auth.equals("")) {
ssid.add(null);
ssid.add(auth);
ssids.add(ssid);
}
br.close();
nets.delete();
}
} catch (FileNotFoundException ex) {
Main.stopPB();
int type = JOptionPane.ERROR_MESSAGE;
String msg = "No se pueden encontrar las redes inalambricas disponibles.\n" +
"Inicie la aplicación con permisos de administrador.";
JOptionPane.showMessageDialog(null, msg, "TEST ONT", type);
} catch (Exception ex) {
// EXCEPCION
} finally {
Main.stopPB();
return ssids;
}
}
/**
* Método utilizado para conectarse a una red vulnerable.
* @param index ID de la red vulnerable (en la tabla y en el array)
*/
@Override
public void connect(int index) {
try {
if (privileges) {
Main.startPB("Conectando a " + Main.getSSIDs().get(index).get(0));
ArrayList<String> ssid = Main.getSSIDs().get(index);
execute("/etc/init.d/network-manager stop");
execute("killall wpa_supplicant");
execute("ifconfig " + device + " down");
setWPAConf(ssid.get(0), ssid.get(2));
File wpaConf = new File("wpa.conf");
execute("wpa_supplicant -B -i" + device + " -c" + wpaConf.getAbsolutePath());
execute("ifconfig " + device + " up");
execute("dhclient " + device);
Main.stopPB();
} else {
int type = JOptionPane.ERROR_MESSAGE;
String msg = "Es necesario que inicie la aplicación con " +
"permisos de administrador.";
JOptionPane.showMessageDialog(null, msg, "TEST ONT", type);
}
} catch (Exception ex) {
// EXCEPCION
}
}
/**
* Método utilizado para obtener el nombre del dispositivo inalámbrico
* activo.
*/
private void getDevice() throws Exception {
File fileDevices = new File("devices");
execute("ifconfig -s > " + fileDevices.getAbsolutePath());
BufferedReader br = new BufferedReader(new FileReader(fileDevices));
ArrayList<String> devices = new ArrayList();
// Elimino una linea de basura
String line = br.readLine();
while ((line = br.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line);
devices.add(st.nextToken());
}
br.close();
fileDevices.delete();
for (int i=0; i<devices.size(); i++) {
execute("iwlist " + devices.get(i) + " scan > nets");
File fileDevice = new File("nets");
br = new BufferedReader(new FileReader(fileDevice));
while ((line = br.readLine()) != null) {
String error = "Interface doesn't support scanning";
if (line.indexOf(error)!=-1) break;
else {
device = devices.get(i);
break;
}
}
br.close();
if (!device.equals("")) break;
}
}
/**
* Método utilizado para la creación del fichero de configuracion del
* wpa_supplicant
* @param essid Nombre de la red vulnerable
* @param contrasenna Contraseña de la red
*/
private void setWPAConf(String essid, String contrasenna) throws Exception {
File wpaConf = new File("wpa.conf");
wpaConf.deleteOnExit();
PrintWriter pw = new PrintWriter(wpaConf);
pw.println("ctrl_interface=/var/run/wpa_supplicant");
pw.println("network={");
pw.println("ssid=\"" + essid + "\"");
pw.println("key_mgmt=WPA-PSK");
pw.println("psk=\"" + contrasenna + "\"");
pw.println("}");
pw.close();
}
/**
* Método utilizado para la ejecución de comandos del sistema.
* @param command Comando a ejecutar.
* @throws Exception Lanza 'IOException' e 'InterruptedException'
*/
private void execute(String command) throws Exception {
String[] cmd = {"/bin/sh","-c",command};
Process shProcess = Runtime.getRuntime().exec(cmd);
shProcess.waitFor();
}
/**
* Método utilizado para comprobar que la aplicación se lanza con privilegios
* de administrador.
* Se crea un archivo temporal en la carpeta /root y se comprueba que exista,
* si no es así es que la aplicación no tiene los permisos necesarios.
*/
private void checkPrivileges() {
try {
execute("touch /root/privileges");
File privilegesFile = new File("/root/privileges");
if (!privilegesFile.exists()) {
int type = JOptionPane.ERROR_MESSAGE;
String msg = "Es necesario que inicie la aplicación con permisos " +
"de administrador.";
JOptionPane.showMessageDialog(null, msg, "TEST ONT", type);
} else privileges = true;
privilegesFile.delete();
} catch (Exception ex) {
// EXCEPCION
}
}
}Editor is loading...