12시간의 삽질 끝에 JAVA로 WOL 매직 패킷 보내기에 성공했다.
참고 글
자바 WOL 코드 참고
https://imaitman.tistory.com/203
wol 설정 참고
https://hackcatml.tistory.com/2
bios 설정 참고
https://202psj.tistory.com/1241
확인해야 할 설정
1. BIOS WOL 설정
- BIOS가 WOL 지원 하는지 확인 필요
- BIOS에서 WOL 설정 Enabled
2. 윈도우 WOL 설정
- 네트워크 어댑터가 WOL 지원 하는지 확인 필요
- 네트워크 어댑터에서 WOL 설정 Enabled
- 이더넷 설정에서 IPv4 수동 설정으로 변경 확인 -> DHCP(자동) 사용시 ip가 변경될 가능성 있음
- 전원 설정 -> 밑 이미지 확인 혹은 두 번째 참고 글 확인
- 소켓 포트 확인
작동확인된 테스트 코드
import org.junit.jupiter.api.Test;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class WakeOnLan {
public static final int PORT = 9; // UDP 포트
@Test
public void WOL_기능_테스트() {
// Mac Address는 대상이 되는 컴퓨터의 주소입니다.
String macStr = "PC MAC 주소";
// broadcast address(특별한 경우가 아니면 대부부의 환경에서는 아래 IP로 하면 됩니다.)
// 내부망(공유기) broad cast 주소
String ipStr = "192.168.0.255";
try {
byte[] macBytes = getMacBytes(macStr);
byte[] bytes = new byte[6 + 16 * macBytes.length];
for (int i = 0; i < 6; i++) {
bytes[i] = (byte) 0xff;
}
for (int i = 6; i < bytes.length; i += macBytes.length) {
System.arraycopy(macBytes, 0, bytes, i, macBytes.length);
}
InetAddress address = InetAddress.getByName(ipStr);
DatagramPacket packet = new DatagramPacket(bytes, bytes.length, address, PORT);
DatagramSocket socket = new DatagramSocket();
socket.send(packet);
socket.close();
System.out.println("Wake-on-LAN packet sent.");
} catch (Exception e) {
System.out.println("Failed to send Wake-on-LAN packet: + e");
System.exit(1);
}
}
private static byte[] getMacBytes(String macStr) throws IllegalArgumentException {
byte[] bytes = new byte[6];
String[] hex = macStr.split("(\\:|\\-)");
if (hex.length != 6) {
throw new IllegalArgumentException("Invalid MAC address.");
}
try {
for (int i = 0; i < 6; i++) {
bytes[i] = (byte) Integer.parseInt(hex[i], 16);
}
} catch (NumberFormatException e) {
throw new IllegalArgumentException("Invalid hex digit in MAC address.");
}
return bytes;
}
}
'자바' 카테고리의 다른 글
[Tomcat] zip file is empty (0) | 2022.12.09 |
---|---|
[JAVA] Stream의 Match 사용법 (0) | 2022.07.11 |
[JPA] Change Column Name 유의 (0) | 2022.05.23 |
RFID 리더기로 값 읽기 - 프롤로그 (0) | 2021.07.14 |