0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ネットワーク的に独立しているPCにデータ転送

Posted at

概要

ネットワーク的に独立しているPCへどうやってデータをコピーするか,ChatGPTと話して,1つの解を得ることができた.

やりたいこと

PC_AとPC_Bが2台あって,ネットワーク的に独立している.PC_Aで作ったデータをどうにかしてPC_Bに転送したい.なるべく簡単に実現したい.しかし,PC_BはUSBメモリを使うことができない.

条件

次の条件をすべて満たすこと.

  • Androidスマートフォンを持っていること
  • PC_Aからスマートフォンへデータ転送可能
    • USBでもネットワークでも可
  • PC_BはUSBメモリを接続不可
  • PC_BはBluetoothキーボードをつなぐことが可能
  • PC_Aとスマホは同じ場所で使用可能なこと
  • スマホとPC_Bは同じ場所で使用可能なこと
  • PC_AとPC_Bは別の場所にあっても良い
  • PC_A,PC_B,および,スマホの使用権が自分にあること

実現

全体の流れ

[PC_A] --(転送)--> [スマホ] --(Bluetooth)--> [PC_B]
データ作成          データ再送                データ受信

流れとしては大したことはない.

  1. PC_Aでデータを作成
  2. 作ったデータをPC_Aからスマホへ転送
  3. スマホで受信したデータをPC_BへBluetoothで再送
  4. PC_BでBluetoothでデータ受信

準備

  1. スマートフォンに「Bluetooth Keyboard & Mouse」をインストール
  2. PC_Bにスマートフォンをキーボードとして認識させる
  3. スマートフォンがキーボードとして機能するか確認しておく

キーボードはGoogleキーボードにしておく.

データ作成

PC_Aで送信するデータを作成する.作成したデータはbase64でエンコードしておく.WindowsでもWSLで普通に使える.

base64 targetfile > targetfile.b64

データ転送

作成したtargetfile.b64をスマートフォンに転送する.PC_Aとスマホ間の接続は比較的自由度が高いことを想定している.ちゃんと転送できれば,その手法は問わない.

転送は普通にUSBケーブルで接続するのがおすすめだ.

PC_Aとスマホが同じネットワークに接続しているなら,次のコマンドを使うことでHTTPで送信はできる.しかし,あまりおすすめしない.

python -m http.server 8000

できないわけではないのだが,WSLだとつながらないとか,ネイティブで動かしてもセキュリティソフトがガードしてしまうとか,HTTPSじゃないから警告が出るとか,つながらない理由を見つけて対処しないといけないので,意外とめんどい.これにいちいち対処するぐらいなら,最初からUSBでつないでファイル転送した方が早くて確実である.

Bluetoothで転送

スマートフォンに転送したtargetfile.b64ファイルを開いて,中身をクリップボードにコピーする.

PC_Bでテキストエディタを開いて,スマートフォンから入力できる状態にする.

そして,Googleキーボードのペースト機能で,クリップボードからtargetfile.b64の内容を貼り付ける.

ATOKキーボードにはペースト機能が無いようだ.この作業をやるときは一時的にGoogleキーボードに変更しておく必要がある.

そのままでしばらくお待ちください:tea:

targetfile.b64の内容がキー入力として,PC_Bへ送信される.
PC_BではBluetoothキーボードからそういうキー入力があったと解釈されるだけである.
転送が終わるまで触らずに待つのだ.

あくまでキーボード入力なので,時間がものすごくかかる.だけど,人間が手打ちするより,正確で圧倒的に早い.

転送完了!

PC_Bでデータをすべて受信し終わったら,保存して,base64デコードするだけ!

・・・ではない(かもしれない).

キーボードの配列設定がうまくいかなくて,記号がおかしくなってるかもしれない.次のように置換する.

受信記号 正しい記号
~ +
^ =

スマホ側がUS配列で,PC_B側がJIS配列で読んでるっぽい.PC_BをUS配列にできれば良かったのだが,試した環境では変更できなかった.当然,正しく受信できていれば,何もやることはない.

このような理由から,元データがテキストであっても,base64でエンコードしておいた方が良いかもしれない.記号の置換が2種だけで済む.

あと,改行コードがCRLFになっているかもしれない.これもLFにしておく必要がある.

CRLFではbase64デコードができない.見た目では違いが分からないことが多いので,見逃しがち.

正しい状態のbase64ファイルができたら,targetfile.b64として保存する.

デコード

PC_Bでtargetfile.b64をデコードする.

base64 -d targetfile.b64 > targetfile

これで,PC_Aで作ったtargetfileをPC_Bへ転送することができた!

各自,targetfileを確認してみよう.

まとめ

ネットワーク的に独立しているPC間で,スマートフォンとBluetoothを使うことで,データ転送することができた.やったね♪

これをどこで使うかというと・・・セキュリティの都合でUSBメモリを自由に使えないPCとか,セキュリティの都合でネットワークが監視されてるPCとか,それなのにBluetoothキーボードを使うことに関しては制限無いPCとか,よくあるじゃん?

スマホを必須としない手法についても検討したい.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?