1. tcpdump 命令详解
1.1 tcpdump 命令的基本简介
- tcpdump :dump the traffic on a network 根据使用者的定义对网络上的数据包进行截获的分析工作;tcpdump 可以讲网络中传送的数据包的header完全截获下来进行分析;它支持对网络层(net IP 段)、协议(TCP/UDP)、主机(src/dst host)、网络或端口(prot)的过滤,并提供and、or、not 等逻辑语句来帮助你去掉无用的信息。
- tcpdump:默认情况下,sudo /usr/sbin/tcpdump 会监视 第一个网络接口 一般是eth0 的所有port 所有协议的 数据包
1.2 tcpdump 的主要选项
协议 | TCP,UDP,IP,ARP,RARP,ETHER,FDDI |
网络(net) | 192.168.0.0/16 IP网段 |
方向(host) | src,dst,src or dst,src and dst |
端口(prot) | 80 22 !22 9999 |
逻辑 | and,or,not &&,||,! |
- 协议:tcp udp ip arp rarp ether fddi 协议这选项要放在 前面,因为要过滤数据包
- 网络:net ip网段 tcpdump net 192.168.1.0/24 监听这个网段
- 方向:host 就是主机 src 是源主机、dst 是目的主机 or and 是逻辑 tcpdump host test.hostname
- 端口:port 指定tcpdump 监听的端口 tcpdump src 192.168.1.11 and port 80 监听源IP是192.168.1.11 的80端口
- 逻辑:是表示 与 或 即:同时满足或满足之一
前面的四个选项:协议、net 、host、port 如果同时在 tcpdump 里面 时必须用 逻辑 and 连接起来;而且如用() 一定要转义,否则会包语法错误。
2. tcpdump 的选项
2.1 主要选项
• -i :指定网卡 默认是 eth0
• -n :线上ip,而不是hostname
• -c :指定抓到多个包后推出
• -A:以ASCII方式线上包的内容,这个选项对文本格式的协议包很有用
• -x:以16进制显示包的内容
• -vvv:显示详细信息
• -s :按包长截取数据;默认是60个字节;如果包大于60个字节,则抓包会出现丢数据;所以我们一般会设置 -s 0 ;这样会按照包的大小截取数据;抓到的是完整的包数据
• -r:从文件中读取【与 -w 对应,/usr/sbin/tcpdump -r test.out 读取 tcpdump -w test.out】
• -w:到处指向文件【一定要用,-w t.out ,然后用 -r t.out 来看抓包信息,否则可读性很差】
使用:
tcpdump -w google.cap #抓包结果存放在文件中
tcpdump -r google.cap http #还可以使用-r参数制定抓包数据文件
tcpdump -i eth1 #使用-i参数指定通过哪一个网卡抓包
tcpdump -D #查看哪几个网卡抓包
2.2 tcpdump 抓包的具体含义
tcpmdump 抓包出来分析包的具体含义
1. 包携带的标志:
• S:S=SYC :发起连接标志
• P:P=PUSH:传送数据标志
• F:F=FIN:关闭连接标志
• ack:表示确认包
• RST=RESET:异常关闭连接
• . 表示没有任何标志
3. tcpdump的实例:
• 起步1: 抓取指定端口的包
tcpdump -i eth0 -c 100• 起步2:抓取指定协议的包
tcpdump -i eth0 -c 100 tcp• 起步3:抓取指定协议,指定port的包【tcp ip port src dst host net】
tcpdump -i eth0 -c 100 tcp port 5440• 起步4:组合过滤条件【and or not】
tcpdump -i eth0 -c 100 tcp port 5440 and src host 192.1.1.2• 起步5:抓取指定网段的包
tcpdump -i eth0 -c 100 tcp port 5440 and src net 192.1.1.0/24• 高级1:写入文件并用wireshark在windows下分析
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
然后用ftp传输到windows下面,在用wireshark打开cap文件即可• 高级2:提取http包
tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854 -c 20 -w ./target.cap
其中-s 0表示不限制包的大小;tcp[20:2]从表示tcp包头第20个字节开始的2个字节等于0x4745(对应字符GE)或者等于0x4854(对应HT);
这种方法适用于tcp头中OPTION为空的情况,如果不为空,需要从第24个字节开始。 基本语法 ========
过滤主机
--------
- 抓取所有经过 eth1,目的或源地址是 192.168.1.1 的网络数据
# tcpdump -i eth1 host 192.168.1.1
- 源地址
# tcpdump -i eth1 src host 192.168.1.1
- 目的地址
# tcpdump -i eth1 dst host 192.168.1.1
过滤端口
--------
- 抓取所有经过 eth1,目的或源端口是 25 的网络数据
# tcpdump -i eth1 port 25
- 源端口
# tcpdump -i eth1 src port 25
- 目的端口
# tcpdump -i eth1 dst port 25网络过滤
--------
# tcpdump -i eth1 net 192.168
# tcpdump -i eth1 src net 192.168
# tcpdump -i eth1 dst net 192.168
协议过滤
--------
# tcpdump -i eth1 arp
# tcpdump -i eth1 ip
# tcpdump -i eth1 tcp
# tcpdump -i eth1 udp
# tcpdump -i eth1 icmp
注意:在linux抓取包后用tcpdump -r 只能看到包的简单信息;如果需要查询抓取包的详细信息需要把抓取的包target.cap 通过 ftp服务器传输到windows机器上;借助wireshark工具来分析数据;wireshark是一款开源的分析网络抓包的工具;灰常的好用。