首页 > 系统相关 >Linux tcpdump 命令使用详解

Linux tcpdump 命令使用详解

时间:2022-09-26 12:13:38浏览次数:51  
标签:tcpdump 抓取 benarchen Linux 数据包 root 详解 eth0

文章目录 一、介绍 二、基础用法 三、进阶用法 四、总结和建议 一、介绍 在日常工作中,我们总是能遇上各种各样奇怪的网络问题,比如我这台机器怎么 ping 不通了,我的 ssh 怎么又连不上了,这个控制台怎么又访问不了了等等各种网络问题,当然有时候可以通过 ping、telnet、arp 这些命令和工具来排查和解决,但这些都比不上去抓个包来得实在,也就是下面要分享的 tcpdump 命令。   tcpdump 是 Linux 系统中最有效的网络工具之一,凡是有网络问题十有八九都可以用它快速定位。它运行在用户态,本质是通过调用 libpcap 库的各种 api 来实现数据包的抓取功能。tcpdump 是非常强大的,并且相较其他的 Linux 命令和工具而且要稍微复杂一些,我们没必要完全掌握它,关键是灵活运用,能解决实际问题就好了。   二、基础用法 1、监听网卡 eth0,这个方式最简单了,但是用处不多,因为基本上只能看到数据包的信息刷屏,压根看不清,可以使用 ctrl+c 中断退出,如果真有需求,可以将输出内容重定向到一个文件,这样也更方便查看。   [root@benarchen ~]# tcpdump -i eth0 #如果直接使用 tcpdump 一般是抓取除 lo 外的第一张网卡 1 1 2、监听指定的主机的流量,抓包时指定 -nn 选项,不解析主机和端口名。这个参数很关键,会影响抓包的性能,一般抓包时都需要指定该选项。   [root@benarchen ~]# tcpdump -i eth0 -nn 'host 192.168.1.231' 这样的话,192.168.1.231 这台主机接收到的包和发送的包都会被抓取。 [root@benarchen ~]# tcpdump -i eth0 -nn 'src host 192.168.1.231' 这样只有 192.168.1.231 这台主机发送的包才会被抓取。 [root@benarchen ~]# tcpdump -i eth0 -nn 'dst host 192.168.1.231' 这样只有 192.168.1.231 这台主机接收到的包才会被抓取。 1 2 3 4 5 6 1 2 3 4 5 6 3、监听指定端口,用来监听主机的 80 端口收到和发送的所有数据包,结合 -A (以 ascii 的方式显示数据包)参数,在 web 开发中,真是非常有用。   [root@benarchen ~]# tcpdump -i eth0 -nnA 'port 80' 1 1 4、监听指定主机和端口   [root@benarchen ~]# tcpdump -i eth0 -nnA 'port 80 and src host 192.168.1.231' #多个条件可以用 and,or 连接。上例表示监听 192.168.1.231 主机通过 80 端口发送的数据包。 1 2 1 2 5、监听除某个端口外的其它端口   [root@benarchen ~]# tcpdump -i eth0 -nnA '!port 22' #如果需要排除某个端口或者主机,可以使用 “!” 符号,上例表示监听非 22 端口的数据包。 1 2 1 2 6、抓取指定端口范围的流量   [root@benarchen ~]# tcpdump -ni eth0 portrange 80-9000 1 1 7、抓取指定网段的流量   [root@benarchen ~]# tcpdump -ni eth0 net 192.168.1.0/24 1 1 8、监听指定协议的数据,这个是用来监听 icmp 协议的数据,类似的,如果要监听 tcp或者是 udp 协议,只需要例中的 icmp 就可以了。   [root@benarchen ~]# tcpdump -i eth0 -nn 'icmp' 1 1 9、将数据输出到一个指定的文件   [root@benarchen ~]# tcpdump -i eth0 -nn port 8000 -w xxx.pcap 1 1 三、进阶用法 这里我说的进阶用法,其实也就是基础用法通过灵活组合的方式以达到解决问题的效果,这也正是 tcpdump 的强大之处。 1、抓取指定客户端访问 ssh 的数据包   [root@benarchen ~]# tcpdump -ni eth0 src 113.88.13.223 and dst port 22 # 也可以反过来,抓取本机 22 端口发送给指定客户端的数据包 [root@benarchen ~]# tcpdump -ni eth0 src port 22 and dst 113.88.13.223 1 2 3 1 2 3 2、抓取从某个网段来,到某个网段去的流量   [root@benarchen ~]# tcpdump -nn src net 113.88.13.223/32 and dst net 10.0.0.0/24 or 172.17.0.0/16   1 1 3、抓取来自某个主机,发往非 ssh 端口的流量   [root@benarchen ~]# tcpdump -nni eth0 src 113.88.13.223 and not dst port 22 1 1 4、在某些复杂查询的时候需要使用引号、单引号告诉 tcpdump 忽略特定的特殊字符,这里的 () 就是特殊符号,如果不用引号的话,就需要使用转义字符   [root@benarchen ~]# tcpdump -ni eth0 'src 113.88.13.223 and (dst port 3389 or 22)' # 或者也可以使用转义 [root@benarchen ~]# tcpdump -ni eth0 src 113.88.13.223 and \(dst port 3389 or 22\) 1 2 3 1 2 3 5、还可以基于包大小进行筛选,如果你正在查看特定的包大小,可以使用这个参数   # 小于等于 48 字节 [root@benarchen ~]# tcpdump -ni less 48 # 等于 48 字节 [root@benarchen ~]# tcpdump -ni eth0 length == 48 # 大于等于 48 字节 [root@benarchen ~]# tcpdump -ni eth0 greater 48 1 2 3 4 5 6 1 2 3 4 5 6 6、过滤 TCP 特殊标记的数据包,可以帮助快速定位到网络问题   # 抓取某主机发送的 RST 数据包 [root@benarchen ~]# tcpdump -ni eth0 src host 113.88.13.223 and 'tcp[tcpflags] & (tcp-rst) != 0' # 抓取某主机发送的 SYN 数据包 [root@benarchen ~]# tcpdump -ni eth0 src host 113.88.13.223 and 'tcp[tcpflags] & (tcp-syn) != 0' # 抓取某主机发送的 FIN 数据包 [root@benarchen ~]# tcpdump -ni eth0 src host 113.88.13.223 and 'tcp[tcpflags] & (tcp-fin) != 0' # 抓取 TCP 连接中的 SYN 或 FIN 包 [root@benarchen ~]# tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0' 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 7、抓取端口是 80,网络层协议为 IPv4, 并且含有数据,而不是 SYN、FIN 以及 ACK 等不含数据的数据包   [root@benarchen ~]# tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' # 整个 IP 数据包长度减去 IP 头长度,再减去 TCP 头的长度,结果不为 0,就表示数据包有 data 1 2 1 2 四、总结和建议 1、常规参数   # 基础参数 -i:指定网络接口 -D:列出可用于抓包的接口 -s:指定数据包抓取的长度 -c:指定要抓取的数据包的数量 -w:将抓包数据保存在文件中 -r:从文件中读取数据 -C:指定文件大小,与 -w 配合使用 -F:从文件中读取抓包的表达式 -n:不解析主机和端口号,这个参数很重要,一般都需要加上 -P:指定要抓取的包是流入还是流出的包,可以指定的值in、out、inout # 输出参数 -e:输出信息中包含数据链路层头部信息 -t:显示时间戳,tttt 显示更详细的时间 -X:显示十六进制格式 -v:显示详细的报文信息,尝试 -vvv,v 越多显示越详细 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 2、组合表达式参数   # 操作对象 type,表示对象的类型,比如:host、net、port、portrange,如果不指定 type 的话,默认是 host dir:表示传输的方向,可取的方式为:src、dst。 proto:表示协议,可选的协议有:ether、ip、ip6、arp、icmp、tcp、udp。 # 组合连接词 or:表示或操作 and:表示与操作 not:表示非操作 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 3、建议   tcpdump 也不是万能的,还是要讲究灵活应用,配合其他的工具(ping、telnet、curl、arp 等)来解决实际问题 tcpdump 抓包是对系统性能有不小损耗的,生产环境慎用,并且应该尽量带上 -nn 选择,以降低性能损耗 抓包时尽可能要有针对性的指定过滤规则,减少无效数据包的干扰   连接转自:https://blog.csdn.net/wchenjt/article/details/114001914

