こんなおもちゃを手にした

電話で少し遊んだので、私はコンピューターから制御することにしました。
リエンジニアリング
WiFiを備えたラップトップで武装し、それをタンクに接続します。 IP 10.10.1.1を持っていることが判明しました。 まず、ブラウザを介して
10.10.1.1:80のアドレスにhttp経由で彼に連絡することにしましたが、そこにはありませんでした。タンクのWebサーバーは引き上げられましたが、パスワードで閉じられたため、少し動揺しました。 次に、FTP経由で接続します。これも稼働中で、アクセスは開いていますが、読み取りモードでのみです。 再び失望。
次のステップはポートスキャンでした。 開いているポートのリストのうち、そのうち2つ(
8150
と
8196
)が最も疑わしいと思われました。
ブラウザでそれらをチェックしました。 ポート
8150
は応答しませんでしたが、MJPGストリームはポート
8196
送信されました。
さらに、制御コマンドを決定することがより困難であることが判明しました。
これを行うために、ポート
8150
をリッスンし、ラップトップのIP
10.10.1.1
を設定し、WiFiをアクセスポイントモードにする簡単な小さなプログラムをスケッチしました。 電話から接続してから、タンク制御プログラムを起動しようとしました。 予想どおり、彼女は私が聞いていたポートに接続しましたが、飛び出して、ビデオ送信ポートに接続できなかったことがわかりました。 彼のプログラムにビデオ伝送のシミュレーションを追加しても、プログラムはまだ開始されていました。 管理プログラムから受け取ったデータを分析した結果、それほど多くはない管理チームを特定しました。
すべてのコマンドは2バイトで構成されます。
最初のバイトは、コマンドの宛先となるデバイスの選択を担当します。
- 49(
0x31
)-左トラック - 50(
0x32
)-右トラック - 51(
0x33
)-タワー(カメラの上げ下げ)
2番目のバイトは移動の方向です。
- 48(
0x30
)-停止(動きを停止) - 49(
0x31
)-フォワード/アップ(カメラ用) - 50(
0x32
)-戻る/下へ
これらのコマンドを組み合わせて、たとえば、タンクを簡単に制御できます。たとえば、先に進むには4バイト
0x31 0x31 0x32 0x31
を送信する必要があります。
別のコマンドが送信されない場合、コマンドの実行は1秒後に自動的に終了します。
接続
彼らは常にタンクに直接接続していましたが、私はしたくなかったので、長い間横になっていたTP-LINK MR3020ルーターを使用することにしました。
OpenWrtファームウェアをそこに注ぎ、タンクのルーターに接続するためのクライアントとして構成しました。 次に、ローカルインターフェイスからWiFiへの
8150
および
8196
ポート転送を構成し、ホームルーターに接続しました。 これで、ローカルネットワークからタンクに接続できるようになりました。
運営管理
以下は、タンクを制御する簡単なC#コードです。
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
誰かが役に立つといいな。