2012年11月27日火曜日

ustreamなどの広告抑制対象の調べ方

ustreamの配信を見ていると動画の下の方に広告が表示されることがあります。 字幕とかぶったりして非常に邪魔です。 視聴者のストレスになりそうな所を選んで表示しているような気がしてなりません。 広告が溢れているネットでイチイチ広告を気にしてたらやってられませんが、これは我慢不可。 消すことにします。

ネットで検索したところ、hostsファイルの書き換えをするのが定石のようです。 で、hostsの内容をそのまま表示しているページばかりで、そこに書く内容の調べ方は書いてませんでした。 仕方がないので自分で広告抑制対象の調べ方を模索してみました。

調べた結果とネット検索で得た情報を元にhostsファイルを作りました。 投稿の最後に載せておきます。 自分で調べるのが面倒な人はそれを使ってください。

  • 注)

    インターネット広告業は新しい業種であり、日々変化しています。 この手法で調べた広告抑制対象も当然変化しており、いつまで通用するかは不明です。 この手法が通用する間は、ブロックしたはずの広告が表示されるようになったなら、また抑制対象を調べ直せば対応できます。 この手法が使えなくなったら別の手法を考える必要があります。

お決まりの注釈を書いたところで、以下説明。

広告抑制の仕組み

インターネット上の全てのコンピュータにはipアドレスという重複しない番号が振られています。 インターネット上で通信するためには、通信対象のipアドレスを知る必要があります。

しかし、番号だけで通信対象を指定するのは人間にとって面倒です。 そこで、ipアドレスの代わりに「www.ustream.tv」や「ja.wikipedia.org」などの文字列(完全修飾ドメイン名/FQDN)を使って通信対象を指定できるようになっています。

ウェブサイトや動画配信サービスなどでは、普通はコンテンツの場所がFQDNを含むURLに記述されています。 ブラウザなどのアプリケーションは内部でそのFQDNを使って通信対象を調べているのです。 例えば、「広告を持っているのはどのサーバーか?」とか。 それでipアドレスが分かったら、やっと対象サーバーとの通信が始まります。

FQDNからipアドレスを調べる方法は2つあります。

  • ローカルのhostsファイルにあらかじめ既知のipアドレスとFQDNの組み合わせを書いておき、それを使用する。
  • DNSサーバー に問い合わせる。

たいていの場合、まずhostsを調べて、無ければDNSサーバーに問い合わせをします。

これをふまえて、広告企業のサーバーとの通信をブロックするには次のやり方があります。

  • hostsファイルに嘘を書いておく。 (広告企業のサーバーなんて無いので探しても無駄と書く。)
  • 自前のDNSサーバーを立てて、ブラウザなどのアプリケーションでそれを使うように設定する。 そのDNSサーバーに広告サーバーのipアドレスの問い合わせが来たら嘘のipアドレスを返す。

その他にもファイアウォールでブロックとかって方法も有るけど割愛。

hostsファイルの書き換えは1番手軽でwindowsでもlinuxでもmacでも、物によってはスマホでも使えるので定石になっているようです。

広告を送信しているサーバーのFQDNの調べ方

動画配信サイトの広告を送信しているサーバーのFQDNはhtmlファイルに直接書かれてるとは限りません。 javascriptとかswfとかに書かれているのかもしれません。 「htmlのソースを見て怪しいFQDNがあるからhostsに記載 → 違ったらやり直し、それでは解決できなくてjavascriptとかswfとかの解析」 ... とかってのはやりたくないですね。 スキルが足りなくて解析できずにヘコむのも目に見えてます。

じゃあどうするのかというと、ネットワーク解析ツールでブラウジング中の通信のログをとり、DNSサーバーへの問い合わせをピックアップします。 それから広告やトラッキングに関するサーバーを推定して全部ブロックしてしまいましょう。 例えば、「ustreamの動画の上に重なって表示される広告」だけを慎重に特定してブロックする必要はないのです。 誤ブロックしてok。

というわけでブロック対象の広告をわざと表示させる必要があります。 動画配信サイトを視聴したときのログを見ると、画面に見えている以上の多くのサーバーにアクセスしていることが分かります。 そのサーバー1つ1つをざっくりと判定していきましょう。 判定基準は、こんな感じで。

  • 「www.ustream.tv」や「twitter.com」などやっている事が明らかなサーバー。
  • 聞いたことが無いけど広告じゃないっぽいサーバー。
  • 広告っぽいけどよく分からないサーバー。
  • 名前や検索ですぐ広告/トラッキング関係と分かるサーバー。

