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
반응형