Hatena::ブログ(Diary)

Kimura.Memo RSSフィード

2016-12-01

2016-11-04

NTTドコモ ケータイ出荷終了


https://www.nttdocomo.co.jp/info/notice/page/161102_00_m.html

ドコモ ケータイiモード)は2016年11月12月を目途に出荷終了し、在庫限りで販売終了いたします。
 ドコモ ケータイをお求めのお客様にはドコモ ケータイspモード)をご用意しております。
・ドコモ らくらくホンiモード)については当面出荷継続いたします。
・iモードサービスは今までと変わらず引き続きご利用いただけます

見た目はケータイだけど、中身はAndroidという端末があるんですね。
ドコモケータイの製品情報を見ても、半分はもうspモードケータイになっています

ユーザーエージェントで判定すると、Androidスマートフォンということになりますので、スマートフォン用のコンテンツ提供されることになりますが、これって弊害はないのでしょうか?
ユーザーエージェントから機種名を取り出して判定し、spモードケータイなら従来ケータイ用のコンテンツ提供すべきなのかどうなのか。。。

ユーザーエージェントから機種名を取り出すには、以下のようにすれば良いと思います

if ( $ENV{HTTP_USER_AGENT} =~ m{Android (\d+\.\d+[^ ^;]*);(?: [^ ^;]+;)? (.+?) Build/} ) {
    print "Android.\n",
    'version = [', $1, "]\n",
    'device = [', $2, "]\n";
}

2016-11-01

2016-09-15

各キャリアのIPアドレス帯域一覧テキストファイルの形式を変更

以前より公開している audocomoSoftBankY!mobileIPアドレス帯域一覧テキストファイル形式を一部変更&新たなファイル作成しました。
以下変更箇所です。

  1. maskバイナリ値を行末尾に追加
  2. i-modeだけ、mail用が最初に来ていたのでWebの後に変更
  3. Web/Mail/PCVを別ファイルにしたもの作成開始
  4. KDDIスマートフォンの(Web)IPアドレス帯域を追加
  5. タイトルに、ソースURLを追記
  6. コメント行の行頭にある「#」記号の後ろに半角空白を挿入

大きい変更は、maskバイナリ値を追加したことと、Web/Mail/PCVを別ファイルにしたもの作成するようにしたことです。
また、auezweb)については、2011年秋冬モデル以降の機種分についてはさらに別ファイル(ezweb_web_ip2.txt)にしています。

auケータイ

docomoケータイ

SoftBankケータイ

Y!mobile

auスマートフォン

※現時点では、WebIPアドレスのみなので、au_sp_ip.txtとau_sp_web_ip.txtは、まったく同じ内容です。

docomoスマートフォン

SoftBankスマートフォン/iPhone

上記ファイルはタブ区切りテキストファイルで、全て

[IP/MASK]\t[IP]\t[MASK]\t[IP(Binary)]\t[MASK(Binary)]\n

形式で1行につき1つの帯域が記載されています。

たとえばWebサイトアクセスしてきた docomoケータイが、公表されたIPアドレス域内であるかどうかを調べるには、

sub is_real_docomo_keitai
{
  my $is_real_ip = 0;

  my $ip_file = 'imode_web_ip-compact.txt';

  my $addr_bin = sprintf "%08b"x4, split /\./, $ENV{REMOTE_ADDR};

  open ( IPF, $ip_file ) or die("can't open file: $!");
  while ( <IPF> ) {
    next if ( /^#/ );
    next if ( /^\n$/ );
    chomp;
    my ($ipmask, $ip, $mask, $ip_bin, $mask_bin) = split( /\t/ );
    my $network_bin = $mask_bin & $addr_bin;
    if ( $ip eq &get_network_address($network_bin) ) {
      $is_real_ip = 1;
      last;
    }
  }
  close ( IPF );

  return $is_real_ip;
}

sub get_network_address
{
  my $ip_bin = shift;
  return join '.', map { oct "0b$_" } $ip_bin=~/(\d{8})(\d{8})(\d{8})(\d{8})/;
}

のように調べます。


ところでスマートフォンIPアドレス帯域をチェックすることって実際あるんでしょうか?

2016-09-14

auスマートフォンのIPアドレス帯域

au Android技術情報 グローバルIPアドレス
上記を把握していなかったので、登録

IS NET/LTE NET (スマートフォン/タブレット/4G LTE ケータイ) で使用しているグローバルアドレスは以下となります (2016年8月現在)。
106.128.0.0/13 (注1)
111.86.140.128/27
182.248.112.128/26
182.249.0.0/16
182.250.0.0/15
注1) 以下のアドレスを除く
106.135.0.0/16

106.128.0.0/13(106.128.0.0 - 106.135.255.255)から、106.135.0.0/16(106.135.0.0 - 106.135.255.255)を除く、ということは、以下のようになるんですよね。

  • 106.128.0.0/14 (106.128.0.0 - 106.131.255.255)
  • 106.132.0.0/15 (106.132.0.0 - 106.133.255.255)
  • 106.134.0.0/16 (106.134.0.0 - 106.134.255.255)

間違っていたら誰か教えてください。

2016-08-31

2016-08-29

iPhoneで「lang="ja"」有りと無しで絵文字の表示が異なる

Unicode絵文字を調べていて、面白い事象を発見した。
私が所持しているのがiPhone5Sなので、新しいiPhoneでは発生しないのかもしれませんが、自分としてはかなり衝撃でしたので記録しておきます

iPhoneで、htmlファイル

<html lang="ja">

と書くと、一部の絵文字テキストモードで表示されます
「lang="ja"」を外せば絵文字モードで表示されます

テキストモード絵文字モードは、UnicodeEmoji variation sequences によって定義されているもので、「晴れ」絵文字なら、絵文字コード(&#x2600;)の後ろに「&#xFE0E;」がつけばテキストモードに、
&#x2600;&#xFE0E;


f:id:Kimura:20160829180902p:image

絵文字コードの後ろに「&#xFE0F;」がつけば絵文字モードとなる。
&#x2600;&#xFE0F;


f:id:Kimura:20160829180903p:image

では何もつけなかった場合はどうなるかと言うと、タイトルの通り、私のiPhone5Sでは「lang="ja"」有りと無しで絵文字の表示が異なる。

lang="ja"有り

<html lang="ja">
<body>
<p>&#x2600;</p>
</body>
</html>


f:id:Kimura:20160829184731p:image

lang="ja"無し

<html>
<body>
<p>&#x2600;</p>
</body>
</html>


f:id:Kimura:20160829184732p:image

lang="ja"を外せば解決するのですが、何か腑に落ちない感じです。

それじゃ、lang="en"ではどうかと言うと、

lang="en"

<html lang="en">
<body>
<p>&#x2600;</p>
</body>
</html>


f:id:Kimura:20160829184013p:image

な、なんじゃ こりゃー💢