%PDF- %PDF-
Direktori : /home/rappan/www/cgi_hicnt200/ |
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;