2020年10月22日
libexpect c++ アンドロイドスタジオデバッグの接続#2
また 書きなぐりです。
実は LINUXのスクリプト全然わかりません。
QTを使っています ここではライブラリとしてQTをつかって 正規表現を間借りしています。
ブーストなどつかってもほぼおなじでしょうけど QTなそのままつかえる利点があります。
今回のスクリプト? Cで書いたのですが これで 無線ランにつないでアンドロイドをデバッグするという話です。
そこで C++で expect というライブラリーつかって
乱暴に練り込みみたいなことしていますが
やってることは単純で
int fd=exp_spawnl(bin_sh_string ,bin_sh_string ,NULL);
このスポーンは 意味的には 卵が孵化するみたいな いみっぽいです。
地獄の使い なども スポーンなのでしょうけど ただ生まれるみたいな
ここで シェルを起動します。 fd に数字が入りますこの なんだかわからないディスクリプタを使います。
retv=exp_expectl(fd,exp_regexp,"\\$",120, exp_end);
これも乱暴に 120なんてマジック番号いれています。 プロンプトみつけると120を返してきます。
次に アンドロイドの 接続のための adbを起動して
adb shell ip addr
なものを起動します。 これやると どひゃーみたいな のがでてきますので
フィルターで 消して
/opt/android-sdk/platform-tools/adb shell ip addr "|" grep inet "|" grep global
を C++から実行します。
この程度フィルターすると こんなのが帰ってきます。
inet 192.168.7.141/24 brd 192.168.7.255 scope global wlan0
inet 10.0.0.169/30 scope global tun0
さらに
/opt/android-sdk/platform-tools/adb shell ip addr "|" grep inet "|" grep global "|" cut -f6 -d \" \"
程度フィルタすると
192.168.7.141/24
10.0.0.169/30
アンドロイドにあれこれアドレスがついていますが
無線ランは 192からのアドレスでした。
10からのは アンドロイドがVPNにつながってる関係です。
153から始まるものも出てましたけどけしました。 これはおそらくグローバルIPです
あと IPの6もでてましたけど これも 都合でけしました。
まで まとまってきます。 さらに /24 とかこれを削ります。
/opt/android-sdk/platform-tools/adb shell ip addr "|" grep inet "|" grep global "|" cut -f6 -d \" \" "|" cut -d "/" -f 1
これを C言語で書くときに \ とか ” をエスケープして書きますそうすると
使えます。
ライトで おそらく STDINに書き込むことになるのでしょう。
write(fd,cmd.c_str(),cmd.size());
そして 結果のプロンプトを検出して いきます。
今回は ローカルの 192から始まるものを使いたかったのでこれもマジック番号でとりだしました。
QRegExp r("192\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}");
if(r.indexIn(list.at(i))>=0) { TargString=r.cap(0); }
この部分かな
ちゃらとやりたかったので これでアンドロイドデバイスのアドレスをみつけます。
これを 5555みたいなポートでつないで
取り出したアドレスと :5555でつないで ちゃんちゃんと
なぜ無線ランにつなぎたかったかというと USBカメラをつなぎたかったので
デバッグポートがつかえなくなります。だから無線ランです。
お役にたつかしら ?????
実は LINUXのスクリプト全然わかりません。
QTを使っています ここではライブラリとしてQTをつかって 正規表現を間借りしています。
ブーストなどつかってもほぼおなじでしょうけど QTなそのままつかえる利点があります。
今回のスクリプト? Cで書いたのですが これで 無線ランにつないでアンドロイドをデバッグするという話です。
そこで C++で expect というライブラリーつかって
乱暴に練り込みみたいなことしていますが
やってることは単純で
int fd=exp_spawnl(bin_sh_string ,bin_sh_string ,NULL);
このスポーンは 意味的には 卵が孵化するみたいな いみっぽいです。
地獄の使い なども スポーンなのでしょうけど ただ生まれるみたいな
ここで シェルを起動します。 fd に数字が入りますこの なんだかわからないディスクリプタを使います。
retv=exp_expectl(fd,exp_regexp,"\\$",120, exp_end);
これも乱暴に 120なんてマジック番号いれています。 プロンプトみつけると120を返してきます。
次に アンドロイドの 接続のための adbを起動して
adb shell ip addr
なものを起動します。 これやると どひゃーみたいな のがでてきますので
フィルターで 消して
/opt/android-sdk/platform-tools/adb shell ip addr "|" grep inet "|" grep global
を C++から実行します。
この程度フィルターすると こんなのが帰ってきます。
inet 192.168.7.141/24 brd 192.168.7.255 scope global wlan0
inet 10.0.0.169/30 scope global tun0
さらに
/opt/android-sdk/platform-tools/adb shell ip addr "|" grep inet "|" grep global "|" cut -f6 -d \" \"
程度フィルタすると
192.168.7.141/24
10.0.0.169/30
アンドロイドにあれこれアドレスがついていますが
無線ランは 192からのアドレスでした。
10からのは アンドロイドがVPNにつながってる関係です。
153から始まるものも出てましたけどけしました。 これはおそらくグローバルIPです
あと IPの6もでてましたけど これも 都合でけしました。
まで まとまってきます。 さらに /24 とかこれを削ります。
/opt/android-sdk/platform-tools/adb shell ip addr "|" grep inet "|" grep global "|" cut -f6 -d \" \" "|" cut -d "/" -f 1
これを C言語で書くときに \ とか ” をエスケープして書きますそうすると
使えます。
ライトで おそらく STDINに書き込むことになるのでしょう。
write(fd,cmd.c_str(),cmd.size());
そして 結果のプロンプトを検出して いきます。
今回は ローカルの 192から始まるものを使いたかったのでこれもマジック番号でとりだしました。
QRegExp r("192\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}");
if(r.indexIn(list.at(i))>=0) { TargString=r.cap(0); }
この部分かな
ちゃらとやりたかったので これでアンドロイドデバイスのアドレスをみつけます。
これを 5555みたいなポートでつないで
取り出したアドレスと :5555でつないで ちゃんちゃんと
なぜ無線ランにつなぎたかったかというと USBカメラをつなぎたかったので
デバッグポートがつかえなくなります。だから無線ランです。
お役にたつかしら ?????
#include <QApplication>
#include <expect.h>
#include <iostream>
#include <fstream>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <QDebug>
int main(int argc, char *argv[])
{
int fd;
int retv;
char bin_sh_string[] = "/bin/sh";
fd=exp_spawnl(bin_sh_string ,bin_sh_string ,NULL);
if(fd<0){return 0;}
retv=exp_expectl(fd,exp_regexp,"\\$",120, exp_end);
std::string cmd="/opt/android-sdk/platform-tools/adb shell ip addr \"|\" grep inet \"|\" grep global \"|\" cut -f6 -d \\\" \\\" \"|\" cut -d \"/\" -f 1 \n ";
write(fd,cmd.c_str(),cmd.size());
retv=exp_expectl(fd,exp_regexp,"\\$",120, exp_end);
QString temp = QString::fromLocal8Bit(exp_buffer);
QStringList list = temp.split(QRegExp("\n|\r\n|\r"));
QString TargString="";
for ( int i=0; i < list.size();i++ )
{
QRegExp r("192\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}");
if(r.indexIn(list.at(i))>=0) { TargString=r.cap(0); }
}
cmd="/opt/android-sdk/platform-tools/adb tcpip 5555 \n ";
write(fd,cmd.c_str(),cmd.size());
retv=exp_expectl(fd,exp_regexp,"\\$",120, exp_end);
qDebug()<<"1"<<exp_buffer<<"retv="<<retv<<";";
cmd="/opt/android-sdk/platform-tools/adb connect "+TargString.toStdString()+":5555 \n";
write(fd,cmd.c_str(),cmd.size());
retv=exp_expectl(fd,exp_regexp,"\\$",120, exp_end);
qDebug()<<"2"<<exp_buffer<<"retv="<<retv<<";";
/*
return 0;
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
*/
}
【このカテゴリーの最新記事】
-
no image
-
no image
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/10288962
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック