Linux tcpdump命令的用法详细解析

英文原意是dump traffic on a network ,即截获网络上的数据报,可以根据指定的网络接口来截获不同的数据报。它会输出在某个网络接口上符合匹配表达式的报内容的描述。当tcpdump完成抓包后,会打印出类似下面的内容:

9 packets captured
56 packets received by filter
17 packets dropped by kernel

当然,在读取网络上的数据包时,得需要特权,比如linux上的超级用户

tcpdump用法

tcpdump -A 用ascii打印出每个包信息,这个对于截获网页很方便
tcpdump -D 打印出当前系统的可用的网络接口。可以用-i选项来指定特定的接口

tcpdump -F 使用文件作为输入的过滤表达式

tcpdump -i 在指定的接口上进行监听。如果未指定,tcpdump会从interface list 中寻找最低数字作为监听的接口

tcpdump -l  使标准输出成为缓冲区,如果你想在截获数据包的同时也查看数据,则可以使用下面命令
tcpdump -l > dat & tail -f dat
tcpdump -S 打印出TCP绝对的序列号
tcpdump -w 将截获的数据包写到一个文件中
如果没有表达式,则网络上所有的包都会被截获

例子TCP Packets

下面就是TCP 报文的格式

src > dst : flags data-segno ack window  urgent options(MSS, 时间戳,窗口规模选项)
1. 要截获特定标志位的TCP 包:在TCP header中,有8位是控制位

CWR | ECE | URG | ACK | PSH | RST | SYN | FIN

有TCP 头的结构中

0                            15                                     31
       -------------------------------------------------------------------------
       |          source port          |       destination port      |
       -------------------------------------------------------------------------
       |                        sequence number                       |
       -------------------------------------------------------------------------
       |                     acknowledgment number                |

--------------------------------------------------------------------------
       |  HL   | rsvd  |C|E|U|A|P|R|S|F|        window size   |
       --------------------------------------------------------------------------
       |         TCP checksum          |       urgent pointer    |
       --------------------------------------------------------------------------

8为控制位是TCP头中的第13个 8-bits组

|                        |
                       |------------------------|
                       |C|E|U|A|P|R|S|F|
                       |------------------------|
                       |7     5    3        0|

当SYN位为1时

则该8-bits组的二进制表示为:00000010  -> 2
所以只截获TCP中标志位为SYN=1的表达式为
tcpdump -i 2 tcp[13]==2  
tcp[13]==2  就是让TCP数据报中的第13个8bits组的值为2

2. 如果TCP报文中带有SYN-ACK,我们认为他是带SYN的报文,那么该咋截获呢

|                        |
                       |------------------------|
                       |C|E|U|A|P|R|S|F|
                       |------------------------|
                       |7     5    3        0|

此时该8bits组的二进制表示为 00010010 ->18

此时应该不是 tcp[13] == 18,这样只能截获ACK-SYN报文,而不能再截获SYN报文啦,这时我们应该要维持SYN所在位的值,可以用上逻辑与运算,即如下

‘tcp[13] & 2 == 2' ,就可以啦

注意:下面截图的TCP报文的第二条的标志位 [S.]

UDP Packets

UDP 报文的格式为

actibude.who > broadcast.who : udp 84

who 为端口号,artinide,broadcast都是主机的网络地址, 84为UDP数据报的大小

UDP name Server Requests

请求报文的格式为

src > dst : id op? flags qtype qclass name(len)

h2opolo.1538 > helios.domain : 3+ A? ucbvax.berkeley.edu (37)

主机hopolo询问主机helios上的domain服务的地址记录(qtype=A),该机路与ucbvax.berkeley,edu相关联

查询id为3,‘+'表明 recursion-desired flag 被设置,query的长度为37字节,没有包括UDP与IP的头长度

UDP Name Server Responses
src > dst : id op rcode flags a/n/au type class data(len)
 helios.domain > h2opolo.1538 : 3 3/3/7 A 128.32.137.3 (273)

该报文是helios响应来自h2opolo的query id 为3,且带有3个answer record,3 个name server records 和 7 个additional records

第一个 answer record 是type A ,它数据的大小为273字节,包括UDP和IP报文头

(0)

