본문 바로가기
database/mysql

[mysql] JAVA에서 INET_ATON, INET_NTOA 함수 사용

by moonsiri 2023. 9. 6.
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
반응형

댓글