精华内容
下载资源
问答
  • 首先,抓取报文前,需要对Wireshark配置TLS通讯密钥,否则抓取不到,因为信息加密了,具体步骤可参考: https://blog.csdn.net/Enderman_xiaohei/article/details/99441895 Wireshark抓包结果如下 Frame 是...

    本文基于Wireshark抓取https报文, 分析POST报文

    首先,抓取报文前,需要对Wireshark配置TLS通讯密钥,否则抓取不到,因为信息加密了,具体步骤可参考:

    https://blog.csdn.net/Enderman_xiaohei/article/details/99441895

    Wireshark抓包结果如下

    Frame 是wireshark自己定义的

    Ethernet II, 数据链路层, 以太网

    Internet Protocol, 网络层, IP层

    Transmission Control Protocol, TCP层

    [6 Reassembled TCP Segments]  TCP层接收到上层的数据后拆包

    Transport Layer Security     TLS层,加密层

    [2 Reassembled TLS segments]        这个是加密握手信息, 需要在WireShark配置密钥文件才能捕获到,这里的密钥是随机生成的

    Hypertext Transfer Protocol       HTTP层

    Line-based text data: text/plain   #数据# POST请求数据

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • -请求请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。比如 GET /data/info.html HTTP/1.1 方法字段就是HTTP使用的请求方法,比如常见的GET/POST 其中HTTP协议版本有两种:...

    HTTP请求
    一个HTTP请求由四个部分组成:请求行、请求头部、空行、请求数据。
    -请求行
    请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。比如 GET /data/info.html HTTP/1.1

    方法字段就是HTTP使用的请求方法,比如常见的GET/POST

    其中HTTP协议版本有两种:HTTP1.0/HTTP1.1 可以这样区别:

    HTTP1.0对于每个连接都只能传送一个请求和响应,请求就会关闭,HTTP1.0没有Host字段;而HTTP1.1在同一个连接中可以传送多个请求和响应,多个请求可以重叠和同时进行,HTTP1.1必须有Host字段。

    -请求头部
    HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者 POST)。如有必要,客户程序还可以选择发送其他的请求头。大多数请求头并不是必需的,但Content-Length除外。对于POST请求来说 Content-Length必须出现。

    常见的请求头字段含义:

    Accept: 浏览器可接受的MIME类型。

    Accept-Charset:浏览器可接受的字符集。

    Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。

    Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。

    Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。

    Content-Length:表示请求消息正文的长度。

    Host: 客户机通过这个头告诉服务器,想访问的主机名。Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。

    If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间。只有当所请求的内容在指定的时间后又经过修改才返回它,否则返回304“Not Modified”应答。

    Referer:客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的(防盗链)。包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。

    User-Agent:User-Agent头域的内容包含发出请求的用户信息。浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。

    Cookie:客户机通过这个头可以向服务器带数据,这是最重要的请求头信息之一。

    Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。

    From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。

    Connection:处理完这次请求后是否断开连接还是继续保持连接。如果Servlet看到这里的值为“Keep- Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入 ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。

    Range:Range头域可以请求实体的一个或者多个子范围。例如,

    表示头500个字节:bytes=0-499

    表示第二个500字节:bytes=500-999

    表示最后500个字节:bytes=-500

    表示500字节以后的范围:bytes=500-

    第一个和最后一个字节:bytes=0-0,-1

    同时指定几个范围:bytes=500-600,601-999

    但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200 (OK)。

    UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。

    -空行
    它的作用是通过一个空行,告诉服务器请求头部到此为止。
    -请求数据
    若方法字段是GET,则此项为空,没有数据

    若方法字段是POST,则通常来说此处放置的就是要提交的数据

    比如要使用POST方法提交一个表单,其中有user字段中数据为“admin”, password字段为123456,那么这里的请求数据就是 user=admin&password=123456,使用&来连接各个字段。

    响应报文
    响应报文由三部分组成:响应行、响应头、空行、响应体
    -响应行
    响应行一般由协议版本、状态码及其描述组成 比如 HTTP/1.1 200 OK

    其中协议版本HTTP/1.1或者HTTP/1.0,200就是它的状态码,OK则为它的描述。

    //常见状态码:

    100~199:表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程。

    200~299:表示成功接收请求并已完成整个处理过程。常用200

    300~399:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、常用302(意味着你请求我,我让你去找别人),307和304(我不给你这个资源,自己拿缓存)

    400~499:客户端的请求有错误,常用404(意味着你请求的资源在web服务器中没有)403(服务器拒绝访问,权限不够)

    500~599:服务器端出现错误,常用500

    更详细的状态码信息
    -响应头
    响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。

    设置HTTP响应头往往和状态码结合起来。例如,有好几个表示“文档位置已经改变”的状态代码都伴随着一个Location头,而401(Unauthorized)状态代码则必须伴随一个WWW-Authenticate头。然而,即使在没有设置特殊含义的状态代码时,指定应答头也是很有用的。应答头可以用来完成:设置Cookie,指定修改日期,指示浏览器按照指定的间隔刷新页面,声明文档的长度以便利用持久HTTP连接,……等等许多其他任务。

    常见的响应头字段含义:

    Allow:服务器支持哪些请求方法(如GET、POST等)。

    Content-Encoding:文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE4、IE5才支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader(“Accept- Encoding”))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面。

    Content-Length:表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。如果你想要利用持久连接的优势,可以把输出文档写入 ByteArrayOutputStram,完成后查看其大小,然后把该值放入Content-Length头,最后通过byteArrayStream.writeTo(response.getOutputStream()发送内容。

    Content- Type:表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置 Content-Type,因此HttpServletResponse提供了一个专用的方法setContentType。

    Date:当前的GMT时间,例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦。

    Expires:告诉浏览器把回送的资源缓存多长时间,-1或0则是不缓存。

    Last-Modified:文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。Last-Modified也可用setDateHeader方法来设置。

    Location:这个头配合302状态码使用,用于重定向接收者到一个新URI地址。表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。

    Refresh:告诉浏览器隔多久刷新一次,以秒计。

    Server:服务器通过这个头告诉浏览器服务器的类型。Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。Servlet一般不设置这个值,而是由Web服务器自己设置。

    Set-Cookie:设置和页面关联的Cookie。Servlet不应使用response.setHeader(“Set-Cookie”, …),而是应使用HttpServletResponse提供的专用方法addCookie。

    Transfer-Encoding:告诉浏览器数据的传送格式。

    WWW-Authenticate:客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的应答中这个头是必需的。例如,response.setHeader(“WWW-Authenticate”, “BASIC realm=\”executives\”“)。注意Servlet一般不进行这方面的处理,而是让Web服务器的专门机制来控制受密码保护页面的访问。

    注:设置应答头最常用的方法是HttpServletResponse的setHeader,该方法有两个参数,分别表示应答头的名字和值。和设置状态代码相似,设置应答头应该在发送任何文档内容之前进行。

    setDateHeader方法和setIntHeadr方法专门用来设置包含日期和整数值的应答头,前者避免了把Java时间转换为GMT时间字符串的麻烦,后者则避免了把整数转换为字符串的麻烦。

    HttpServletResponse还提供了许多设置

    setContentType:设置Content-Type头。大多数Servlet都要用到这个方法。

    setContentLength:设置Content-Length头。对于支持持久HTTP连接的浏览器来说,这个函数是很有用的。

    addCookie:设置一个Cookie(Servlet API中没有setCookie方法,因为应答往往包含多个Set-Cookie头)。
    -空行
    -响应体
    响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类。

    HTTP头域
    HTTP的头域包括通用头,请求头,响应头和实体头四个部分。前面讲解了请求头和响应头,接下来看看通用头和实体头(这里可能和前面介绍的请求头、响应头有重复)。
    -通用头
    通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-Control、 Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。对通用头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域,一般将会作为实体头域处理。下面简单介绍几个通用头域。

    常见通用头含义:

    Cache-Control:指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义如下:

    Public指示响应可被任何缓存区缓存。 Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。 no-cache指示请求或响应消息不能缓存 no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。 max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。 min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。 max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

    Date:表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。

    Pragma:用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同。
    -实体头
    请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成。实体头域包含关于实体的原信息,实体头包括Allow、Content- Base、Content-Encoding、Content-Language、 Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、 Etag、Expires、Last-Modified、extension-header。extension-header允许客户端定义新的实体头,但是这些域可能无法未接受方识别。实体可以是一个经过编码的字节流,它的编码方式由Content-Encoding或Content-Type定义,它的长度由Content-Length或Content-Range定义。

    常见实体头含义:

    Content-Encoding: 服务器通过这个头告诉浏览器数据的压缩格式。

    Content-Length: 服务器通过这个头告诉浏览器回送数据的长度。

    Content-Disposition:告诉浏览器以下载方式打开数据。

    Content-Type:服务器通过这个头告诉浏览器回送数据的类型。Content-Type实体头用于向接收方指示实体的介质类型,指定HEAD方法送到接收方的实体介质类型,或GET方法发送的请求介质类型。

    Content-Range:用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:

    Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth

    例如,传送头500个字节次字段的形式:Content-Range:bytes0- 499/1234,如果一个http消息包含此节(例如,对范围请求的响应或对一系列范围的重叠请求),Content-Range表示传送的范围, Content-Length表示实际传送的字节数。

    Last-Modified:指定服务器上保存内容的最后修订时间。

    ETag:缓存相关的头

    Expires:告诉浏览器把回送的资源缓存多长时间 -1或0则是不缓存

    其中三种禁止浏览器缓存的头字段:

    Expires:-1或0

    Cache-Control:no-cache

    Pragma:no-cache

    POST/GET区别
    Http定义了与服务器交互的不同方法,最基本的方法有4种:GET、POST、PUT、DELETE。

    而HTTP中的 GET,POST,PUT,DELETE 就对应着对URL资源的 查,改,增,删 4个操作。所以说:GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。

    主要区分一下get和post
    -提交数据形式
    GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),会直接展现在地址栏中,以?分割URL和传输数据,参数之间以&相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5 %A5%BD。

    如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,

    得出如:%E4 %BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

    而POST方法则会把数据放到请求数据字段中以&分隔各个字段,请求行不包含数据参数,地址栏也不会额外附带参数
    -提交数据大小
    get方法提交数据的大小直接影响到了URL的长度,但HTTP协议规范中其实是没有对URL限制长度的,限制URL长度的是客户端或服务器的支持的不同所影响:比如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。

    post方式HTTP协议规范中也没有限定,起限制作用的是服务器的处理程序的处理能力。

    所以大小的限制还是得受各个web服务器配置的不同而影响。
    -提交数据安全
    POST比GET方式的安全性要高

    通过GET提交数据,用户名和密码将明文出现在URL上,因为一下几个原因get方式安全性会比post弱:

    (1)登录页面有可能被浏览器缓存

    (2)其他人查看浏览器的历史纪录,那么别人就可 以拿到你的账号和密码了

    (3)当遇上跨站的攻击时,安全性的表现更差了

    展开全文
  • #突然间发现,原来生病之后真是很虚弱,很害怕,当时的豪言壮语可能在疾病面前毫无抵抗力,真心希望家人的身体健康。好好爱自己,爱家人,爱爱我的和我爱的。...来表示具体的请求中的媒体类型信息常见...

    #突然间发现,原来生病之后真是很虚弱,很害怕,当时的豪言壮语可能在疾病面前毫无抵抗力,真心希望家人的身体健康。好好爱自己,爱家人,爱爱我的和我爱的。

    HTTP/1.1 200 OK\r\n

    当处理了grtpost请求之后我们应该返回的http响应头是HTTP/1.1 200 OK\r\n

    • Http请求中的Content_Type 

    Content_Type;来表示具体的请求中的媒体类型信息

    常见的媒体格式类型如下:

        * text/html :HTML

        * text/plain:纯文本格式

        * text/xml : XML格式

        * image/gif gif图片格式

        *image/jpeg jpg图片格式

        *image/png png格式

    • Http 请求中的Content-Length

    HTTP头部Content-Length用于描述HTTP消息实体的传输长度,浏览器对比Content-LengthHTTP请求或者响应body长度判断一次HTTP传输过程,以独立于TCP长连接,

    使用wireshark进行抓包,当我们在浏览器中输入ip地址之后确实能够抓取到get请求,source是电脑端,destination是开发板。

    请求内容是GET / HTTP/1.1 长度是420

    之后又GIT /w5500.js HTTP/1.1长度是371

    d675e7e7d19ed31a47b329c18c788a0f.png

    14aac0f8316ffb74bfe57606220b61c2.png

    其中:

            Frame 14100: 物理层(框架)

            Ethernet II:数据链路层(以太网)

            Internet Protocol Version 4 :网络层(互联网协议版本4)

            Transmission Control Protocol:传输层(传输控制协议)

            Hypertext Transfer Protocol :应用层(超文本传输协议)

    0fc34ed236313806f7aebfe2a4bf1a45.png

    535b891f94b97ef181e2177e44a6d215.png

    768d6dfe66ed75f4d03eb921eef3ae50.png

    当修改ip之后进行点击提交表单产生POST请求,从From表单中收到修改后的ip等内容。


    Wireshark 抓包工具过滤表达式简单总结

    1.    协议过滤

    TCP,只显示TCP协议

    2.    IP过滤

    ip.src ==  192.168.1.1 显示源地址为192.168.1.1的数据

    ip.dst == 192.168.1.0  显示目标地址为192.168.1.0的数据

    3.    端口过滤

    tcp.port == 80,端口为80

    tcp.srcport == 80,只显示tcp协议的源端口为80

    4 HTTP过滤

    http.request.method == “GET”,只显示HTTP GET方法的

    5  逻辑运算符AND / OR

    ip.src ==192.168.1.102 or ip.dst==192.168.1.102

    http.request.method =="GET" or http.request.method =="POST"

        总有些路需要我们自己走,随着时间的流逝总有一些事我们会逐渐明白。

    喜欢什么的就勇敢去追寻吧,不要失去了才抱有遗憾。

    End 2021/1/1 - 20:10 于家

    展开全文
  • Wireshark 分析ping报文

    万次阅读 多人点赞 2016-10-30 00:57:47
    wireshark 分析ping报文使用ping命令来获取wwww.baidu.com网站的ICPM报文,其结果如下图:可以看到,我们生成了8个报文(4个请求报文和4个应答报文),下面我们来分析第一个报文,首先,请求报文如下:对于该报文的...

    wireshark 分析ping报文

    使用ping命令来获取wwww.baidu.com网站的ICPM报文,其结果如下图:

    这里写图片描述

    可以看到,我们生成了8个报文(4个请求报文和4个应答报文),下面我们来分析第一个报文,首先,请求报文如下:

    这里写图片描述

    对于该报文的整个描述如下:

    这里写图片描述

    这个请求报文共74字节,其中:

    前14个字节是以太网报文的一部分(由于网卡不会将其整个以太网帧格式数据提供出来,因此Wireshark只能捕捉到一部分以太网的数据),分别为本机的MAC地址和路由器的MAC地址:

    这里写图片描述

    由上图可知,其MAC地址的第一字节的最后两个bit位:IG位(individual/group,第7个bit位)为0表示这是一个单播MAC地址(unicast MAC address),LG位(local/global,第8个bit位)为0表示这是一个厂家出厂默认的MAC地址,为1时表示这是用户自己设置的MAC地址。

    紧接着源MAC地址和目标MAC地址的是以太网封装的数据格式类型,这里的值为0x0800,表示就接下来的数据是IPV4报文的数据。

    接下来的20个字节为IP报文:

    这里写图片描述

    这里写图片描述

    关于ip报文的格式如下:

    这里写图片描述

    其中,ip报文中的第一个字节为01000101,前1/2个字节(即0100)表示版本号(为4),接下来的1/2字节为5,表示报文长度为5(此值表示长度为5个32位的位数,即5*32/8=20个字节),关于版本和头部字节长度的解释如下:

    Version

    Version: Identifies the version of IP used to generate the datagram.For IPv4, this is of course the number 4. The purpose of this field is to ensure compatibility between devices that may be running different versions of IP. In general, a device running an older version of IP will reject datagrams created by newer implementations, under the assumption that the older version may not be able to interpret the newer datagram correctly.

    Internet Header Length (IHL)

    Internet Header Length (IHL): Specifies the length of the IP header,in 32-bit words. This includes the length of any options fields and padding. The normal value of this field when no options are used is 5 (5 32-bit words = 5*4 = 20 bytes). Contrast to the longer Total Length field below.

    再往下,ip报文的第二个字节为服务类型(Type of Service ,TOS)其值为00000000,服务类型字段声明了数据报被网络系统传输时可以被怎样处理。可以全为0,若全为0则表示一般服务。该字段并没有如初始定义被广泛使用,大部分主机会忽略这个字段。关于该字段的解释如下:

    Type Of Service (TOS)

    Type Of Service (TOS): A field designed to carry information to provide quality of service features, such as prioritized delivery, for IP datagrams. It was never widely used as originally defined, and its meaning has been subsequently redefined for use by a technique called Differentiated Services (DS). See below for more information.

    第三,四个字节为003c,表示总长度为60字节,即整个数据报的长度,最大长度为65535字节。关于其解释:

    Total Length (TL)

    Total Length (TL): Specifies the total length of the IP datagram, in bytes. Since this field is 16 bits wide, the maximum length of an IP datagram is 65,535 bytes, though most are much smaller.

    第5,6字节为0x4506,用来唯一地标识主机发送的每一份数据报。IP软件在存储器中维持一个计数器,每产生一个数据段,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题,当数据报由于长度,超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后各数据报片最后能正确的重装成为原来的数据报。关于其解释:

    Identification

    Identification: This field contains a 16-bit value that is common to each of the fragments belonging to a particular message; for datagrams originally sent unfragmented it is still filled in, so it can be used if the datagram must be fragmented by a router during delivery. This field is used by the recipient to reassemble messages without accidentally mixing fragments from different messages. This is needed because fragments may arrive from multiple messages mixed together, since IP datagrams can be received out of order from any device. See the discussion of IP message fragmentation.

    第7字节为0x00,目前只有前3位有意义,其解释:

    这里写图片描述

    第8字节为片偏移,其值为0,片偏移指出较长的分组在分片后,某片在原分组的相对位置。关于片偏移的解释:

    Fragment Offset

    Fragment Offset: When fragmentation of a message occurs, this field specifies the offset, or position, in the overall message where the data in this fragment goes. It is specified in units of 8 bytes (64 bits). The first fragment has an offset of 0. Again, see the discussion of fragmentation for a description of how the field is used.

    第9个字节值为128,表示生存期,用来设置数据报最多可以经过的路由器数。关于其解释:

    Time To Live (TTL)

    Time To Live (TTL): Short version: Specifies how long the datagram is allowed to “live” on the network, in terms of router hops. Each router decrements the value of the TTL field (reduces it by one) prior to transmitting it. If the TTL field drops to zero, the datagram is assumed to have taken too long a route and is discarded.

    第10个字节为0x01,表示IP层所封装的上层协议类型,如ICMP(1)、IGMP(2) 、TCP(6)、UDP(17)。解释如下:

    这里写图片描述

    第11,12个字段为0xe351,表示头部校验和,其根据头部中每个16比特进行二进制反码求和。其解释如下:

    Header Checksum

    Header Checksum: A checksum computed over the header to provide basic protection against corruption in transmission. This is not the more complex CRC code typically used by data link layer technologies such as Ethernet; it’s just a 16-bit checksum. It is calculated by dividing the header bytes into words (a word is two bytes) and then adding them together. The data is not checksummed, only the header. At each hop the device receiving the datagram does the same checksum calculation and on a mismatch, discards the datagram as damaged.

    下面来讲解校验和的计算,其计算是将校验和的16bit位置0,将整个IP头部字段按照16bit位来相加,如果有进位,则将其进位放在16bit位的最小位,最后将加的结果取反即为校验和,其规则与下面的类似:

    4500 -> 0100010100000000
    003c -> 0000000000111100
    453C -> 0100010100111100 /// First result

    453C -> 0100010100111100 // First result plus next 16-bit word.
    1c46 -> 0001110001000110
    6182 -> 0110000110000010 // Second result.

    6182 -> 0110000110000010 // Second result plus next 16-bit word.
    4000 -> 0100000000000000
    A182 -> 1010000110000010 // Third result.

    A182 -> 1010000110000010 // Third result plus next 16-bit word.
    4006 -> 0100000000000110
    E188 -> 1110000110001000 // Fourth result.

    E188 -> 1110000110001000 // Fourth result plus next 16-bit word.
    AC10 -> 1010110000010000
    18D98 -> 11000110110011000 // One odd bit (carry), add that odd bit to the result as we need to keep the checksum in 16 bits.

    18D98 -> 11000110110011000(注意这里的进位规则)
    8D99 -> 1000110110011001 // Fifth result

    8D99 -> 1000110110011001 // Fifth result plus next 16-bit word.
    0A63 -> 0000101001100011
    97FC -> 1001011111111100 // Sixth result

    97FC -> 1001011111111100 // Sixth result plus next 16-bit word.
    AC10 -> 1010110000010000
    1440C -> 10100010000001100 // Again a carry, so we add it (as done before)

    1440C -> 10100010000001100
    440D -> 0100010000001101 // This is seventh result

    440D -> 0100010000001101 //Seventh result plus next 16-bit word
    0A0C -> 0000101000001100
    4E19 -> 0100111000011001 // Final result.

    最后取反即可,我们可按照这个规则来计算校验和(上例展示了校验和的计算技巧,这里就没有针对本报文做演示计算过程了)。

    接下来的13,14,15,16和17,18,19,20字节分别表示源IP地址(c0 a8 01 08,192.168.1.8)和目标IP地址(77 4b d9 6d,119.75.217.109),解释如下:

    Source Address&Destination Address

    Source Address: The 32-bit IP address of the originator of the datagram. Note that even though intermediate devices such as routers may handle the datagram, they do not normally put their address into this field—it is always the device that originally sent the datagram.

    Destination Address: The 32-bit IP address of the intended recipient of the datagram. Again, even though devices such as routers may be the intermediate targets of the datagram, this field is always for the ultimate destination.

    以上为IP报文头部的20个字节的解释,下面便是IP报文的数据段了,也就是ICMP报文了,如下:

    这里写图片描述

    这里写图片描述

    其中第一个字节08表示类型,其表示Echo Request,关于该字段的解释:

    Type

    Type: Identifies the ICMP message type. For ICMPv6, values from 0 to 127 are error messages and values 128 to 255 are informational messages. Common values for this field are given in the table in the topic on ICMP message classes and types.

    第二个字节为0,表示Code,关于其解释:

    Code

    Code: Identifies the “subtype” of message within each ICMP message Type value. Thus, up to 256 “subtypes” can be defined for each message type. Values for this field are shown in the individual ICMP message type topics.

    接下来的第3,4字节(0x4d56)表示检验和,其解释如下:

    Checksum: 16-bit checksum field that is calculated in a manner similar to the IP header checksum in IPv4. It provides error detection coverage for the entire ICMP message. Note that in ICMPv6, a pseudo-header of IPv6 header fields is prepended for checksum calculation; this is similar to the way this is done in TCP.

    接下来的第5,6字节(0x0001)和第7,8字节(0x0005)分别表示标识码和序列码。

    接着后面的32字节我们发送的数据,可以看到其数据为abcdefghijklmnopqrstuvwabcdefghi。

    返回报文同理可分析。

    *注:本文的引用部分来自*The TCP/IP Guide: A Comprehensive, Illustrated Internet Protocols Reference by Charles M. Kozierok

    展开全文
  • wireshark 分析HTTP报文

    千次阅读 2019-06-04 16:50:42
    过滤http报文: 选中第7帧,右键追踪流--》HTTP流,查看详细信息,红色部分为请求报文,蓝色部分为响应报文: 之后 可以分析请求报文和响应报文。 ...
  • 使用wireshark分析tcp报文

    万次阅读 2019-05-12 19:21:12
    首先抓取了一个简单的http请求报文, 选取其中的一次完整请求,追踪tcp流: 可以在报文中看到tcp的3次握手,以及http 的request 和 response ,还有tcp的4次断开。 另外整个封包列表的面板中也有显示,编号,时间戳...
  • 三、HTTP请求报文格式

    2021-01-20 14:05:10
    一、HTTP的请求报文的格式 一个HTTP的请求报文的通用格式如下: 请求行 请求行中的方法和其大致作用如下表 请求行中的URL表示请求资源的路径和名称,版本字段是当前HTTP的版本 首部行 首部行中包含一些...
  • 首先抓取了一个简单的http请求报文,选取其中的一次完整请求,追踪tcp流:可以在报文中看到tcp的3次握手,以及http 的request 和 response ,还有tcp的4次断开。另外整个封包列表的面板中也有显示,编号,时间戳,源...
  • 文章目录报文结构HTTP 请求报文的请求行请求方法GET/HEADPOST/PUT其他方法URIURI 的格式URI 的编码HTTP 响应报文的状态行状态码HTTP 请求、响应头部字段 HTTP 协议再规范文档里详细定义了报文的格式,规定了组成部分...
  • stm32mp157开发板挂载NFS目录超时多半是因为防火墙阻隔了挂载请求报文,本文通过wireShark软件验证了这一猜想,并通过设置入站规则的方式避免了关闭防火墙而正常挂载NFS目录。
  •      当你使用tcpdump或是Wireshark进行HTTP抓包分析处理的时候,首先需要你对HTTP报文格式结构有一个大概的了解,在 HTTP协议之报文格式 一文中,对HTTP的请求与响应报文格式作了一个简要的描述,这对你快速...
  • 首先说下 已经安装了 wireshark 升级 mac os 到 10.10 后 闪退的问题  本人 mac mini 很早之前就安装了 wireshark 抓包,最近升级 10.10 后 发现 启动 wireshark 直接闪退 没有任何提示 ,解决的办法就是 更新 x11 ...
  • FTP是客户端-服务器协议,客户端将请求文件,而本地或远程服务器将提供该文件。我们熟知的FTP客户端:WinSCP、WS FTP、FileZilla等都是使用文件传输协议,它是一种标准的Internet 协议。用于通过TCP / IP 连接在...
  • [img=... 如何查看第1374包 是响应哪个http请求? 请教个这个技巧?...由于网页内容比较多,发出很多个http请求,所以用wireshark查看,如果不知道这个技巧的话,很痛苦的。
  • 由TCP传递给I P的信息单位称为报文段或段 当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。 当TCP收到发自TCP连接另一端的数据,它将发送一个...
  • 大的思路: 启用笔记本的无线热点,让手机连接笔记本无线热点;...由于wireshark要抓取https请求比较麻烦,因此这里直接使用fiddler来抓取https/https报文。 1、启用笔记本的移动热点 需要笔
  • 转自:... ...应该可以看懂,我们这里主要研究hypertext transfer protocal其中它由以下几个部分组成请求行+请求头+空白行+body(请求体)请求体如下实际上request格式如下那么响应报文...
  • HTTP报文格式及WireShark抓包分析

    千次阅读 2019-01-19 16:40:22
    HTTP请求报文格式 在这个请求格式之中空行是必不可少的一行。空行之后是请求实体。一个具体的HTTP请求报文格式如下: GET /su?wd=www.&action=opensearch&ie=UTF-8 HTTP/1.1 Host: suggestion...
  • 如下是dig +trace的第一个报文请求报文(向dig @指定IP 发起请求) 如下是 dig +trace 的第二个 报文, 响应报文 (本地dns响应) 如下是 dig +trace 的第三个请求报文 ( 向本地 DNS 发起请求 ) 当前...
  • https://juejin.im/book/5c70dbbe51882562046911bc/section/5c90d1d55188252d7e34d708在服务器上首先使用 tcpdump -i any port 8080 -nn -A -w test.pcap 进行数据包的截取,然后在客户端进行一次http带参请求。...
  • 介绍 ... http请求报文和响应报文的格式 请求报文格式 为了理解的更清楚,我用Wireshark抓包来看看到底表现形式是啥(\r\n是换行) 其中GET / HTTP/1.1是请求行。 由3个部分组成 1.请求方法(GET) 2.请求目标,...
  • 这里通过wireshark,抓取访问一个简单的GET请求(http://www.rt-thread.com/service/rt-thread.txt)的过程,记录一下GET方式的详细报文。 访问结果就是显示一串文字: 过程中进行了抓包,两个箭头分别指向请求和响.....
  • 基于wireshark的HTTP post请求分析

    千次阅读 2020-04-24 11:15:14
    报文源码 报文解析: POST:表明这是POST请求 HTTP/1.1 HTTP版本为1.1 Cache-Control: no-cache 响应头:Cache-Control:no-cache,强制每次请求直接发送给源服务器,而不经过本地缓存版本的校验。这对于需要确认...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 204
精华内容 81
关键字:

wireshark请求报文