Linux中的tcpdump命令示例详解

 更新时间:2019年03月03日 08:35:05   作者:果冻想  
这篇文章主要给大家介绍了关于Linux中tcpdump命令的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言

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

说到这个tcpdump命令,就不得不提自己参加的中国移动内蒙古分公司第三代CRM系统的开发与实施。如果没有记错的话,那应该是2016年,自己单独负责整个10086客服系统自助渠道的整体改造工作;在系统压测阶段,调用接口平台时,总是出现超时现象。后来这个问题越来越严重,同时短厅渠道、CBOSS渠道也反馈有这个问题,这时这个问题就引起了大BOSS的注意,然后就是各方专家会诊。在这种大型项目中,专家会诊,都有一个特色,就是专家指挥,小弟干活,而我那个时候,就是那个小弟。

好吧,专家发话了,抓包先。这就开始了我的抓包工作,开始了我对tcpdump的全面理解。

首先需要说的是,这个tcpdump是一个非常功能强大的命令,功能强大,那也就意味着这个命令的使用是非常复杂的,也就是说,我接下来整理的内容也会是非常多的。如果你想去掌握整个tcpdump命令的话,就需要你稍微有点耐心去把整篇文章读完。OK,Let's go!

命令简介

tcpdump是一款强大的网络抓包工具,运行在Linux平台上。熟悉tcpdump的使用能够帮助我们分析、调试网络数据。但是要想很好地掌握tcpdump, 就必须对网络报文(TCP/IP协议)有一定的了解。不过对于简单的使用来说,只要有网络基础概念就行了。

作为互联网上经典的的系统管理员必备工具,tcpdump以其强大的功能,灵活的截取策略,成为每个高级的系统管理员分析网络,排查问题等所必备的工具之一。在实际工作中,需要以root权限去执行该命令。

tcpdump是一个很复杂的命令,想了解它的方方面面非常不易,也不值得推荐,能够使用它解决日常工作中的问题才是关键,所以,以下的总结我将更侧重于从实际工作出发,整理一些实际工作中经常用到的用法,对于一些冷门用法,我这里基本不会涉及,如果日后在工作中用到了,我这里也会更新进来。

命令详解
下面就先对tcpdump一些常用的选项进行总结。

  • -s number:tcpdump默认只会截取前96字节的内容,要想截取所有的报文内容,就需要使用这个选项,其中number是需要截取的报文字节数,如果是0的话,表示截取报文全部内容;
  • -nn:表示不解析域名,直接显示IP,在netstat命令中,也有这个选项;
  • -X:同时使用hex和ascii显示报文内容;
  • -S:显示绝对的序列号(sequence number),而不是相对编号;
  • -i:指定监听的网卡,如果为-i any则表示监听所有的网卡;
  • -v,-vv,-vvv:显示更多的详细信息;
  • -c number:表示截取number个报文,然后结束;
  • -w:将监听到的数据包写入文件中保存,而并不分析和打印出来;
  • -A:只使用ascii打印报文的全部数据,不要和-X选项一起使用。截取HTTP请求的时候可以用sudo tcpdump -nSA port 80

虽然tcpdump命令的选项特别多,但是常用的选项也就上面那几个,我这里将更多的把注意力放在使用实例上,通过使用实例来学习tcpdump这个命令。

过滤器

先进行使用实例详解时,有必要先掌握tcpdump一些基本的使用理论知识,先来说说过滤器。

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

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

type:主要用来区分过滤报文源类型,主要由host主机报文,net网段报文和port指定端口的报文组成;

dir:只过滤报文的源地址和目的地址,主要包括src源地址和dst目的地址;

proto:只过滤报文的协议类型,支持tcp,udp和icmp等;使用的时候可以省略proto关键字:

  • tcpdump -i eth1 arp
  • tcpdump -i eth1 ip
  • tcpdump -i eth1 tcp
  • tcpdump -i eth1 udp
  • tcpdump -i eth1 icmp

在我们使用tcpdump命令时是离不开这些过滤器的。

条件组合

