LoL League of Legends Unspecified Error Occured at 32% patch 5.7
solution: http://boards.eune.leagueoflegends.com/en/c/help-support-en/O2gELyLf-resolved-update-failed
こんなエラーがたくさん出る。
000037.329| 0.0000kb| 0.0000kb added| WARN| Riot::RADS::Patching::UpdateAndInstallShared::CheckFile: Found the file "C:/Riot Games/League of Legends/RADS/projects/lol_air_client/releases/0.0.1.139/deploy/mod/lsi/assets/championBanners/league_header_ZYRA.jpg", but MD5 did not match.
000037.329| 0.0000kb| 0.0000kb added| WARN| Riot::RADS::Patching::UpdateAndInstallShared::`anonymous-namespace'::ExtractDownloadResult: Failed to validate file after download: C:/Riot Games/League of Legends/RADS/projects/lol_air_client/releases/0.0.1.139/deploy/mod/lsi/assets/championBanners/league_header_ZYRA.jpg.
どうやら画像のMD5が一致しないと。
Softbankのテザリングで通信してたんですが。
"上記コンテンツ・サービスなどをご利用の際、通信速度の制御や各種ファイルの最適化を行う場合があります"
http://www.softbank.jp/mobile/info/personal/news/support/201211091811300000/
クソすぎる。勝手に通信改ざんするなよ…。
SSL通信盗聴
ここに書いてあるとおりにやれば出来る。
http://blog.opensecurityresearch.com/2012/05/mallory-mitm-fix-ssl-decryption.html?m=1
最後の信頼する証明書を追加するフェーズは盗聴されたい人の環境によるが、windowsでは「証明書ダブルクリック→信頼された機関で登録」すればとりあえずは上手くいった。明らかに危険なのですぐに消した。消すには、certmgr.exe。偽証明書が無駄にそれっぽい名前でわかりにくい。Verisign GA ほにゃららとかいうやつが偽物。
要するに、
1.偽証明書をwindowsに信頼させる
2.攻撃役をデフォルトゲートウェイにする
3.mallaryがうまくプロキシしてくれる
ニコ生メモ
モチベーション: Chrome Cast でニコ生見たい
事前予想: Chrome Cast は Flash 不可だしrtmpは対応してない。でもiPhoneアプリはHLSらしい*1ので原理的にはいけるはず。
結果: iPadのSafariでTS視聴に成功。放送中のものは視聴には至らなかった。
手順は、
0. iPhoneのパケットを盗聴 (cf. Burp Proxy)
1. iPhoneのニコニコ動画アプリでTS視聴開始
2. PUT http://uthaa21.live.nicovideo.jp/v1/programs/lv*********/sessions/597ad16f100be319ce3a18769bee031a8eeac0a09c9a4e8a39029687986d0316?_format=json みたいなリクエストをかくにん
3. 直後の http://uthaa21.live.nicovideo.jp/v1/programs/lv*********/sessions/597ad16f100be319ce3a18769bee031a8eeac0a09c9a4e8a39029687986d0316/streams/main/variant.m3u8 こんな感じのURLをコピー
4. iPadのSafariにURLをペースト。
iPhoneの方とほぼ同時の動画が流れてくる。
5. iPhoneで視聴やめる
6. DELETE http://uthaa21.live.nicovideo.jp/v1/programs/lv*********/sessions/597ad16f100be319ce3a18769bee031a8eeac0a09c9a4e8a39029687986d0316?_format=json みたいなリクエストが飛ぶ。
7. iPadのほうも切れる
察するに、TS視聴するたびにサーバ側で、録画ファイルをストリーミングするプログラムが立ち上げられてる感じですかね
手順5でかわりにシークバーをいじると新しくPUTが飛んで新しいセッションが始まる。(ちなみにDELETEが飛ばない。これは意図してない動作な感じが…。)
PUTより前のこまごまとしたHTTPのやりとりから再現すればChromecast単体でニコ生TS視聴もできそう。放送中のが見れないのも何かミスってるだけでしょう…。
実装は時間もやる気も足りない。まだまだ嵌まりそうだし。
追記:CORS (Cross-Origin Resource Shareing) ヘッダ、即ち
Access-Control-Allow-Headers:Content-Type Access-Control-Allow-Methods:GET,PUT,POST,DELETE Access-Control-Allow-Origin:*
が(m3u8のレスポンスに?)付いてないとダメみたい?なので無理(一応確度低い)。TSを横流しするサーバでも建てるならともかく。
■
Linux Mint 17
HDMI接続で音が出ない
Mint 14 からアップデートしたらノートPCからは音が出るが、HDMI出力では出なくなった。Windows 7では出る。
以下のページの一番下のコマンド打ったら音が出た
http://arstechnica.com/civis/viewtopic.php?f=16&t=1252881
何も理解してないけどまあいいでしょ…。
プロセス名でウィンドウハンドル取得 コピペ用
Process[] ps = Process.GetProcessesByName("hogehoge"); /* Process[] ps = Process.GetProcesses(); foreach(var p in ps) { Console.WriteLine(p.ProcessName); } */ if (!ps.Any()) { return; } IntPtr hWnd = ps[0].MainWindowHandle; RECT rect = new RECT(); GetWindowRect(hWnd, out rect);
Win32API コピペ用
using System.Runtime.InteropServices; using System.Diagnostics;
#region GetWindowRect [StructLayout(LayoutKind.Sequential, Pack = 4)] private struct RECT { public int left; public int top; public int right; public int bottom; } [DllImport("User32.Dll")] static extern int GetWindowRect(IntPtr hWnd, out RECT rect); #endregion #region SendInput [StructLayout(LayoutKind.Sequential)] private struct MOUSEINPUT { public int dx; public int dy; public int mouseData; public int dwFlags; public int time; public int dwExtraInfo; }; [StructLayout(LayoutKind.Sequential)] private struct KEYBDINPUT { public short wVk; public short wScan; public int dwFlags; public int time; public int dwExtraInfo; }; [StructLayout(LayoutKind.Sequential)] private struct HARDWAREINPUT { public int uMsg; public short wParamL; public short wParamH; }; [StructLayout(LayoutKind.Explicit)] private struct INPUT { [FieldOffset(0)] public int type; [FieldOffset(4)] public MOUSEINPUT no; [FieldOffset(4)] public KEYBDINPUT ki; [FieldOffset(4)] public HARDWAREINPUT hi; }; [DllImport("user32.dll")] private extern static void SendInput(int nInputs, ref INPUT pInputs, int cbsize); [DllImport("user32.dll", EntryPoint = "MapVirtualKeyA")] private extern static int MapVirtualKey(int wCode, int wMapType); private const int INPUT_KEYBOARD = 1; private const int KEYEVENTF_KEYDOWN = 0x0; private const int KEYEVENTF_KEYUP = 0x2; private const int KEYEVENTF_EXTENDEDKEY = 0x1; public static void Send(short key) { INPUT inp = new INPUT(); inp.type = INPUT_KEYBOARD; inp.ki.wVk = key; inp.ki.wScan = (short)MapVirtualKey(key, 0); inp.ki.dwFlags = KEYEVENTF_KEYDOWN; inp.ki.time = 0; inp.ki.dwExtraInfo = 0; SendInput(1, ref inp, Marshal.SizeOf(inp)); System.Threading.Thread.Sleep(10); inp.ki.dwFlags = KEYEVENTF_KEYUP; SendInput(1, ref inp, Marshal.SizeOf(inp)); } #endregion #region SetForegroundWindow [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool SetForegroundWindow(IntPtr hWnd); [DllImport("user32.dll")] private static extern IntPtr GetForegroundWindow(); [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool ShowWindow(IntPtr hWnd, int cmd); const int SW_RESTORE = 9; #endregion #region SetCursorPos, mouse_event [DllImport("USER32.dll", CallingConvention = CallingConvention.StdCall)] static extern void SetCursorPos(int X, int Y); [DllImport("USER32.dll", CallingConvention = CallingConvention.StdCall)] static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo); private const int MOUSEEVENTF_LEFTDOWN = 0x2; private const int MOUSEEVENTF_LEFTUP = 0x4; private void Click() { mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); } #endregion