친절히 답변해 주셔서 감사합니다. 저는 본시 PHP나 C 언어를
공부한 사람이 아니므로 클래스 같은 소스를 가져다가
가공해서 활용할 만큼의 지식은 없습니다. 현재 제가 갖고 있는
소스는,
CREATE TABLE nuke_stats_country_ip_index (
ipfrom varchar(30) NOT NULL default '',
ipto varchar(30) NOT NULL default '',
id_nation smallint(6) NOT NULL default '0'
) TYPE=MyISAM;
#
# 테이블의 덤프 데이터 `nuke_stats_country_ip_index`
#
INSERT INTO nuke_stats_country_ip_index VALUES ('0033996344', '0033996351', 192);
INSERT INTO nuke_stats_country_ip_index VALUES ('0050331648', '0083886079', 193);
이며 약 45천개의 ip자료가 있습니다만, 한국은 제대로 분리가
되지 않고 있습니다. 그래서, 다음과 같은 산이님의 한국ip를
inet_ntoa() 형식으로 디비에 추가하려고 하는 것이지요. ★
이것을 어떻게 바꾸어야 하는지요?
INSERT INTO nuke_stats_country_ip_index VALUES ('61.248.0.0', '255.248.0.0', 100);
INSERT INTO nuke_stats_country_ip_index VALUES ('129.254.0.0', '255.255.0.0', 100);
INSERT INTO nuke_stats_country_ip_index VALUES ('141.223.0.0', '255.255.0.0', 100);
INSERT INTO nuke_stats_country_ip_index VALUES ('147.6.0.0', '255.255.0.0', 100);
INSERT INTO nuke_stats_country_ip_index VALUES ('147.43.0.0', '255.255.0.0', 100);
INSERT INTO nuke_stats_country_ip_index VALUES ('147.46.0.0', '255.255.0.0', 100);
INSERT INTO nuke_stats_country_ip_index VALUES ('146.47.0.0', '255.255.0.0', 100);
국별 분리 스크립트는 다음과 같습니다.
function GetCountryName($id_nation) {
global $prefix,$dbi;
$resultcn = sql_query("select countryname from
".$prefix."_stats_country_index where id_nation='$id_nation'",$dbi);
list ($countryname) = sql_fetch_row($resultcn,$dbi);
return $countryname;
}
--------------------------------------------------------
위와는 좀 다른 소스입니다만, 자체의 ip 디비를 가지 않고
호주의 netgeo.caida.org 를 접속하여 정보를 가져오는 방식인데
한국도 apnic인 호주 접속으로 나오는 수가 많습니다.
function wbd_getlatdata($ip) {
$data = array("");
$fp = fsockopen ("netgeo.caida.org", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br>\n";
} else {
fputs ($fp, "GET /perl/netgeo.cgi?target=$ip HTTP/1.0\r\nHost:
netgeo.caida.org\r\n\r\n");
while (!feof($fp)) {
$packet = fgets ($fp,128);
array_push($data, $packet);
}
fclose ($fp);
}
// make it an array
return $data;
}
===============================================================
[산이]님이 남기신 글:
>
>[고석철]님이 남기신 글:
>
>>안녕하세요.
>>제목과 관련하여 문의하오니 알려 주시면 감사하겠습니다.
>>
>>1. CountryStats 디비자료가 한국을 제외하고 ntoa()형식으로
저장되어 있기에 운영자님의 한국 ip를 ntoa() 형식으로 디비에
올리려는데, aton() 형식을 어떻게 변환할 수 있을까요?
>
>aton(); // `address to number' 맞나요?
>
>ipv4 => '192.168.0.1'; // string
>
>이라면, 이것은
>
>ipv4 => 192 *(255*255*255) + 168 * (255*255) + 0 * (255) + 1; //unsigned
long
>
>이 됩니다.
>
>디비에 저장된 자료가 어떤 형태인지 샘플로 좀 알 수
있을까요?
>
>
>http://ftp.ind.net/pub/mirrors/ftp.redhat.com/redhat/linux/6.2/de/do
c/HOWTOS/translations/ko/translations/socketbeej
>
>에 관련 C 예제가 있네요. 제가 C 언처 깡통이라서...
T.T
>요즘은 FreeBSD 공부중이라서 다른 분야에 신경을 많이
못씁니다..T.T
>
>PHP 에서는
>
>(string) ipv4 <--> (long) ipv4
>
>[string --> long 일 경우]
>
>$ipv4 = sprintf('%u',ip2long((string)$ipv4));
>
>[long --> string 일 경우]
>
>$ipv4 = long2ip((integer)$ipv4);
>
>본 php 클래스에서는 getnetwork() 맴버함(메소드)에
있습니다.
>AND 연산을 위해서 '%u' 대신 '%b' binaray 형태로 바꾸어서
연산했을 뿐입니다.
>
>
>>
>>2. 운영자님이 작성하신 ipv4.php, korea_ip_address.txt는
php 웹서버에서 어떻게 사용할 수 있는지요?
>>
>
>접속한 클라이언트 IP 주소가 한국 IP 주소인지
아닌지를
>판별하는데 사용됩니다.
>즉 클라이언트 IP 주소하고 global subnet 를 하나씩 ADN 연산하여
그
>결과가 한국의 global network 주소에 있다면 한국 IP
주소로
>간주하는 아주 간단한 계산입니다.
>
>계산을 간단하게(speed up)하기 위해서 global subnet 으로 미리
계산해
>놓은것입니다.
>
>
>PHP class 소스 :
>
>http://linuxchannel.net/?vhost=phps&php[src]=%2Ffunc%2Fclass.ipv4.ph
>
>## [example]
>##
>## echo ipv4::iskrip('192.168.10.3'); // 2
>## echo ipv4::iskrip(gethostbyname('www.linuxchannel.net')); // 1
>## echo ipv4::iskrip($_SERVER['REMOTE_ADDR']); // FALSE or 1 or 2
>##
>## echo ipv4::network('192.168.10.3'); // 192.168.0.0/255.255.0.0
>## echo ipv4::network('192.100.10.3'); // 192.0.0.0/255.0.0.0
>## echo ipv4::network($_SERVER['REMOTE_ADDR']); // FALSE or some
string
>##
>
>본 홈페이지 초기화면 상단 중앙쯤에
>
>your global ip-network
>61.248.0.0/255.248.0.0(61.254.75.40)
>
>이런 메시지가 나올겁니다.
>
>61.248.0.0/255.248.0.0 이것은 한국에서 사용하는
>global network / global subnet 입니다.
>() 안은 클라이언트 IP 주소이고요.
>
>만약 한국이 아닌 다른 외국 IP 호스트에서 본 홈페이지를
접속한다면
>이런 메시지는 볼 수 없습니다.
>
>
>>감사합니다.
>
>혹시 제가 질문 취지를 잘못알고 남의 다리를 긁은것
같은
>느낌이 드네요.......... ^.^
========================================
|