https://help.aliyun.com/knowledge_detail/40564.html?spm=a2c4e.11153940.blogcont272172.10.b09e28a6AOdITp#Linux

http://man7.org/linux/man-pages/man1/nsenter.1.html?spm=a2c4e.11153940.blogcont272172.9.b09e28a6AOdITp

[转]待整理

nsenter

nsenter 包含在绝大部分 Linux 发行版预置的 util-linux 工具包中。它可以进入指定进程的关联命名空间。
利用nsenter,我们可以在不依赖 docker 内置 exec 指令的情况下,直接进入容器,进行文件读取、修改、抓包等各种操作。

抓包

使用 nsenter 工具来对任意容器进行抓包(无论容器内是否含有抓包工具):

  1. 获取容器 PID:
    在宿主机上,使用如下指令获取容器的 root pid。即容器内 top 显示 pid 为 1 的进程。容器内其它运行的进程均为其子进程或子子进程:
# container id/name 表示要操作的容器名称或 ID:
docker inspect --format "{{.State.Pid}}" <container id/name>
  1. 使用 nsenter 切换网络命名空间:
    在宿主机上,使用如下指令,将网络命名空间切换为容器的网络命名空间:
# -n 表示切换网络命名空间,-t 指定的 pid 为步骤 1 获取的容器的 root pid:
nsenter -n -t <container root id>
  1. 查看容器的网卡配置:
    虽然也可以借由 docker exec 查看容器的相关网络配置。比如:

    [root@node3 ~]# docker exec -it <container id/name> ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
    valid_lft forever preferred_lft forever
    245: eth0@if246: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:ac:1f:fe:04 brd ff:ff:ff:ff:ff:ff
    inet 172.31.254.4/24 scope global eth0
    valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe1f:fe04/64 scope link
    valid_lft forever preferred_lft forever
