唐僧喜欢小龙女

导航

网络抓包学习

1、什么是网络抓包

数据包分析(流量分析)是什么
数据包分析,通常也被称为数据包嗅探或者协议分析或者流量分析、指的是捕获和解析网络上的在线传输数据的过程
数据包分析过程通常有数据包嗅探器来执行。他是一种用来在网络媒介上捕获原始传输数据的工具
常用的数据包嗅探器包括:Wireshark、tcpdump等等

 

2、抓包学习

什么时候需要抓包
    就是通过日志的方式、命令行的方式,分析不出来问题。一切看起来很正常。此时就可以使用抓包的方式了


客户端请求到达服务端流程
    1、当客户端拿到服务端对应的域名IP后,浏览器会以一个随机端口(1024--->65535)向服务器的web程序的端口发起TCP请求
    2、该请求经过复杂的网络环境后到达服务端,进入服务器对应的网卡、再进入到Linux内核的TCP/IP协议栈、一层一层的解开数据包,
    最终到达Nginx程序,确认TCP/IP连接。
    3、确认TCP连接后,客户端就可以发起Http请求(10.0.0.80 80)了
    4、nginx 先匹配请求的端口
    5、然后获取请求头里面的Host字段,匹配Server 标签对应的域名,把对应域名下面中的站点目录下的首页文件发送给客户端
    6、如果没有匹配域名,就把第一个虚拟机站点目录下的首页文件发给客户端



TCP(Transmission Control Protocol) 传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层协议
    意思是这个协议用来建立连接的,并且建立的连接是可靠的,建立连接后传输的方式是通过字节流的方式


抓包原理
    那种网络情况能够抓到包。
        安装了wireshark后,会绑定计算机的网卡抓取本机的网络

抓包过滤器语法
    抓包过滤器意思是:通过设置过滤器来抓取那些包。例如如下的表达式
        src host 192.168.1.109 && dst port 80 :抓取源地址为192.168.1.109,目的为80端口的流量
    实验演示    
        过滤MAC地址案例
            ether host f4:5c:89:ba:a9:53        过滤经过mac地址为 f4:5c:89:ba:a9:53的所有流量。无论是进还是出
            ether src host f4:5c:89:ba:a9:53     过滤经过mac地址为 f4:5c:89:ba:a9:53 所发出的流量
            ether dst host f4:5c:89:ba:a9:53    过滤经过mac地址为 f4:5c:89:ba:a9:53 所接受的流量

    三次握手和四次挥手
            
        SSH协议三次握手数据包中SYN、ACK的理解
            第一次数据包中有SYN 表示是一个建立连接的请求类型数据包,随机的端口-->22端口
            第二次数据包中有SYN和ACK 表示 这既是一个请求建立连接的数据包又是一个响应确认的数据包
            第三次数据包中有ACK依然表示是有一个确认建立连接的数据包标志
            第四次开始发送SSH协议的请求
            说明了SSH是基于TCP/IP 协议之上的

        HTTP协议三次握手数据包中SYN、ACK的理解  
            第一次数据包中有SYN 表示是一个建立连接的请求类型数据包 随机的端口-->80端口
            第二次数据包中有SYN和ACK 表示 这既是一个请求建立连接的数据包又是一个响应确认的数据包
            第三次数据包中有ACK依然表示是有一个确认建立连接的数据包标志
            第四次开发发送HTTP的请求。

        四次挥手数据包中的理解
            先建立SSH的连接,然后断开连接开是否有四次挥手的指令
            第一次数据包中有FIN 表示是一个断开连接的请求类型数据包 22端口-->随机的端口断开
            第二次数据包中有ACK 表示 是一个对断开的响应
            第三次数据包中有FIN、ACK表示客户端也要断开连接。ACK是对服务端断开连接的响应 随机端口-->22端口
            第四次数据包中有ACK 表示 是一个对断开的响应


    TCP连接状态报文
        



wireshark 数据包详情页面
    Frame                                 表示物理层数据包的情况
    Ethernet                            表述数据链路层以太网包的数据信息
    Internet Protocol                    表示网络层IP包的信息
    Transmission control Protocol        表示传输层数据段头部信息
    Hypertext Transfer Protocol(http)     表示应用层的信息

    Frame 物理层数据包的情况
        Frame 50274: 778 bytes on wire (6224 bits), 778 bytes captured (6224 bits) on interface en0, id 0
        物理层50274 数据库包,共778个字节,实际捕获了了778个字节

3、tcpdump命令的整理