相关推荐

  • Linux tcpdump命令详解大全

    简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的"头"完全截获下来提供分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.not等逻辑语句来帮助你去掉无用的信息. 实用命令实例 默认启动 tcpdump 普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包. 监视指定网络接口的数据包 tcpdu

  • Linux中tcpdump命令实例详解

    前言 tcpdump是一款类Unix/Linux环境下的抓包工具,允许用户截获和显示发送或收到的网络数据包. tcpdump可以将网络中传送的数据包的"头"完全截获下来提供分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.not等逻辑语句来帮助你去掉无用的信息.tcpdump 是一个在BSD许可证下发布的自由软件. 下面这篇文章将给大家详细介绍关于Linux中tcpdump命令的相关内容,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍吧. 一.命令格

  • linux使用tcpdump命令监视指定网络数据包的方法

    打印本地主机与Berkeley网络上的主机之间的所有通信数据包(nt: ucb-ether, 此处可理解为'Berkeley网络'的网络地址,此表达式最原始的含义可表达为: 打印网络地址为ucb-ether的所有数据包) 复制代码 代码如下: tcpdump net ucb-ether 打印所有通过网关snup的ftp数据包(注意, 表达式被单引号括起来了, 这可以防止shell对其中的括号进行错误解析) 复制代码 代码如下: tcpdump 'gateway snup and (port ft

  • Linux tcpdump操作命令详解

    简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的"头"完全截获下来提供分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.not等逻辑语句来帮助你去掉无用的信息. 实用命令实例 默认启动 复制代码 代码如下: tcpdump 普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包. 监视指定网络接

  • Linux tcpdump命令的用法详细解析

    英文原意是dump traffic on a network ,即截获网络上的数据报,可以根据指定的网络接口来截获不同的数据报.它会输出在某个网络接口上符合匹配表达式的报内容的描述.当tcpdump完成抓包后,会打印出类似下面的内容: 9 packets captured56 packets received by filter17 packets dropped by kernel 当然,在读取网络上的数据包时,得需要特权,比如linux上的超级用户 tcpdump用法 tcpdump -A

  • linux mount命令的用法详细解析

    挂接命令(mount)首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的.命令格式:mount [-t vfstype] [-o options] device dir其中: 1.-t vfstype 指定文件系统的类型,通常不必指定.mount 会自动选择正确的类型.常用类型有:光盘或光盘镜像:iso9660DOS fat16文件系统:msdosWindows 9x fat32文件系统:vfatWindows NT ntfs文件系统:ntf

  • linux中uptime命令的用法详细解析

    系统中的uptime命令主要用于获取主机运行时间和查询linux系统负载等信息.uptime命令可以显示系统已经运行了多长时间,信息显示依次为:现在时间.系统已经运行了多长时间.目前有多少登陆用户.系统在过去的1分钟.5分钟和15分钟内的平均负载. uptime命令用法十分简单:直接输入uptime即可.另外还有一个参数  -V ,是用来查询版本的. (注意是大写的字母v)[linux @ localhost]$ uptime –Vprocps version 3.2.7[linux @ loc

  • Linux top命令的用法详细详解

    查看多核CPU命令mpstat -P ALL  和  sar -P ALL 说明:sar -P ALL > aaa.txt   重定向输出内容到文件 aaa.txt top命令经常用来监控linux的系统状况,比如cpu.内存的使用,程序员基本都知道这个命令,但比较奇怪的是能用好它的人却很少,例如top监控视图中内存数值的含义就有不少的曲解. 本文通过一个运行中的WEB服务器的top监控截图,讲述top视图中的各种数据的含义,还包括视图中各进程(任务)的字段的排序. top进入视图 top视图

  • Linux crontab 命令格式与详细示例(推荐)

    基本格式 : * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 第4列表示月份1-12 第5列标识号星期0-6(0表示星期天) 第6列要运行的命令 crontab文件的一些例子: 30 21 * * * /usr/local/etc/rc.d/lighttpd restart 上面的例子表示每晚的21:30重启apache. 45 4 1,10,22 * * /usr/l

  • nginx命令参数用法详细介绍

    nginx命令参数用法详细介绍 nginx命令:启动nginx 在Windows上安装好nginx后,我们需要启动nginx服务,启动nginx服务的命令行操作主要有两种方式,即 C:/nginx-0.8.53>nginx.exe 或者 C:/nginx-0.8.53>start nginx 启动nginx命令说明:需要注意,由于nginx默认端口也是80端口,如果此时你的机器上开启了Apache或者IIS服务,切忌在启动nginx之前务必关闭IIS或Apache服务,否则nginx启动命令不

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

    vi/vim介绍 它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面. 1.vi和vim的区别: 就是在进入一般命令模式后,当按下(i.I.o.O.a.A.r.R)等任何一个字母,之后就会今入编辑模式.此时就可以进行文本编辑了. 在一般命令模式中,输入(:/ ?)三个中任何一按键就进入了指令命令模式.在这个模式中,可以进行读取.存盘.大量取代字符.离开vi.显示行号等功能. vi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当

  • linux vi命令知识点用法总结

    linux vi命令详解 vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里介绍一下它的用法和一部分指令. 由于 对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它.Vi也是Linux中最基本的文本编辑器,学会它后,您将在Linux的世界里畅行无阻. 1.vi的基本概念 基本上vi可以分为三种状态,分别是命令模式(command mode).插入模式(Insert mode)和底行模式(la

  • Linux IPC命令的用法详解

    进程间通信概述 进程间通信有如下的目的:1.数据传输,一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M之间: 2.共享数据,多个进程想要操作共享数据,一个进程对数据的修改,其他进程应该立刻看到: 3.通知事件,一个进程需要向另一个或一组进程发送消息,通知它们发生了某件事情: 4.资源共享,多个进程之间共享同样的资源.为了做到这一点,需要内核提供锁和同步机制: 5.进程控制,有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和

随机推荐