当前位置: 首页 > news >正文

docker容器内的网络抓包

当docker容器的网络模式不是--net=host(如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口)时,容器和宿主机的网络互相独立,而容器一般也不会有安装tcpdump。因此,无法直接抓取容器内的包。

有两种方式来对容器进行抓包:
在docker容器内安装tcpdump工具来直接抓包;使用宿主机上的tcpdump工具对容器进程抓包。

1,在docker容器内安装tcpdump工具来直接抓包

  • 获取docker id

    docker ps | grep xxx

  • copy tcpdump安装包和依赖包到容器内

    docker cp libpcap0-0.9.8-50.10.1.x86_64.rpm container_id:/tmp/
    docker cp tcpdump-3.9.8-1.21.x86_64.rpm container_id:/tmp/

  • 进入容器 安装tcpdump后进行抓包

    docker exec -it -u root container_id bash
    rpm -ivh *.rpm

也可直接使用这个tcpdump文件(已编译好 免安装 可直接使用)
docker cp /file/to/path/tcpdump container_id:/tmp/
sh /tmp/tcpdump -i any -s 0 host x.x.x.x

2,使用宿主机上的tcpdump工具对容器进程抓包

如果宿主机上已安装了tcpdump抓包工具,那我们就可以通过宿主机上的nsenter工具来对docker容器进行抓包。

nsenter 包含在绝大部分 Linux 发行版预置的 util-linux 工具包中。使用它可以进入指定进程的关联命名空间。包括文件命名空间(mount namespace)、主机名命名空间(UTS namespace)、IPC 命名空间(IPC namespace)、网络命名空间(network namespace)、进程命名空间(pid namespace)和用户命名空间(user namespace)。

what is nsenter ?

It is a small tool allowing to enter into namespaces. Technically, it can enter existing namespaces, or spawn a process into a new set of namespaces. "What are those namespaces you're blabbering about?" We are talking about container namespaces.

nsenter can do many useful things, but the main reason why I'm so excited about it is because it lets you enter into a Docker container.

图片描述
如何使用nsenter来抓包呢?

  • 获取容器进程id,即PID
    docker ps | grep xxx 获取容器id/name
    docker inspect --format "{{.State.Pid}}" container_id/name 获取PID
  • 使用nsenter切换网络命名空间
    nsenter -n -t container_id/name
    可在切换前后执行ifconfig来对比变化

现在就已进入容器的网络命名空间,就可以使用宿主机上的tcpdump来对容器进行抓包了

相关文章:

  • 【linux】linux重启tomcat + 实时查看tomcat启动日志
  • JavaScript基础——基本概念
  • 一步一步教你用 Vue.js + Vuex 制作专门收藏微信公众号的 app
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • Innodb之全局共享内存
  • sql 开窗函数
  • 我的友情链接
  • 实现菜单下拉伸展折叠效果demo
  • Android中的树状(tree)列表
  • 基于MVC思想实现一个简单的贪吃蛇小游戏
  • Device Tree Usage 【转】
  • 从容器到云原生 – 极致弹性
  • 【NetApp】FPolicy的使用流程图
  • Android基础---获取手机硬件数据(转)
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • 分享一款快速APP功能测试工具
  • Apache Zeppelin在Apache Trafodion上的可视化
  • Brief introduction of how to 'Call, Apply and Bind'
  • CSS实用技巧
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • java 多线程基础, 我觉得还是有必要看看的
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Python 基础起步 (十) 什么叫函数?
  • ReactNative开发常用的三方模块
  • React-生命周期杂记
  • 程序员该如何有效的找工作?
  • 分享几个不错的工具
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 通过几道题目学习二叉搜索树
  • 新手搭建网站的主要流程
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • !!java web学习笔记(一到五)
  • #FPGA(基础知识)
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (Python) SOAP Web Service (HTTP POST)
  • (二)测试工具
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (三)mysql_MYSQL(三)
  • (十)c52学习之旅-定时器实验
  • (转)Sql Server 保留几位小数的两种做法
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .net web项目 调用webService
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET/C#⾯试题汇总系列:⾯向对象
  • .NET开发人员必知的八个网站
  • .net生成的类,跨工程调用显示注释
  • .NET中GET与SET的用法
  • :not(:first-child)和:not(:last-child)的用法