Java UDP를 이용한 Magic Packet Sender

개인적으로 쓰려고 Java UDP를 이용하여 Magic Packet을 전송하는 프로그램을 만들어봤다.

실행 화면

Java Magic Packet Sender
Java Magic Packet Sender







관련 소스



import java.io.*;
import java.net.*;
import java.util.*;

public class Main extends javax.swing.JFrame
{

 public Main()
 {
  initComponents();
 }

 private void 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();
 }

 private boolean parseMacAddress(String text)
 {
  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;
 }

 private void TransActionPerformed(java.awt.event.ActionEvent evt)
 {

  if (mac_address.getText() != null && !mac_address.getText().equals(“”))
  {
   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();
    }
   }
  }
 }

 private void ExitActionPerformed(java.awt.event.ActionEvent evt)
 {
  this.dispose();
 }

 public static void main(String args[])
 {

  if (args != null && args.length > 1)
  {

  }
  java.awt.EventQueue.invokeLater(new Runnable()
  {
   public void run()
   {
    new Main().setVisible(true);
   }
  });
 }

 private byte[] header = { (byte)255, (byte)255, (byte)255, (byte)255, (byte)255, (byte)255 };
 private byte[] mac;
 private byte[] message;
 private javax.swing.JButton bTrans;
 private javax.swing.JButton bClose;
 private javax.swing.JTextField mac_address;

}