【linux】【tcpdump】linux之tcpdump抓包及wireshark分析详解

linux的tcpdump命令主要用于网络问题的调试中,通过抓取传输过程的数据包进行分析和调试。而wireshark则是一款功能强大,使用方便的数据包分析工具,tcpdump+wireshark组合使用,完美,perfect,让网络问题无处遁形。

目录

1 tcpdump及wireshark基本介绍

1.1 tcpdump

1.2 wireshark

2 tcpdump抓包

2.1 常用命令

2.1.1 默认启动

2.1.2 监视指定网络接口的数据包 

2.1.3 监视指定主机的数据包

2.1.4 指定抓包数量

2.1.5 抓包精简显示

2.1.6 按照协议类型抓包

2.1.7 指定主机和端口号进行抓包

2.1.8 抓包并保存

2.2 tcpdump详细参数

3 wireshark导入数据包进行分析


1 tcpdump及wireshark基本介绍

1.1 tcpdump

tcpdump是基于Unix系统的命令行式的数据包嗅探工具,可以抓取流动在网卡上的数据包。默认情况下,tcpdump不会抓取本机内部通讯的报文。根据网络协议栈的规定,对于报文,即使是目的地是本机,也需要经过本机的网络协议层,所以本机通讯肯定是通过API进入了内核,并且完成了路由选择。

linux抓包原理:

Linux抓包是通过注册一种虚拟的底层网络协议来完成对网络报文(准确的说是网络设备)消息的处理权。当网卡接收到一个网络报文之后,它会遍历系统中所有已经注册的网络协议,例如以太网协议、x25协议处理模块来尝试进行报文的解析处理,这一点和一些文件系统的挂载相似,就是让系统中所有的已经注册的文件系统来进行尝试挂载,如果哪一个认为自己可以处理,那么就完成挂载。当抓包模块把自己伪装成一个网络协议的时候,系统在收到报文的时候就会给这个伪协议一次机会,让它来对网卡收到的报文进行一次处理,此时该模块就会趁机对报文进行窥探,也就是把这个报文完完整整的复制一份,假装是自己接收到的报文,汇报给抓包模块。

1.2 wireshark

wireshark是一种数据包分析工具,在各种网络应用中,比如通过思博伦的Spirent_TestCenter(TC)、Ixia测试仪抓取接口报文或者利用本文介绍的linux自带的tcpdump监听抓包工具,抓包后导出报文再导入wireshark工具中进行图形化分析。

2 tcpdump抓包

2.1 常用命令

2.1.1 默认启动

tcpdump

普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。但是由于linux默认网卡的问题,可能出现下面报错:

tcpdump: packet printing is not supported for link type NFLOG: use -w

此时,可以通过ifconfig或者ip address命令查看网卡信息,并通过指定网口进行数据抓包

2.1.2 监视指定网络接口的数据包 

tcpdump -i ens33

2.1.3 监视指定主机的数据包

指定通过网口ens33, 并且进出口IP地址为10.193.12.119的数据包

tcpdump -i ens33 host 10.193.12.119

指定通过网口ens33, 并且主机10.193.12.12 和主机10.193.17.4 或10.193.12.119之间的通信

tcpdump -i ens33 -n host 10.193.12.12 and \( 10.193.17.4 or 10.193.12.119 \)

指定通过网口ens33, 并且主机10.193.12.12 和非主机10.193.17.4之间的通信

tcpdump -i ens33 -n host 10.193.12.12 and ! 10.193.17.4 

指定通过网口ens33, 并且由主机10.193.12.12发送的所有数据

tcpdump -i ens33 -n src 10.193.12.12

指定通过网口ens33, 并且由主机10.193.12.12接收的所有数据

tcpdump -i ens33 -n dst 10.193.12.12

2.1.4 指定抓包数量

指定通过网口ens33, 并且由主机10.193.12.12接收的连续5个数据包

tcpdump -i ens33 -n dst 10.193.12.12 -c 5

2.1.5 抓包精简显示

tcpdump -i ens33 -n dst 10.193.12.12 -c 5 -q

指定通过网口ens33, 并且由主机10.193.12.12接收的连续5个数据包,并采用精简显示,可与上图进行对比

2.1.6 按照协议类型抓包

以ping为例,我们知道ping的协议类型为icmp,我们可以指定icmp协议类型进行抓包

tcpdump -i ens33 -n icmp 

2.1.7 指定主机和端口号进行抓包

指定网卡ens33,端口号为55555并且ip地址为10.193.12.12的连续10个数据包

2.1.8 抓包并保存

抓包并保存package.cap文件,可导出后再导入wireshark进行包分析

tcpdump -i ens33 -n  port 55555 and host 10.193.12.12 -c 10 -w package.cap

2.2 tcpdump详细参数

  • -a 尝试将网络和广播地址转换成名称。
  • -c<数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作。
  • -d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出。
  • -dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出。
  • -ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出。
  • -e 在每列倾倒资料上显示连接层级的文件头。
  • -f 用数字显示网际网络地址。
  • -F<表达文件> 指定内含表达方式的文件。
  • -i<网络界面> 使用指定的网络截面送出数据包。
  • -l 使用标准输出列的缓冲区。
  • -n 不把主机的网络地址转换成名字。
  • -N 不列出域名。
  • -O 不将数据包编码最佳化。
  • -p 不让网络界面进入混杂模式。
  • -q 快速输出,仅列出少数的传输协议信息。
  • -r<数据包文件> 从指定的文件读取数据包数据。
  • -s<数据包大小> 设置每个数据包的大小。
  • -S 用绝对而非相对数值列出TCP关联数。
  • -t 在每列倾倒资料上不显示时间戳记。
  • -tt 在每列倾倒资料上显示未经格式化的时间戳记。
  • -T<数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型。
  • -v 详细显示指令执行过程。
  • -vv 更详细显示指令执行过程。
  • -x 用十六进制字码列出数据包资料。
  • -w<数据包文件> 把数据包数据写入指定的文件。

3 wireshark导入数据包进行分析

猜你喜欢

转载自blog.csdn.net/u010521062/article/details/113937806