博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tcpdump重要笔记
阅读量:7251 次
发布时间:2019-06-29

本文共 1437 字,大约阅读时间需要 4 分钟。

无关痛痒的參数就不写了。仅仅说一些我觉得值得注意的。

1 tcpdump參数

    -s 最早在公司旧机器上截包时发现总是不完整,于是知道了这个參数,之后就一直用-s0了。近期一次在家里,忘记输入-s发现包居然还是完整的,赶紧用man查询了下,人家说的非常明确缺省值是“65535 bytes”,这下把我搞蒙了。终于才发现,原来至少在4.1之后的tcpdump使用的缺省值都是65535了,公司的tcpdump是3.9缺省值是96字节。所以如今网上资料里普遍提到的"默认tcpdump抓包限制大小在96个byte"是非常古老的说法了,至少在2012年的版本号里,其缺省值已经变成65535。

    -l 仅仅有在使用管道或者输出重定向会用到它,在这样的情况下必须加上这个參数,它能保每行内容都会被及时输出给后端。

    -w 保存成文件,尽管直接使用输出重定向">"也能够输出到文件,可是要注意,-w才干正确的保存成二进制格式,也就是wireshark能够查看的格式,而输出重定向仅仅是保存了16进制的文本。

    -X 要看每一个包的16进制内容就必须使用这个參数,多数时候我都须要这个參数。

    -i 指定网络接口,也就是ifconfig看到的最左面的名字“eth0, eth1, lo”,注意这个參数假设不加不代表抓取全部的接口,而是使用列表里最小的那个,最小的往往都不是我们希望使用的那个,所以这个參数差点儿也是必须的。

2 tcpdump表达式

    这种表达式过滤数据很方便,能够通过头部内容过滤,基本上是使用这种格式 proto[index:length] (proto是协议名不限于ip/tcp,index是以0为开头的字节数,length是从开头往后跨越的字节数),通过简单的算术运算和布尔运算,差点儿能够对不论什么条件进行筛选了。尽管能够用tcp[tcpflags] & tcp-push这种命名式写法,但个人认为还是数字然后配合ip/tcp结构图更方便,由于我怎样在不查资料的情况下知道应该写成“tcp[tcpflags] & tcp-push”还是"tcp[tcpflags] & push"呢?多了个命名就多了一个查询的步骤。附带几个样例:

//仅仅显示目的端口是20835的push包tcpdump 'tcp[13] & 8 != 0 && dst prot 20835' -i eth1 -nn -X//0x4745 为字母"GE"(GET),0x4854 为字母"HT"(HTTP),这样的方式仅仅显示HTTP相关的包(某博客学来)tcpdump "tcp[20:2]=0x4745 or tcp[20:2]=0x4854" -i eth1 -nn -X//仅仅显示有数据的包,SYN,FIN和纯粹的ACK会被过滤掉(man学来的)tcpdump "tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)" -i eth1 -nn -X

3 定位应用层数据

    这块内容在之前的文章""已经提及,要找到应用层数据的开头,注意以下3点

    1 IP头和TCP头都是可变长度,实际使用中来说,我非常少遇到IP头的选项部分,但TCP可选项常常使用。

    2 IP头的长度位于第一个字节的高地址部分,TCP头的长度位于第13个字节的低地址部分

    3 表示长度的单位都是4字节。

附图:wikipedia  

你可能感兴趣的文章
IT168:2014年APT***发展趋势及防御策略调研
查看>>
用好ul和li
查看>>
基于JQUERY的AJAX跨域问题完美解决方案
查看>>
搭建LVS+Keepalived高可用负载均衡集群
查看>>
局域网PING不通原因是什么?解决ping不通局域网电脑
查看>>
泄露们事件
查看>>
springmvc提交带日期的表单400
查看>>
我的友情链接
查看>>
使用Python socket获取本机ip
查看>>
java 简单的加解密操作
查看>>
qmake 之 CONFIG 与 QT 乱谈
查看>>
ExtJS 创建动态加载树
查看>>
我的友情链接
查看>>
tensorflow入门简单卷积神经网络
查看>>
我的友情链接
查看>>
the dude 使用教程和一点感觉
查看>>
Spring4+Hibernate4 注解整合配置
查看>>
螺旋数字程序
查看>>
Pyhton 第九章 正则表达式
查看>>
mysql主从配置
查看>>