问题描述
在上两篇博文中,我们介绍了Azure Container App容器应用中来测试与外部接口的连通性。通过curl 和 nc 命令发送请求以及长ping端口。
- 【Container App】如何测试它是否可以正常发出请求?
- 【Container App】如何长Ping一个目标主机和端口?
但是,如果遇见必须抓取网络包的情况下,我们有什么好办法呢?
本文就将分享一种Container App中安装tcpdump后,抓取网络包,并且通过storage account获取到网络包文件。
问题解答
话不多说,直接展示操作步骤。
第一步:安装了tcpdump
PS: 本次实验中,使用 tdnf install tcpdump 进行安装。因不同的linux基础镜像需要的安装命令有差别,可根据情况自主选择安装方式
第二步:执行 tcpdump 开启抓取网络包
Tips:
- 在抓取之前,可以通过 tcpdump -D 列出所有的网卡
- 然后使用tcpdump -i eth0 监测是否有流量经过 eth0 网卡,如果无,根据上一步列表中切换网卡名
- 使用dst host 和 port来过滤网络包,以避免抓取的流量包过大
示例命令:
# List all the NIC( network interface card)
tcpdump -D
# Check the real traffic
tcpdump -i eth0
# filter by dst host & port
tcpdump -i eth0 dst host <your host> and port 443 -w port-443-$RANDOM.cap
# filter by dst port
tcpdump -i eth0 dst port 443 -w port-443-$RANDOM.cap
#all traffic
tcpdump -i eth0 -w port-443-$RANDOM.cap
注意:在抓取中复现问题后或抓取到满足要求的时间段后,通过 Ctrl + C 停止抓包命令!
第三步:使用 crul 调用 Storage Account PUT请求上传网络包
命令模板:
curl -X PUT -k -T <file name> -H "x-ms-blob-type: BlockBlob" "https://[storage_account_name].blob.core.chinacloudapi.cn/[container_name]/[blob_name]?[sas_token]"
Tips:
- <file name> : 第二步中保存的网络包文件名,本例中的文件名是:port-443-22290.cap
- [storage_account_name], [container_name],[blob_name],[sas_token]:均是需要从Azure Storage account中获取, blob_name 为上传后的文件名。
实验成功!
## 获取Storage Account SAS URL截图
参考资料
使用共享访问签名 (SAS) 授予对 Azure 存储资源的受限访问权限 : https://docs.azure.cn/zh-cn/storage/common/storage-sas-overview?toc=%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!