命令说明

tcpdump命令是linux系统中分析网络问题的重要抓包工具,为了方便分析问题,我们还需要借助Wireshark工具进行分析;

命令安装

yum install tcpdump

命令选项说明

抓包
-c    指定要抓取的包数量(满足条件的)
-i    interface    指定监听的网卡lo    环回口any    所有接口
-n    不反解主机名
-nn    不反解主机名和端口号
-P    指定要抓取流入还是流出的包        in、out、inout    默认inout
输出
-e    输出的每行都将包括数据链路层头部信息
-q    快速打印
-x    输出包的头部数据    16进制ASCII同时输出
-xx    更详细
-v    详细的输出    -vv   -vvv
其他
-D    列出可用于抓包的接口
-F    从文件中读取抓包的表达式
-w    将抓包数据输出到文件中
-r    从指定的数据包中读取数据
-s number tcpdump默认只会截取前96字节的内容,要想截取所有的报文内容,就需要使用这个选项其中number是需要截取的报文字节数,如果是0的话,表示截取报文全部内容

过滤器

在服务器上的网络报文是异常的多,很多时候我们只关注和具体问题有关的数据报文,而这些有用的报文只占到很小的一部分,为了不让我们在报文的海洋里迷失自己,我们就非常有必要学习一下tcpdump提供的灵活而且功能强大的过滤器。

过滤器也可以简单地分为三类:type,dir和proto。

  • type
    主要用来区分过滤报文源类型,主要由host主机报文,net网段报文和port指定端口的报文组成;
  • dir
    只过滤报文的源地址和目的地址,主要包括src源地址和dst目的地址;
  • proto
    只过滤报文的协议类型,支持tcp、udp、arp、ip、ether、icmp;使用的时候可以省略proto关键字,例如:tcpdump -i eth1 icmp

组合条件

在茫茫网络中,想要找到那个你想要的网络包,还是有一定难度的。为了抓住那个我们想要的网络包,在我们抓包命令中,包含越多的限制条件,抓的无关包就会越少,所以在进行抓包时,可以使用以下操作:

  • 与 and、&&
  • 或 or、||
  • 非 not、!

使用实例

  • 命令:tcpdump -i eth0
    说明:监视指定网络接口的数据包

  • 命令:tcpdump host 210.27.48.3
    说明:截获210.27.48.3主机收到的和发出的所有数据包

  • 命令:tcpdump host 210.27.48.4 and (210.27.48.5 or 210.27.48.6)
    说明:截获210.27.48.3主机和210.27.48.5或者210.27.48.6主机进行通信的所有数据包

  • 命令:tcpdump -i eth0 src host 210.27.48.3
    说明:监视eth0网卡上源地址是210.27.48.3的所有网络包

  • 命令:tcpdump -i eth0 dst host 210.27.48.3
    说明:监视eth0网卡上目的地址是210.27.48.3的所有网络包

  • 命令:tcpdump tcp port 23 and host 210.27.48.3
    说明:获取主机210.27.48.3上端口为23的应用发出和接收的所有TCP协议包

  • 命令:tcpdump udp port 123
    说明:获取本机123端口发出和接收的所有UDP协议包

为了便于分析,我们需要将抓到的包保存到pcap文件,用Wireshark软件进行进一步分析,保存到文件的参数为-w,用法如下:

  • 命令:tcpdump -i eth0 -s0 -G 60 -Z root -w %Y_%m%d_%H%M_%S.pcap
    说明:抓取报文后按照指定时间间隔保存;-G选项后面接时间,单位为秒;上述命令就是每隔60秒生存一个文件

  • 命令:tcpdump -i eth0 -s0 -C 1 -Z root -w eth0Packet.pcap
    说明:抓取报文后按照指定报文大小保存;-C选项后接文件大小,单位为MB;上述命令就是每抓包文件达到1MB时就使用一个新的文件保存新抓的报文

man pcap-filter

高级过滤方式

了解如何从包头过滤信息

