硬干货!一张图弄清楚在ESXi下如何进行网络抓包

   对于网络问题,抓包一直是一个比较简单方便的“大招”。由于在esxi环境下可以在不同的层面下抓包,因此在什么地方抓包,怎么抓包一直让我觉得很复杂,于是每次操作之前我都要再检查一次手册。这次正好遇到了非常好的文档,借机会总结一下。

 

了解ESXi中交换机的架构

==========================

 

  • 我们先研究下标准交换机的结构:

     

    下面这张图是一台ESXi主机使用标准交换机的网络架构。简单来说分为四部分:

  • 物理上联网卡

  • 标准交换机

  • 虚拟机网络

  • vmk网络

 

 

  • 我们再来看下分布式交换机的架构图

 

(清晰图请从文章后参考文档下载)

https://blogs.vmware.com/vsphere/files/2018/12/pktcap-overview-1024x923.png

 

其实也是这四部分:

  • 物理上联网卡

  • 分布式交换机

  • 虚拟机网络

  • vmk网络

 

确定抓包的位置

==========================

根据上面的图所示,我们可以在六个地方抓包,每个地方抓包都单独分为进/出两个方向。

 

  • 虚拟机网络

对虚拟机可以进行两个地方的抓包

虚拟机虚拟机网卡-vnic (标1处)

虚拟机端口组(分布式交换机侧) (标2处)

 

 

 

 

  • vmk网络

vmk 网口 (标3处)

vmk端口组(分布式交换机侧) (标4处)

 

 

  • 物理上联网卡:

物理上联网卡端口(分布式交换机侧) (标5处)

物理上联网卡  (标6处)

 

 

对虚拟机网络抓包

======================

 

(第一步)虚拟机准备工作

在虚拟机里ping 某一个IP地址,例如网关。

这里使用IP为10.117.23.254

 

(第二步)确定虚拟机使用的Port ID和物理上联网卡

 

方法一(推荐):

使用esxtop,按n找到虚拟机使用的port number和物理上联网卡。

 

但是这种方法有一个弊端:当一台主机上的VM很多的时候,有可能esxtop一个屏幕无法显示,但是esxtop又无法滚屏,因此我们使用另外一种方法。

 

方法二:

(1)获取vm的Port number 和 端口组名称

          net-stats -l | grep 虚拟机名称 

例如 :

可以得到这台VM的三个虚拟机网卡对应的三个Port number以及端口组名称

(2)搜索端口组对应的物理上联我网卡

           esxcfg-info |grep 端口组名称

例如:

esxcfg-info |grep DvsPortset-0 -A1|grep Uplinks

得到上联网卡是vmnic1

 

(第三步)抓包操作:

当我们拿到port number和物理上联网卡后,就可以进行抓包的操作

 

 

  • 虚拟机虚拟机网卡-vnic (标1处)

pktcap-uw --switchport 83886102 --ip 10.117.23.254 --capture VnicTx -o /tmp/vnic_Tx.pcap & pktcap-uw --switchport 83886102 --ip 10.117.23.254 --capture VnicRx -o /tmp/vnic_Rx.pcap &

 

  • 虚拟机端口组(分布式交换机侧) (标2处)

pktcap-uw --switchport 83886102 --ip 10.117.23.254 --capture PortInput -o /tmp/VMname_PortInput.pcap & pktcap-uw --switchport 83886102 --ip 10.117.23.254 --capture PortOutput -o /tmp/VMname_PortOutput.pcap &

 

(第四步)终止抓包:

开启另外的终端,执行以下命令

kill $(lsof |grep pktcap-uw |awk ‘{print $1}’| sort -u)

 

对vmk网络抓包

======================

(第一步)vmk准备工作

使用vmkping命令ping目标地址 

在主机上使用vmk2,ping 地址 192.168.22.76 

vmkping -I vmk2 -c 1000 192.168.22.76

 

(第二步)获得port-number和上联网卡信息

与虚拟机抓包类似,vmk网络抓包也要先或者vmk使用的端口组和物理上联网口。这里esxtop的方法就不说了。我们使用命令行的方式来尽心:

net-stats -l|grep vmk端口

例如 net-stats -l|grep vmk2

获取port number和端口组号 

 

获取端口组对应的物理上联网卡

esxcfg-info |grep 端口组名称

例如:

esxcfg-info |grep DvsPortset-1 -A1|grep Uplinks

 

(第三步)抓包操作:

当我们拿到port number和物理上联网卡后,就可以进行抓包的操作

这里以ICMP为例( --proto 0x01 )其他协议请参考:

https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers

 

 

 

  • vmk 网口 (标3处)

