Docker 容器应急
容器网络简单理解
容器拥有n多张veth网卡与一张docker0网卡

docker 五种网络
- bridge
默认网络,Docker启动后创建一个docker0网桥,默认创建的容器也是添加到这个网桥中。 - host
容器不会获得一个独立的network namespace,而是与宿主机共用一个。这就意味着容器不会有自己的网卡信息,而是使用宿主机的。容器除了网络,其他都是隔离的。 - none
获取独立的network namespace,但不为容器进行任何网络配置,需要我们手动配置。 - container
与指定的容器使用同一个network namespace,具有同样的网络配置信息,两个容器除了网络,其他都还是隔离的。 - 自定义网络
与默认的bridge原理一样,但自定义网络具备内部DNS发现,可以通过容器名容器之间网络通信。
默认都为bridge网卡

容器内为什么能通baidu
容器内虚拟网卡网卡——》容器网关(宿主机虚拟网卡)——》docker0网卡——》物理网卡

两种情况
我做了一个实验,发现两种情况
第一种情况,容器会走vet网卡在到docker0网卡,所以在两张网卡上都能抓到对应的数据包。


第二种情况,在docker0网卡上抓不到流量,只能在对应的veth网卡上才能抓到流量

我发现docker0上并不能抓到容器的流量

在使用traceroute查看路由后,我发现,容器在出网关后到了192.168.68.2,该ip为物理机物理网卡网关,意思是,该容器,从容器虚拟网关出来后直接到了物理机网关,跳过了docker0网卡,所以使用tcpdump -i docker0抓取该容器流量是抓不到的


为什么会出现这总问题,在查看iptables规则时,我发现,在docker创建时可能会添加一些规则
iptables -t nat -S

-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
这条规则的意思是如果docker0收到来自172.17.0.0/16这个网段的外出包,docker0会交给MASQUERADE处理,而MASQUERADE处理方式是将包源地址替换成host地址发出

所以,跳过docker0网卡直接到物理网卡的原因是iptables规则中有该网卡直接nat出去的规则
基础信息收集
基础信息
观察其状态,映射端口
docker container ls
docker ps

详细信息
检查容器详细信息,挂载的数据卷,运行时间,mac地址等信息
docker inspect ID

资源使用
检查容器资源使用情况
docker stats ID

进程信息
容器进程信息
docker top ID

文件
容器文件信息
docker diff ID | grep A
# A -add
# D -delete
# C -change

应急处置
- 构建镜像,保留证据
- 检查异常
- 暂停容器内进程
- 断开容器网络
构建镜像
docker commit -m="说明" ID check08:1.0

暂停容器中的进程,包括后台,守护进程等,文件系统运行状态不变
docker pause ID # 暂停
docker unpause ID # 恢复

定位容器
容器通过docker0网卡进行通信,可以通过tcpdump指定网卡找到异常网络连接,然后进一步关联容器。
情况一:ids或其他安全设备告警,某台linux上出现了恶意连接,该linux主机上部署了多个容器,该如何排查是那个容器出现了问题?
在宿主机上通过netstat -an 是看不到容器内的网络连接的,而一台台进入容器查看网络连接,排查效率很慢,而且很多容器没有安装net-tools工具,没有netstat工具。
抓取流量
情况一:直接通过docker0网卡进行tcpdump流量抓取,通过安全设备给出的IP地址定位容器。
情况二:docker0网卡无法抓取到,只能一个一个网卡进行排查。
抓取docker0网卡流量
tcpdump -i docker0 dst host xx.xx.xx.xx -v -w docker.pcap
抓取容器对应的veth流量
iptables -t nat -S # 查看对应网卡

tcpdump -i br-28b6e6930d36 dst host 172.29.246.156 -v -w br-28b6e6930d36.pcap
tcpdump -i br-28b6e6930d36 dst host 172.29.246.156 -v
定位容器
利用docker inspect -f匹配模块文件匹配对应容器
docker inspect -f '{{.Name}}{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq) | grep 172.19.0.2docker container ls -a | grep 82-pte-lamp-1
开源容器扫描器
https://github.com/chaitin/veinmind-tools

