linux下使用tcpdump进行抓包

2014年12月26日 发表评论 阅读评论

tcpdump是linux下的一个抓包工具,类似于windows下的wireshark(linux也有wireshark,同样也有命令版的tshark)。本篇将从命令选项和常用过滤示例两个方面做下介绍。

一、常用参数选项

常用参数选项及说明如下:

-i 选项:表示tcpdump监听端口,如果不指定,那么会搜索所有的网络接口
~ ]# tcpdump -i ens33            # 在ens33这个网络接口监听
~ ]# tcpdump -i any               # linux 2.2以上支持 -i any,可以监听所有端口
-n 选项:不要把ip转换为主机名
~ ]#tcpdump -i ens33 -n
-w -选项,-w为把内容write到某个地方, -表示标准输出  也就是输出到标准输出中,下面是一个超级有用的命令,把包的数据,用字符展示出来。
~ ]# tcpdump -i ens33 -w - | strings
~ ]# tcpdump -w test.cap                    # 把抓包结果写入test.cap中,方便wireshark分析
-C num选项:如果test.cap 超过num大小,则新开一个文件,  -C fileSize , 单位是MB
~ ]# tcpdump  -C 1  -w test.cap
-r 选项: 从某个文件读取
~ ]# tcpdump -n -r test.cap
-X 选项:以十六进制以及ASCII的形式打印数据内容。
~ ]# tcpdump -X
~ ]# tcpdump -x     # 除了打印出header外,还打印packet里面的数据(十六进制的形式)
~ ]# tcpdump -xx   # 以十六进制的形式打印header, data内容
- A 选项,把每一个packet都用以ASCII的形式打印出来
~ ]# tcpdump -i ens33 -A host www.itshouce.com.cn
-c # 表示收到 # 个packet就退出
~ ]# tcpdump -i ens33 -A -c 3  172.18.14.55         # 接收三个包就退出
-D 选项:看目前机器上有哪些网络接口
~ ]# tcpdump -D
1.ens33
2.ens34
3.lo
-e 选项:把连接层的头打印出来
~ ]# tcpdump -i ens33 -e
-j 选项,修改时间格式
~ ]# tcpdump -i ens33 -j timestamp type          # 可以修改输出的时间格式,
~ ]# tcpdump -J
# 显示支持的时间格式 : List the supported time stamp types for the interface and exit.  If the time stamp  type  cannot  be  set  for  the interface, no time stamp types are listed。
-l 选项:把stdout bufferd住,当你既想在屏幕上看结果,又想把结果输出到文件中时,比较有用
~ ]# tcpdump -l
# 可以配合tee命令,在屏幕上显示dump内容,并把内容输出到dump.log中,如下
~ ]# tcpdump -l |tee dump.log                               # or下面这种写法
~ ]# tcpdump -l > dump.log &tail -f dump.log
-q 选项: 就是quiect output, 静默输出,尽量少的打印一些信息
~ ]# tcpdump -q
-S 选项:打印真实的,绝对的tcp seq no
~ ]# tcpdump -i ens33 -S
-s 选型:指定包大小,默认抓取包长度是65535,即68个字节
~ ]# tcpdump                    # capture sieze 65535l
~ ]# tcpdump -s  256        # 我们设置为256 该参数目的:减少抓包文件的大小
-t 选项:不要打时间戳,
~ ]# tcpdump -i ens33 -t
-tt 选项:打出timstamp,从1970-1-1 以来的秒数,以及微秒数。
~ ]# tcpdump -i ens33 -tt
-v 选项:verbose,即打印详细信息。
~ ]# tcpdump -i ens33 -v      # 打印出详细结果,如ttl值
~ ]# tcpdump -i ens33 -vv    # 打印出更加详细的结果  如window, checksum等

二、过滤示例

1、简单过滤

# 抓取192.168.199.* 网段的arp协议包,arp可以换为tcp,udp等。
~ ]# tcpudmp -i eth0 -n arp host 192.168.199
# 抓取访问destination 80端口的包
~ ]# tcpdump -i eth0 -n dst port 80
# 抓取源上端口是80的包
~ ]# tcpdump -i eth0 -n src port 80
# 抓取源或者目标端口都是80的包
~ ]# tcpdump -i eth0 -n port 80
# 表示抓取destination prot 在1到80之间的端口的数据
~ ]# tcpdump -i eth0 -n dst portrange 1-80
# 抓取端口是20-80的包,不考虑源
~ ]# tcpdump -i eth0 -n portrange 20-80
# 抓取destination为www.baidu.com的包
~ ]# tcpdump -i eth0 dst www.baidu.com
# 抓取destination为192.168.14.55的包
~ ]# tcpdump -i eth0 dst 192.168.14.55
# 抓取destination为192.168.1.[0-255]的包
~ ]# tcpdump -i eth0 dst 192.168.1    # 也可以指定范围
# 抓取source为192.168.*.*的包, 使用-n 则只是为了显示ip,而不是主机名,
~ ]# tcpdump -i eth0 -n src 192.168
# 抓取包长度小于800的包
~ ]# tcpudmp -i eth0 -n less 800
# 抓取包长度大于800的包
~ ]# tcpdump -i eth0 -n greater 800
# 只抓取tcp包
~ ]# tcpdump -i eth0 -n tcp
# 只抓取udp包
~ ]# tcpdump -i eth0 -n udp
# 只抓取icmp的包,internet控制包
~ ]# tcpdump -i eth0 -n icmp  

2、组合使用

来个复杂点的示例:

tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w target.cap
(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
(2)-i eth1 : 只抓经过接口eth1的包
(3)-t : 不显示时间戳
(4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 即为不限制抓的包的大小,就可以抓到完整的数据包
(5)-c 100 : 只抓取100个数据包
(6)dst port ! 22 : 不抓取目标端口是22的数据包
(7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
(8)-w target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析

3、组合使用及tshark配合

查看数据库执行的sql
/usr/sbin/tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | egrep -i 'SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL'
查看是哪些蜘蛛在抓取内容
/usr/sbin/tcpdump -i eth0 -l -s 0 -w - dst port 80 | strings | grep -i user-agent | grep -i -E 'bot|crawler|slurp|spider'
用tcpdump嗅探80端口的访问看看谁最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -20
tcpdump -nnvvvS -s 0 -U dst 119.37.194.35 and dst port 110 |tshark |awk '/USER|PASS/'
tcpdump -i eth1 -nnvvvS -s 0 -U|tshark -V -R oicq
tshark -i eth1 -V -R smtp
tshark -i eth1 -V -R oicq|grep "OICQ Number"




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

分类: Linux/unix/mac 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.