怎么給容器抓包
在生產(chǎn)中,容器為了輕量級,里面并沒有封裝一些ip,ping這些基礎(chǔ)命令,這時候可以通過進入容器的網(wǎng)絡(luò)命名空間來執(zhí)行命令。當然,也可以用這種方式對容器進行抓包。
使用命令
nsenter
Nsenter命令用于進入指定進程的命名空間,包括最常用的掛載命名空間和網(wǎng)絡(luò)命名空間。適用于容器這種特殊的進程。
#常用用法:
#進入網(wǎng)絡(luò)命名空間
$?nsenter -t -n?
#進入掛載命名空間,類似docker?exec進入容器
$?nsenter -t -m tcpdump
Tcpdump是Linux原生的抓包工具,常用與在linux系統(tǒng)上抓包,常見用法如下。
#?常用用法:
#?抓取某網(wǎng)卡所有數(shù)據(jù)包
$?tcpdump -i <網(wǎng)卡名>
#?抓取包含某IP的網(wǎng)絡(luò)包
$?tcpdump -i <網(wǎng)卡名> -vnn host
#?抓取某源IP的網(wǎng)絡(luò)包
$?tcpdump -i <網(wǎng)卡名> -vnn src host <源IP>
#?抓取某目標IP的網(wǎng)絡(luò)包
$?tcpdump -i <網(wǎng)卡名> -vnn dst host <目標IP>
#?抓取網(wǎng)絡(luò)包放到文件
$?tcpdump -i <網(wǎng)卡名> -w <文件名>接下來介紹一下如何使用上述命令對容器進行抓包。
找到容器Pid
方法一
docker top
$?docker top 對于一般的容器,只有一個進程,Pid如圖所示。

有的容器里面運行著多個進程,也是取第一行的Pid。
方法二
docker inspect
$ docker inspect | grep?Pid可以截取到容器進程的Pid。

進入容器的命名空間
接下來通過nsenter命令進入容器進程的網(wǎng)絡(luò)命名空間。
$?sudo nsenter -t <進程標識符Pid> -n此時使用ifconfig命令查看到的就是容器內(nèi)部的網(wǎng)卡信息。

使用tcpdump抓包
$ tcpdump?-i <網(wǎng)卡名>使用tcpdump命令對eth0網(wǎng)卡抓包

如果是在kubernetes環(huán)境中,需要定位容器的位置,并到對應(yīng)節(jié)點去抓包;
$?kubectl get pod -n <命名空間> -o wide 
查看該pod的容器名
$ kubectl get?pod -n <命名空間> -o?yaml | grep?containerID 
繼續(xù)按照上述方式去抓容器的包,最后把抓到的包放到wireshark上分析。
推薦閱讀
評論
圖片
表情