誤ブロックokとはいえ、思わぬ影響を避けるため、まずはすぐ分かるサーバーだけをブロックして広告が消えるかどうか試すのがよいかと思われます。 ustreamなどの有名サービスの広告はこれで消えるでしょう。 有名サービスは怪しい広告を使わない傾向にあります。 広告っぽいけどよく分からないやつは消せなかったときに仕方なくチェックするくらいですね。 広告サーバーは大量にできて消えてを繰り返しているので深入りするのは無駄かと。

  • 注)

    検索で広告かどうかを判定する場合、判定のために広告企業のサイトを見たらそれだけで悪影響を受ける可能性があります。 広告企業のオフィシャルサイトにはアクセスせずに、google検索の見出しとか、周辺の情報とかで判断するようにしましょう。

ネットワーク解析ツールでログをとる時の注意

ログをとる時に注意すべきなのは、キャッシュと個人情報の流出です。

キャッシュについて、DNSのキャッシュが残っていたらDNSサーバーへの問い合わせ自体が必要なくなります。 そうなると当然ログには残りません。 osやブラウザなどのキャッシュをクリアして、再起動してからログをとりましょう。

私は使わなくても済んだけど一応、windows系osにはosが保持するDNSキャッシュを削除するコマンドがあるようなので載せておきます。 (Windows 2000以降でなら使えるかも?)

コマンドプロンプトで以下のコマンドを入力。

ipconfig /flushdns

キャッシュの内容は次のコマンドで確認できます。

ipconfig /displaydns

個人情報の流出防止について、ログをとるときは目的のサイト以外のネットワークアクセスはしないようにしましょう。 ログファイルが流出してしまったときの被害を抑えるためです。 ネットワーク解析ツールが動いている間は少しセキュリティが弱まっていることを認識してください。 メールの受信チェックやtwitterなどは止めてからにします。 セキュリティーに注意して、ログオンが必要なサービスの広告を調べるときは捨てアカを使いましょう。 ログに個人情報が載るような操作は厳禁です。 ログをファイルで残す場合はより厳重に注意してください。

hostsファイルの書き方

ネットワーク解析ツールのログ解析が終わり、広告サーバーの一覧ができたらhostsファイルを書き換えます。

hostsファイルはただのテキストファイルです。 テキストエディター(windowsならメモ帳など)で簡単に書き換えられます。 書式は単純で、1行に1つipアドレスとFQDNの対を書くだけです。 ipアドレスは行頭から書き、スペースを空けてFQDNを続けます。 FQDNはスペースで区切って複数書く事ができます。

# IPv4の例
208.80.154.225  ja.wikipedia.org
74.125.235.120  www.google.co.jp
203.216.251.233 www.yahoo.co.jp

#から始まる行はコメント扱いされ、読み飛ばされます。

ちなみに、例で書いたアドレスはいつまで使えるか不明だったり分散処理を無駄にしたりで使っていい事はありません。 普通はおとなしくDNSサーバーに任せましょう。

広告をブロックするためにhostsファイルを書く場合、ipアドレスの部分を「未指定アドレス」に書き換えます。 未指定アドレスはノードにまだipアドレスが割り振られていないことを意味します。 hostsファイルに書いておけばその先も割り振られることはないので無効なアドレスとして扱うことができます。 IPv4の場合は4桁全部0の「0.0.0.0」を、IPv6の場合はコロン2つの「::」で表現します。 ipのバージョンはネットワーク解析ツールのログから確認すると良いでしょう。

例を書くと、

# 有用な組み合わせ
208.80.154.225  ja.wikipedia.org
74.125.235.120  www.google.co.jp
203.216.251.233 www.yahoo.co.jp
# 以下、広告ブロック用
0.0.0.0 www.dislike-ad.com
0.0.0.0 ad.hate.com
0.0.0.0 click.detestable.net

普通は元からあるhostsファイルの後ろの方に広告ブロック用の記述を足していけば良いハズ。 (一応、元からある行が怪しかったらマルウェアを疑いましょう。)

hostsファイルの編集

