tcpdump

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tcpdump相关的知识,希望对你有一定的参考价值。

1.ip地址简单换算

如:100.0.0.16/28

  1. 该ip指前28位为网络地址,100.0.0就是网络地址。后面8位中有4位也做网络地址。2的4次方等于16,因此该4位网络地址可划分16个网段,256/16=16,每个网段有16个子网。因此后面网段划分大概为0-15 16-31 32-47等等 ,100.0.0.16在 16-31网段中,因此该ip 网段范围 100.0.0.16-100.0.0.31
  2. 该ip最后8位子网掩码位11110000,因此换算成2的7次方+2的6次方+2的5次方+2的4次方=240
  3. 结果 :网关为网段中一个地址,广播地址拿范围最后一个地址
    子网掩码:255.255.255.240
    网关地址:100.0.0.17
    网段范围:100.0.0.16-100.0.0.31
    广播地址:100.0.0.31
  4. 用ipcalc来检查结果
    [[email protected] ~]#ipcalc -nmb 100.0.0.16/28
    NETMASK=255.255.255.240
    BROADCAST=100.0.0.31
    NETWORK=100.0.0.16

2.tcpdump

  1. 基本格式
    tcpdump 抓包选项 协议类型 数据包方向 端口号类型
  2. 基本选项
    -c:指定要抓取的包数量
    -i interface:指定tcpdump需要监听的接口
    -n:对地址以数字方式显式,也就是不做主机名解析
    -nn:把端口显示为数值,否则显示端口服务名,不解析端口和地址
    -s snaplen 指定抓包的长度,如果为0那么抓完整的包
    -w file 抓包的内容保存在指定的文件中
    -e:输出的每行中都将包括数据链路层头部信息,例如源MAC和目标MAC
    -q:快速打印明显是简单信息
    -X:输出包的头部数据,会以16进制和ASCII两种方式同时输出
    -XX:输出包的头部数据,会以16进制和ASCII两种方式同时输出,更详细
    -v:当分析和打印的时候,产生详细的输出
    -vv:产生比-v更详细的输出
    -vvv:产生比-vv更详细的输出
    -x 打印出数据包的内容
    -xx 更加详细的打印出数据包的内容
    -X 用ASCII码的形式打印出数据包的内容
    -XX 同上,不过打印出来的信息内容更加详尽
    -D:列出可用于抓包的接口,将会列出接口的数值编号和接口名,它们都可以用于"-i"后
    -r file :从给定的数据包文件中读取数据
  3. 协议类型
    一般有tcp、udp、arp、ip、ether、icmp等,若未给定协议类型,则匹配所有可能的类型。如"tcp port 23","udp portrange 7005-7009"。
  4. 数据包方向
    一般包括src/dst/src or dst/src and dst,默认为src or dst。如,"src dcrfan"表示源主机为dcrfan的数据包,"dst net 128.3"表示目标网络为128.3的数据包,"src or dst port 22"表示源或目的端口为22的数据包
  5. 端口类型
    一般值有host/net/port/portrange,如"host dcrfan","net 128.3","port 20","portrange 6000-6008",默认的type为host host包括ip地址

  6. 表达式单元之间可以使用操作符" and / or / not / "进行连接
  7. 示例
    1. 显示可监听端口
      [[email protected] ~]#tcpdump -D
      1.eth0
      2.virbr0
      3.bluetooth0 (Bluetooth adapter number 0)
      4.nflog (Linux netfilter log (NFLOG) interface)
      5.nfqueue (Linux netfilter queue (NFQUEUE) interface)
      6.eth1
      7.usbmon1 (USB bus number 1)
      8.eth2
      9.usbmon2 (USB bus number 2)
      10.any (Pseudo-device that captures on all interfaces)
      11.lo [Loopback]
    2. 抓取本机22端口的包
      [[email protected] ~]#tcpdump -c 10 -nn -i eth0 tcp port 22
      tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
      listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
      21:09:32.396368 IP 192.168.0.109.22 > 192.168.0.101.13784: Flags [P.], seq 1411524175:1411524415, ack 4189116864, win 549, length 240
      21:09:32.396779 IP 192.168.0.109.22 > 192.168.0.101.13784: Flags [P.], seq 240:464, ack 1, win 549, length 224
      21:09:32.396996 IP 192.168.0.101.13784 > 192.168.0.109.22: Flags [.], ack 464, win 2049, length 0
      21:09:32.397092 IP 192.168.0.109.22 > 192.168.0.101.13784: Flags [P.], seq 464:672, ack 1, win 549, length 208
      21:09:32.397233 IP 192.168.0.109.22 > 192.168.0.101.13784: Flags [P.], seq 672:976, ack 1, win 549, length 304
      21:09:32.397446 IP 192.168.0.101.13784 > 192.168.0.109.22: Flags [.], ack 976, win 2047, length 0
      21:09:32.397495 IP 192.168.0.109.22 > 192.168.0.101.13784: Flags [P.], seq 976:1184, ack 1, win 549, length 208
      21:09:32.397718 IP 192.168.0.109.22 > 192.168.0.101.13784: Flags [P.], seq 1184:1488, ack 1, win 549, length 304
      21:09:32.397884 IP 192.168.0.101.13784 > 192.168.0.109.22: Flags [.], ack 1488, win 2053, length 0
      21:09:32.397899 IP 192.168.0.109.22 > 192.168.0.101.13784: Flags [P.], seq 1488:1696, ack 1, win 549, length 208
      10 packets captured
      11 packets received by filter
      0 packets dropped by kernel
    3. 抓取ping包
      [[email protected] ~]#tcpdump -c 10 -i eth0 icmp
      tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
      listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
      21:20:18.570859 IP 192.168.0.101 > centos7.dcrfan: ICMP echo request, id 1, seq 35, length 40
      21:20:18.571165 IP centos7.dcrfan > 192.168.0.101: ICMP echo reply, id 1, seq 35, length 40
      21:20:19.573051 IP 192.168.0.101 > centos7.dcrfan: ICMP echo request, id 1, seq 36, length 40
      21:20:19.573168 IP centos7.dcrfan > 192.168.0.101: ICMP echo reply, id 1, seq 36, length 40
      21:20:20.578300 IP 192.168.0.101 > centos7.dcrfan: ICMP echo request, id 1, seq 37, length 40
      21:20:20.578388 IP centos7.dcrfan > 192.168.0.101: ICMP echo reply, id 1, seq 37, length 40
      21:20:21.582907 IP 192.168.0.101 > centos7.dcrfan: ICMP echo request, id 1, seq 38, length 40
      21:20:21.583055 IP centos7.dcrfan > 192.168.0.101: ICMP echo reply, id 1, seq 38, length 40
      21:20:26.553467 IP 192.168.0.101 > centos7.dcrfan: ICMP echo request, id 1, seq 39, length 40
      21:20:26.553619 IP centos7.dcrfan > 192.168.0.101: ICMP echo reply, id 1, seq 39, length 40
      10 packets captured
      10 packets received by filter
      0 packets dropped by kernel
    4. 解析包的数据
      [[email protected] ~]#tcpdump -c 2 -XX -nn -i eth0 tcp port 22
      tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
      listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
      21:30:22.405243 IP 192.168.0.109.22 > 192.168.0.101.13784: Flags [P.], seq 1411587551:1411587791, ack 4189159200, win 945, length 240
      0x0000: 10f0 0513 880a 000c 2953 4db3 0800 4510 ........)SM...E.
      0x0010: 0118 a0d0 4000 4006 16dd c0a8 006d c0a8 [email protected]@......m..
      0x0020: 0065 0016 35d8 5423 1ddf f9b1 7f20 5018 .e..5.T#......P.
      0x0030: 03b1 832d 0000 f5f7 52b6 62bb 0442 361a ...-....R.b..B6.
      0x0040: 384f 441d 8798 89dc 73d0 eb95 05dc 854a 8OD.....s......J
      0x0050: bbba ac2c 95b1 f75d 647c 22a7 ebc8 6774 ...,...]d|"...gt
      0x0060: 430a f6c7 fb84 dbee 6f70 2bff 5531 8746 C.......op+.U1.F
      0x0070: 442d 4a20 47f9 05dc 272e ecec 3e10 9b3a D-J.G...‘...>..:
      0x0080: 605a d2a2 92e4 e52e 82f0 4516 a56e 99f9 `Z........E..n..
      0x0090: 2964 08ac 9232 d8d6 16c8 2710 6cda 9588 )d...2....‘.l...
      0x00a0: e66a 55ac caee 9244 4f30 022e 11ed f40e .jU....DO0......
      0x00b0: 24bd 80e8 d569 2f9f e937 078f 8075 699e $....i/..7...ui.
      0x00c0: e339 5c80 2cae 5c0f a8e4 5f0a 742a a575 .9.,...._.t*.u
      0x00d0: 5c20 deb8 80dd b7f4 758a a0f1 e277 e6d6 .......u....w..
      0x00e0: 8338 db08 4e72 5508 9357 a5d2 0ddb 1aa5 .8..NrU..W......
      0x00f0: 0ff6 b641 1bcf 2bd7 3f66 2824 0372 6cd4 ...A..+.?f($.rl.
      0x0100: fde0 6f3a 2768 0938 898a 6b50 8ce6 5aef ..o:‘h.8..kP..Z.
      0x0110: 0bcb 1f46 42df d226 9b3b 8515 7db0 c263 ...FB..&.;..}..c
      0x0120: 2098 78a7 1173 ..x..s
      21:30:22.405598 IP 192.168.0.101.13784 > 192.168.0.109.22: Flags [.], ack 240, win 2053, length 0
      0x0000: 000c 2953 4db3 10f0 0513 880a 0800 4500 ..)SM.........E.
      0x0010: 0028 617f 4000 4006 572e c0a8 0065 c0a8 .([email protected]@.W....e..
      0x0020: 006d 35d8 0016 f9b1 7f20 5423 1ecf 5010 .m5.......T#..P.
      0x0030: 0805 03fa 0000 0000 0000 0000 ............
      2 packets captured
      2 packets received by filter
      0 packets dropped by kernel

3.僵尸进程

  1. 产生原因以及危害
    一个进程在结束自己的生命的时候,其实它并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构在Linux进程的状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集,除此之外,僵尸进程不再占有任何内存空间。它需要它的父进程来处理,如果他的父进程没安装SIGCHLD信号处理函数调用wait或waitpid()等待子进程结束,又没有显式忽略该信号,那么它就一直保持僵尸状态,如果这时父进程结束了,那么init进程自动会接手这个子进程,它还是能被清除的。但是如果如果父进程是一个循环,不会结束,那么子进程就会一直保持僵尸状态,这就是为什么系统中有时会有僵尸进程。
      Linux系统对运行的进程数量有限制,如果产生过多的僵尸进程占用了可用的进程号,将会导致新的进程无法生成。这就是僵尸进程对系统的最大危害。

  2. 一般处理方法
    a. 用top命令可查看系统是否存在僵尸进程(zombie)
    top - 17:38:28 up 1 day, 18:39, 3 users, load average: 0.00, 0.01, 0.05
    Tasks: 217 total, 1 running, 216 sleeping, 0 stopped, 0 zombie

    b. 如果存在僵尸进程可以通过 ps axfo state,ppid,pid,cmd
    来查找僵尸进程以及它的父进程,再通过kill -1 父进程id 来处理


4. vmstat信息详解

  1. 命令格式
    vmstat 选项 [每隔多少秒刷新一次 ] [刷新多少次停止]
    如:vmstat 2 5 每两秒刷新1次 一共刷新5次
    [[email protected] ~]#vmstat 2 5
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
    r b swpd free buff cache si so bi bo in cs us sy id wa st
    1 0 63832 97580 1472 444376 0 0 3 2 26 21 0 0 100 0 0
    1 0 63832 97564 1472 444376 0 0 0 0 149 127 0 0 100 0 0
    0 0 63832 97564 1472 444376 0 0 0 0 147 128 0 0 100 0 0
    0 0 63832 97564 1472 444376 0 0 0 0 127 112 0 0 100 0 0
    0 0 63832 97564 1472 444376 0 0 0 0 135 123 0 0 100 0 0

  2. 状态详解
    1. procs:
      r 运行进程数量
      b 处于阻塞进程数量
      memory:
      swpd: 交换内存的使用总量
      free:空闲物理内存总量
      buffer:用于buffer的内存总量
      cache:用于cache的内存总量
    2. swap:
      si:从磁盘进内存(swap)的数据速率(kb/s)
      so:从内存(swap)至磁盘的数据速率(kb/s)
    3. io:
      bi 从磁盘读数据 (blcoks/s)
      bo 写入磁盘 速率(blcoks/s)
    4. system:
      in: interrupts 中断速率,包括时钟
      cs: context switch 进程切换速率
    5. cpu:
      us 用户使用cpu时间
      sy 系统使用cpu时间
      id:空闲cpu时间
      wa:cpu等待io时间
      st:虚拟机占用cpu时间

以上是关于tcpdump的主要内容,如果未能解决你的问题,请参考以下文章

tcpdump

[转帖]tcpdump详细教程

tcpdump保存数据包

linux各种抓包情况说明

网络协议分析仪tcpdump和wireshark使用