

下記のサイトを参考にMacに証明書をインストールして、chromeの通信を確認する事は出来たのですが、デスクトップアプリが送信するHTTPS・HTTP通信を確認する事が出来ないです。Dockerで構築したコンテナが外部APIにアクセスする際の通信等もデバッグしたいです。

Charles等ではできるみたいなので、同じ事が出来そうなのですが、設定方法をご存知の方いないでしょうか。  
宜しくお願い致します。

セットアップに参考したサイト  
[mitmproxyを使ってアプリの通信内容を確認する](https://rcmdnk.com/blog/2021/03/02/computer-
windows-mac-network/)

ここのtransparent モードで使用すればできそうな気がするけど、パケットの通し方がわからない。  
[transparent Proxying mode](https://docs.mitmproxy.org/stable/howto-
transparent/)

Chrome以外でもプロキシを指定してあげると通信を監視できる。ターミナルで下記のコマンドで監視出来た。なので他のアプリもプロキシを
`localhost:8888` に指定してあげる事で監視出来そう。

[code]

    curl -X GET 'https://www.apple.com/' --proxy localhost:8888
    
[/code]

ただ全てのアプリにプロキシの設定があるわけないので、Macの全ての通信をプロキシに向ければ出来そう。

### charles proxy

では起動している際 HTTP・HTTPSのプロキシだけでやっているので全ての通信が向いてるわけではない。それなのにどうして同じプロキシを通している
`mitmproxy` と差が出るの分からない。証明書の違いだろうか？ `mitmproxy` ではAppStoreは開けないけど `charles
proxy` では開ける。  
こっちを使えばという話なのだが `mitmproxy`
はリクエストを一度止めて中身を変更して送信できたり、Pythonのスクリプトを流せるから出来ればこちらを使いたい。

### 追記

`mitmproxy --listen-port 8888` でport番号をcharles
proxyと同じにしてプロキシサーバをたて、ネットワーク＞詳細＞プロキシをHTTP・HTTPSにチェックを入れ繋げるプロキシサーバ設定を charles
proxyと同じ `127.0.0.1:8888`
にする事でdockerのコンテナから送信される値を監視出来ました。(httpの通信のみでhttpsはハンドシェイクが上手くいかないとなり接続を拒否されました。)以前は`192.168.xx.xx:8080`
でやってた。同じようにAppStoreも出来たら良いのですが、繋がらなず上手く行かなかったです。

ただローカルで振られたIPアドレス（192.168.xx.xx）も127.0.0.0.1もlocalhostも同じなのに違いが出る理由がわからないです。ポート番号はどこでもいいような気もします。

### 証明書の比較

証明書を比較するとmitmproxyはオレオレ証明書という感じで、charles
proxyはちゃんと書かれている感じでした。これが原因で他のアプリやAppStoreの接続を拒否されていたのでしょうか？

### transparent modeを使えばできそう。

これでmacの全てのネットワークをmitproxyの設定に向けれそう。

ただこれの設定でいくつか分からない箇所がある。  
[Transparent Proxying](https://docs.mitmproxy.org/stable/howto-
transparent/#macos)

下記のコマンドを入力してmacの通信をmitproxyに向けるようにすると思われる。

ポートフォワードをオンにする。

[code]

    sudo sysctl -w net.inet.ip.forwarding=1
    
[/code]

終了した際は`0`に戻してあげれば元に戻る。

[code]

    sudo sysctl -w net.inet.ip.forwarding=0
    
[/code]

これがコマンドなのかよく分からない。ファイルの設定を変更するみたいだけど、これを実行した後はどうやって戻せば良いのか分からない。

[code]

    rdr pass on en0 inet proto tcp to any port {80, 443} -> 127.0.0.1 port 8080
    
[/code]

これは上記の設定をおそらく加えるのか何かしてるが、よく分からない。

[code]

    sudo pfctl -f pf.conf
    
[/code]

上記の設定を有効にする？？

[code]

    sudo pfctl -e
    
[/code]

これも何を意味するか分からない。

[code]

    ALL ALL=NOPASSWD: /sbin/pfctl -s state
    
[/code]

最後にmitproxyを実行する

[code]

    mitmproxy --mode transparent --showhost
    
[/code]

これらを順に実行すればおそらく全てのデスクトップアプリの通信を見れそうなのですが、各コマンドの意味がよく分からなくて実行できないのと実行後元に戻す方法をご存知の方は教えて頂けないでしょうか？  
宜しくお願い致します。


CC BY-SA 4.0
2022-01-31T14:14:48.797
86047
2022-02-26T11:13:34.737
2022-02-26T11:13:34.737
3060
22565
question
macos network http https debugging
mitmproxyを使ってMacのデスクトップアプリの通信を監視したい


> Macの全ての通信をプロキシに向ければ出来そう。

mitmproxy を SOCKS プロキシとして動作させた上で、Mac のシステム設定でプロキシに指定すればよさそうです。

[Modes of Operation #SOCKS Proxy | mitmproxy
docs](https://docs.mitmproxy.org/stable/concepts-modes/#socks-proxy)

>
[code]

>     mitmdump --mode socks5
>  
[/code]

[Macで任意のアプリケーションをSOCKSプロキシ経由にしてみたかったので試してみた](https://dev.classmethod.jp/articles/try-
socks-proxy-per-app-on-mac/)

> Macでは「ネットワーク環境設定 > Wi-Fi > 詳細
> >プロキシ」でSOCKSプロキシ設定が可能です。一方で、この設定だと基本的にMacのネットワーク設定を参照するアプリケーションには全てプロキシが適用されます。(ターミナル上でのsshやcurlなどのCLIアプリケーションやGoogle
> Chromeなど、適用されないものもある)


CC BY-SA 4.0
2022-02-01T16:14:29.810
86082
2022-02-01T16:14:29.810
3060
86047
answer