相关文章:
Docker 容器应急
容器网络简单理解 容器拥有n多张veth网卡与一张docker0网卡 docker 五种网络 bridge 默认网络,Docker启动后创建一个docker0网桥,默认创建的容器也是添加到这个网桥中。host 容器不会获得一个独立的network namespace,而是与宿主机共用一个…...
webservice接口自动化测试
1,用soupui进行测试 2,安装soupUI 3,测试的时候是给了一个wdsl 操作步诹:new (name , 填写地址)---导入wsdl文件---看到所有的接口 发送请求的格式<xml> canshu</xml> 应用场景,…...
精益生产与MES生产管理系统相互融合
近年来,精益生产理念在企业管理中越来越受欢迎。它强调以最小的浪费,在最短的时间内,生产出高质量的产品。这一理念的实施手段包括准时制生产方式、适时生产方式等,消除浪费、看板、快换工装等都是精益提高的工具方针。 然而&…...
(c语言进阶)指针的进阶
一.字符指针 1.一般应用 (1)%c的应用 (2)%s的应用 字符指针没有权限通过解引用去改变指针指向的值 2.笔试题 题目:判断输出结果 int main() { const char* p1 "abcdef"; const char* p2 "…...
用路由器远程维护三菱PLC操作指南
用路由器远程维护三菱PLC操作指南...
FPGA面试题(7)
一.解释一下SPI的四种模式 01时钟极性CPOL空闲状态为低电平空闲状态为高电平时钟相位CPHA在第一个跳变沿采样在第二个跳变沿采样 模式CPOLCPHA描述模式000sclk上升沿采样,sclk下降沿发送模式101sclk上升沿发送,sclk下降沿采样模式210sclk上升沿发送&…...
Python接口自动化测试之【测试函数、测试类/测试方法的封装】
前言 在pythonpytest 接口自动化系列中,我之前的文章基本都没有将代码进行封装,但实际编写自动化测试脚本中,我们都需要将测试代码进行封装,才能被测试框架识别执行。 例如单个接口的请求代码如下: import requests…...
ROS仿真软件Turtlebot-Gazebo的安装使用以及错误处理[机器人避障]
很多时候由于机器人价格比较贵,而且会因为环境因素、操作失误或者摔坏等,所以我们可以先在仿真软件上做测试,也可以避免这些问题,虽然没有那么真实感,可毕竟是免费的嘛。我们可以在这些仿真的机器人身上去学习如何控制…...
把excel文件内容转化为json文件
js如何把excel文件转化为json文件呢?可以通过xlsx还有循环遍历来做 第一步:安装xlsx包 npm install xlsx这里我需要转化为这种类型 {key:value,key:value,key:value, }如果需要转化为其他格式,到时候需要在循环遍历的时候灵活运用 上代码…...
前端 - 将非 jpeg 格式图片转为 jpeg 格式、压缩图片
目录 将非 jpeg 格式图片转为 jpeg 格式压缩图片使用 将非 jpeg 格式图片转为 jpeg 格式 /common/compressImage/convertImage // 思路是创建一个图片,将file等于这个图片,然后创建一个canvas图层 ,将canvas等比例缩放, //然后用…...
随着 ChatGPT 凭借 GPT-4V(ision) 获得关注,多模态 AI 不断发展
原创 | 文 BFT机器人 在不断努力让人工智能更像人类的过程中,OpenAI的GPT模型不断突破界限GPT-4现在能够接受文本和图像的提示。 生成式人工智能中的多模态表示模型根据输入生成文本、图像或音频等各种输出的能力。这些模型经过特定数据的训练,学习底层模…...
Zookeeper-JavaApI操作
JavaApI操作 JavaApI操作1) Curator 介绍2) Curator API 常用操作a) 建立连接与CRUD基本操作b) Watch事件监听c) 分布式锁c.1) 介绍c.2) Zookeeper分布式锁原理c.3) 案例:模拟12306售票 JavaApI操作 1) Curator 介绍 Curator 是 Apache ZooKeeper 的Java客户端库。…...
Vue2.0打包指定路由前缀
【1】修改vue.config.js 如下修改publicPath: module.exports {publicPath:/concert,lintOnSave: false }【2】修改router/index.js base指定路由前缀: const router new VueRouter({mode: history,base: /concert, //指定路由前缀// base: process.env.BASE_…...
[vxe-table] 合并行后滚动错位
使用vxe-table的属性:span-method合并行,之后下拉后会错位 原因:缺少配置 scroll-y"{enabled: false}"参考: vxe-table合并行后错位...
动态规划:05不同路径
动态规划:05不同路径 62. 不同路径 五部曲 确定dp数组含义:到达第i,j位置的路径条数为d[i][j] 确定递归公式:d[i][j]d[i-1][j]d[i][j-1] 我们发现,想要到d[i][j],只能从d[i-1][j]或者d[i][j-1]达到 dp数…...
html与css知识点
html 元素分类 块级元素 1.独占一行,宽度为父元素宽度的100% 2.可以设置宽高 常见块级元素 h1~h6 div ul ol li dl dt dd table form header footer section nav article aside 行内元素 1.一行显示多个 2.不能设置宽高,宽高由元素内容撑开 常见行内…...
spring boot simple类型cache使用
注意:这里用的不是 redis 的缓存,simple 的缓存默认用的是 java 的 ConcurrentHashMap, 单纯的 simple 缓存,只需要引入下面的 pom 依赖即可:spring-boot-starter-cache <dependency><groupId>org.springf…...
springboot-aop-redis-lua 实现的分布式限流方案
1.自定义限流注解 Target({ElementType.METHOD, ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Inherited Documented public interface Limit {/*** 名字*/String name() default "";/*** key*/String key() default "";/*** Key的前缀*/String…...
C++ realloc()用法及代码示例
C realloc()用法及代码示例 C 中的realloc() 函数重新分配先前分配但尚未释放的内存块。realloc() 函数重新分配先前使用 malloc() 、 calloc() 或 realloc() 函数分配但尚未使用 free() 函数释放的内存。如果新大小为零,则返回的值取决于库的实现。它可能会也可能…...
【Go】gin框架生成压缩包与下载文件
在没有加入下面这串代码之前,下载的压缩包一直为空。遂debug了两个小时。。。 可以在服务端本地创建压缩包。单独将服务端本地的压缩包发送给客户端也是没问题的。但是两个合起来,客户端接收到的压缩包内容就为空了。 期间也尝试了 zipFile.Close() zipW…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...
2.3 物理层设备
在这个视频中,我们要学习工作在物理层的两种网络设备,分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间,需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质,假设A节点要给…...
js 设置3秒后执行
如何在JavaScript中延迟3秒执行操作 在JavaScript中,要设置一个操作在指定延迟后(例如3秒)执行,可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法,它接受两个参数: 要执行的函数&…...
