我在 Android 手机上运行了一个 rsync 守护进程。我只想对手机上的 rsync 端口(配置为 1873)进行 netcat,以验证守护进程是否已启动并正在监听该端口,但奇怪的是 netcat 尝试被拒绝了。
Rsync 运行良好,它在手机和 Ubuntu 盒子之间同步文件,因此没有防火墙或任何其他网络问题阻碍流量。
Rsync 守护进程正在监听端口:
cepheus:/ $ netstat -ltnp 2> /dev/null | grep 1873
tcp 0 0 127.0.0.1:1873 0.0.0.0:* LISTEN 2992/rsync
那么为什么连接被拒绝呢?
$ nc -zv 192.168.1.100 1873
nc: connect to 192.168.1.100 port 1873 (tcp) failed: Connection refused
下面的内容只是补充背景信息,希望不会混淆视听。我的预期是,如果 TCP 端口处于“监听”模式,则在没有防火墙/网络问题的情况下,netcat -zv 应该会成功。
rsync 守护进程通过 adb 启动,如下所示:
adb -s 192.168.1.100:5555 shell -t '/data/local/tmp/rsync --daemon --no-detach --config=/data/local/tmp/rsyncd.conf --log-file=/proc/self/fd/2'
并且我的 ubuntu 盒子上的本地端口 6010 在手机上被端口转发到 1873。
$ adb forward --list
192.168.1.100:5555 tcp:6010 tcp:1873
例如,对 adb 端口的检查工作正常。
$ nc -zv 192.168.1.100 5555
Connection to 192.168.1.100 5555 port [tcp/*] succeeded!
~
更新
$ nc -zv localhost 6010
nc: connect to localhost port 6010 (tcp) failed: Connection refused
Connection to localhost 6010 port [tcp/*] succeeded!
当将目标 IP 设置为 localhost 时,连接尝试确实成功,如守护进程日志中所述。问题是,当守护进程关闭且端口关闭时,nc 输出完全相同的两行。
尽管汤姆的回答确实有效,但我宁愿不让守护进程监听0.0.0.0
。
我尝试将源端口设置为本地 rsync 端口,但在使用 127.0.0.1 时只会导致绑定错误,或者在将其设置为 Ubuntu 框的内部 ip 地址时会导致连接被拒绝:
$ nc -zv 192.168.1.100 1873 -s 127.0.0.1 -p 6010
nc: bind failed: Address already in use
答案1
看起来它127.0.0.1
只是在监听。您可能需要指定192.168.1.100
(或0.0.0.0
) 作为地址(在rsyncd.conf
或使用命令行选项)。