본문 바로가기

Java

Ip 대역 검사 방법 2가지

1. SQL 쿼리를 이용한 방법

 

정규식을 사용하는 방법도 있지만 다른 방법을 사용한다.

 

이 방법은 특정 메뉴에 특정 ip대역만 접속하게 하고 싶을 때 사용한다.

특정 메뉴의 아이디를 검색하고 그 다음 아이피대역이 맞는지 확인하는 것이다.

#{sIp}는 client ip를 String 값으로 넣어준 값이다.

 

<SQL>

<select id="selectIpCnt" parameterType="map" resultType="int">
SELECT count(*) from tbl_menu
where 1 = 1
and menu_id = #{menu_id}
and #{sIp} between ip and to_ip
</select>



<select id="selectIpMenuCnt" parameterType="map" resultType="int">
SELECT count(*) from tbl_menu
where 1 = 1
and menu_id = #{menu_id}
</select>

 

ip대역을 등록하지 않았으면 menu_id를 카운트한 값이 0이므로 첫번째 조건에

ipMenuCnt == 0일때 true값을 반환해준다.

그리고 두번째는 ip대역을 등록했고, ip대역이 등록한 ip대역에 포함된다면 true값을 주고

그 외의 조건은 false값을 반환해준다.

 

<자바>

int ipCnt = service.selectIpCnt(parameterObject);
    
int ipMenuCnt = service.selectIpMenuCnt(parameterObject);
    
if(ipMenuCnt == 0) {
   model.addAttribute("ipCheck",   true);
}else if(ipMenuCnt >=1 && ipCnt >= 1) {
   model.addAttribute("ipCheck",   true);
}else{
   model.addAttribute("ipCheck",   false);
}

 

2. Ip값을 Long으로 변환해서 비교

 

String sIp = "192.168.0.1";
long longsIp = ipToLong(sIp);

List<Map> getIp = contentService.getIp(parameterObject);
    
for (int i=0; i < getIp.size(); i++) {
     String ip = String.valueOf(getIp.get(i).get("ip"));
     String to_ip = String.valueOf(getIp.get(i).get("to_Ip"));
     long longIp = ipToLong(ip);
     long longtoIp = ipToLong(to_ip);
     if(longIp <= longsIp && longsIp <= longtoIp) {
         model.addAttribute("ipCheck",   true);
     }else {
         model.addAttribute("ipCheck",   false);
     }
}

 

public long ipToLong(String ipAddress) {
    String[] ipAddressInArray = ipAddress.split("\\.");
    
    long result = 0;
    for (int i = 0; i < ipAddressInArray.length; i++) {
        int power = 3 - i;
	    int ip = Integer.parseInt(ipAddressInArray[i]);
	    result += ip * Math.pow(256, power);
    }
    return result;

 

<select id="selectIpCnt" parameterType="map" resultType="int">
SELECT ip, to_ip from tbl_menu
where 1 = 1
and menu_id = #{menu_id}
and #{sIp} between ip and to_ip
</select>

클라이언트 ip와 아이피 대역들을 long으로 전부 바꿔서 대역을 설정하는 코드이다.

아무래도 SQL로 설정하는 것이 편하기도 하고 메모리를 덜 잡아먹는다.

'Java' 카테고리의 다른 글

Java에서 Mail 보내는 방법  (0) 2021.10.08
버튼 CSS(검색 창 같은)  (0) 2021.07.11
CKEditor 사용 시 html 태그가 그대로 출력 될 경우  (0) 2021.07.09
배열  (0) 2021.04.01
연산자  (0) 2021.03.31