网络 - tcpdump - 入门

  1. 概述

    1. tcpdump 入门
  2. 背景

    1. 网络我不知道 从哪里开始

    2. 本来想 先学学 ping/icmp 的

    3. 最简单的通信场景

      1. 发起者
      2. 接收者
      3. 协议
      4. 链路
    4. 我对最简单场景的东西, 好像都 一无所知

      1. 不了解 发起者 和 接收者

        1. ip 命令, 我搞不定
        2. 就会查看个 ip
      2. 不了解链路

        1. 链路上有什么, 我不知道
        2. 链路上的设备做了什么, 我也不知道
      3. 不了解 协议

        1. 协议用什么端口, 我不知道
        2. 协议内容, 我也不知道
      4. 这么多问题, 我从哪个下手呢

        1. 简单的场景, 我知道个 ip, 基本够用
        2. 只要能 ping 通, 链路对我来说, 好像也没什么大问题
        3. 要么就看看协议, 简单场景没有加密, 抓到了就是抓到了...
          1. 简单好上手, 容易产生成就感
          2. 要么就 用工具抓个 ping 吧
    5. 于是, 我费了好大力气, 说服了自己

      1. 用 抓包工具, 抓一下 ping 过程的包
    6. 用什么工具呢

      1. 百度 上搜了半天, 最后决定, 用 tcpdump
      2. tcpdump 能抓 ping 包吗?
        1. 这个是没问题的
  3. 环境

    1. os

      1. centos7
    2. docker-engine

      1. 19.03.12
    3. docker-compose

      1. 1.26.2
    4. image

      1. ubuntu
        1. 19.04

1. 准备

  1. 概述
    1. 准备环境

1. 启动 ubuntu 容器

  1. compose file

    version: "3.8"
    services:
      
      ubuntu:
        image: ubuntu:19.04
        tty: true
    
  2. 命令

    > docker-compose up -d
    
  3. 结果

    1. 启动成功
  4. 查看 ip

    # 目前没有其他太好的办法
    # 能查到 ip
    > docker inspect <container_name> | grep -e 'IPAddress'
    

2. ping

  1. 操作

    1. ping 之前找到的 ip
  2. 结果

    1. 通常是 能通的
  3. 如果不能通

    1. 好像我也没啥办法...
  4. ping 命令

    1. 只使用 ping 命令, 目前来看, 已经足够了
    2. 毕竟这个不是 主角
  5. 准备了好多

    1. 终于开始干正事了

2. tcpdump 确认 与 安装

  1. 概述
    1. tcpdump 的 确认 与 安装

1. 确认

  1. 概述

    1. 确认
  2. 命令

    1. rpm

      # 如果 有结果, 则说明安装
      > rpm -qa | grep 'tcpdump'
      tcpdump-4.9.2-4.el7_7.1.x86_64
      
    2. tcpdump

      # tcpdump 的关键组件
      > tcpdump --version
      tcp_wrappers-7.6-77.el7.x86_64
      tcp_wrappers-libs-7.6-77.el7.x86_64
      tcpdump-4.9.2-4.el7_7.1.x86_64
      
  3. 如果确认没有通过

    1. 那么就要想办法安装了

2. 安装

  1. 概述

    1. 安装
  2. 命令

    > yum install -y tcpdump
    
  3. 验证

    1. 上一步的确认

3. tcpdump 简单使用

  1. 概述
    1. tcpdump 简单使用

1. 帮助

  1. 概述

    1. tcpdump 的帮助
  2. 命令

    # 简单
    > tcpdump --help
    # 详细
    > man tcpdump
    

2. 初次使用

  1. 命令

    > tcpdump
    
  2. 结果

    1. 直接开始抓包, 并且打印到 屏幕上
  3. 问题

    1. 包好像有点多

      1. 指定包的大小, 肯定是没问题的
    2. 抓包的结果, 我暂时不讲, 抱歉

3. 指定包的大小

  1. 维度1: 包的数量

    > tcpdump -c <num>
    
  2. 维度2: 指定包的大小

    # 单位是 MB(1000000 B)
    > tcpdump -C <size>
    
  3. 问题

    1. 我一台机器上, 有好好多连接
      1. 我就想看 那么几个, 怎么办

4. ip 过滤

  1. 维度1: 源ip

    # host 很重要
    # 1. host 是 默认值
    # 2. 表明, 这是一个 主机
    # 3. 还能指定 网络, 端口, 端口范围, 当然这个以后另说
    > tcpdump -c 10 host src <IPAddress>
    
  2. 维度2: 目的ip

    > tcpdump -c 10 host dst <IPAddress>
    
  3. 维度3: 源/目的ip

    # 如果不写 src 或者 dst, 默认值为 src or dst
    > tcpdump -c 10 host <IPAddress>
    
  4. 疑问

    1. 为啥我抓不到包

      > tcpdump -c 10 host <docker_contain>
      
    2. 解答

      1. tcpdump 如果不指定设备, 则默认会监控 第一个 网卡
        1. 通常是 eth0 或者 enp0s3 之类
      2. 所以
        1. 需要手动指定网卡

5. 指定网卡

  1. 命令

    > tcpdump -c 10 -nn -i <if> host <docker_contain>
    
  2. 结果

    1. 成功抓到包

      tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
      listening on br-7a88d4cc405f, link-type EN10MB (Ethernet), capture size 262144 bytes
      21:09:08.628235 IP 172.21.0.1 > 172.21.0.2: ICMP echo request, id 3295, seq 114, length 64
      21:09:08.628253 IP 172.21.0.2 > 172.21.0.1: ICMP echo reply, id 3295, seq 114, length 64
      21:09:09.628502 IP 172.21.0.1 > 172.21.0.2: ICMP echo request, id 3295, seq 115, length 64
      21:09:09.628520 IP 172.21.0.2 > 172.21.0.1: ICMP echo reply, id 3295, seq 115, length 64
      21:09:10.630799 IP 172.21.0.1 > 172.21.0.2: ICMP echo request, id 3295, seq 116, length 64
      21:09:10.631049 IP 172.21.0.2 > 172.21.0.1: ICMP echo reply, id 3295, seq 116, length 64
      21:09:11.633172 IP 172.21.0.1 > 172.21.0.2: ICMP echo request, id 3295, seq 117, length 64
      21:09:11.633189 IP 172.21.0.2 > 172.21.0.1: ICMP echo reply, id 3295, seq 117, length 64
      21:09:12.651462 IP 172.21.0.1 > 172.21.0.2: ICMP echo request, id 3295, seq 118, length 64
      21:09:12.651481 IP 172.21.0.2 > 172.21.0.1: ICMP echo reply, id 3295, seq 118, length 64
      10 packets captured
      10 packets received by filter
      

4. 后续

  1. 信息怎么看

    1. icmp 的协议
    2. 学会看 tcpdump 信息
    3. 能不能看看详细信息
  2. 这个命令, 好像并不是这么简单

    1. 后面的 host 那块, 甚至可以做运算
  3. 抓到的东西, 能否做 持久化

  4. 命令这么麻烦, 能不能以 脚本的形式 保存

ps

  1. ref
    1. 抓包工具tcpdump用法说明
      1. 运维大佬
posted @ 2020-07-16 21:42  轩辕拾銉  阅读(309)  评论(0编辑  收藏  举报