개인적으로 쓰려고 Java UDP를 이용하여 Magic Packet을 전송하는 프로그램을 만들어봤다.
실행 화면
관련 소스
import java.io.*;
import java.net.*;
import java.util.*;
{
{
initComponents();
}
{
this.setTitle(“Java Magic Packet Sender”);
bTrans = new javax.swing.JButton();
bClose = new javax.swing.JButton();
mac_address = new javax.swing.JTextField();
mac_address.setText(“”);
mac_address.setColumns(20);
bClose.setText(“닫기”);
bClose.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
ExitActionPerformed(evt);
}
});
bTrans.setText(“전송”);
bTrans.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
TransActionPerformed(evt);
}
});
getContentPane().add(“East”, bTrans);
getContentPane().add(“South”, bClose);
getContentPane().add(“Center”, mac_address);
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
pack();
}
{
boolean result = true;
if (text.equals(“”))
return false;
try
{
int minus = text.indexOf(“-“);
int colon = text.indexOf(“:”);
if (minus >= 0)
{
StringTokenizer token = new StringTokenizer(text, “-“, false);
int count = token.countTokens();
mac = new byte[count];
for (int i = 0; i < count; i++)
{
String to = token.nextToken();
byte temp = (byte)(Integer.parseInt(to, 16));
mac[i] = temp;
}
}
else if (colon >= 0)
{
StringTokenizer token = new StringTokenizer(text, “:”, false);
int count = token.countTokens();
mac = new byte[count];
for (int i = 0; i < count; i++)
{
String to = token.nextToken();
byte temp = (byte)(Integer.parseInt(to, 16));
mac[i] = temp;
}
}
else
{
result = false;
}
catch (Exception e)
{
result = false;
}
return result;
}
{
{
if (parseMacAddress(mac_address.getText()))
{
try
{
int total_length = header.length + (mac.length * 16);
message = new byte[total_length];
for (int i = 0; i < header.length; i++)
{
message[i] = header[i];
}
int count = header.length;
for (int j = 0; j < 16; j++)
{
for (int i = 0; i < mac.length; i++)
{
message[count++] = mac[i];
}
}
InetAddress group = InetAddress.getByName(“255.255.255.255”);
DatagramSocket ds = new DatagramSocket(6);
DatagramPacket dsheaer = new DatagramPacket(message, message.length, new InetSocketAddress(“255.255.255.255”, 6));
ds.send(dsheaer);
ds.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
{
this.dispose();
}
{
{
java.awt.EventQueue.invokeLater(new Runnable()
{
public void run()
{
new Main().setVisible(true);
}
});
}
private byte[] mac;
private byte[] message;
private javax.swing.JButton bTrans;
private javax.swing.JButton bClose;
private javax.swing.JTextField mac_address;