DOCKER - 容器抓包
https://help.aliyun.com/knowledge_detail/40564.html?spm=a2c4e.11153940.blogcont272172.10.b09e28a6AOdITp#Linux
[转]待整理
nsenter
nsenter 包含在绝大部分 Linux 发行版预置的 util-linux 工具包中。它可以进入指定进程的关联命名空间。
利用nsenter,我们可以在不依赖 docker 内置 exec 指令的情况下,直接进入容器,进行文件读取、修改、抓包等各种操作。
抓包
使用 nsenter 工具来对任意容器进行抓包(无论容器内是否含有抓包工具):
- 获取容器 PID:
在宿主机上,使用如下指令获取容器的 root pid。即容器内 top 显示 pid 为 1 的进程。容器内其它运行的进程均为其子进程或子子进程:
# container id/name 表示要操作的容器名称或 ID:
docker inspect --format "{{.State.Pid}}" <container id/name>
- 使用 nsenter 切换网络命名空间:
在宿主机上,使用如下指令,将网络命名空间切换为容器的网络命名空间:
# -n 表示切换网络命名空间,-t 指定的 pid 为步骤 1 获取的容器的 root pid:
nsenter -n -t <container root id>
查看容器的网卡配置:
虽然也可以借由 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)
- 抓包:
如上所述,切换到容器的网络命名空间,并获取容器的网卡配置信息后,就可以直接使用宿主机上的 tcpdump 等工具来进行常规抓包分析了:
tcpdump -i eth0 tcp and port 80 -vvv
注意:
如果是指定端口抓包,这里要使用容器的内部端口。比如,容器通过 -p 8180:80 做了端口 bind,那么这里要抓 80 端口,而非 8180 端口。
DOCKER - 容器抓包的更多相关文章
- Docker容器Tomcat部署war包
在docker容器中使用tomcat部署war包主要包括四个步骤,创建tomcat容器.上传war包到容器.重启容器.访问应用. 1.创建tomcat容器 使用docker run -d --nam ...
- [笔记]使用Go语言Redigo包在Docker容器内连接Redis容器的方法
Docker容器之间的连接可以带来不少方便,下面记录下如何在自己容器内通过环境变量连接与之连接的Redis容器的方法. 先起一个Redis的Docker容器,命名为 redis,再起一个自己的Dock ...
- Linux 网络命令必知必会之 tcpdump,一份完整的抓包指南请查收!
目录 01 简介 02 tcpdump 命令选项 03 过滤器 04 常用操作 4.1 抓取某主机的数据包 4.2 抓取某端口的数据包 4.3 抓取某网络(网段)的数据包 4.4 抓取某协议的数据包 ...
- 重启服务器后Docker容器暴露的端口外网突然访问不了!!
*:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...
- kubernetes pod内抓包,telnet检查网络连接的几种方式
背景 在日常kubernetes的运维中,经常遇到pod的网络问题,如pod间网络不通,或者端口不通,更复杂的,需要在容器里面抓包分析才能定位.而kubertnets的场景,pod使用的镜像一般都是尽 ...
- Docker容器间网络互联原理,讲不明白算我输....
@ 目录 一.今天我们要搞明白的实验 二.前置网络知识 2.1.docker默认为我们创建的网络 2.2.怎么理解docker0网桥 2.3.什么是veth-pair技术? 三.同一个局域网中不同主机 ...
- Docker容器基础入门认知-网络篇
这篇文章中,会从 docker 中的单机中的 netns 到 veth,再到单机多个容器之间的 bridge 网络交互,最后到跨主机容器之间的 nat 和 vxlan 通信过程,让大家对 docker ...
- Linux namespace技术应用实践--调用宿主机命令(tcpdump/ip/ps/top)检查docker容器网络、进程状态
背景 最近偶然听了几堂极客时间的云原生免费公开课程,首次接触到了Linux namespace技术,并了解到这正是现在风头正劲的容器技术基石,引起了自己探究一二的兴趣,结合课程+网络搜索+实践操作,也 ...
- 理解Docker(4):Docker 容器使用 cgroups 限制资源使用
本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...
随机推荐
- shell 脚本大文件处理
shell 脚本大文件处理 字符串处理 s='{"_id":{"$oid":"59b73d80930c17474f9f050d"},&qu ...
- 20170623_oracle备份和恢复_常见问题
1 为什么需要备份?备份分类? 1)故障.迁移.误操作 2)备份分类: 物理与逻辑角度:物理备份.逻辑备份 备份策略角度:完全备份.增量备份.差异备份 2 使用导入导出进行备份和恢复及其四种模式:其他 ...
- it人必进的几大网站
1.chinaunix网址:http://www.chinaunix.net/简介:中国最大的linux/unix技术社区. 2.itpub网址:http://www.itpub.net/ 简介:有名 ...
- Spark 机器学习 ---TF-IDF
package Spark_MLlib import org.apache.spark.ml.feature.{HashingTF, IDF, Tokenizer} import org.apache ...
- IDEA Spark Streaming Kafka数据源-Producer
import java.util import org.apache.kafka.clients.producer.{KafkaProducer, ProducerConfig, ProducerRe ...
- codevs1486愚蠢的矿工(树形dp)
1486 愚蠢的矿工 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description Stupid 家族得知在HYC家的后花园里的中央花坛处,向北走3步,向西走3步, ...
- JavaScript中.和[]有什么区别?
.与[]都可以用于读取或修改对象属性. <script> var myData={ name:"Adam", weather:"sunny", }; ...
- git配置用户信息
git配置用户信息 一.在本地配置用户信息 配置内容:user.name 和 user.email 配置目的:Git用来记录谁做了什么事 配置方法:windows下打开Git Bash进行操作 gi ...
- 前端性能优化---减少http请求数量和减少请求资源的大小
减少http请求数量:就是资源的合并 减少http请求大小:就是资源的压缩 一.资源合并的原理: 资源不合并的缺点: 1.文件和文件之间有插入请求----请求a.js,b.js,c.js(三行 ...
- Java系列学习(五)-流程控制语句
1.顺序结构 1.if语句 (1)图例 (2)三种格式 A:格式1 B:格式2 C:格式3 2.swich语句 图例: 格式: [注]input可以是byte,short,int,char:JDK5以 ...