docker容器内抓取宿主机物理网卡包

docker容器内抓取宿主机物理网卡包

需求描述:

在docker容器内,实现对宿主机物理网卡的抓包

OS: Ubuntu server 18.04 x64

1. 宿主机安装docker功能

# 下载docker
chenzd@ubuntu:~# wget -qO- https://get.docker.com/ | sh

# 查看是否安装成功
chenzd@ubuntu:~# docker --version
Docker version 18.09.7, build 2d0083d

# 启动docker服务
chenzd@ubuntu:~# sudo service docker start

# 运行docker的hello word, 此命令会现从网上下载,因此启动需要时间
chenzd@ubuntu:~# sudo docker run hello-world

2. 拉取Ubuntu镜像

  • 下载image
# 拉取Ubuntu 镜像
chenzd@ubuntu:~# docker pull ubuntu
# 查看image列表
chenzd@ubuntu:~# docker iamges
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              3556258649b2        3 weeks ago         64.2MB
hello-world         latest              fce289e99eb9        7 months ago        1.84kB
  • 运行容器
chenzd@ubuntu:~# docker run -it ubuntu bash
# 进入docker的bash
root@daa71e046c4e:/#

3. 容器镜像内安装抓包软件

root@daa71e046c4e:/# apt-get update

# 安装ping、 安装ifconfig、安装tcpdump抓包软件
root@daa71e046c4e:/# apt-get install iputils-ping net-tools tcpdump

4. 测试抓取容器网卡的数据

root@daa71e046c4e:/# tcpdump -i eth0
# 此时,仅能抓取到容器的进出网络数据,无法抓取到宿主设备物理网卡的数据。

5. 退出docker,提交images

由于刚刚安装了软件,若直接退出,下次run的时候,启动的又是一个全新的Ubuntu。因此需要提交images

root@daa71e046c4e:/# exit

# 退出到宿主机,注意用户的变化
# docker commit [id] [newname]
chenzd@ubuntu: docker commit daa71e046c4e ubuntu-capture

# 再次观察images
chenzd@ubuntu:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu-capture      latest              9e7e71974ac9        4 minutes ago       99.1MB
ubuntu              latest              4c108a37151f        4 months ago        64.2MB
hello-world         latest              fce289e99eb9        7 months ago        1.84kB

6. 测试抓取宿主机网卡的数据

chenzd@ubuntu:~# sudo tcpdump -i enp2s0

可以观察出,在容器内抓取的数据远小于宿主机上抓到的数据,不放心的话也可以-w保存到pcap包,然后用wireshark仔细核对。

7. 停止docker服务

chenzd@ubuntu:~# sudo service docker stop

8. 网卡配置为混杂模式

chenzd@ubuntu:~# sudo ifconfig set enp4s0 promisc

9. 配置网桥

# 安装网桥管理软件brctl
chenzd@ubuntu:~# sudo apt-get install bridge-utils
# 创建网桥
chenzd@ubuntu:~# sudo brctl addbr br0
# 添加物理网卡
chenzd@ubuntu:~# sudo brctl addif br0 enp4s0
# 关闭docker原网桥
chenzd@ubuntu:~# sudo ifconfig docker0 down

10. 修改docker配置文件,使其可指向新创建的网桥

#创建daemon.json文件
chenzd@ubuntu:~# vim /etc/docker/daemon.json
# 向该文件添加内容
{
"bridge":"br0"
}

若先修改为桥接,可能导致容器内无法联网影响软件的安装,因此请在可以联网的情况下先安装好上面的软件

11. 运行容器

docker run -it ubuntu-capture bash

12. 进行测试

root@daa71e046c4e:~# tcpdump -i eth0
# 查看打印输出是否有物理网卡以外局域网数据,本实验宿主机接在交换机镜像口上。
# 此时正常情况下,抓不到镜像数据,只有少量的UDP广播包
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值