proto[x:y]          : 过滤从x字节开始的y字节数。比如ip[2:2]过滤出3、4字节(第一字节从0开始排)
proto[x:y] & z = 0  : proto[x:y]和z的与操作为0
proto[x:y] & z !=0  : proto[x:y]和z的与操作不为0
proto[x:y] & z = z  : proto[x:y]和z的与操作为z
proto[x:y] = z      : proto[x:y]等于z

支持的操作符

>, <, >=, <=, =, !=

IP头(IPV4)

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|  IHL  |Type of Service|          Total Length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Identification        |Flags|      Fragment Offset    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Time to Live |    Protocol   |         Header Checksum       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Source Address                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Destination Address                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    | <-- optional
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            DATA ...                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/*IP头定义,共20个字节*/
typedef struct _IP_HEADER
{char m_cVersionAndHeaderLen;       //版本信息(前4位),头长度(后4位)char m_cTypeOfService;            // 服务类型8位short m_sTotalLenOfPacket;        //数据包长度short m_sPacketID;              //数据包标识short m_sSliceinfo;               //分片使用char m_cTTL;                  //存活时间char m_cTypeOfProtocol;          //协议类型short m_sCheckSum;             //校验和unsigned int m_uiSourIp;          //源ipunsigned int m_uiDestIp;          //目的ip
} __attribute__((packed))IP_HEADER, *PIP_HEADER ;

抓取特定包头实例

  • 抓取源端口大于1024的TCP数据包
    tcpdump -i eth1 'tcp[0:2] > 1024'

  • 只抓SYN包,第十四字节是二进制的00000010,也就是十进制的2
    tcpdump -i eth1 'tcp[13] = 2'

  • 抓SYN, ACK (00010010 or 18)
    tcpdump -i eth1 'tcp[13] = 18'

  • 抓所有包含FIN标记的包(FIN通常和ACK一起,表示幽会完了,回见)
    tcpdump -i eth1 'tcp[13] & 1 = 1'

  • 抓RST
    tcpdump -i eth1 'tcp[13] & 4 = 4'

常用的字段偏移名字

tcpdump考虑了一些数字恐惧症者的需求,提供了部分常用的字段偏移名字:

  • icmptype (ICMP类型字段)

  • icmpcode (ICMP符号字段)

  • tcpflags (TCP标记字段)

TCP标记值:
tcp-fin, tcp-syn, tcp-rst, tcp-push, tcp-push, tcp-ack, tcp-urg

这样上面按照TCP标记位抓包的就可以写直观的表达式了:

  • 只抓SYN包
    tcpdump -i eth1 'tcp[tcpflags] = tcp-syn'

  • 使用tcpdump抓取HTTP包
    tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854
    0x4745 为"GET"前两个字母"GE",0x4854 为"HTTP"前两个字母"HT"。

更多用法请使用以下命令查阅:

man pcap-filter //查看过滤器相关资料
tcpdump --help  //tcpdump命令用法