pktcap-uw --vmk vmk2 --ip 192.168.22.76 --proto 0x01 --capture TcpipTx -o /tmp/vmk2_TcpipTx.pcap & pktcap-uw --vmk vmk2 --ip 192.168.22.76 --proto 0x01  --capture TcpipRx -o /tmp/vmk2_TcpipRx.pcap &

 

  • vmk端口组(分布式交换机侧) (标4处)

pktcap-uw --vmk vmk2 --ip 192.168.22.76 --proto 0x01 --capture PortInput -o /tmp/vmk2_PortInput.pcap & pktcap-uw --vmk vmk2 --ip 192.168.22.76 --proto 0x01  --capture PortOutput -o /tmp/vmk2_PortOutput.pcap &

 

(第四步)终止抓包:

开启另外的终端,执行以下命令

kill $(lsof |grep pktcap-uw |awk ‘{print $1}’| sort -u)

 

对物理上联网卡抓包

======================

物理上联网卡抓包相对比较简单

第一步和第二步依旧是ping一个地址,并且确认物理上联网口

 

(第三步)抓包操作:

 

  • 物理上联网卡端口(分布式交换机侧) (标5处)

pktcap-uw --uplink vmnic1 --ip 10.117.23.254 --capture PortOutput -o /tmp/vmnic1_PortOutput.pcap & pktcap-uw --uplink vmnic1 --ip 10.117.23.254 --capture PortInput -o /tmp/vmnic1_PortInput.pcap &

 

  • 物理上联网卡  (标6处)

pktcap-uw --uplink vmnic1 --ip 10.117.23.254 --capture UplinkRcvKernel -o /tmp/vmnic1_Rcv.pcap & pktcap-uw --uplink vmnic1 --ip 10.117.23.254 --capture UplinkSndKernel -o /tmp/vmnic1_Snd.pcap &

 

(第四步)终止抓包:

开启另外的终端,执行以下命令

kill $(lsof |grep pktcap-uw |awk '{print $1}'| sort -u)

 

后续分析:

======================

 

最常用的使用工具是wireshark,需要单独的下载。

或者在ESXi主机上使用

tcpdump-uw -enr 输出文件

 

 

参考文档:

======================

https://blogs.vmware.com/vsphere/2018/12/esxi-network-troubleshooting-tools.html

https://blogs.vmware.com/vsphere/2018/12/understanding-the-esxi-network-iochain.html

http://www.vmwarearena.com/esxtop-limiting-your-view-no-need-to-scrollpagedown-your-esxtop-output/

https://www.virten.net/2015/10/esxi-network-troubleshooting-with-tcpdump-uw-and-pktcap-uw/

https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers

====================

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ESXi进行 SSH 抓包可以帮助您分析网络流量和故障排除。以下是一些步骤来进行 SSH 抓包: 1. 首先,确保已启用 ESXi 主机的 SSH 服务。您可以通过 vSphere 客户端或直接连接到 ESXi 主机的控制台来启用 SSH。 2. 使用 SSH 客户端(例如 PuTTY)连接到 ESXi 主机的 IP 地址或主机名。 3. 在 SSH 客户端中,使用您的 ESXi 主机的管理员凭据登录。 4. 一旦登录成功,您可以使用以下命令来进行抓包: ``` pktcap-uw --switchport=<虚拟交换机名称> --dir=<方向> --stage=<阶段> --outfile=<输出文件路径> ``` - `<虚拟交换机名称>`: 要抓取流量的虚拟交换机名称。 - `<方向>`: 可以是 "in"(入站)或 "out"(出站),用于指定抓取流量的方向。 - `<阶段>`: 可以是 "uplink"(上行)或 "virtualWire"(虚拟线),用于指定抓取流量的阶段。 - `<输出文件路径>`: 用于保存抓包数据的文件路径。 例如,要抓取名为 "vSwitch0" 的虚拟交换机的入站流量,并将结果保存到 "/tmp/capture.pcap" 文件中,可以使用以下命令: ``` pktcap-uw --switchport=vSwitch0 --dir=in --stage=uplink --outfile=/tmp/capture.pcap ``` 5. 抓包过程中,您可以根据需要执行相关操作。抓包数据将保存到指定的文件路径中。 6. 当需要停止抓包时,可以按 Ctrl + C 组合键来中断抓包进程。 请注意,进行抓包可能会对系统性能产生一些影响。因此,在生产环境中进行抓包时,请确保谨慎操作并在必要时限制抓包的时间范围。另外,抓包文件可能会占用较大的磁盘空间,因此在完成分析之后,请及时清理不再需要的抓包文件。 希望这些信息对您有所帮助!如果您有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值