标签:tcpdump,抓取,benarchen,Linux,数据包,root,详解,eth0
From: https://www.cnblogs.com/nizuimeiabc1/p/16730422.html

相关文章

  • linux cron 任务不成功定位
    编辑定时任务:crontab-e查看定时任务执行情况tail-500f/var/log/crontail-500f/var/spool/mail/root报错:/bin/bash^M:坏的解释器:没有那个文件或目录原因:这个文件......
  • 幂等设计详解
    导读本文主要从研发人员的角度,结合研发人员日常常见的各类业务场景,从经典系统框架的每一层入手分析幂等处理的时机。希望通过这篇文章的分析,让开发者在日常开发中对幂等的......
  • 详解JS中 call 方法的实现
    摘要:本文将全面的,详细解析call方法的实现原理本文分享自华为云社区《关于JavaScript中call方法的实现,附带详细解析!》,作者:CoderBin。本文将全面的,详细解析call方法的......
  • Linux常用基本命令(搜索查找类)
    搜索查找类4.1find查找文件或者目录find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端。1)基本语法find[搜索范围][选项]2)选项说明......
  • linux 离线安装 mysql8.0
    一、下载linuxmysql8.0离线安装包mysql下载地址:https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xzmysql官方下载最新版本:ht......
  • Linux 中hdparm命令参数说明
    hdparm命令提供了一个命令行的接口用于读取和设置IDE或SCSI硬盘参数。语法hdparm(选项)(参数)选项-a:设定读取文件时,预先存入块区的分区数,若不加上选项,则显示目前的设定......
  • Linux 中hdparm命令使用说明——带实例
    详解Linux中hdparm命令查看硬盘信息的用法功能说明:显示与设定硬盘的参数。语法:hdparm[-CfghiIqtTvyYZ][-a][-A<0或1>][-c ][-d<0或1>][-k<0或1>][-K......
  • Linux Subsystem For Android 11!适用于Debian GNU/Linux的Android子系统,完美兼容ARM
    本文将讲述如何在DebianStable系统安装一个Android11子系统,并且这个子系统带有Houdini可以兼容专为移动设备开发的ARM软件。在root权限下,编辑/etc/apt/sources.list增加......
  • Linux网络调试
    ifconfig-配置网络接口ip-显示/操作路由、网络设备、接口和隧道(tunnels)iproute...pingtraceroutedignetstat-打印网络连接,路由表,接口统计,伪装连接和多播成......
  • 在 Linux 上使用《算法》第4版官网中的 algs4.jar 包
    使用《算法》第4版(AlgorithmsFourthEdition)中的algs4.jar包下载algs4.jar官网网址:https://algs4.cs.princeton.edu/code/进入网站后使用浏览器的查找功能ctrl+......