CSDN|肝了三天,万字长文教你玩转 tcpdump,从此抓包不用愁( 四 )

4.7 过滤指定网卡的数据包

  • -i:指定要过滤的网卡接口 , 如果要查看所有网卡 , 可以 -i any
4.8 过滤特定流向的数据包
  • -Q:选择是入方向还是出方向的数据包 , 可选项有:in, out, inout , 也可以使用 --direction=[direction] 这种写法
4.9 其他常用的一些参数-s : tcpdump 默认只会截取前 96 字节的内容 , 要想截取所有的报文内容 , 可以使用 -s numbernumber 就是你要截取的报文字节数 , 如果是 0 的话 , 表示截取报文全部内容 。 -S : 使用绝对序列号 , 而不是相对序列号
-C:file-size , tcpdump 在把原始数据包直接保存到文件中之前, 检查此文件大小是否超过file-size. 如果超过了, 将关闭此文件,另创一个文件继续用于原始数据包的记录. 新创建的文件名与-w 选项指定的文件名一致, 但文件名后多了一个数字.该数字会从1开始随着新创建文件的增多而增加. file-size的单位是百万字节(nt: 这里指1,000,000个字节,并非1,048,576个字节, 后者是以1024字节为1k, 1024k字节为1M计算所得, 即1M=1024 * 1024 = 1,048,576)
-F:使用file 文件作为过滤条件表达式的输入, 此时命令行上的输入将被忽略.
4.10 对输出内容进行控制的参数
  • -D : 显示所有可用网络接口的列表
  • -e : 每行的打印输出中将包括数据包的数据链路层头部信息
  • -E : 揭秘IPSEC数据
  • -L :列出指定网络接口所支持的数据链路层的类型后退出
  • -Z:后接用户名 , 在抓包时会受到权限的限制 。 如果以root用户启动tcpdump , tcpdump将会有超级用户权限 。
  • -d:打印出易读的包匹配码
  • -dd:以C语言的形式打印出包匹配码.
  • -ddd:以十进制数的形式打印出包匹配码
过滤规则组合举个例子 , 我想需要抓一个来自10.5.2.3 , 发往任意主机的3389端口的包$ tcpdump src 10.5.2.3 and dst port 3389当你在使用多个过滤器进行组合时 , 有可能需要用到括号 , 而括号在 shell 中是特殊符号 , 因为你需要使用引号将其包含 。 例子如下:$ tcpdump 'src 10.0.2.4 and (dst port 3389 or 22)'而在单个过滤器里 , 常常会判断一条件是否成立 , 这时候 , 就要使用下面两个符号
  • =:判断二者相等
  • ==:判断二者相等
  • !=:判断二者不相等
比如我现在要过滤来自进程名为 nc 发出的流经 en0 网卡的数据包 , 或者不流经 en0 的入方向数据包 , 可以这样子写$ tcpdump "( if=en0 and proc =nc ) || (if != en0 and dir=in)"特殊过滤规则5.1 根据 tcpflags 进行过滤CSDN|肝了三天,万字长文教你玩转 tcpdump,从此抓包不用愁
本文插图
TCP 报文首部tcpdump 支持我们根据数据包的标志位进行过滤proto [ expr:size ]
  • proto:可以是熟知的协议之一(如ip , arp , tcp , udp , icmp , ipv6)
  • expr:可以是数值 , 也可以是一个表达式 , 表示与指定的协议头开始处的字节偏移量 。
  • size:是可选的 , 表示从字节偏移量开始取的字节数量 。
接下来 , 我将举几个例子 , 让人明白它的写法 , 不过在那之前 , 有几个点需要你明白 , 这在后面的例子中会用到:1、tcpflags 可以理解为是一个别名常量 , 相当于 13 , 它代表着与指定的协议头开头相关的字节偏移量 , 也就是标志位 , 所以 tcp[tcpflags] 等价于 tcp[13], 对应下图中的报文位置 。


推荐阅读