【#Laravel】laravel-echo&C#でプライベートチャネル通信が動かない!(いや,動かす方法を見つけた)
関連記事
- 【#PostgreSQL】テーブルから取得したレコードセットをCSVへ落とそうとすると,空ファイルが出来る...ドロドロドロ 【2023年03月08日(水)】
- 【#git】TortiseGit ver2.14のGitWCRev.exeを動かすとErrorCD:10を出力して,動かない 【2023年02月08日(水)】
- 【#Excel】Excel-COMを叩くアプリの改造,オワタ 【2023年01月18日(水)】
- 【#CSHARP】System.Numerics.Vectorでグリングリン,AVXレジスタをぶん回したい 【2023年01月14日(土)】
- 【#PostgreSQL】鬼のような4本のSQLを書き上げた 【2023年01月13日(金)】
laravel-echoのブロードキャスト@WebSocket,ブラウザベースでは先日動いた
その内容はこちらに記載してありまする
⇒こちら
今度はクライアント側をC#に置き換えて実装チャレンジ
だってIcTセンサ群はローカルのWindowsPC配下に置かれるんじゃもん
WindowsPCにセンサデータを集約してそっから,REST-APIでサーバへぶん投げ
センサ制御はWebSocketでサーバから指示出す作戦
C#のフレームワークは「socket.io-client-csharp」フレームワークを使用
⇒こちらにあるぞい
参考にしたのがこのページ
How can I connect to Laravel broadcasting from c# desktop app?@stackoverflow
これ見て,パブリックチャネルの通信はサクッと出来た
さて,プライベートチャネルの通信(プライベートが無いと他所様が勝手に接続して電文を覗き見るべ)
こんな感じで実装した.プライベートチャネルは認証が要るんでjson文字列をauthキーに突っ込んでみた
private async void Socket_OnConnected(object sender, EventArgs e) { Console.WriteLine("Socket_OnConnected"); var socket = sender as SocketIO; string st = "{\"headers\":{\"Authorization\":\"Bearer hogehoge\",\"X-CSRF-TOKEN\":\""+ CsrfKey + "\"}}"; await socket.EmitAsync("subscribe", new { channel = "publicEventBMT", auth = st }); await socket.EmitAsync("subscribe", new { channel = "privateEventBMT.1", auth = st }); }動かない...ドロドロドロ
なして?
JAVA(jsではない)の実装を見つけたんでにらめっこしたら
プライベートチャネルのチャネル名称には,「private-」のプリフィックスが必要なことが判明
書き換えた
channel = "private-privateEventBMT.1",動かない...ドロドロドロ
なしてなして?
laravel-echo-serverの画面見たら...

「認証エラー」
はい?なして認証エラー何じゃ??
って通信ログ見たいけど,node.jsもlaravel-echo-serverもLaravelもろくなログは出してくれない
これは詰んだ感
何が起こってるのか把握できんべ
昨日はそのまま床についた...床の中で閃いた!
localhostのTCPパケットを横取りキャプチャして,TCP電文を解析すればいいんじゃね?
朝,TCPパケット解析アプリ「wireshark」登場

TCPパケットの解析とか20数年ぶりの予感...モルモルモル
さっそく動かしてTCPの生電文を採取
該当電文が居た!!(2741行目)

認証文字列を含む電文中に散見される「¥u0022」の文字...
な,なんだってぇ~~>ΩΩΩ Ω
認証文字列のダブルコーテーションを勝手にエスケープして送っているじゃねぇ~か!(大激怒!
文字列をエスケープさせない方法,イロイロ試したけどダメ
認証情報は文字列で送っちゃいけないって結論へ
なら,どうやって書けばいいの
悩むこと2時間...海外サイトで方法見っけ!こう書けばいいそうな
auth = new { headers = new { Authorization = "Bearer hogehoge", X_CSRF_TOKEN = CsrfKey } }X-CSRF-TOKENトークンに含まれてるハイフンは,そのまま書くとコンパイルエラーになるんで
アンダーバーに置き換えろって,さらにどっかの海外ページに書いてあった(汗
清書してみた(CsrfKeyはPublic変数 外部よりセットする)
private async void Socket_OnConnected(object sender, EventArgs e) { Console.WriteLine("Socket_OnConnected"); var socket = sender as SocketIO; await socket.EmitAsync("subscribe", new { channel = "publicEventBMT", auth = new //パブリックチャネルのauthは要らないはずやけど縁起物として書いておきますた { headers = new { Authorization = "Bearer hogehoge", X_CSRF_TOKEN = CsrfKey } } }); await socket.EmitAsync("subscribe", new { channel = "private-privateEventBMT.1", auth = new { headers = new { Authorization = "Bearer hogehoge", X_CSRF_TOKEN = CsrfKey } } }); }柏手打って,運転させてみた
キタ━━━━(゚∀゚)━━━━!!

プライベートチャネルも認証通って通信開始した!!
これで,完全にWebSocketの技術獲得したべ
IcTセンサにやりたい放題,イカガワシイ電文を投げつけられる!
あとから来られる方のために
事の顛末,記載しておきますわん.有効活用してくださいな
コメント
Wi-Fiルーターの不正利用に新たな手口、警視庁が注意喚起 「従来の対策のみでは対応できない」
今年度な仕事は終わった感?お昼からお暇をもらいますドロドロドロ
【#ロシア】ロシアが日本海に向けて超音速対艦ミサイルを発射(23/3/28)
【#WSL2】ubuntu20.04で「sudo apt-get」も「ping」もエラー(怒 Windows側IPエイリアスが邪魔してやがった
宮崎:清武南―日南北郷 開通 東九州自動車道(23/3/25)
三島村・黒島で61歳男性が滑落 鹿児島市の病院へ緊急搬送(23/3/24)
【#WBC】 日本代表の選手たちはチャーター機で帰国の途へ(23/3/23)
【#WBC決勝戦】優勝キタ━━━━(゚∀゚)━━━━!!