R言語で自分のブログへのログイン履歴を分析してみました

By | Date : 2015/10/07 ( Last Update : 2016/05/24 ) | 113 views

カテゴリ : その他 プログラミング タグ: ,

Nia-TN-SDF-A9

こんにちはー!ニアです。

このブログではWordPressのセキュリティ対策として、ログイン履歴を残すためにプラグイン「Crazy Bone(狂骨)(→Github)」を入れており、先日はADO.NETとLINQを使って、ログインエラー時のユーザー名とパスワードを取り出した記事をQiitaに書きました。

[C#] ADO.NETとLINQを使って、Crazy Bone(狂骨)で記録したWordPressへのログイン履歴を分析してみよう

http://qiita.com/nia_tn1012/items/250115f63463c2519516

今回はデータ解析に特化したR言語を使って、MySQLデータベースからエクスポートしたCSVファイルを読み込み、分析してみました。

 

 

1. 実行環境

今回はR for Windows 3.2.2を使用しました。また、使用したパッケージは以下の2つです。

  • data.table
  • stringr

 

2. R言語を使って、ログイン履歴を分析

2.1. CSSファイルを読み込み、ログインエラーのレコードを抽出

まずは、fread関数を使ってCSVファイルを読み込みます。先頭行はフィールド名なので、headerをTRUEに、encodingはUTF-8を指定します。

次にactivity_statusフィールドをキーに条件式を使って、値が「login_error」であるレコードを抽出します。

これで、ログインエラー時のdata.tableオブジェクトができました。

 

2.2. ユーザー名とパスワードを取り出す。

ログインエラー時のユーザー名とパスワードはactivity_errorsフィールドに格納されていますが、値がPHPのシリアライズ形式なので、正規表現を使って取り出します。

 

まずは「s:10\:””user_login””;s\:\d*\:””.*?””; 」及び「s:10\:””user_login””;s\:\d*\:””.*?””;」のパターンとstr_match関数を使って、activity_errorsフィールドの値から「s:10:”user_login”;s:\d:”ユーザー名”;」及び「s:13:”user_password”;s:\d:”パスワード”;」の形で取り出します。

次に「s:10\:””user_login””;s\:\d*\:””|””; 」及び「s:10\:””user_login””;s\:\d*\:””|””;」のパターンとgsub関数を使って、余分な文字列「s:10:”user_login”;s:\d:”」や「s:13:”user_password”;s:\d:”」、「”;」を取り除き、ユーザー名及びパスワードを取り出します。

そして、ユーザー名とパスワードのベクトルからdata.tableを作成します。

 

試しにsummary関数を使ってみると、ログインエラー時のユーザー名とパスワードそれぞれの試行回数(TOP5)が表示されます。

wperr

作成したdata.tableからユーザ名、パスワードでそれぞれグループ化し、.Nで試行回数をカウントします。さらにorder関数で試行回数の多い順にソートします。

 

◆ ソースファイル

 

◆ 実行結果

wperr2

よい子はユーザー名に「admin」を使っちゃダメだぞ~!

 

3. おわりに

今回初めてR言語を使ってみました。data.tableパッケージを使うだけでCSVファイルをテーブル形式として読み込めるのがいいですね。

 

Visual Studio CodeがR言語のハイライトに対応していたので、私はそれでコーディングし、RGuiはコンソール画面のみというスタイルにしました。コンソール画面は広く使いたいですから。

vscr

 

今度はグラフのプロットや簡単な画像処理をやってみようかな。

 

それでは、See you next!

この記事をシェアする
Chronoir.netのRSSフィードを購読する

About : ニア(Nia)

紅茶とコーヒーが好きな湘南生まれのプログラマー/ITエンジニアです。主にC#/C++/PHPを使ってプログラミングをしています。趣味は写真撮影と音ゲーです。時々イラストを描いています。プログラミングを勉強している方々と仲良くなりたいです! 興味を持っている分野:UWP/Xamarin/Android Wear/WPF/Windows/Visual Studio/WordPress/KUSANAGI/nginx

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*