2024-04-19 17:20:57 10阅读
应用场景:同一个网络内的两台Mac,其中一台(客户端)用于应用开发和工程编译,另外一台(服务端)作为一个虚机服务器,启动和管理虚机镜像。
服务器会与所有正在运行的设备建立连接。它通过扫描 5555 到 5585 之间(该范围供前 16 个模拟器使用)的奇数号端口查找模拟器。服务器一旦发现 adb 守护程序 (adbd),便会与相应的端口建立连接。
每个模拟器都使用一对按顺序排列的端口:一个用于控制台连接的偶数号端口,另一个用于 adb 连接的奇数号端口。例如:
模拟器 1,控制台:5554
模拟器 1,adb:5555
模拟器 2,控制台:5556
模拟器 2,adb:5557
依此类推。
如上所示,在端口 5555 处与 adb 连接的模拟器与控制台监听端口为 5554 的模拟器是同一个。
如果在本地启动了虚拟机,通过lsof -iTCP -sTCP:LISTEN -P | grep 'emulator|qemu'命令可以看到虚拟机进程监听本地的5554/5555端口。
emulator6 94105 macuser 20u IPv4 0xa8dacfb1d4a1b51f 0t0 TCP localhost:5555 (LISTEN)
emulator6 94105 macuser 21u IPv4 0xa8dacfb1d845a51f 0t0 TCP localhost:5554 (LISTEN)
注:理解adb的原理后就可以通过将localhost:5555的数据转发出来,从而别的设备可以通过adb connect的方式和服务器端的虚拟机通信了。
在 lsof 命令的输出中,-> 符号表示连接方向。它用于指示网络连接的方向,即数据流的流向。具体来说,LOCAL_ADDRESS -> REMOTE_ADDRESS 的形式表示本地地址到远程地址的连接方向。
例如,如果你看到类似以下的输出:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1234 user 3u IPv4 123456 0t0 TCP 127.0.0.1:22->192.168.1.2:54321 (LISTEN)
这表示 sshd 进程正在监听本地地址 127.0.0.1 的端口 22,并且有一个远程地址 192.168.1.2 的连接到这个端口。连接方向是从本地到远程,因为箭头是从左到右的。
在 macOS 上,可以使用 pfctl 命令实现端口转发。
服务端使用pfctl将TCP数据包从共享网络接口上的5555端口(或您喜欢的任何其他端口)重定向到环回接口上的奇数端口(本例中为127.0.0.1:5555)
rdr pass on en0 inet proto tcp from any to any port 5555 -> 127.0.0.1 port 5555
最后在客户端通过adb connect host_ip:5555 连接远程虚机即可。
使用ssh建立本地端口转发
ssh -L localhost:15555:127.0.0.1:5555 user@ip
2024-04-19 17:20:57 10阅读
应用场景:同一个网络内的两台Mac,其中一台(客户端)用于应用开发和工程编译,另外一台(服务端)作为一个虚机服务器,启动和管理虚机镜像。
服务器会与所有正在运行的设备建立连接。它通过扫描 5555 到 5585 之间(该范围供前 16 个模拟器使用)的奇数号端口查找模拟器。服务器一旦发现 adb 守护程序 (adbd),便会与相应的端口建立连接。
每个模拟器都使用一对按顺序排列的端口:一个用于控制台连接的偶数号端口,另一个用于 adb 连接的奇数号端口。例如:
模拟器 1,控制台:5554
模拟器 1,adb:5555
模拟器 2,控制台:5556
模拟器 2,adb:5557
依此类推。
如上所示,在端口 5555 处与 adb 连接的模拟器与控制台监听端口为 5554 的模拟器是同一个。
如果在本地启动了虚拟机,通过lsof -iTCP -sTCP:LISTEN -P | grep 'emulator|qemu'命令可以看到虚拟机进程监听本地的5554/5555端口。
emulator6 94105 macuser 20u IPv4 0xa8dacfb1d4a1b51f 0t0 TCP localhost:5555 (LISTEN)
emulator6 94105 macuser 21u IPv4 0xa8dacfb1d845a51f 0t0 TCP localhost:5554 (LISTEN)
注:理解adb的原理后就可以通过将localhost:5555的数据转发出来,从而别的设备可以通过adb connect的方式和服务器端的虚拟机通信了。
在 lsof 命令的输出中,-> 符号表示连接方向。它用于指示网络连接的方向,即数据流的流向。具体来说,LOCAL_ADDRESS -> REMOTE_ADDRESS 的形式表示本地地址到远程地址的连接方向。
例如,如果你看到类似以下的输出:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1234 user 3u IPv4 123456 0t0 TCP 127.0.0.1:22->192.168.1.2:54321 (LISTEN)
这表示 sshd 进程正在监听本地地址 127.0.0.1 的端口 22,并且有一个远程地址 192.168.1.2 的连接到这个端口。连接方向是从本地到远程,因为箭头是从左到右的。
在 macOS 上,可以使用 pfctl 命令实现端口转发。
服务端使用pfctl将TCP数据包从共享网络接口上的5555端口(或您喜欢的任何其他端口)重定向到环回接口上的奇数端口(本例中为127.0.0.1:5555)
rdr pass on en0 inet proto tcp from any to any port 5555 -> 127.0.0.1 port 5555
最后在客户端通过adb connect host_ip:5555 连接远程虚机即可。
使用ssh建立本地端口转发
ssh -L localhost:15555:127.0.0.1:5555 user@ip