在茫茫网络中,想要找到那个你想要的网络包,还是有一定难度的。为了抓住那个我们想要的网络包,在我们抓包命令中,包含越多的限制条件,抓的无关包就会越少,所以在进行抓包时,我们可以使用“与”(and、&&)、“或”(or、||)和“非”(not、!)来将多个条件组合起来。这对我们需要基于某些条件来分析网络包是非常有用的。

使用实例

命令:tcpdump -i eth1

说明:监视指定网络接口的数据包

命令: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 net 192.168.1.0/24

说明:截获192.168.1.0/24整个网络的数据包

命令: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协议包

命令:tcpdump src host 10.126.1.222 and dst net 10.126.1.0/24

说明:截获源主地址为10.126.1.222,目的地址是10.126.1.0/24整个网络

命令: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时就使用一个新的文件保存新抓的报文

上面说到tcpdump抓包后生成对应的文件,那这个文件如何进行分析呢?是的,有这么样一个叫做“Wireshark”的软件,可以非常完美的和tcpdump进行结合,提供可视化的分析界面;有兴趣的话可以去学习一下,后续如果有时间,我也整理一个“Wireshark”入门系列。

总结

拖的时间比较长,终于整理完毕!当然了,tcpdump这么复杂的一个命令,我这里并没有进行非常全面的整理,但是我这里整理的内容绝对不会影响你在工作中使用tcpdump这个命令。还是那个“二八定律”,复杂的命令,常用的功能也就占用20%,其余80%都是比较偏僻生冷的功能,或者说工作中很少会用到的功能。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • Linux下设置防火墙白名单(RHEL 6和CentOS 7)的步骤

    Linux下设置防火墙白名单(RHEL 6和CentOS 7)的步骤

    下面小编就为大家带来一篇Linux下设置防火墙白名单(RHEL 6和CentOS 7)的步骤。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • Linux内核的死锁检测工具—Lockdep的使用案例

    Linux内核的死锁检测工具—Lockdep的使用案例

    文章主要介绍了Linux内核中的死锁问题,包括死锁的类型(递归死锁和AB-BA死锁)、lockdep模块的使用方法以及实际项目中的死锁案例,通过lockdep模块,可以有效地跟踪和调试死锁问题,帮助开发者快速定位和解决问题
    2024-11-11
  • 详解Linux驱动中,probe函数何时被调用

    详解Linux驱动中,probe函数何时被调用

    这篇文章主要介绍了详解Linux驱动中,probe函数何时被调用 ,具有一定的参考价值,有兴趣的同学可以了解一下。
    2016-12-12
  • Linux之进程间通信(共享内存【mmap实现+系统V】)

    Linux之进程间通信(共享内存【mmap实现+系统V】)

    这篇文章主要介绍了Linux之进程间通信(共享内存【mmap实现+系统V】),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 详解Linux常用命令的用法(二)————文本编辑器命令vi/vim

    详解Linux常用命令的用法(二)————文本编辑器命令vi/vim

    这篇文章主要介绍了Linux常用命令的用法(二)————文本编辑器命令vi/vim,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • CentOS 7.2 安装MariaDB详细过程

    CentOS 7.2 安装MariaDB详细过程

    这篇文章主要为大家介绍了CentOS 7.2 安装MariaDBMariaDB数据库管理系统详细过程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • KDC+NFS服务配置全过程

    KDC+NFS服务配置全过程

    本文介绍了在Linux环境下配置DNS服务器、KDC服务器以及NFS服务的步骤,首先,介绍了安装KDC相关软件包、配置KDC服务器的过程,包括修改配置文件和初始化数据库,随后,介绍了客户端如何安装NFS和KDC服务,以及如何从KDC服务器获取密钥
    2024-10-10
  • ubantu 16.4下Hadoop完全分布式搭建实战教程

    ubantu 16.4下Hadoop完全分布式搭建实战教程

    这篇文章主要给大家介绍了关于在ubantu 16.4下Hadoop完全分布式搭建的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • linux中设置nexus开机自启动的方法

    linux中设置nexus开机自启动的方法

    这篇文章主要介绍了linux中设置nexus开机自启动的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • linux 搭建svn服务器的方法步骤

    linux 搭建svn服务器的方法步骤

    这篇文章主要介绍了linux 搭建svn服务器的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01

最新评论