備忘録

備忘録

.NET Core HttpClientでproxyを利用する

Ⅰ. はじめに

.NET CoreではWebProxyクラスは存在しません。
代わりにIWebProxyを継承して自分でクラスを作る必要があります。

※2017/05/30 追記
.NET Core 2.0 でWebProxyクラスが追加されました。

Ⅱ. サンプル

class MyWebProxy : IWebProxy
{
  public ICredentials Credentials { get; set; }
  public Uri GetProxy(Uri destination) => new Uri("http://127.0.0.1:3128");
  public bool IsBypassed(Uri host) => false;
}
var handler = new HttpClientHandler();
handler.Proxy = new MyWebProxy();
handler.UseProxy = true;

// 証明書を全て信頼する
// handler.ServerCertificateCustomValidationCallback = delegate { return true; };

var client = new HttpClient(handler);

その他

ServerCertificateCustomValidationCallback について

このプロパティを変更すると
Linux / Unix環境で OpenSSL 関係のエラーが出る場合があります。

.NET Core AESで暗号化、複合する

Ⅰ. はじめに

Aesクラスを利用します。

.NET Core で IV 256bit を使う方法はこちら。
http://kagasu.hatenablog.com/entry/2017/01/04/213533

Ⅱ. Aesを利用した複合の例

public byte[] DecryptRijndael(byte[] bytes)
{
  Aes aes = Aes.Create();
  aes.Padding = PaddingMode.None;
  aes.Mode = CipherMode.CBC;

  using (var decryptor = aes.CreateDecryptor(key, iv))
  {
    return decryptor.TransformFinalBlock(bytes, 0, bytes.Length);
  }
}

Android 非同期処理を強制しない方法

Ⅰ. はじめに

Android 3.0以降では ネットワーク処理をメインスレッドで行うと以下の例外を吐くようになりました。

java.net.SocketException: android.os.NetworkOnMainThreadException

Ⅱ. 強制しない方法

以下をonCreateなどに追加するとメインスレッドでネットワーク処理を行ってもエラーが出ません。

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy); 

Android 5.x以降でアプリからProxy設定を変更する方法

Ⅰ. はじめに

Android 4.xまではProxy Settings などの便利なアプリで簡単にProxy設定が出来ていました。
しかし、 Android 5.xからはセキュリティの為アプリからProxyの設定が出来なくなりました。
それを回避する方法です。(root権限必須)

Ⅱ. やり方

Wi-FiのProxy情報は /data/misc/wifi/ipconfig.txt に書かれています。
このファイルをアプリからroot権限を用いて変更することでProxy設定を行います。

1. ipconfig.txt をPCに取り込む

$ adb shell
# cp /data/misc/wifi/ipconfig.txt /sdcard/ipconfig.txt
# exit
$ adb pull /sdcard/ipconfig.txt

2. バイナリエディタで ipconfig.txt を開く

3. idの値をメモする

※画像の場合は0x4062a3d6
f:id:kagasu:20161220091609p:plain

4. 以下のプログラムをコンパイルする

※56行目のidは3でメモしたものに書き換える。
https://gist.github.com/kagasu/08103bdf94b1b95dd8c8d8fd743b291a

以上でアプリからProxy設定を変更する事ができます。