次のファイルを管理者権限で編集します。 (windows7 home 64bitでしか試してません。)

  • windows系 ... %windir%\System32\drivers\etc\hosts
  • windows系 ... %windir%\sysnative\drivers\etc\hosts (64bit版osで32bitのアプリケーションからアクセスする場合)
  • linux ... /etc/hosts
  • mac ... /etc/hosts または /private/etc/hosts (詳細不明)
  • スマホ ... /etc/hosts だと思うけど機種依存でアクセス方法不明

ネットで検索すると「編集後はpcの再起動が必要」という文言を見ることがありますが、少なくとも自分が試した環境(windows7 home 64bit + firefox 17、キャッシュを無視して更新)では即反映されました。

windows系osは書き込みに失敗してもエラーメッセージは表示されない事があるようです。 上手く更新できたように見えても、ファイルを開きなおしたら更新されてないとか。 保存した後、もう1度開いて確認するようにしましょう。

windows系osの64bit版で、32bitのアプリケーションを使い %windir%\System32\drivers\etc\hosts の方を編集してしまったときもそれに当たります。 64bit版と32bit版の違いを吸収するための仕組みとセキュリティの仕組みのコンボでそうなるんだそうです。 よく分からない仕様ですが32bitで動作するフリーのファイラーでファイルを選んだときやエディターで編集したときは更新に失敗する可能性があります。 %windir%\System32\~ を書き換えて更新されなかった場合は %windir%\sysnative\~ の方を見てみましょう。 ちなみにsysnativeは隠しフォルダです。

windows8では一時的にWindows Defenderの保護対象から外し(除外ファイルに指定)て編集すると良いらしいです。 もしくは、Defenderを止めて編集。 試してないんでよく分かりませんが、セキュリティーの仕組みを止めずに済むならそれに越したことはないので、まず保護対象から外す方をやってみてください。

管理者権限でhostsファイルを書き換える例 : windows7 + メモ帳

色んな環境での編集方法を全部書くのは無理なので、例としてwindows7のメモ帳で編集する場合について書いておきます。 windows7で管理者権限でメモ帳を起動するには、

  1. スタートメニューの「プログラムとファイルの検索」に「メモ帳」と打ち込む。
  2. 検索結果のメモ帳を右クリック → 管理者として実行。

とやります。 あとは普通に編集して保存すればok。

その他にも方法はあるようですが、各自検索で。

ネットワーク解析ツールの使用例 : Microsoft Network Monitor 3.4

色んな環境の色んなツールについて説明するなんて無理なので、自分の試したヤツだけ説明します。 フリーソフトの Microsoft Network Monitor 3.4 です。 使い方はよく分かってませんが、主要なプロトコルのログは簡単にフィルタリングできるようです。 少なくともDNSサーバーへの問い合わせ一覧は簡単にリストアップできました。 Windows7 home 64bitで試しました。

とりあえずインストール。 表示は無いけど、PCの再起動をしないと使えないかもしれません。

起動したらこんなウィンドウでした。

左下のSelect Networksに表示があることを確認してください。 空だったらPC再起動。 それでもダメなら管理者権限でMicrosoft Network Monitor 3.4を起動します。 (いったんSelect Networksが有効になったら、以降は管理者権限でなくても使えるかも?)

いくつかの項目にチェックが入っているはずです。 デフォルトのチェックでいいと思うけど、まぁそれっぽいのにチェックを入れておきましょう。 ログ取得対象のチェックが入っている状態でツールバーの「New Capture」か Start Page の「New Capture Tab」をクリックしてCaptureを作ります。 Captureはログを管理する単位のようです。

Capture1のタブが追加され、画面が変わります。 この状態でツールバーのStartを押すとログ収集開始、Stopを押すと停止です。

ログ収集を開始して、ブラウザで動画配信サイトなどを見ましょう。 Frame Summaryにログが表示されます。 ログの量が増えると解析が面倒になるし、それなりにフィルタリングに時間がかかるようなので、ブロックしたいものが見れたらすぐに停止しましょう。 Network Monitorはリアルタイムで解析できるツールではありますが、この手法ではそんな機能は必要はありません。

  • 注)

    収集したログはSaveAsで保存できます。 そのときは個人情報注意で。

ログをとった後の画面はこのようになります。 Network Conversationsのところで解析対象のプロセスを選択できるようですが、今回はデフォルトのAll Trafficだけ見ればok。

ログ収集が終わったら、ログのフィルタリングをしてDNSサーバーへの問い合わせのみをピックアップします。

