我的機器上的 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 綁定到 localhost:5037,而不是 192.168.122.1:5037,因此我需要一種方法來映射
192.168.122.1:5037 <-> localhost:5037
在主機上以雙向方式。
如果我只是在所有東西之間添加一個橋樑,那麼它會擾亂我的虛擬機器的工作方式,因為它依賴這個介面來連接到網路。
如何在這 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 惡魔的配置,看看是否無法使其刪除綁定(然後它會對 192.168.122.1 做出反應)。
要檢查的第二件事是您的虛擬機器的配置方式。許多虛擬機器(您沒有告訴我們您使用哪種虛擬機器)允許客戶端使用主機介面無法存取主機。如果是這種情況,請重新配置您的虛擬機,並測試ping 192.168.122.1
等是否在客戶端中正常運作。
如果這些都不起作用,我接下來要嘗試的是socat
在主機上使用來轉送封包,因為這樣對於 ADB 惡魔來說它看起來就像是本機應用程式。