tcpdump 命令学习
    TCPdump,全称 dump the traffic on a network,是一个运行在linux平台可以根据使用着需求对网络上传输的数据包进行捕获的抓包工具

    tcpdump 命令的安装
        yum install tcpdump

    报文分析
        21:16:58.797367 IP k8s-master.ssh > 192.168.1.3.55681: Flags [P.], seq 586560:586724, ack 5489, win 248, options [nop,nop,TS val 414073 ecr 190501818], length 164    

        21:16:58.612184 IP k8s-master.ssh > 192.168.1.3.55681: Flags [P.], seq 580680:580748, ack 5437, win 248, options [nop,nop,TS val 413888 ecr 190501657], length 68

        21:16:58.596107 IP 192.168.1.3.55681 > k8s-master.ssh: Flags [.], ack 579232, win 414, options [nop,nop,TS val 190501645 ecr 413871], length 0


        从上面的输出来看,可以总结出:
            第一列: 时分秒毫秒  21:16:58.612184
            第二列: 网络协议 IP  
            第三列: 发送方的ip地址 + 端口号,其中192.168.1.3 是ip,而55681 是端口号 /k8s-master 是主机名称.ssh是协议 默认是22端口
            第四列: 箭头 >,表示数据流向 
            第五列: 接收方的ip地址 + 端口号,其中 192.168.1.3 是ip 而55681 是端口号
            第六列: 数据包内容(第五列往后的内容),包括 Flags 标识符,seq号,ack号,win 窗口,数据长度length,其中[P.]
                   表示 PUSH标志为1,更多标识符大家需要了解TCP协议的标志位。

    TCP
        TCP 协议分为报头和报文两部分。
        TCP报头的理解和组成部分
        TCP协议可靠性是怎么实现的。
            序列号(seq):每一个数据包都对应着一个序列号,该序列号方便报文的排查,如果发送失败后可以根据该序列号进行重传
            确认号():每发送一个数据包都需要收到对应的确认包,确认号=序列号 + 1;

            标识位:
                有六个标识位,该标识位在三次握手四次挥手时用的
                SYN: 链接请求或者接受链接请求。该标识位是否打开用0和1来表示。如果是1 表示当前数据包是一个链接请求或者是一个接受链接请求的包
                FIN: 表示链接断开的数据包。 该标识位是否打开用0和1来表示。
                ACK: 该数据包是一个确认包。该标识位是否打开用0和1来表示。
                RST: reset 重置链接。
                PSH: 催促的标识位。
                URG: 紧急标识位


    tcpdump的过滤规则
        过滤 host
            获取当前服务器上指定ip的流量
                tcpdump host 192.168.1.130.
                在当前的服务器上过滤出来192.168.1.130 这个地址相关的数据包
                这里是过滤的是192.168.1.130这个服务器 发送到当前服务器的数据包以及当前服务器发送给192.168.1.130这个服务器的数据包

            获取指定方向的数据包
                tcpdump src 192.168.1.130. 在当前的服务器上过滤出来来自于192.168.1.130 这个地址发送的数据包
                tcpdump dst 192.168.1.130. 在当前的服务器上过滤出来发送到192.168.1.130 这个地址发送的数据包

        多虑网段
            截获特定网段 36.152.44.0/24 的主机收到和发出的数据包
                tcpdump net 36.152.44.0/24

            获取指定方向的数据包    
                tcpdump src net 36.152.44.0/24    
                tcpdump dst net 36.152.44.0/24    

        
        过滤端口
            获取特定端口的数据包
                tcpdump tcp port 80.只会截取80 端口的服务包


            获取指定方向的数据包    
                tcpdump src  port 8009.在当前的服务器上过滤出来来自于8009端口发送的数据包
                tcpdump dst  port 8009

            多虑多个端口的流量
                tcpdump tcp port 80 or port 443

        过滤协议
            过滤传输层的协议和网络层的协议
                tcpdump tcp/icmp/upd/arp/ip等。
                arp 协议是一个用来查找mac地址的协议。

            过滤应用层的协议来过滤
                tcpdump port http/dns/https/ssh

    tcpdump 过滤常用的参数
        -i 
            指定要监听的网卡
            tcpdump -i enp0s3 tcp port 8009.默认监听的是第一个网卡。

        -w
            将捕获到的信息保存到文件中,且不分析和打印在屏幕上。
            tcpdump -i enp0s3 tcp port 8009 -w tt.pcap。把捕获的内容放到叫tt.pcap的文件中。改文件方便在wire shark中分析。
            tt.pcap 的位置可以指定
            tcpdump -i enp0s3 tcp port 8009 -w /home/admin/zhubao/tt.pcap

        -r 
            对已有的包进行分析
                一般很少用
            tcpdump tcp -r     /home/admin/zhubao/tt.pcap

        -n 和 -nn

            -n 参数是不把ip转化成域名,直接显示ip,也就是说

            01:26:18.222338 IP 192.168.1.5.49306 > 192.168.1.7.22: Flags [.], ack 100944, win 2045, options [nop,nop,TS val 645994200 ecr 19070793], length 0

            -nn 参数是是吧域名和参数转化为ip和端口号。例如把ssh转化为22端口,hostname转化为ip

            01:26:18.220606 IP 192.168.1.7.22 > 192.168.1.5.49306: Flags [P.], seq 100764:100944, ack 469, win 248, options [nop,nop,TS val 19070793 ecr 645994191], length 180

        时间相关的参数
            -tt 在每行的输出中会输出时间戳.
            -tttt 在每行中输出时间,年月日时分秒

        -c和 -C参数
            -c 是指定收取数据包的次数,即在收到指定数量的数据包后退出tcpdump. c是count的简称
            tcpdump -c 20
                抓满20个数据包时就停止tcpdump抓包。

            tcpdump -c 20 -nn -tttt port 8009 -w /home/admin/zhubao/temst1.pcap

            -C 指定文件的大小配置-w和-W 来使用
                tcpdump -C 1 -W 3 -w abc.pcap

                指定文件超过1百万个字节后,新生成一个abc1.pcap的文件,最多生成到 abc2.pcap。

        -s 参数
            -s 指定每个包捕获的长度,单位时byte,如果数据包超过了设定的长度,包就会被截断,控制台会出现[|协议名称]。
            这个在抓包的时候可以指定数据包的长度。

        -A 参数
            对数据包的内容进行通过以ASCII格式打印出来。然后可以通过过滤的方式过滤接口已知的信息。

            tcpdump tcp port 8009 -nn -tttt -A | grep 'rpc'

            我这里接口调用成功后的报文里面有 rpc的字符串。

        {"data":{"username":"gaohq","age":18,"userId":null},"status":"SUCCESS","message":

        {"code":"1000","message":null,"description":"rpc............!"}}

 

4、tcpdump 抓包的其他疑问

抓的包什么时候会显示的有http协议的存在
  一般调用第三方接口的时候会有

 

posted on 2023-01-08 21:33  与时具进&不忘初心  阅读(163)  评论(0编辑  收藏  举报