I SPY TANKをコンピューター経由で制御する

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

画像



電話で少し遊んだので、私はコンピューターから制御することにしました。





リエンジニアリング



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バイトで構成されます。

最初のバイトは、コマンドの宛先となるデバイスの選択を担当します。



2番目のバイトは移動の方向です。



これらのコマンドを組み合わせて、たとえば、タンクを簡単に制御できます。たとえば、先に進むには4バイト0x31 0x31 0x32 0x31



を送信する必要があります。

別のコマンドが送信されない場合、コマンドの実行は1秒後に自動的に終了します。



接続



彼らは常にタンクに直接接続していましたが、私はしたくなかったので、長い間横になっていたTP-LINK MR3020ルーターを使用することにしました。

OpenWrtファームウェアをそこに注ぎ、タンクのルーターに接続するためのクライアントとして構成しました。 次に、ローカルインターフェイスからWiFiへの8150



および8196



ポート転送を構成し、ホームルーターに接続しました。 これで、ローカルネットワークからタンクに接続できるようになりました。



運営管理



以下は、タンクを制御する簡単なC#コードです。

 Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //      socket.Connect(IPAddress.Parse("192.168.10.15"), 8150); //    3  /    //     socket.Send( new byte[] { 49, 49, 50, 49, 51, 48 }); // 1  Thread.Sleep(1000); // socket.Send( new byte[] { 49, 50, 50, 50, 51, 48 }); Thread.Sleep(1000); // socket.Send( new byte[] { 49, 50, 50, 49, 51, 48 }); Thread.Sleep(1000); // socket.Send( new byte[] { 49, 49, 50, 50, 51, 48 }); Thread.Sleep(1000); //  socket.Send( new byte[] { 49, 48, 50, 48, 51, 49 }); Thread.Sleep(1000); // socket.Send( new byte[] {49, 48, 50, 48, 51, 48}); socket.Disconnect();
      
      







誰かが役に立つといいな。



All Articles