1、tcpdump -i eth0 port 11751 and src host 192.168.1.34 -x -s0

  1. tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
  2. listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
  3. 14:15:42.714678 IP 192.168.1.34.39497 > 192.168.1.21.intrepid-ssl: P 3445320732:3445320750(18) ack 3456192260 win 46 <nop,nop,timestamp 1322201171 1322174386>
  4. 0x0000:  4500 0046 8c5e 4000 4006 2acc c0a8 0122
  5. 0x0010:  c0a8 0115 9a49 2de7 cd5b 6c1c ce01 4f04
  6. 0x0020:  8018 002e bb7b 0000 0101 080a 4ecf 3053
  7. 0x0030:  4ece c7b2 0e00 0000 030f de0d 9402 0000
  8. 0x0040:  0000 0000 0000

2、抓包的显示如上图,这个二进制显示了全部封包的内容,头部是MAC,即数据链路层的数据,这个打印的时候-x选项不显示了。

2)第二部分是IP包,格式如下:

IP包头字段说明 
版本:4位,指定IP协议的版本号。 
首部长度(IHL):4位,IP协议首部的长度,指明IPv4协议首部长度的字节数包含多少个32位。由于IPv4的首部可能包含可变数量的可选项,所以这个字段可以用来确定IPv4数据报中数据部分的偏移位置。IPv4首部的最小长度是20个字节,因此IHL这个字段的最小值用十进制表示就是5 (5x4 = 20字节)。就是说,它表示的是首部的总字节数是4字节的倍数。 
服务类型:定义IP协议包的处理方法,它包含如下子字段 
过程字段:3位,设置了数据包的重要性,取值越大数据越重要,取值范围为:0(正常)~ 7(网络控制)  延迟字段:1位,取值:0(正常)、1(期特低的延迟)  流量字段:1位,取值:0(正常)、1(期特高的流量)  可靠性字段:1位,取值:0(正常)、1(期特高的可靠性)  成本字段:1位,取值:0(正常)、1(期特最小成本)  未使用:1位  长度:IP包的总长 
认证:标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1 标志:是一个3位的控制字段,包含: 
保留位:1位  
不分段位:1位,取值:0(允许数据报分段)、1(数据报不能分段)  
更多段位:1位,取值:0(数据包后面没有包,该包为最后的包)、1(数据包后面有更多的包)

段偏移量:当数据分组时,它和更多段位(MF, More fragments)进行连接,帮助目的主机将分段的包组合。 
TTL:表示数据包在网络上生存多久,每通过一个路由器该值减一,为0时将被路由器丢弃。 
协议:8位,这个字段定义了IP数据报的数据部分使用的协议类型。常用的协议如下表:


校验和:16位,是IPv4数据报包头的校验和。 
源IP地址: 
目的IP地址:

3)第三部分是具体传输的协议,这里是tcp协议,格式如下:

显示TCP首部的数据格式。如果不计任选字段,它通常是20个字节。

3、根据协议二进制字段过滤

1) tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net x.x.x.x'

打印TCP会话中的的开始和结束数据包, 并且数据包的源或目的不是本地网络上的主机.(nt: x.x.x.x, 实际使用时要真正替换成本地网络的名字))

2) tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

打印所有源或目的端口是80, 网络层协议为IPv4, 并且含有数据,而不是SYN,FIN以及ACK-only等不含数据的数据包.(ipv6的版本的表达式可做练习)
(nt: 可理解为, ip[2:2]表示整个ip数据包的长度, (ip[0]&0xf)<<2)表示ip数据包包头的长度(ip[0]&0xf代表包中的IHL域, 而此域的单位为32bit, 要换算
成字节数需要乘以4, 即左移2. (tcp[12]&0xf0)>>4 表示tcp头的长度, 此域的单位也是32bit, 换算成比特数为 ((tcp[12]&0xf0) >> 4) << 2, 
即 ((tcp[12]&0xf0)>>2). ((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0 表示: 整个ip数据包的长度减去ip头的长度,再减去
tcp头的长度不为0, 这就意味着, ip数据包中确实是有数据.对于ipv6版本只需考虑ipv6头中的'Payload Length' 与 'tcp头的长度'的差值, 并且其中表达方式'ip[]'需换成'ip6[]'.)

3) tcpdump 'gateway snup and ip[2:2] > 576'
打印长度超过576字节, 并且网关地址是snup的IP数据包

4) tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
打印所有IP层广播或多播的数据包, 但不是物理以太网层的广播或多播数据报

5)tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'
打印除'echo request'或者'echo reply'类型以外的ICMP数据包( 比如,需要打印所有非ping 程序产生的数据包时可用到此表达式 .
(nt: 'echo reuqest' 与 'echo reply' 这两种类型的ICMP数据包通常由ping程序产生))

4、根据数据部分过滤

  1. [root@IM-SJ01-Server21 ~]# tcpdump -i eth0 port 11751 and tcp[32] == 0xe -x -s0
  2. tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
  3. listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
  4. 14:15:42.714678 IP 192.168.1.34.39497 > 192.168.1.21.intrepid-ssl: P 3445320732:3445320750(18) ack 3456192260 win 46 <nop,nop,timestamp 1322201171 1322174386>
  5. 0x0000:  4500 0046 8c5e 4000 4006 2acc c0a8 0122
  6. 0x0010:  c0a8 0115 9a49 2de7 cd5b 6c1c ce01 4f04
  7. 0x0020:  8018 002e bb7b 0000 0101 080a 4ecf 3053
  8. 0x0030:  4ece c7b2 0e00 0000 030f de0d 9402 0000
  9. 0x0040:  0000 0000 0000

1)计算数据的起始位置