tcpdump命令使用总结相关推荐

  1. Tcpdump命令的使用与示例——linux下的网络分析

    顾名思义,TcpDump可以将网络中传送的数据包的"头"完全截获下来提供分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.not等逻辑语句来帮助你去掉无用的 ...

  2. linux dump用法,Linux命令之tcpdump命令用法介绍

    Linux tcpdump命令用于倾倒网络传输数据. 执行tcpdump指令可列出经过指定网络界面的数据包文件头,在Linux操作系统中,你必须是系统管理员. 语法 tcpdump [-adeflnN ...

  3. 【Linux】一步一步学Linux——tcpdump命令(185)

    00. 目录 文章目录 00. 目录 01. 命令概述 02. 命令格式 03. 常用选项 04. 参考示例 05. 总结 06. 附录 01. 命令概述 tcpdump命令是一款sniffer工具, ...

  4. tcpdump命令---Linux学习笔记

    嗅探器(Sniffer): 介绍: 嗅探器是利用计算机的网络接口截获目的地位其他计算机的数据报文的一种技术.它工作在网络的底层,把网络传输的全部数据记录下来.嗅探器可以帮助网络管理员查找网络漏洞和检测 ...

  5. linux的tcpdump命令详解,tcpdump命令

    tcpdump命令是一款sniffer工具,它可以打印所有经过网络接口的数据包的头信息,也可以使用-w选项将数据包保存到文件中,方便以后分析. 语法tcpdump(选项) 选项-a:尝试将网络和广播地 ...

  6. linux传输tcp命令,Linux tcpdump命令帮助和示例

    Tcpdump是用于网络数据包分析的基本命令行实用工具.它显示网络上的TCP/IP和其他传输的网络数据包,tcpdump 适用于大多数的类Unix系统操作系统(如Linux,BSD等).类Unix系统 ...

  7. html 调用tcpdump,Linux tcpdump命令的用法详解(内容较多)

    tcpdump命令,即:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的"头&qu ...

  8. tcpdump 命令快速实用参考手册

    对于 tcpdump 的使用,大部分管理员会分成两类.有一类管理员,他们熟知 tcpdump 和其中的所有标记:另一类管理员,他们仅了解基本的使用方法,剩下事情都要借助参考手册才能完成.出现这种情况的 ...

  9. linux命令tcp和tt,Linux中tcpdump命令起什么作用呢?

    摘要: 下文讲述Linux中tcpdump的功能说明,如下所示: tcpdump是一款sniffer工具 tcpdump是linux下的抓包工具嗅探器. tcpdump命令功能: 用于输出所有经过网络 ...

  10. 在linux中使用tcpdump命令 – 监听网络流量

    tcpdump命令 – 监听网络流量 tcpdump命令是一款sniffer工具,是linux上的抓包工具,嗅探器:它可以打印出所有经过网络接口的数据包的头信息. tcpdump命令工作时先要把网卡的 ...

最新文章

  1. mysql错误:this authentication plugin is not supported
  2. 【ASIC设计】ASIC设计流程
  3. Yii框架常见问题汇总
  4. 微型计算机原理中LEA,微型计算机系统原理及应用(第2版)第2章
  5. Character.isLetterOrDigit(ch)判断ch是否为字母或数字
  6. 【思维构造】跳跃游戏
  7. CentOS提示另一个目前运行的程序正在访问软件信息
  8. 当OpenOrg和OpenGov发生冲突时
  9. iOS 13.2正式版放出 支持AirPodsPro
  10. Java定义字符串(2种方式)
  11. idea重写接口没有@override_【自学C#】|| 笔记 19 接口
  12. L1-038 新世界 (5 分)—团体程序设计天梯赛
  13. python入门教程(非常详细),从零基础入门到精通,看完这一篇就够了
  14. 当当图书排行榜html,最-当当图书
  15. 内存带宽测试与AVX指令集读写内存
  16. vue cl3、vuex、vue-router、ant design vue、axios搭建一个简易的单页面应用
  17. 十四届全国大学生“恩智浦”杯智能汽车竞赛信标组总结(3)
  18. VBS隐藏bat窗口
  19. 计算机c盘红色,win7系统c盘空间不足变红了如何解决_windows7的C盘变成红色怎么办...
  20. 爬梯:MongoDB入门到高级到SpringBoot-API

热门文章

  1. 【C++】STL中 list 反向迭代器的模拟实现
  2. windows10家庭版,另一台电脑无法访问权限访问当前电脑,无法连接共享打印机、共享文档
  3. 海康大华硬件NVR如何配置接入GB/T28181国标流媒体平台说明及示例
  4. 刷机一直请求shsh_爱思助手刷机过程里提示请求SHSH失败的处理方法
  5. KEPServerEX 6 之 lot Gateway MQTT Clinet 配置使用方式
  6. 如何在龙芯架构和国产化操作系统平台上运行javacv
  7. 针对“使用U盘提示使用前需要将其格式化,无法访问U盘情况”的解决办法
  8. 【路径规划】基于matlab A_star算法多机器人仓储巡逻路径规划【含Matlab源码 2125期】
  9. 1024程序员节,1024表示的另一种黄黄的内涵
  10. CFA黑料揭秘之CFA持证人年薪