私のマシンの localhost:5037 で ADB デーモンが稼働しています。私のマシンでは仮想マシンが稼働しています。私のマシンをホスト、仮想マシンをゲストと呼びます。
ゲスト VM はホストのインターフェースを使用します。
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
インターネットに接続するために、ゲストからホストのADBサーバーにアクセスする必要があります。ゲストから呼び出すだけでは192.168.122.1
機能しません。ホストのadbは192.168.122.1:5037ではなくlocalhost:5037にバインドされているためです。そのため、マッピングする方法が必要です。
192.168.122.1:5037 <-> localhost:5037
ホストマシン上で双方向に。
すべての間にブリッジを追加すると、インターネットへの接続にこのインターフェースに依存するため、VM の動作が混乱します。
これら2つのIPの間にTCPブリッジを作成するにはどうすればいいでしょうか?http://tcpreplay.synfin.net/wiki/tcpbridgeしかし、それがどのように機能するかは不明です。おそらく iptables で解決できるでしょうか?
アップデート:
回答で推奨されているように、socat を使用しましたが、現在は動作します。
#on host machine:
socat tcp-listen:5037,bind=192.168.122.1,reuseaddr,fork tcp:localhost:5037
#on virtual machine:
socat tcp-listen:5037,bind=localhost,reuseaddr,fork tcp:192.168.122.1:5037
答え1
ADBデーモンが本当にループバック インターフェイスにのみバインドされている場合、どのようなトリックを使用しても、ホスト ローカル アプリケーションからのパケットのみがループバック経由でルーティングされるため、それらのパケットにのみ反応します。
したがって、最初に行うべきことは、ADB デーモンの構成を確認し、バインドをドロップできないかどうかを確認することです (そうすると、192.168.122.1 に反応します)。
2番目に確認すべきことは、VMがどのように構成されているかです。多くのVM(使用しているVMの種類は教えていただけませんでした)では、クライアントがホストインターフェイスを使用できるようにしています。ホストにアクセスできないその場合は、VM を再構成し、ping 192.168.122.1
クライアントでなどが機能することをテストします。
これらすべてが機能しない場合は、次に試すのは、socat
ホスト上でパケットを転送することです。そうすると、ADB デーモンに対してローカル アプリケーションのように見えるようになります。