ip首部的长度为((ip[0]&0xf)<<2))即ip[0]=0x45,即长度为20,所以IP头部到第二行的0115结束,后面就是具体传送协议的数据了,这里是tcp数据。

tcp首部的长度 ((tcp[12]&0xf0)>>2)),其中tcp[12]=0x80,计算长度为20,所以tcp头部的长度是20,从8018开始数20字节到c7b2结束。

所以tcp数据开始的地方是tcp[12+tcp首部长度]=tcp[20],即从0e00开始。

2)根据数据过滤,比如数据第一个字节tcp[32]==0xe,这样添加过滤条件过滤即可。

其中ip[2:2] 是从2字节(16bit)位开始,经过2字节(16bit),也就是ip头部的16-32位。

tcp依次类推

tcpdump抓包二进制tcp协议详细分析的更多相关文章

  1. Wireshark和TcpDump抓包分析心得

    Wireshark和 TcpDump抓包分析心得  1. Wireshark与tcpdump介绍 Wireshark是一个网络协议检测工具,支持Windows平台和Unix平台,我一般只在Window ...

  2. 转 Wireshark和TcpDump抓包分析心得

    1. Wireshark与tcpdump介绍 Wireshark是一个网络协议检测工具,支持Windows平台和Unix平台,我一般只在Windows平台下使用Wireshark,如果是Linux的话 ...

  3. 转:tcpdump抓包分析(强烈推荐)

    转自:https://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666539134&idx=1&sn=5166f0aac71 ...

  4. 019 Linux tcpdump 抓包案例入门可真简单啊?

    目录 1 tcpdump 是什么? 2 tcpdump 常用命令参数 3 tcpdump 抓包wss,配合Wireshark分析 4 tcpdump 抓包白度,配合Wireshark分析) 5 tcp ...

  5. linux下使用tcpdump抓包分析tcp的三次握手

    首先贴上tcp 三次握手的原理图服务器开启ftp服务并执行tcpdump抓包服务器:192.168.3.14 ftp服务客户端:192.168.3.100 服务器执行以下命令,客户端访问服务器ftp: ...

  6. 使用 tcpdump 抓包分析 TCP 三次握手、四次挥手与 TCP 状态转移

    目录 文章目录 目录 前文列表 TCP 协议 图示三次握手与四次挥手 抓包结果 抓包分析 TCP 三次握手 数据传输 四次挥手 TCP 端口状态转移 状态转移 前文列表 <常用 tcpdump ...

  7. tcpdump 抓包让wireshark来分析

    在linux下面用tcpdump 抓包非常方便, 但是抓的包要提取出来进行分析, 还是得用wireshark来过滤分析比较方便. 下面先介绍一下 TCPDUMP 的使用 例:tcpdump host ...

  8. Linux使用tcpdump命令抓包保存pcap文件wireshark分析

    [root@ok Desktop]# yum search tcpdump Loaded plugins: fastestmirror, refresh-packagekit, security Lo ...

  9. 抓包工具-Wireshark(详细介绍与TCP三次握手数据分析)

    功能使用的详细介绍 wireshark(官方下载网站: http://www.wireshark.org/),是用来获取网络数据封包,可以截取各种网络封包,显示网络封包的详细信息,包括http,TCP ...

随机推荐

  1. Python 爬虫系列:糗事百科最热段子

    1.获取糗事百科url http://www.qiushibaike.com/hot/page/2/    末尾2指第2页 2.分析页面,找到段子部分的位置, 需要一点CSS和HTML的知识 3.编写 ...

  2. Oracle存储过程入参传入List集合的小例子

    第一步:创建一个对象类型 create or replace type STUDENT as object( id ), name ), age ) ); / 第二步:创建一个数组类型 (任意选择下面 ...

  3. jumpserver安装及使用教程

    我自己是jumpserver的新手,以下两个链接是比较好的教程: 安装教程:http://blog.csdn.net/wanglei_storage/article/details/51001810 ...

  4. 利用DB实现简单去重处理

    业务需要针对某文件进行判重操作,用Perl实现如下 #!/usr/bin/perl my %h; s/\s+$// and $h{$_}++ while <>; print "$ ...

  5. mac 下搭建Elasticsearch 5.4.3分布式集群

    一.集群角色 多机集群中的节点可以分为master nodes和data nodes,在配置文件中使用Zen发现(Zen discovery)机制来管理不同节点.Zen发现是ES自带的默认发现机制,使 ...

  6. 【技术分享会】 iOS开发简述

    前言 Objective-C(简称OC)也是面向对象的编程语言,运用的许多面向对象的编程思想和C# . Java .C++等变成语言都是相通的: 本次技术讲座主要讲一些设计模式.设计思想等计算机语言通 ...

  7. 【laravel5.6】laravel 自定义公共函数

    1.在 app/Helpers/ 新建一个文件 functions.php,当然这个文件位置和名称你可以自己定义,创建一些函数用于全局调用: 2.在composer.json中的autoload下增加 ...

  8. 使用 CSS MARK 改变 SVG 背景色

    CSS masks -webkit-mask 这个属性是相当强大的,详细的介绍请到这里查看,它非常值得深入研究. -webkit-mask 让为一个元素添加蒙板成为可能,从而你可以创建任意形状的花样. ...

  9. C# NameValueCollection集合 (转)

    1.NameValueCollection类集合是基于 NameObjectCollectionBase 类. 但与 NameObjectCollectionBase 不同,该类在一个键下存储多个字符 ...

  10. ubuntu 重启网络方法--通过杀死进程重启网络

    重启网络方法(通过杀死进程方式,达到网络重启) zh@zh:~$sudo NetworkManager restart //查看进程idNetworkManager 已正运行(pid 10254)zh ...