以下は私の非常に大まかなアプレットコードです。一番下で、client.clientProcess();を実行します。
import javax.swing.*;
import com.pega.Messaging.Client;
import com.pega.Messaging.MessagingHelper;
import java.awt.event.*;
import java.awt.*;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
@SuppressWarnings("serial")
public class PRPCPassCrackApplet extends JApplet{
JLabel message;
JLabel lpmsg;
JTextField localPort;
JLabel snmsg;
JTextField serverName;
JLabel spmsg;
JTextField serverPort;
JButton button;
JLabel error;
public void init(){
setSize(600,150);
setBackground(Color.BLACK);
message = new JLabel("Client Parameters\n");
lpmsg = new JLabel("Local Port: ");
snmsg = new JLabel("Server Name: ");
spmsg = new JLabel("Server Port: ");
localPort = new JTextField();
serverName = new JTextField();
serverPort = new JTextField();
localPort.setPreferredSize(new Dimension(450, 10));
serverName.setPreferredSize(new Dimension(450, 10));
serverPort.setPreferredSize(new Dimension(450, 10));
button = new JButton("Send To Server");
button.setPreferredSize(new Dimension(450,10));
error = new JLabel("");
error.setForeground(Color.red);
Container window = getContentPane();
window.setLayout(new GridLayout(0,2));
button.addActionListener(new ButtonListener());
window.add(message);
window.add(new JLabel(""));
window.add(lpmsg);
window.add(localPort);
window.add(snmsg);
window.add(serverName);
window.add(spmsg);
window.add(serverPort);
window.add(button);
window.add(error);
}
private class ButtonListener implements ActionListener{
public void actionPerformed(ActionEvent push){
String lp = localPort.getText();
String sn = serverName.getText();
String sp = serverPort.getText();
int lpint = -1;
int spint = -1;
ServerSocket listenSocket = null;
Socket socketToServer = null;
try{
lpint = Integer.parseInt(lp);
}catch(NumberFormatException e){
error.setText("Local Port is not a number");
return;
}
try{
spint = Integer.parseInt(sp);
}catch(NumberFormatException e){
error.setText("Server Port is not a number");
return;
}
try{
listenSocket = new ServerSocket(lpint);
}catch(Exception e){
error.setText("Could not open local port: " + lp +". Choose another.");
return;
} finally{
try {
listenSocket.close();
} catch (IOException e) {
}
}
try{
//open connection to server
InetAddress serverAddress = InetAddress.getByName(sn);
socketToServer = new Socket(serverAddress, spint);
//create initial connection
OutputStream os = socketToServer.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
//report in
String status = "ping";
bw.write(MessagingHelper.createPacket(status, sn, lp, ""));
bw.close();
}catch(Exception e){
error.setText("Can't connect to Server: " + sn + " on port: " + sp);
return;
}finally{
try {
socketToServer.close();
} catch (IOException e) {
}
}
error.setText("Beginning Execution");
error.setForeground(Color.BLUE);
button.setVisible(false);
Client client = new Client(spint, sn, lpint, true);
client.clientProcess();
}
}
}
これをEclipseで実行すると、プログラムは正常に実行され、正しく終了しますが、右クリック>[エクスポート]>[JARファイル]を使用してjarをエクスポートしています。次のコードでアプレットを実行できません。
<!DOCTYPE html>
<html>
<head>
<title>Client Testing</title>
</head>
<body>
<h1 id="header1"> Distributed Brute Force Attacks </h1>
<applet
class="blah.blah.blah.blah.Applet" <!--not actually blah.blah I had to obfuscate-->
archive="client.jar"
code="blah.blah.blah.blah.Applet.class"
width="1000"
height="250"
vspace="10"
hspace="10"
align="center"
alt="You need Java to run this Applet"
name="clientApplet"
mayscript >
</applet>
</body>
</html>
Eclipseで役立つ場合は、[生成されたクラスファイルとリソースのエクスポート]と[Javaソースファイルとリソースのエクスポート]をオンにし、メインクラスを定義していません。
アプレットは正しく表示され、エラーチェックを適切に実行しますが、そのclientProcessを実行しているようには見えません。ユーザーがアプレットを介してコードを実行できるようにするにはどうすればよいですか?