%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/rappan/www/cgi_hicnt200/
Upload File :
Create Path :
Current File : //home/rappan/www/cgi_hicnt200/hilib_mob.pl

#┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
#┃Hi Library for mobile Ver 1.00                          ┃
#┃携帯用オリジナル汎用ライブラリ                          ┃
#┃Copyright(C) 2006 Hisashi All Rights Reserved.          ┃
#┃   Web: http://www.e-hws.net/                           ┃
#┃---[注意事項]-------------------------------------------┃
#┃このスクリプトはフリーソフトです。このスクリプトを使用  ┃
#┃したいかなる損害に対して作者は一切の責任を負いません。  ┃
#┃--------------------------------------------------------┃
#┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

#┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
#┃<変更履歴>                                                                              ┃
#┃ -Date-	-Ver-	-Comment-                                                          ┃
#┃----------------------------------------------------------------------------------------┃
#┃2006.07.31	1.00	新規作成                                                           ┃
#┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

#┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
#┃◆初期設定                                              ┃
#┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
$auf		= "au_device.txt";	# AU機種名リストファイル名

#┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
#┃アクセス判別処理                                        ┃
#┃入力値:偽装UserAgent可否(0:偽装可、1:偽装不可)         ┃
#┃戻り値:種別 PC/DoCoMo/vodafone/AU/ASTEL/WILLCOM・・・     ┃
#┃     IPアドレス                                      ┃
#┃     ホスト名                                        ┃
#┃     機種名                                          ┃
#┃     キャリア                                        ┃
#┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
sub chk_agent{
	my($flg) = @_;
	my($type, $carrier, $mobile_id, $br, $br_ver);

	my($ip)    = $ENV{'REMOTE_ADDR'};
	my($host)  = gethostbyaddr(pack('C4',split(/\./,$ip)),2);
	my($agent) = $ENV{'HTTP_USER_AGENT'};

	# OS情報取得
	($type, $carrier, $mobile_id, $br, $br_ver) = &get_osinf($agent);

	if( $type eq "PC" ){
		if( $mobile_id eq "" ){
			$mobile_id = $carrier;
		}else{
			$mobile_id = "$carrier $mobile_id";
		}
	}

	# 偽装ユーザエージェントチェック
	if( $flg ){
		if( $type eq "DoCoMo" && $host !~ /docomo\.ne\.jp/i ){
			$type    = 'PC';
			$carrier = 'PC';

		}elsif( $type eq "vodafone" && $host !~ /\.jp-.\.ne\.jp/i ){
			$type    = 'PC';
			$carrier = 'PC';

		}elsif( $type eq "AU" && $host !~ /ezweb\.ne\.jp/i ){
			$type    = 'PC';
			$carrier = 'PC';
		}
	}

	return( $type, $ip, $host, $mobile_id, $carrier );

}# chk_agent END

#┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
#┃OS種別取得処理                                          ┃
#┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
sub get_osinf{
	my($user_agent) = @_;
	my($os, @agentPart, $br, $br_ver);
	my($os_ver, @agentPart2, @buff, @buff2, @buff3, $type);

	# DoCoMo
	if($user_agent =~ /DoCoMo/i) {
		$type = 'DoCoMo';
		$os = 'DoCoMo';
		@agentPart = split(/\//, $user_agent);
		$br = 'DoCoMo';
		$br_ver = $agentPart[1];
		$os_ver = $agentPart[2];
		if( $br_ver ne "1.0" ){
			($os_ver) = (split(/ /, $user_agent))[1];
			($os_ver) = (split(/\(/, $os_ver))[0];
		}

	# ZAURUS
	} elsif($user_agent =~ /^sharp pda br\/([0-9\.]+).*\((.+)\//) {
		$type = 'ZAURUS';
		$os = 'ZAURUS';
		$os_ver = $2;
		$br = 'sharp_pda_br';
		$br_ver = $1;

	# DreamCast
	} elsif($user_agent =~ /DreamPassport\/([0-9\.]+)/) {
		$type = 'Dreamcast';
		$os = 'Dreamcast';
		$os_ver = '';
		$br = 'DreamPassport';
		$br_ver = $1;

	# PlayStation2
	} elsif($user_agent =~ /^Sonybr2 \(.+\/PlayStation2 .+\)/) {
		$type = 'PlayStation2';
		$os = 'PlayStation2';
		$os_ver = '';
		$br = 'Sonybr2';
		$br_ver = '';

	# DDI POCKET
	} elsif($user_agent =~ /^PDXGW/) {
		$type = 'WILLCOM';
		$os = 'WILLCOM';
		$os_ver = 'EDGE';
		$br = 'WILLCOM';
		$br_ver = 'EDGE';

	# AIR EDGE PHONE
	} elsif($user_agent =~ /\(DDIPOCKET;(.+)\)/) {
		$type = 'WILLCOM';
		$os = 'AIR-EDGE PHONE';
		($os_ver,$br_ver) = (split(/\//, $1))[1,3];
		$br = 'AIR-EDGE PHONE';

	# MAC
	} elsif($user_agent =~ /Safari\/([0-9]+)/) {
		$type = 'PC';
		$br = 'Safari';
		$br_ver = $1;
		$os = 'MacOS';
		if($user_agent =~ / PPC /) {
			$os_ver = 'PowerPC';
		}

	# J-PHONE
	} elsif($user_agent =~ /^Vodafone/ || $user_agent =~ /^J-PHONE/ || $user_agent =~ /^MOT-/) {
		$type = 'vodafone';
		$os = 'vodafone';
		$br = 'vodafone';
		my @parts = split(/\//, $user_agent);
		$br_ver = $parts[1];
		$os_ver = $parts[2];

	# AU
	} elsif($user_agent =~ /UP\.\s*br/i) {
		$type = 'AU';
		# AU機種名取得
		($os, $os_ver) = &get_au($user_agent);

	# ASTEL
	} elsif($user_agent =~ /^ASTEL\/(.+)\/(.+)\/(.+)\//) {
		$type = 'ASTEL';
		$os = 'ASTEL';
		$br = 'ASTEL';
		$br_ver = '';
		$os_ver = substr($2, 0, 5);

	# Windows CE
	} elsif($user_agent =~ /^Mozilla\/.+ Foliage-ibr\/([0-9\.]+) \(WinCE\)/) {
		$type = 'PC';
		$os = 'Windows';
		$os_ver = 'CE';
		$br = 'Foliage-ibr';
		$br_ver = $1;		

	# Windows CE
	} elsif($user_agent =~ /^Mozilla\/.+\(compatible\; MSPIE ([0-9\.]+)\; Windows CE/) {
		$type = 'PC';
		$os = 'Windows';
		$os_ver = 'CE';
		$br = 'PocketIE';
		$br_ver = $1;

	# Opera
	} elsif($user_agent =~ /Opera/) {
		$type = 'PC';
		$br = "Opera";
		if($user_agent =~ /^Opera\/([0-9\.]+)/) {
			$br_ver = $1;
		} elsif($user_agent =~ /Opera\s+([0-9\.]+)/) {
			$br_ver = $1;
		} else {
			$br_ver = '';
		}
		if($user_agent =~ /Windows\s+([^\;]+)(\;|\))/i) {
			$os = 'Windows';
			$os_ver = $1;
			if($os_ver eq 'NT 5.0') {
				$os_ver = '2000';
			} elsif($os_ver eq 'NT 5.1') {
				$os_ver = 'XP';
			} elsif($os_ver eq 'ME') {
				$os_ver = 'Me';
			}
		} elsif($user_agent =~ /Macintosh\;[^\;]+\;([^\)]+)\)/) {
			$os = "MacOS";
			$os_ver = $1;
			if($os_ver eq 'PPC') {
				$os_ver = 'PowerPC';
			}
		} elsif($user_agent =~ /Mac_PowerPC/i) {
			$os = 'MacOS';
			$os_ver = 'PowerPC';
		} elsif($user_agent =~ /Linux\s+([0-9\.\-]+)/) {
			$os = "Linux";
			$os_ver = $1;
		} elsif($user_agent =~ /BeOS ([A-Z0-9\.\-]+)(\;|\))/) {
			$os = 'BeOS';
			$os_ver = $1;
		} else {
			$os = '';
			$os_ver = '';
		}

		# Windows 3.1
		if($user_agent =~ /Windows 3\.1/i) {
			$os = 'Windows';
			$os_ver = '3.1';
		} elsif($user_agent =~ /Win32/i) {
			$os = 'Windows';
			$os_ver = '32';
		} elsif($user_agent =~ /Windows 95/i) {
			$os = 'Windows';
			$os_ver = '95';
		} elsif($user_agent =~ /Windows 98/i) {
			$os = 'Windows';
			if($user_agent =~ /Win 9x 4\.90/) {
				$os_ver = 'Me';
			} else {
				$os_ver = '98';
			}
		} elsif($user_agent =~ /Windows NT 5\.0/i) {
			$os = 'Windows';
			$os_ver = '2000';
		} elsif($user_agent =~ /Windows NT 5\.1/i) {
			$os = 'Windows';
			$os_ver = 'XP';
		} elsif($user_agent =~ /Windows NT/i 
				&& $user_agent !~ /Windows NT 5\.0/i) {
			$os = 'Windows';
			$os_ver = 'NT';
		} elsif($user_agent =~ /Windows 2000/) {
			$os = 'Windows';
			$os_ver = '2000';
		} elsif($user_agent =~ /Windows ME/i) {
			$os = 'Windows';
			$os_ver = 'Me';
		} elsif($user_agent =~ /Windows XP/i) {
			$os = 'Windows';
			$os_ver = 'XP';
		} elsif($user_agent =~ /Windows CE/i) {
			$os = 'Windows';
			$os_ver = 'CE';
		} elsif($user_agent =~ /Mac/i) {
			$os = 'MacOS';
			if($user_agent =~ /Mac_68000/i) {
				$os_ver = '68K';
			} elsif($user_agent =~ /Mac_PowerPC/i) {
				$os_ver = 'PowerPC';
			}
		} elsif($user_agent =~ /WebTV/i) {
			$os = 'WebTV';
			@buff2 = split(/ /, $user_agent);
			@buff3 = split(/\//, $buff2[1]);
			$os_ver = $buff3[1];
		} else {
			$os = '';
			$os_ver = '';
		}

	# IE
	} elsif($user_agent =~ /^Mozilla\/[^\(]+\(compatible\; MSIE .+\)/) {
		$type = 'PC';
		if($user_agent =~ /NetCaptor ([0-9\.]+)/) {
			$br = 'NetCaptor';
			$br_ver = $1;
		} else {
			$br = 'Internet Explorer';
			$user_agent2 = $user_agent;
			$user_agent2 =~ s/ //g;
			@buff = split(/\;/, $user_agent2);
			@version_buff = grep(/MSIE/i, @buff);
			$br_ver = $version_buff[0];
			$br_ver =~ s/MSIE//g;
			if($br_ver =~ /^([0-9]+)\.([0-9]+)/) {
        			$br_ver = "$1\.$2";
			}
		}

		if($user_agent =~ /Windows 3\.1/i) {
			$os = 'Windows';
			$os_ver = '3.1';
		} elsif($user_agent =~ /Win32/i) {
			$os = 'Windows';
			$os_ver = '32';
		} elsif($user_agent =~ /Windows 95/i) {
			$os = 'Windows';
			$os_ver = '95';
		} elsif($user_agent =~ /Windows 98/i) {
			$os = 'Windows';
			if($user_agent =~ /Win 9x 4\.90/) {
				$os_ver = 'Me';
			} else {
				$os_ver = '98';
			}
		} elsif($user_agent =~ /Windows NT 5\.0/i) {
			$os = 'Windows';
			$os_ver = '2000';
		} elsif($user_agent =~ /Windows NT 5\.1/i) {
			$os = 'Windows';
			$os_ver = 'XP';
		} elsif($user_agent =~ /Windows NT/i 
				&& $user_agent !~ /Windows NT 5\.0/i) {
			$os = 'Windows';
			$os_ver = 'NT';
		} elsif($user_agent =~ /Windows 2000/) {
			$os = 'Windows';
			$os_ver = '2000';
		} elsif($user_agent =~ /Windows ME/i) {
			$os = 'Windows';
			$os_ver = 'Me';
		} elsif($user_agent =~ /Windows XP/i) {
			$os = 'Windows';
			$os_ver = 'XP';
		} elsif($user_agent =~ /Windows CE/i) {
			$os = 'Windows';
			$os_ver = 'CE';
		} elsif($user_agent =~ /Mac/i) {
			$os = 'MacOS';
			if($user_agent =~ /Mac_68000/i) {
				$os_ver = '68K';
			} elsif($user_agent =~ /Mac_PowerPC/i) {
				$os_ver = 'PowerPC';
			}
		} elsif($user_agent =~ /WebTV/i) {
			$os = 'WebTV';
			@buff2 = split(/ /, $user_agent);
			@buff3 = split(/\//, $buff2[1]);
			$os_ver = $buff3[1];
		} else {
			$os = '';
			$os_ver = '';
		}

	# FireFox
	} elsif($user_agent =~ /Firefox/) {
		$type = 'PC';
		if($user_agent =~ /NetCaptor ([0-9\.]+)/) {
			$br = 'NetCaptor';
			$br_ver = $1;
		} else {
			$br = 'Firefox';
			$br_ver = (split(/Firefox\//, $user_agent))[1];
			$br_ver = (split(/ /, $br_ver))[0];
		}

		if($user_agent =~ /Windows 3\.1/i) {
			$os = 'Windows';
			$os_ver = '3.1';
		} elsif($user_agent =~ /Win32/i) {
			$os = 'Windows';
			$os_ver = '32';
		} elsif($user_agent =~ /Windows 95/i) {
			$os = 'Windows';
			$os_ver = '95';
		} elsif($user_agent =~ /Windows 98/i) {
			$os = 'Windows';
			if($user_agent =~ /Win 9x 4\.90/) {
				$os_ver = 'Me';
			} else {
				$os_ver = '98';
			}
		} elsif($user_agent =~ /Windows NT 5\.0/i) {
			$os = 'Windows';
			$os_ver = '2000';
		} elsif($user_agent =~ /Windows NT 5\.1/i) {
			$os = 'Windows';
			$os_ver = 'XP';
		} elsif($user_agent =~ /Windows NT/i 
				&& $user_agent !~ /Windows NT 5\.0/i) {
			$os = 'Windows';
			$os_ver = 'NT';
		} elsif($user_agent =~ /Windows 2000/) {
			$os = 'Windows';
			$os_ver = '2000';
		} elsif($user_agent =~ /Windows ME/i) {
			$os = 'Windows';
			$os_ver = 'Me';
		} elsif($user_agent =~ /Windows XP/i) {
			$os = 'Windows';
			$os_ver = 'XP';
		} elsif($user_agent =~ /Windows CE/i) {
			$os = 'Windows';
			$os_ver = 'CE';
		} elsif($user_agent =~ /Mac/i) {
			$os = 'MacOS';
			if($user_agent =~ /Mac_68000/i) {
				$os_ver = '68K';
			} elsif($user_agent =~ /Mac_PowerPC/i) {
				$os_ver = 'PowerPC';
			}
		} elsif($user_agent =~ /WebTV/i) {
			$os = 'WebTV';
			@buff2 = split(/ /, $user_agent);
			@buff3 = split(/\//, $buff2[1]);
			$os_ver = $buff3[1];
		} else {
			$os = '';
			$os_ver = '';
		}

	# NetScape
	} elsif($user_agent =~ /^Mozilla\/([0-9\.]+)/) {
		$type = 'PC';
		$br = 'Netscape Navigator';
		$br_ver = $1;
		if($user_agent =~ /Gecko\//) {
			if($user_agent =~ /Netscape[0-9]*\/([0-9a-zA-Z\.]+)/) {
				$br_ver = $1;
			} elsif($user_agent =~ /Phoenix\/([0-9a-zA-Z\.]+)/) {
				$br = 'Phoenix';
				$br_ver = $1;
			} elsif($user_agent =~ /Chimera\/([0-9a-zA-Z\.]+)/) {
				$br = 'Chimera';
				$br_ver = $1;
			} else {
				$br = 'Mozilla';
				if($user_agent =~ /rv:([0-9\.]+)/) {
					$br_ver = $1;
				} else {
					$br_ver = '';
				}
			}
		}

		# Windows 95
		if($user_agent =~ /Win95/) {
			$os = 'Windows';
			$os_ver = '95';
		} elsif($user_agent =~ /Windows 95/) {
			$os = 'Windows';
			$os_ver = '95';
		} elsif($user_agent =~ /Win 9x 4\.90/i) {
			$os = 'Windows';
			$os_ver = 'Me';
		} elsif($user_agent =~ /Windows Me/i) {
			$os = 'Windows';
			$os_ver = 'Me';
		} elsif($user_agent =~ /Win98/i) {
			$os = 'Windows';
			$os_ver = '98';
		} elsif($user_agent =~ /WinNT/i) {
			$os = 'Windows';
			$os_ver = 'NT';
		} elsif($user_agent =~ /Windows NT 5\.0/i) {
			$os = 'Windows';
			$os_ver = '2000';
		} elsif($user_agent =~ /Windows NT 5\.1/i) {
			$os = 'Windows';
			$os_ver = 'XP';
		} elsif($user_agent =~ /Windows 2000/i) {
			$os = 'Windows';
			$os_ver = '2000';
		} elsif($user_agent =~ /Windows XP/i) {
			$os = 'Windows';
			$os_ver = 'XP';
		} elsif($user_agent =~ /Macintosh/i) {
			$os = 'MacOS';
			if($user_agent =~ /68K/i) {
				$os_ver = '68K';
			} elsif($user_agent =~ /PPC/i) {
				$os_ver = 'PowerPC';
			}
		} elsif($user_agent =~ /SunOS/i) {
			$os = 'SunOS';
			if($user_agent =~ /SunOS\s+([0-9\-\.]+)/i) {
				$os_ver = $1;
			} else {
				$os_ver = '';
			}
		} elsif($user_agent =~ /Linux/i) {
			$os = 'Linux';
			if($user_agent =~ /Linux\s+([0-9\-\.]+)/) {
				$os_ver = $1;
			} else {
				$os_ver = '';
			}
		} elsif($user_agent =~ /FreeBSD/i) {
			$os = 'FreeBSD';
			if($user_agent =~ /FreeBSD\s+([a-zA-Z0-9\.\-\_]+)/i) {
				$os_ver = $1;
			} else {
				$os_ver = '';
			}
		} elsif($user_agent =~ /NetBSD/i) {
			$os = 'NetBSD';
			$os_ver = '';
		} elsif($user_agent =~ /AIX/i) {
			$os = 'AIX';
			if($user_agent =~ /AIX\s+([0-9\.]+)/) {
				$os_ver = $1;
			} else {
				$os_ver = '';
			}
		} elsif($user_agent =~ /IRIX/i) {
			$os = 'IRIX';
			if($user_agent =~ /IRIX\s+([0-9\.]+)/i) {
				$os_ver = $1;
			} else {
				$os_ver = '';
			}
		} elsif($user_agent =~ /HP-UX/i) {
			$os = 'HP-UX';
			if($user_agent =~ /HP-UX\s+([a-zA-Z0-9\.]+)/i) {
				$os_ver = $1;
			} else {
				$os_ver = '';
			}
		} elsif($user_agent =~ /OSF1/i) {
			$os = 'OSF1';
			if($user_agent =~ /OSF1\s+([a-zA-Z0-9\.]+)/i) {
				$os_ver = $1;
			} else {
				$os_ver = '';
			}
		} elsif($user_agent =~ /BeOS/i) {
			$os = 'BeOS';
			$os_ver = '';
		} else {
			$os = '';
			$os_ver = '';
		}
	} else {
		$type   = '';
		$os     = '';
		$os_ver = '';
		$br     = '';
		$br_ver = '';
	}

	if( $type eq "" ){
		$type = 'PC';
	}
	if( $os eq "" ){
		$os = 'ETC';
	}
	if( $br eq "" ){
		$br = 'ETC';
	}


	return ($type,$os,$os_ver,$br,$br_ver);

}# get_osinf END

#┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
#┃utn情報取得処理                                         ┃
#┃入力値:ユーザエージェント                              ┃
#┃戻り値:シリアル番号,icc                                ┃
#┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
sub get_utn{
	my($agent) = @_;
	my($ser,$icc);
	my @user = split '/' , $agent;
	$user[-1] =~ /(?:^|;)ser([a-zA-Z0-9]+)/;
	if(length($1) == 11){
		$ser = $1;
	}elsif(length($1) == 15){
		for(split(/[\(\)\s;]+/ , $user[-1])){
			if(/^ser(.{15}$)/){
				$ser = $1;
			}elsif(/^icc(.{20}$)/){
				$icc = $1;
			}
		}
	}
	return ($ser,$icc);

}# get_utn END


#┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
#┃AU機種名取得処理                                        ┃
#┃入力値:ユーザエージェント                              ┃
#┃戻り値:OS,機種名                                       ┃
#┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
sub get_au{
	my($user_agent) = @_;
	my($os,$mid,$did,$find,$br,$br_ver,$os_ver);

	$user_agent =~ s/UP\.\s*br/UP\.br/;
	$br = 'UP.br';
	@agentPart = split(/ /, $user_agent);
	if($agentPart[0] =~ /KDDI/i) {
		my @tmp = split(/\-/, $agentPart[0]);
		$os_ver = $tmp[1];
		my @tmp2 = split(/\//, $agentPart[1]);
		$br_ver = $tmp2[1];
		$os = 'AU';
	} else {
		@agentPart2 = split(/\//, $agentPart[0]);
		($br_ver, $os_ver) = split(/\-/, $agentPart2[1]);
		$os = 'TU-KA';
	}

	# 機種名検索
	open(AU, $auf);
	$find = 0;
	foreach(<AU>){
		if( $_ =~ /^#/ || length(chomp($_)) == 0 ){
			next;
		}
		($mid,$did) = (split(/,/, $_))[1,2];
		if( $did eq $os_ver ){
			$find = 1;
			last;
		}
	}
	close(AU);

	if( $find == 0 ){
		$mid  = '---';
	}

	return($os, $mid);
}# get_au END

#┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
#┃個体識別情報取得処理                                    ┃
#┃入力値:アクセス種別(DoCoMo/vodafone/AU)                ┃
#┃入力値:ユーザエージェント                              ┃
#┃戻り値:個体識別情報                                    ┃
#┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
sub get_serial{
	my($access_id) = @_;
	my($serial,$icc);
	my $agent = $ENV{'HTTP_USER_AGENT'};

	# DoCoMo
	if( $access_id eq "DoCoMo" ){
		($serial, $icc) = &get_utn($agent);

	# vodafone
	}elsif( $access_id eq "vodafone" ){
		if( $agent =~ /^Vodafone/ ){
			($serial) = (split(/\//, (split(/ /, $agent))[0]))[4];
		}elsif( $agent =~ /^J-PHONE/ ){
			($serial) = (split(/\//, (split(/ /, $agent))[0]))[3];
		}

	# AU
	}elsif( $access_id eq "AU" ){
		($serial) = (split(/\./, $ENV{'HTTP_X_UP_SUBNO'}))[0];
	}

	return( $serial );

}# get_serial END

#┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
#┃↓↓↓ 「1;」は削除しないで!!  ↓↓↓                ┃
#┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
1;

Zerion Mini Shell 1.0