Display Filterの欄に表示するログの条件式を書き、Applyボタンを押せばフィルタリングすることができます。 条件式はVisual Basicのような文法?で書く模様。 Load Filter/Standard Filtersのメニューを選べば主要なフィルタの条件式が挿入できます。 また、Frame Summaryで行を選択すると左下のFrame Detailsに詳細が表示されるので、その項目を右クリックしてAdd Selected Value to Display Filterを選んでも条件式にそれっぽいのが挿入されます。

この「挿入」ってのは文字通りDisplay Filter内のテキストフィールドのカーソルの位置に式が挿入されるだけなので注意。 カーソルが中途半端な位置にあると式が壊れてしまいます。 また、等号やAND/ORは適当についてしまうので、それも自分で書き換える必要があります。

まぁともかく、DNSサーバーへの問い合わせのみを表示するには、

DNS.QuestionCount AND DNS.Flags.QR == 0x0

と入力してからApplyボタンを押します。

Frame Summaryが更新され、DNSサーバーへの問い合わせのみが表示されます。 どれでもいいので1つ選んでipのバージョンを確認しておきましょう。

このままではDNSサーバーに問い合わせたドメイン名をピックアップするのが面倒なのでFrame Summaryの表示項目を変更します。 Frame SummaryのColumnsをクリックしてChoose Columnsを選択。

表示列選択ダイアログが出るので、Dns Nameのみを有効にしましょう。

Frame Summaryの表示がドメイン名だけになります。

あとはFrame Summaryの右クリックメニューでSelect All → Copyをすればok。 DNSに問い合わせをしたドメイン名の一覧が手に入ります。 適当なテキストファイルにでも保存しましょう。

最後にFrame SummaryのColumnsメニューで表示する列の項目を戻し(Restore Default Column Layoutなど)て終了です。 ドメイン名の一覧からブロック対象のFQDNを選ぶ作業に入りましょう。

hostsファイルの例

今回調べた結果とネット検索で得た情報を元にhostsファイルを作りました。 jwordとか勝手にインストールされて嫌な思いをした事があるので追記してあります。 ustreamの広告ブロックのみ2012年11月22日に確認済みです。

# 2012年11月22日作成
0.0.0.0 tags.bluekai.com
0.0.0.0 ad.turn.com
0.0.0.0 adap.tv
0.0.0.0 ads.adap.tv
0.0.0.0 control.adap.tv
0.0.0.0 log.adap.tv
0.0.0.0 segments.adap.tv
0.0.0.0 sync.adap.tv
0.0.0.0 redir.adap.tv
0.0.0.0 adaptv.pixel.invitemedia.com
0.0.0.0 adf.send.microad.jp
0.0.0.0 match.adsrvr.org
0.0.0.0 b.scorecardresearch.com
0.0.0.0 pixel.quantserve.com
0.0.0.0 flash.quantserve.com
0.0.0.0 exelator.com
0.0.0.0 load.exelator.com
0.0.0.0 loadm.exelator.com
0.0.0.0 adadvisor.net
0.0.0.0 pagead2.googlesyndication.com
0.0.0.0 pix01.revsci.net
0.0.0.0 pix02.revsci.net
0.0.0.0 pix03.revsci.net
0.0.0.0 pix04.revsci.net
0.0.0.0 im.yahooapis.jp
0.0.0.0 syndication.mmismm.com
0.0.0.0 p.brilig.com
0.0.0.0 idpix.media6degrees.com
0.0.0.0 search.spotxchange.com
0.0.0.0 cdn.spotxchange.com
0.0.0.0 doubleclick.net
0.0.0.0 googleads.g.doubleclick.net
0.0.0.0 imrworldwide.com
0.0.0.0 secure-us.imrworldwide.com
0.0.0.0 valueclick.ne.jp
0.0.0.0 gator.com
0.0.0.0 overture.com
0.0.0.0 webtrendslive.com
0.0.0.0 media.scanscout.com
0.0.0.0 download.jword.jp
0.0.0.0 downloads.jword.jp
0.0.0.0 download.kingsoft.jp
0.0.0.0 www.jword.jp
0.0.0.0 www.jword.co.jp
0.0.0.0 www.jword.ne.jp
0.0.0.0 www.jword.info
0.0.0.0 www.j-word.jp
AmazonでTCP/IPの入門書を探す