zoukankan      html  css  js  c++  java
  • tcpdump详解(转)

      tcpdump是Linux下强大的抓包工具,不仅可以分析数据包流向,还可以对数据包内容进行监听。通过分析数据包流向,可以了解一条连接是如何建立双向连接的。
    tcpdump允许用户(一般是root)拦截和显示发送或收到过网络连接到该计算机的TCP/IP和其他数据包。

     

    1 用法及常用参数一览

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    tcpdump [-AennqX] [-i 接口] [-w 存储文件名] [-c 次数] [-r 文件] [所要抓取的数据包格式]
    常用选项与参数:
    -A    # 数据包的内容以ASCII显示,通常用来抓取WWW的网页数据包
    -e    # 使用数据链路层(osi第2层)的MAC数据包数据来显示
    -nn   # 直接以IP及port显示,而不用主机名与服务名显示
    -q    # 列出较为简短的数据包信息,每一行内容比较精简
    -X    # 列出十六进制(hex)以及ASCII数据包内容,对于监听数据包内容很有用
    -i    # 后接要监听的网络接口,如eth0/eth1/lo/ppp0等
    -w    # 后接文件名,将监听的数据包数据存储到文件中
    -r    # 后接文件名,从文件中读出数据,这个文件必须存在,且是由-w所产生的
    -c    # 监听的数据包数,如果没有这个参数,tcpdump会一直监听,直到按Ctrl+C为止
     
    'host 127.0.0.1'   # 针对单台主机抓包
    'net 192.168'      # 针对某个网络抓包
    'src host 127.0.0.1' 'dst net 192.168'  # 同时加上源(src)和目标限制(dst)
    'tcp port 21'      # 针对通信协议(tcp/udp/arp/ether)、端口检测
     
    还可以利用and 与 or 进行数据包的整合显示

     

    2 常用命令示例

     (1) 查看某块网卡的80端口数据包流向

    复制代码
    [@bjzw_11_210 logs]# tcpdump -i eth1 port 80 -nn
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
    13:47:06.904009 IP 10.149.35.123.52723 > 10.146.11.210.80: S 2680202536:2680202536(0) win 14600 <mss 1460>
    13:47:06.904155 IP 10.146.11.210.80 > 10.149.35.123.52723: S 1981317955:1981317955(0) ack 2680202537 win 5840 <mss 1460>
    13:47:06.905537 IP 10.149.35.123.52723 > 10.146.11.210.80: . ack 1 win 14600
    13:47:06.905573 IP 10.149.35.123.52723 > 10.146.11.210.80: P 1:1045(1044) ack 1 win 14600
    13:47:06.905579 IP 10.146.11.210.80 > 10.149.35.123.52723: . ack 1045 win 8352
    13:47:06.908920 IP 10.146.11.210.80 > 10.149.35.123.52723: P 1:268(267) ack 1045 win 8352
    13:47:06.908943 IP 10.146.11.210.80 > 10.149.35.123.52723: F 268:268(0) ack 1045 win 8352
    ......
    13:47:09.275055 IP 10.148.40.118.64051 > 10.146.11.210.80: S 2641310142:2641310142(0) win 14600 <mss 1460,nop,wscale 8>
    13:47:09.275080 IP 10.146.11.210.80 > 10.148.40.118.64051: S 1613833543:1613833543(0) ack 2641310143 win 5840 <mss 1460>
    13:47:09.277054 IP 10.148.40.118.64051 > 10.146.11.210.80: . ack 1 win 14600
    13:47:09.277094 IP 10.148.40.118.64051 > 10.146.11.210.80: P 1:894(893) ack 1 win 14600
    13:47:09.277102 IP 10.146.11.210.80 > 10.148.40.118.64051: . ack 894 win 7144
    
    530 packets captured                        <== 捕获的数据包数量
    530 packets received by filter              <== 通过过滤所得的总数据包数量
    0 packets dropped by kernel                 <== 被内核所丢弃的数据包
    [@bjzw_11_210 logs]#
    复制代码

    分析其中标红哪行的含义(如果第一次看肯定看晕):

    13:47:09.277094      捕获该数据包的时间,单位为“时:分:秒”;
    IP 通信协议是IP;
    10.148.40.118.64051 传送段的ip和端口分别是10.148.40.118和64051;
    > 数据包的传输方向(流向);
    10.146.11.210.80 接收端的ip和端口分别是10.146.11.210和80;
    P
    1:894(893) 该数据包带有PUSH传输标志,且传输的是整体数据的1~894 bytes;
    ack 1 ack相关的资料;
    win 14600 窗口大小为14600字节。

    (2) 本机执行tcpdump -i lo -nn

    摘出一行:

    04:16:47.369125 IP 127.0.0.1.42878 > 127.0.0.1.22: Flags [S]【表明是syn建立连接包(即三次握手的第一次握手)】, seq 765824415【seq 序号】, win 43690 【窗口大小】, 
    options【TCP首部可选字段】[mss 65495【表示mss是发送端(客户端)通告的最大报文段长度,发送端将不接收超过这个长度的TCP报文段(这个值和MTU有一定关系)】,sackOK【发送端支持并同意使用SACK选项】,TS val 9866687 ecr 0,
    nop,wscale 7【nop是一个空操作选项, wscale指出发送端使用的窗口扩大因子为7】], length 0

    (3)监听eth0网卡,且通信协议为port22,目标数据来源为192.168.0.100的数据包的命令

    tcpdump -i eth0 -nn 'port 22 and src host 192.168.0.100'

    (4).监视指定主机的数据包,例如所有进入或离开longshuai的数据包

    tcpdump host longshuai

    (5).打印helios<-->hot或helios<-->ace之间通信的数据包

    tcpdump host helios and ( hot or ace )

    (6).监视指定主机和端口的数据包

    tcpdump tcp port 22 and host hostname

    (7).对本机的udp 123端口进行监视(123为ntp的服务端口)

    tcpdump udp port 123

    示例:解析包数据

    [root@server2 ~]# tcpdump -c 2 -q -XX -vvv -nn -i eth0 tcp dst port 22
    tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
    12:15:54.788812 IP (tos 0x0, ttl 64, id 19303, offset 0, flags [DF], proto TCP (6), length 40)
        192.168.100.1.5788 > 192.168.100.62.22: tcp 0
            0x0000:  000c 2908 9234 0050 56c0 0008 0800 4500  ..)..4.PV.....E.
            0x0010:  0028 4b67 4000 4006 a5d8 c0a8 6401 c0a8  .(Kg@.@.....d...
            0x0020:  643e 169c 0016 2426 5fd6 1fec 2b62 5010  d>....$&_...+bP.
            0x0030:  0803 7844 0000 0000 0000 0000            ..xD........
    12:15:54.842641 IP (tos 0x0, ttl 64, id 19304, offset 0, flags [DF], proto TCP (6), length 40)
        192.168.100.1.5788 > 192.168.100.62.22: tcp 0
            0x0000:  000c 2908 9234 0050 56c0 0008 0800 4500  ..)..4.PV.....E.
            0x0010:  0028 4b68 4000 4006 a5d7 c0a8 6401 c0a8  .(Kh@.@.....d...
            0x0020:  643e 169c 0016 2426 5fd6 1fec 2d62 5010  d>....$&_...-bP.
            0x0030:  0801 7646 0000 0000 0000 0000            ..vF........
    2 packets captured
    2 packets received by filter
    0 packets dropped by kernel
  • 相关阅读:
    一起写框架-MVC框架的概述(一)
    一起写框架-说在前面的话(一)
    一起写框架-Ioc内核容器的实现-对象的调用-@Bean注解注入容器的对象(十二)
    一起写框架-Ioc内核容器的实现-对象的调用-方法注入容器的对象(十一)
    一起写框架-Ioc内核容器的实现-对象的调用-属性注入容器的对象(十)
    一起写框架-Ioc内核容器的实现-基础功能-组件注解支持自定义的对象名(九)
    一起写框架-控制反转(Ioc)概述(二)
    一起写框架-Ioc内核容器的实现-基础功能-容器对象名默认首字母小写(八)
    一起写框架-Ioc内核容器的实现-基础功能-ComponentScan支持组件注解限制(七)
    一起写框架-Ioc内核容器的实现-基础功能-ComponentScan支持多包扫描(六)
  • 原文地址:https://www.cnblogs.com/wsw-seu/p/10881153.html
Copyright © 2011-2022 走看看