database/mysql
[MySQL] JAVA에서 INET_ATON, INET_NTOA 함수 사용
moonsiri
2023. 9. 6. 15:14
728x90
반응형
INET 함수는 ip를 정수로, 정수를 ip로 변환하는 함수입니다.
자바에서 hibernate를 사용하게 되면 SQL을 직접 사용하지 않기 때문에, 자바에서 INET 함수를 사용하는 방법을 알아보겠습니다.
INET_ATON
IP 주소의 숫자 값을 반환합니다.
IPv4 네트워크 주소가 점으로 구분된 쿼드 문자열로 표현될 때, 네트워크 바이트 순서(big endian)로 주소의 숫자 값을 나타내는 정수를 반환합니다. INET_ATON()은 인수를 이해하지 못하거나 expr이 NULL인 경우 NULL을 반환합니다.
mysql> SELECT INET_ATON('10.0.5.9');
-> 167773449
이 예제에서 반환 값은 (10×256)^3 + (0×256)^2 + 5×256 + 9로 계산됩니다.
자바 코드로는 다음과 같습니다.
public static Long inetATON(String ip) {
try {
String[] segments = ip.split("\\.");
return (Long.parseLong(segments[0]) * 16777216L + Long.parseLong(segments[1]) * 65536L + Long.parseLong(segments[2]) * 256L + Long.parseLong(segments[3]));
} catch (Exception e) {
return null;
}
}
// inetATON('10.0.5.9'); => 167773449
INET_NTOA
숫자 값에서 IP 주소를 반환합니다.
네트워크 바이트 순서로 숫자 IPv4 네트워크 주소가 주어지면, 연결 문자 집합의 문자열로 주소의 점으로 구분된 쿼드 문자열 표현을 반환합니다. INET_NTOA()는 인수를 이해하지 못하면 NULL을 반환합니다.
mysql> SELECT INET_NTOA(167773449);
-> '10.0.5.9'
자바 코드로는 다음과 같습니다.
public static String inetNTOA(long n) {
try {
return (n >> 24 & 0xFF) + "." + (n >> 16 & 0xFF) + "." + (n >> 8 & 0xFF) + "." + (n & 0xFF);
} catch (Exception e) {
return null;
}
}
// inetNTOA(167773449); => '10.0.5.9'
[Reference]
https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_inet-aton
https://stackoverflow.com/questions/9129391/inet-ntoa-and-inet-aton-in-java
728x90
반응형