但在通过 nsenter 进入了容器的网络命名空间后,可以直接使用宿主机上的的 ifconfig 等工具,来直接查询容器的网络配置并进行抓包。比如:
[root@node3 ~]# nsenter -n -t 3003
[root@node3 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:ac:1f:fe:04
inet addr:172.31.254.4 Bcast:0.0.0.0 Mask:255.255.255.0
inet6 addr: fe80::42:acff:fe1f:fe04/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:132 errors:0 dropped:0 overruns:0 frame:0
TX packets:94 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:14162 (14.1 KB) TX bytes:10902 (10.9 KB) lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
  1. 抓包:
    如上所述,切换到容器的网络命名空间,并获取容器的网卡配置信息后,就可以直接使用宿主机上的 tcpdump 等工具来进行常规抓包分析了:
tcpdump -i eth0 tcp and port 80 -vvv

注意:
如果是指定端口抓包,这里要使用容器的内部端口。比如,容器通过 -p 8180:80 做了端口 bind,那么这里要抓 80 端口,而非 8180 端口。

DOCKER - 容器抓包的更多相关文章

  1. Docker容器Tomcat部署war包

    在docker容器中使用tomcat部署war包主要包括四个步骤,创建tomcat容器.上传war包到容器.重启容器.访问应用. 1.创建tomcat容器 使用docker run  -d --nam ...

  2. [笔记]使用Go语言Redigo包在Docker容器内连接Redis容器的方法

    Docker容器之间的连接可以带来不少方便,下面记录下如何在自己容器内通过环境变量连接与之连接的Redis容器的方法. 先起一个Redis的Docker容器,命名为 redis,再起一个自己的Dock ...

  3. Linux 网络命令必知必会之 tcpdump,一份完整的抓包指南请查收!

    目录 01 简介 02 tcpdump 命令选项 03 过滤器 04 常用操作 4.1 抓取某主机的数据包 4.2 抓取某端口的数据包 4.3 抓取某网络(网段)的数据包 4.4 抓取某协议的数据包 ...

  4. 重启服务器后Docker容器暴露的端口外网突然访问不了!!

    *:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...

  5. kubernetes pod内抓包,telnet检查网络连接的几种方式

    背景 在日常kubernetes的运维中,经常遇到pod的网络问题,如pod间网络不通,或者端口不通,更复杂的,需要在容器里面抓包分析才能定位.而kubertnets的场景,pod使用的镜像一般都是尽 ...

  6. Docker容器间网络互联原理,讲不明白算我输....

    @ 目录 一.今天我们要搞明白的实验 二.前置网络知识 2.1.docker默认为我们创建的网络 2.2.怎么理解docker0网桥 2.3.什么是veth-pair技术? 三.同一个局域网中不同主机 ...

  7. Docker容器基础入门认知-网络篇

    这篇文章中,会从 docker 中的单机中的 netns 到 veth,再到单机多个容器之间的 bridge 网络交互,最后到跨主机容器之间的 nat 和 vxlan 通信过程,让大家对 docker ...

  8. Linux namespace技术应用实践--调用宿主机命令(tcpdump/ip/ps/top)检查docker容器网络、进程状态

    背景 最近偶然听了几堂极客时间的云原生免费公开课程,首次接触到了Linux namespace技术,并了解到这正是现在风头正劲的容器技术基石,引起了自己探究一二的兴趣,结合课程+网络搜索+实践操作,也 ...

  9. 理解Docker(4):Docker 容器使用 cgroups 限制资源使用

    本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

随机推荐

  1. torch lua tips

    1.luarocks 离线安装Moses 下载 Moses-Moses-1.6.1-1.zip cd Moses-Moses-1.6.1-1 Moses-Moses-1.6.1-1# luarocks ...

  2. 【EasyUi DataGrid】批量删除

    DataGrid是我们做网页经常使用到的组件之中的一个,对它的操作也无非是增删改查操作.单条数据的增删改相对来说比較简单.添加.改动能够直接在DataGrid中进行,也能够用弹出框的形式把数据装载在文 ...

  3. [DB][MySql]关于取得自增字段的值、及@@IDENTITY 与并发性问题

    对于刚从Oracle转向MySql的人都会为,MySql中没有Oracle里的Sequence而感到困惑.MySql中没有了Sequence,那么MySql的主键用什么方式来实现最好呢? 主要有下面几 ...

  4. ASP.NET 4 and Visual Studio 2010

    https://msdn.microsoft.com/en-us/library/ee532866.aspx The topics in this section provide informatio ...

  5. JavaScript Patterns 2.1 Writing Maintainable Code

    Revisiting the code after some time has passed requires: • Time to relearn and understand the proble ...

  6. bzoj 5127 数据校验

    题目大意: 一个数列a 对于 a 的一个区间 [l, r],若对于该区间 [l, r] 内的任意一个非空连续子区间,该子区间内出现过的数值在整数上值域连续,则称 [l, r]为合法区间 m次询问  每 ...

  7. 收集主机OS相关数据

    #!/usr/bin/ksh touch hostinfo$(date +%Y%m%d).csv filename=hostinfo$(date +%Y%m%d).csv >${filename ...

  8. vue实现全选,反选

    1.example.vue <template> <table class="table-common"> <tr> <th class= ...

  9. [App Store Connect帮助]一、 App Store Connect 使用入门(4)iOS 版 App Store Connect

    通过 iOS 版 App Store Connect,您可以在移动设备上查看销售数据.App 元数据和顾客评论.您还可以检查 App 状态.发布您 App 的新版本并回应“Resolution Cen ...

  10. [Apple开发者帐户帮助]九、参考(5)支持的功能(tvOS)

    tvOS应用程序可用的功能取决于您的程序成员身份. 能力 ADP 企业 Apple开发者 应用程序组 相关域名   背景模式 数据保护 游戏中心     游戏控制器 HomeKit iCloud:Cl ...