zoukankan      html  css  js  c++  java
  • 三报文握手而不是三次握手 wireshark 封包详细信息 (Packet Details Pane) wireshark与对应的OSI七层模型 TCP包的具体内容 分析TCP三次握手过程 抓包

     总结:

    1、tcp报文非数据部分4*6字节

     2、RFC 973

    《计算机网络》 谢希仁

    three way (three message) handshake

    只是一次握手

     同步位SYN、初始序号seq

    同步位SYN,确认位ACK,确认号,初始序号seq

    0-验证计算得出的UDP校验和与wireshark是否相同。

    知识点

    TCP/IP协议中几个缩写词的含义 MSL、TTL和RTT 报文最大生存时间 跳数(即生存时间) cs往返时间 MSL要大于TTL知道为什么吗? - zhangkele - 博客园 https://www.cnblogs.com/zhangkele/p/10323588.html

    TCP/IP协议中几个缩写词的含义 MSL、TTL和RTT 报文最大生存时间 跳数(即生存时间) cs往返时间 MSL要大于TTL知道为什么吗?

     

    MSL、TTL和RTT简介

    1、MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。因为tcp报文(segment)是ip数据报(datagram)的数据部分,具体称谓请参见《数据在网络各层中的称呼》一文,

    2、而ip头中有一个TTL域,TTL是time to live的缩写,中文可以译为“生存时间”,这个生存时间是由源主机设置初始值但不是存的具体时间,而是存储了一个ip数据报可以经过的最大路由数,每经过一个处理他的路由器此值就减1,当此值为0则数据报将被丢弃,同时发送ICMP报文通知源主机。RFC 793中规定MSL为2分钟,实际应用中常用的是30秒,1分钟和2分钟等。

         2MSL即两倍的MSL,TCP的TIME_WAIT状态也称为2MSL等待状态,当TCP的一端发起主动关闭,在发出最后一个ACK包后,即第3次握手完成后发送了第四次握手的ACK包后就进入了TIME_WAIT状态,必须在此状态上停留两倍的MSL时间,等待2MSL时间主要目的是怕最后一个ACK包对方没收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包。在TIME_WAIT状态时两端的端口不能使用,要等到2MSL时间结束才可继续使用。当连接处于2MSL等待阶段时任何迟到的报文段都将被丢弃。不过在实际应用中可以通过设置SO_REUSEADDR选项达到不必等待2MSL时间结束再使用此端口。

        TTL与MSL是有关系的但不是简单的相等的关系,MSL要大于等于TTL。   (MSL要大于TTL       要知道为什么?)

     3、 RTT是客户到服务器往返所花时间(round-trip time,简称RTT),TCP含有动态估算RTT的算法。TCP还持续估算一个给定连接的RTT,这是因为RTT受网络传输拥塞程序的变化而变化

    4、 2MSL即两倍的MSL,TCP的TIME_WAIT状态也称为2MSL等待状态,当TCP的一端发起主动关闭,在发出最后一个ACK包后,即第3次握 手完成后发送了第四次握手的ACK包后就进入了TIME_WAIT状态,必须在此状态上停留两倍的MSL时间,等待2MSL时间主要目的是怕最后一个 ACK包对方没收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包。在TIME_WAIT状态 时两端的端口不能使用,要等到2MSL时间结束才可继续使用。当连接处于2MSL等待阶段时任何迟到的报文段都将被丢弃。不过在实际应用中可以通过设置 SO_REUSEADDR选项达到不必等待2MSL时间结束再使用此端口。对于TCP中的各种控制字段,接下来进行具体说明。

    二、TCP控制字段标志:URG、ACK、PSH、RST、SYN、FIN

    在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.
    其中,对于我们日常的分析有用的就是前面的五个字段。

    它们的含义是:

    URG:Urget pointer is valid (紧急指针字段值有效)

    SYN: 表示建立连接

    FIN: 表示关闭连接

    ACK: 表示响应

    PSH: 表示有 DATA数据传输

    RST: 表示连接重置。

           其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,如果只是单个的一个SYN,它表 示的只是建立连接。TCP的几次握手就是通过这样的ACK表现出来的。但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开 连接。RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而 当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接。PSH为1的情况,一般只出现在 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。

          TCP产生 RST响应的情况(属于硬错误):

           四次握手不是关闭 TCP连接的唯一方法. 有时,如果主机需要尽快关闭连接(或连接超时,端口或主机不可达),RST (Reset)包将被发送. 注意在,由于RST包不是TCP连接中的必须部分, 可以只发送RST包(即不带ACK标记). 但在正常的TCP连接中RST包可以带ACK确认标记
          1. syn发送到服务器主机,但是目的端口并未运行。则产生一个ECONRFUSED错误。客户端立即返回。比如telnet 192.168.1.55 8889,条件:55主机在局域网上并且可达(也可以换成可以到达的网络ip地址),但是8889这个端口并未使用(可能服务器已经关闭),则服务器(对 方主机tcp内核)发送一个rst相应给客户端,于是客户端立即关闭。 注意一下,如果输入的网络ip不可达的话,客户端将会持续发送syn,最后产生一个etimeout的错误,大概75秒左右。这个时候客户端的默认网关 (192.168.1.1 211.2.2.2)因为找不到下一路由,路由器(或者再过几跳的路由器)会产生一个EHOSTUNREACH响应给客户端(注 意,ENETUNREACH和EHOSTUNREACH通常被认为是一个错误,因为ENETUNREACH一般当作已过时),由于这是个软错误(有可能是 网络暂时不通造成的)。客户端会重发syn直到超时。
            所以会有 telnet 192.168.1.55 8888  主机存在,但是端口未开,ECONRFUSED错误,立刻返回
                     telnet 192.168.1.56 *     主机不存在,UNROUTETOHOST错误,立刻返回
                     telnet 211.1.1.5    *     主机不存在,etimeout错误
     
          2. 最简单的情况,服务器主动发送rst给客户端关闭连接。客户端read write直接返回rst错误。
     
          3. 服务器收到一个不存在的连接返回rst响应。比如,服务器重启之后,先前的一个已连接的客户端毫不之情的情况下,这就是半闭连接(跟半开连接最大的不同是,半闭连接是不能使用的,半开连接可以使用)。
           此时,如果客户端read的话(接收缓冲无数据)产生一个EPEERRST错误
                   如果客户端write的话且发送数据小于发送缓冲区剩余容量时,第一次write成功,第二次write或者read的时候就会产生一个 EPEERRST的错误。因为write发送数据是直接把要发送的数据拷贝到内核的tcp发送缓冲区就立刻返回成功的。当然拷贝之前会先检查一下tcp连 接有无错误。所以第二次发送或者接收的时候,发现连接上已经有了EPEERRST的错误,所以就返回错误(话说回来,第一次发送的数据实际上根本就没有发 送成功,对方根本就没接受它)

     
     
     
     

    http://baike.baidu.com/item/Wireshark

    Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。
    网络封包分析软件的功能可想像成 "电工技师使用电表来量测电流、电压、电阻" 的工作 - 只是将场景移植到网络上,并将电线替换成网络线。在过去,网络封包分析软件是非常昂贵的,或是专门属于盈利用的软件。Ethereal的出现改变了这一切。在GNUGPL通用许可证的保障范围底下,使用者可以以免费的代价取得软件与其源代码,并拥有针对其源代码修改及客制化的权利。Ethereal是目前全世界最广泛的网络封包分析软件之一。
     

    Wireshark · Go Deep.  https://www.wireshark.org/

    Wireshark has a rich feature set which includes the following:

    • Deep inspection of hundreds of protocols, with more being added all the time
    • Live capture and offline analysis
    • Standard three-pane packet browser
    • Multi-platform: Runs on Windows, Linux, macOS, Solaris, FreeBSD, NetBSD, and many others
    • Captured network data can be browsed via a GUI, or via the TTY-mode TShark utility
    • The most powerful display filters in the industry
    • Rich VoIP analysis
    • Read/write many different capture file formats: tcpdump (libpcap), Pcap NG, Catapult DCT2000, Cisco Secure IDS iplog, Microsoft Network Monitor, Network General Sniffer® (compressed and uncompressed), Sniffer® Pro, and NetXray®, Network Instruments Observer, NetScreen snoop, Novell LANalyzer, RADCOM WAN/LAN Analyzer, Shomiti/Finisar Surveyor, Tektronix K12xx, Visual Networks Visual UpTime, WildPackets EtherPeek/TokenPeek/AiroPeek, and many others
    • Capture files compressed with gzip can be decompressed on the fly
    • Live data can be read from Ethernet, IEEE 802.11, PPP/HDLC, ATM, Bluetooth, USB, Token Ring, Frame Relay, FDDI, and others (depending on your platform)
    • Decryption support for many protocols, including IPsec, ISAKMP, Kerberos, SNMPv3, SSL/TLS, WEP, and WPA/WPA2
    • Coloring rules can be applied to the packet list for quick, intuitive analysis
    • Output can be exported to XML, PostScript®, CSV, or plain text

    Wireshark基本介绍和学习TCP三次握手

    http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html

    https://kb.cnblogs.com/page/130367/

    Fiddler 教程

    ip.src==192.168.2.51

    C:Userssas>ipconfig

    Windows IP 配置


    以太网适配器 以太网:

    连接特定的 DNS 后缀 . . . . . . . :
    本地链接 IPv6 地址. . . . . . . . : fe80::8139:deb1:313b:adb9%3
    IPv4 地址 . . . . . . . . . . . . : 192.168.2.102
    子网掩码 . . . . . . . . . . . . : 255.255.255.0
    默认网关. . . . . . . . . . . . . : 192.168.2.1

    以太网适配器 VMware Network Adapter VMnet1:

    连接特定的 DNS 后缀 . . . . . . . :
    本地链接 IPv6 地址. . . . . . . . : fe80::b98b:4377:c46d:728b%4
    IPv4 地址 . . . . . . . . . . . . : 192.168.32.1
    子网掩码 . . . . . . . . . . . . : 255.255.255.0
    默认网关. . . . . . . . . . . . . :

    以太网适配器 VMware Network Adapter VMnet8:

    连接特定的 DNS 后缀 . . . . . . . :
    本地链接 IPv6 地址. . . . . . . . : fe80::1166:633b:a43b:d18d%6
    IPv4 地址 . . . . . . . . . . . . : 192.168.61.1
    子网掩码 . . . . . . . . . . . . : 255.255.255.0
    默认网关. . . . . . . . . . . . . :

    隧道适配器 Teredo Tunneling Pseudo-Interface:

    连接特定的 DNS 后缀 . . . . . . . :
    IPv6 地址 . . . . . . . . . . . . : 2001:0:9d38:953c:28ea:2425:3f57:fd99
    本地链接 IPv6 地址. . . . . . . . : fe80::28ea:2425:3f57:fd99%5
    默认网关. . . . . . . . . . . . . : ::

    C:Userssas>

    封包详细信息 (Packet Details Pane) 

    wireshark与对应的OSI七层模型

    这个面板是我们最重要的,用来查看协议中的每一个字段。

    各行信息分别为

    Frame:   物理层的数据帧概况

    Ethernet II: 数据链路层以太网帧头部信息

    Internet Protocol Version 4: 互联网层IP包头部信息

    Transmission Control Protocol:  传输层T的数据段头部信息,此处是TCP

    Hypertext Transfer Protocol:  应用层的信息,此处是HTTP协议

    https://kb.cnblogs.com/page/130367/

    SyntaxView 代码

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>Fiddler 教程_知识库_博客园</title>

    ImageView 图片

    HexView

    WebView  浏览器

    总结:
    1、着色规则;

    2、过滤出口ip

    ip.dst==60.205.86.124

    3、在Hypertext Transfer Protocol中查看POST的数据;

    4、2进制、16进制与字符串的转换

    wireshark使用方法总结 - Dragonir - 博客园 https://www.cnblogs.com/dragonir/p/6219541.html

    5、过滤组合规则

    ip.dst==60.205.86.123 || ip.src==60.205.86.123

     ip.dst==220.152.187.199
    (ip.dst==220.152.187.199 || ip.src==220.152.187.199 ) and !ssh
    ip.src==220.152.187.199 and !ssh
    过滤端口号

    A display filter to filter on certain tcp ports e.g. 1234 and 5678:

    (tcp.port == 1234) or (tcp.port == 5678)




    @1

    着色规则 coloring rules

    Wireshark网络抓包(一)——数据包、着色规则和提示 - 咖啡机(K.F.J) - 博客园 https://www.cnblogs.com/strick/p/6261463.html

    二进制01001000 对应字母H,为16进制(72)_10=(48)_16

    Fiddler4入门——手机抓包 - 释梦燃的博客 - CSDN博客 https://blog.csdn.net/shimengran107/article/details/78644862

    6.http模式过滤
    例子:
    http.request.method == “GET”
    http.request.method == “POST”
    http.request.uri == “/img/logo-edu.gif”
    http contains “GET”
    http contains “HTTP/1.”
    // GET包
    http.request.method == “GET” && http contains “Host: “
    http.request.method == “GET” && http contains “User-Agent: “
    // POST包
    http.request.method == “POST” && http contains “Host: “
    http.request.method == “POST” && http contains “User-Agent: “
    // 响应包
    http contains “HTTP/1.1 200 OK” && http contains “Content-Type: “
    http contains “HTTP/1.0 200 OK” && http contains “Content-Type: “
    一定包含如下
    Content-Type:

    例子:
    ip.src eq 192.168.1.107 or ip.dst eq 192.168.1.107
    或者
    ip.addr eq 192.168.1.107 // 都能显示来源IP和目标IP

    https://blog.csdn.net/hzhsan/article/details/43453251

    wireshark基本用法及过虑规则

    分析ssh

    过滤规则ssh

    websocket抓包填入 WebSocket

     

    WebSocket客户端

    #!/usr/bin/env python
    
    # WS server example
    
    import asyncio
    import websockets
    
    async def hello(websocket, path):
        name = await websocket.recv()
        print(f"< {name}")
    
        greeting = f"Hello {name}!"
    
        await websocket.send(greeting)
        print(f"> {greeting}")
    
    start_server = websockets.serve(hello, "localhost", 8765)
    start_server = websockets.serve(hello, "0.0.0.0", 8765)
    
    asyncio.get_event_loop().run_until_complete(start_server)
    asyncio.get_event_loop().run_forever()
    

      

    WebSocket服务端

    #!/usr/bin/env python
    
    # WS client example
    
    import asyncio
    import websockets
    import time
    
    
    async def hello():
        # uri = "ws://localhost:8765"
        uri = "ws://192.168.11.215:8765"
        async with websockets.connect(uri) as websocket:
            # name = input("What's your name? ")
            name = '{}{}'.format('name', int(time.time()))
            await websocket.send(name)
            print(f"> {name}")
    
            greeting = await websocket.recv()
            print(f"< {greeting}")
    
    
    while True:
        asyncio.get_event_loop().run_until_complete(hello())
        time.sleep(1)
    

      

     https://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html

    简介

    用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

    实用命令实例

    https://zh.wikipedia.org/wiki/传输控制协议

    简介

    数据在TCP层称为流(Stream),数据分组称为分段(Segment)。作为比较,数据在IP层称为Datagram,数据分组称为分片(Fragment)。 UDP 中分组称为Message。

    运作方式

    ESTABLISHED
     
    简化版的TCP状态图。更详细的版本见: TCP EFSM 图,包含了ESTABLISHED状态的内部状态。

    TCP协议的运行可划分为三个阶段:连接创建(connection establishment)、数据传送(data transfer)和连接终止(connection termination)。操作系统将TCP连接抽象为套接字表示的本地端点(local end-point),作为编程接口给程序使用。在TCP连接的生命期内,本地端点要经历一系列的状态改变。[1]

    创建通路

    TCP用三次握手(或称三路握手,three-way handshake)过程创建一个连接。在连接创建过程中,很多参数要被初始化,例如序号被初始化以保证按序传输和连接的强壮性。


     
    TCP连接的正常创建

    一对终端同时初始化一个它们之间的连接是可能的。但通常是由一端打开一个套接字socket)然后监听来自另一方的连接,这就是通常所指的被动打开(passive open)。服务器端被被动打开以后,用户端就能开始创建主动打开(active open)。

    1. 客户端通过向服务器端发送一个SYN来创建一个主动打开,作为三次握手的一部分。客户端把这段连接的序号设定为随机数A
    2. 服务器端应当为一个合法的SYN回送一个SYN/ACK。ACK的确认码应为A+1,SYN/ACK包本身又有一个随机产生的序号B
    3. 最后,客户端再发送一个ACK。此时包的序号被设定为A+1,而ACK的确认码则为B+1。当服务端收到这个ACK的时候,就完成了三次握手,并进入了连接创建状态。

    如果服务器端接到了客户端发的SYN后回了SYN-ACK后客户端掉线了,服务器端没有收到客户端回来的ACK,那么,这个连接处于一个中间状态,即没成功,也没失败。于是,服务器端如果在一定时间内没有收到的TCP会重发SYN-ACK。在Linux下,默认重试次数为5次,重试的间隔时间从1s开始每次都翻倍,5次的重试时间间隔为1s, 2s, 4s, 8s, 16s,总共31s,第5次发出后还要等32s才知道第5次也超时了,所以,总共需要 1s + 2s + 4s+ 8s+ 16s + 32s = 63s,TCP才会断开这个连接。使用三个TCP参数来调整行为:tcp_synack_retries 减少重试次数;tcp_max_syn_backlog,增大SYN连接数;tcp_abort_on_overflow决定超出能力时的行为。

    https://luoguochun.cn/post/2014-07-23-wireshark-tcp/

  • 相关阅读:
    学习资料(干货汇集)
    Android安全系列之:如何在native层保存关键信息
    IntelliJ IDEA 2019 快捷键终极大全,速度收藏!
    【转】45个实用的JavaScript技巧、窍门和最佳实践
    Android中jsoup的混淆规则【转】
    Android WebServer相关项目
    【转】实战nanoHTTPD嵌入android app(3)
    【.net 深呼吸】程序集的热更新
    【WCF】使用“用户名/密码”验证的合理方法
    【Win 10 应用开发】应用预启动
  • 原文地址:https://www.cnblogs.com/rsapaper/p/6693876.html
Copyright © 2011-2022 走看看