<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          怎么給容器抓包

          共 1157字,需瀏覽 3分鐘

           ·

          2020-12-01 16:44

          在生產(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上分析。



          推薦閱讀


          福利

          我為大家整理了一份從入門到進階的Go學習資料禮包,包含學習建議:入門看什么,進階看什么。關(guān)注公眾號 「polarisxu」,回復(fù)?ebook?獲取;還可以回復(fù)「進群」,和數(shù)萬 Gopher 交流學習。

          瀏覽 78
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  曰韩黄色毛片免费在线观看 | 成人亚洲精品一区二区三区嫩花 | 人妻夜夜爽天天爽麻豆三区视频 | 天天草天天日天天干 | 狼人一区二区 |