情况:我正在学习如何为我公司为客户开发的强化服务器开发测试。测试配置将包括测试目标(我们正在开发的服务器)和外部测试笔记本电脑,我将用它来运行一些测试脚本。
测试笔记本电脑和服务器都将运行 Ubuntu 22.04 LTS。不过,我在这里发帖是因为这个设置还涉及 Kali Linux。如果这不是发帖的正确网站,我们深表歉意。
在测试笔记本电脑上的 VirtualBox VM 中使用 Kali Linux,我需要分析测试笔记本电脑和目标服务器之间传输的数据包。我一直在使用学习 Kali Linux(奥莱利教科书)还有这个资源建立一个简单的环境,我可以在其中完成此任务,但已经走进了死胡同。
过程:
当我将 Kali Linux VM 的网络配置为 NAT 时,我可以ping
从 Kali Linux VM 成功获取目标服务器和主机笔记本电脑的 IP 地址。
我还可以成功地ping
从目标服务器访问主机笔记本电脑,反之亦然。
但是,当我tcpdump port 22
在虚拟机中执行命令,然后执行从目标服务器到主机笔记本电脑的操作时scp
,我在 Kali Linux shell 中看不到数据包数据。
同样,如果我tcpdump -i any
在 Kali Linux 中运行,我确实会得到一个流,但这是一个非常缓慢的eth0
数据流(主机和目标服务器之间的有线连接)。相反,当我在虚拟机之外的主机笔记本电脑上执行相同的命令时,我会获得健康的信息流。
然后,当我将 Kali Linux VM 的网络配置为仅主机适配器时,所有设备都可以ping
相互连接(对我来说很有意义,因为它们现在共享一个网络)。
当我执行tcpdump port 22
并尝试scp
从服务器到主机时,这次我得到了数据包数据。伟大的!除此之外,scp
无法完成。但我在执行的服务器的 Bash 窗口中没有收到错误消息scp
— 它似乎“挂起”并且永远不会完成。我必须杀死该进程。
即使我关闭了 Kali Linux VM,情况仍然如此:scp
无法完成。有趣的是,当我在测试笔记本电脑上运行时,ifconfig
我可以看到创建的 Host-Only 适配器 VirtualBox 仍然存在。如果我重新启动主机,网络就会消失,我可以再次成功地scp
从目标服务器到主机。我现在怀疑这是一个我无法理解的网络问题。
任何人都可以为这个问题提供一些帮助吗?
PS,我可以tcpdump
在主机笔记本电脑(虚拟机外部)上执行并查看数据流。更糟的是我会用这个方法。这确实是一个关于设备之间的网络以及如何使用 Kali Linux 监控网络的好奇问题。我没有选择打开潘多拉魔盒,但我却在这里。
答案1
通常,网络适配器硬件会丢弃不适合本地主机的帧。为了能够捕获所有网络流量,嗅探器tcpdump
需要能够将网络接口放入混杂模式,其中所有帧都传送到网络堆栈。在VM上,将虚拟适配器置于混杂模式并不一定会影响主机(物理硬件)环境,因此是无效的。这就是它在虚拟机之外工作的原因。