当前位置: 首页 > 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)...
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • maya建模与骨骼动画快速实现人工鱼
  • react 代码优化(一) ——事件处理
  • 产品三维模型在线预览
  • 初识 beanstalkd
  • 分布式熔断降级平台aegis
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 一天一个设计模式之JS实现——适配器模式
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • (31)对象的克隆
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)计算机毕业设计大学生兼职系统
  • (三) diretfbrc详解
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (转载)深入super,看Python如何解决钻石继承难题
  • (状压dp)uva 10817 Headmaster's Headache
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .NetCore项目nginx发布
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .NET中 MVC 工厂模式浅析
  • ::前边啥也没有
  • @EnableWebMvc介绍和使用详细demo
  • @开发者,一文搞懂什么是 C# 计时器!
  • []T 还是 []*T, 这是一个问题
  • [100天算法】-目标和(day 79)
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [Android Studio] 开发Java 程序
  • [ANT] 项目中应用ANT
  • [bzoj 3124][sdoi 2013 省选] 直径
  • [BZOJ] 1001: [BeiJing2006]狼抓兔子
  • [C#]手把手教你打造Socket的TCP通讯连接(一)
  • [codeforces]Recover the String
  • [iOS开发]iOS中TabBar中间按钮凸起的实现
  • [LeetCode]Reverse Linked List II