채택완료

ip대역 (ip범위) 확인하려면?

예를 들어 ip 대역이 85.208.0.0 - 85.209.255.255 사이인 경우

saudi 라고 표시하려는데

$bw = array("85.208.0.0","85.209.255.255");
$ip = "85.208.96.4";

if($ip > $bw[0] && $ip < $bw[1]) echo "saudi"

이렇게 하면 숫자가 아니다보니 판별을 못 하더라구요.

이런 경우엔 어떤 식으로 대역폭을 확인할 수 있을까요?

|

답변 3개 / 댓글 7개

채택된 답변
+20 포인트

방법이야 여러가지있겠지만 지금 당장 제가 생각하는것은

따로 때서 비교하는 방법이 생각이 나네요

$ip = explode('.', $_SERVER['REMOTE_ADDR']);

if($ip[0] == 85 && ($ip[1] == 208 || $ip[1] == 209) && $ip[2] <= 255 && $ip[3] <= 255){

  echo 'saudi';

}

생각난대로 적은거라 if문이 살짝 지저분하네요

 

답변에 대한 댓글 1개

단편적인 건 괜찮겠지만, DB 구축 작업하기엔 좀 ^^;;
답변 감사합니다.

ip 에는 대역폭이 있습니다

※ 0은 0~255 범위

1. A class   255.0.0.0  

2. B class   255.255.0.0

3. C class   255.255.255.0

A class 는 국가범위로 할당

B class 는 국가(작은)나 기관 범위로 할당

C class 는 기관 범위로할당

D class는 기관/개인

보통 이렇게 범주를 정하고

127.0.0.0  

의 범위는 localhost

168.192.0.0 은 내부망

172.0.0.0 도 내부망

형태로 할당하는것으로 알고있습니다.

따라서 국가로 할당/찾으려면 IP값을  explode를 통해서 잘라서

해당 범위에 해당되는 내용을 찾으시면됩니다.

https://xn--3e0bx5euxnjje69i70af08bea817g.xn--3e0b707e/jsp/infoboard/stats/ipCurrent.jsp

여기에 엑셀을 다운받아 db화 시켜서 범위 매핑가능하겠죠

답변에 대한 댓글 1개

자세한 답변 감사합니다. 결국, 비교는 Policia 님 방법으로 해야 하는 거군요.
2019-10-07 (월) 11:06:24

$bw = array("85.208.0.0","85.209.255.255");
$ip = str_replace(".", "", "85.208.96.4");

$s = str_replace(".", "", $bw[0]);

$e = str_replace(".", "", $bw[1]);

if($ip > $s && $ip < $e) echo "saudi"

.을 다 제거해서 숫자인 것처럼 변환해서 하면 되지 않을까요?

답변에 대한 댓글 5개

이런식으로 처리하면, 잘못된 결과가 나올 수도 있을 것 같아요.
$bw = array("85.208.0.0","85.209.255.255");
$ip = ip2long(".", "", "85.208.96.4");
$s = ip2long(".", "", $bw[0]);
$e = ip2long(".", "", $bw[1]);
if($ip > $s && $ip < $e) echo "saudi";
다른 분들 댓글에 답변 댓글 달고 채택하는 사이에
어마무시한 함수를 소개시켜 주셨네요. ^^
감사합니다. 이거 봤으면 요거 채택하는 건데..ㅎ
( ^ _______ ^ ) ===b
$ip = ip2long("85.208.96.4");
$s = ip2long($bw[0]);
$e = ip2long($bw[1]);
위에 수정을 안 했네요.

반대 함수는 long2ip입니다.
아이피를 문자열로 저장하는 경우도 있고 저런 식으로 int 형식으로 저장하는 경우도 있습니다.
덕분에 오늘 좋은 함수 2개 득템했습니다.
감사해요. ^^

답변을 작성하려면 로그인이 필요합니다.