2、tcp-fin, tcp-syn, tcp-rst, tcp-push, tcp-ack, tcp-urg 这些同样可以理解为别名常量 , 分别代表 1 , 2 , 4 , 8 , 16 , 32 , 64 。 这些数字是如何计算出来的呢?以 tcp-syn 为例 , 你可以参照下面这张图 , 计算出来的值 是就是 2
本文插图
由于数字不好记忆 , 所以一般使用这样的“别名常量”表示 。 因此当下面这个表达式成立时 , 就代表这个包是一个 syn 包 。 tcp[tcpflags] == tcp-syn要抓取特定数据包 , 方法有很多种 。 下面以最常见的 syn包为例 , 演示一下如何用 tcpdump 抓取到 syn 包 , 而其他的类型的包也是同样的道理 。 据我总结 , 主要有三种写法:1、第一种写法:使用数字表示偏移量$ tcpdump -i eth0 "tcp[13] & 2 != 0" 2、第二种写法:使用别名常量表示偏移量$ tcpdump -i eth0 "tcp[tcpflags] & tcp-syn != 0" 3、第三种写法:使用混合写法$ tcpdump -i eth0 "tcp[tcpflags] & 2 != 0"# or$ tcpdump -i eth0 "tcp[13] & tcp-syn != 0" 如果我想同时捕获多种类型的包呢 , 比如 syn + ack 包1、第一种写法$ tcpdump -i eth0 'tcp[13] == 2 or tcp[13] == 16'2、第二种写法$ tcpdump -i eth0 'tcp[tcpflags] == tcp-syn or tcp[tcpflags] == tcp-ack'3、第三种写法$ tcpdump -i eth0 "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0" 4、第四种写法:注意这里是 单个等号 , 而不是像上面一样两个等号 , 18(syn+ack) = 2(syn) + 16(ack)$ tcpdump -i eth0 'tcp[13] = 18'# or$ tcpdump -i eth0 'tcp[tcpflags] = 18'tcp 中有 类似 tcp-syn 的别名常量 , 其他协议也是有的 , 比如 icmp 协议 , 可以使用的别名常量有icmp-echoreply, icmp-unreach, icmp-sourcequench, icmp-redirect, icmp-echo, icmp-routeradvert,icmp-routersolicit, icmp-timx-ceed, icmp-paramprob, icmp-tstamp, icmp-tstampreply,icmp-ireq, icmp-ireqreply, icmp-maskreq, icmp-maskreply5.2 基于包大小进行过滤若你想查看指定大小的数据包 , 也是可以的$ tcpdump less 32 $ tcpdump greater 64 $ tcpdump <= 1285.3 根据 mac 地址进行过滤例子如下 , 其中 ehost 是记录在 /etc/ethers 里的 name$ tcpdump ether host [ehost]$ tcpdump ether dst [ehost]$ tcpdump ether src [ehost]5.4 过滤通过指定网关的数据包$ tcpdump gateway [host]5.5 过滤广播/多播数据包$ tcpdump ether broadcast$ tcpdump ether multicast$ tcpdump ip broadcast$ tcpdump ip multicast$ tcpdump ip6 multicast【CSDN|肝了三天,万字长文教你玩转 tcpdump,从此抓包不用愁】
如何抓取到更精准的包?先给你抛出一个问题:如果我只想抓取 HTTP 的 POST 请求该如何写呢?如果只学习了上面的内容 , 恐怕你还是无法写法满足这个抓取需求的过滤器 。 在学习之前 , 我先给出答案 , 然后再剖析一下 , 这个过滤器是如何生效的 , 居然能让我们对包内的内容进行判断 。 $ tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4]'命令里的可选参数 , 在前面的内容里已经详细讲过了 。 这里不再细讲 。 本节的重点是引号里的内容 , 看起来很复杂的样子 。 将它逐一分解 , 我们只要先理解了下面几种用法 , 就能明白
tcp[n]:表示 tcp 报文里 第 n 个字节
tcp[n:c]:表示 tcp 报文里从第n个字节开始取 c 个字节 , tcp[12:1] 表示从报文的第12个字节(因为有第0个字节 , 所以这里的12其实表示的是13)开始算起取一个字节 , 也就是 8 个bit 。 查看 tcp 的报文首部结构 , 可以得知这 8 个bit 其实就是下图中的红框圈起来的位置 , 而在这里我们只要前面 4个bit , 也就是实际数据在整个报文首部中的偏移量 。
推荐阅读
-
【二三里资讯西安】平台竟不能提供运输证,西安小伙通过悟空出行全款购车
-
-
-
邓家佳:邓家佳18年前演的这部剧,看过的人不少,能认出她的人却不多!
-
小月阳解说黄金卖鞋,钻石卖冰心,王者:都学着点,铠皇6神之后卖啥暴露段位
-
-
减肥不吃饭只喝水和运动,我的体重降下来了,知道这些后我后悔了
-
-
#李湘#李湘穿绿裙更显皮肤白皙,微胖身材也挡不住好气质,高级感十足
-
直击全国多地开学首日:课后服务能满足学生、家长的需求吗
-
-
《破冰行动》-1小配角的性能已损坏,整个过程没有线条
-
-
-
【】大连即日起将全面开展核酸检测工作,财政承担费用
-
清末|年轻人的《古玩》成北京人艺跨年大戏,看清末民初买卖人何如做生意
-
小娱聊娱乐|你知道他们么?,盘点那些80后演技好的女演员
-
-
ROM乐园TB|Phone一代手机ZS600KL获取完美root详细刷机教程,华硕ROG
-
『游戏主』LPL教练正在大换血,弱队教练几乎基本都会换,Doinb直播透露