1.tcpdump工具的使用:用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的
包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提
供and、or、not等逻辑语句来帮助你去掉无用的信息。
语法:
tcpdump [ -AdDefIKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ]
[ -C file_size ] [ -G rotate_seconds ] [ -F file ]
[ -i interface ] [ -m module ] [ -M secret ]
[ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
[ -W filecount ]
[ -E spi@ipaddr algo:secret,... ]
[ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
[ expression ]
c 设定抓多少个包后自动停止 s 指定抓每个包的前多少字节(默认56字节)
w 保存到某个文件 r 读文件
v 显示更详细 n 不显示主机名,显示IP
nn 也把端口显示为数值,否则显示端口服务名 i 指定哪块网卡
host 指定某个主机 port 指定某个端口
net 指定某个网络 tcp 指定抓tcp包
udp 指定抓udp包 ip 指定抓ip包
icmp 指定抓icmp包 src host 指定源主机
dst host 指定目的主机 dst port 指定目的端口
2.使用举例
抓164访问本地22端口的包 ,单向的
[root@stu24 ~]# tcpdump -i eth0 -n src host 192.168.0.164 and dst port 22
抓164ping本地的包
[root@stu24 ~]# tcpdump -i eth0 -n icmp and src host 192.168.0.164
当网卡工作于混杂模式里时
[root@stu24 ~]# tcpdump -i eth0 -n dst port 22 or dst port 80
两种条件一起抓
[root@stu24 ~]# tcpdump -i eth0 -n 'src host 192.168.0.164 and dst port 22' or 'src host 192.168.0.4 and dst port 80'二者等价
[root@stu24 ~]# tcpdump -i eth0 -n \(src host 192.168.0.164 and dst port 22\) or \(src host 192.168.0.4 and dst port 80\)
tcpdump -i eth0
tcpdump -i eth0 -v -n
-v 显示包含有TTL,TOS值等等更详细的信息 -n不要做IP解析为主机名 -nn不做名字解析和端口解析
更有针对性的抓包:针对IP,网段,端口,协议
[root@ ftp]# tcpdump -i eth0 -vnn host 192.168.0.154
[root@ ftp]# tcpdump -i eth0 -vnn net 192.168.0.0/24
[root@ ftp]# tcpdump -i eth0 -vnn port 22
[root@ ftp]# tcpdump -i eth0 -vnn udp
[root@ ftp]# tcpdump -i eth0 -vnn icmp
[root@ ftp]# tcpdump -i eth0 -vnn arp
[root@ ftp]# tcpdump -i eth0 -vnn ip
[root@ ftp]# tcpdump -i eth0 -vnn src host 192.168.0.154
[root@ ftp]# tcpdump -i eth0 -vnn dst host 192.168.0.154
[root@ ftp]# tcpdump -i eth0 -vnn src port 22
[root@ ftp]# tcpdump -i eth0 -vnn src host 202.106.0.254 and dst port 22
[root@ ftp]# tcpdump -i eth0 -vnn src host 192.168.0.154 or port 22
[root@ ftp]# tcpdump -i eth0 -vnn src host 192.168.0.154 and not port 22
[root@ ftp]# tcpdump -i eth0 -vnn \( src host 192.168.0.2 and dst port 22 \) or \( src host 192.168.0.65 and dst port 80 \)
[root@ ~]# tcpdump -i eth0 -vnn -r /tmp/fil1 tcp
[root@ ~]# tcpdump -i eth0 -vnn -r /tmp/fil1 host 202.106.0.258
[root@ ~]# tcpdump -i eth0 -vnn -r /tmp/fil1 tcp
[root@ ~]# tcpdump -i eth0 -vnn -w /tmp/fil1 -c 100
3.包文分析
16:50:11.916308 IP 10.37.63.3.52346 > 61.135.169.121.http: Flags [P.], seq 1888894293:1888894434, ack 2526934942, win 8192,
length 141: HTTP: GET / HTTP/1.1
第一列是时间戳:时、分、秒、微秒
第二列是网际网路协议的名称
第三列是报文发送方的十进制的网际网路协议地址,以及紧跟其后的端口号(偶尔会是某个协议名如 http ,如果在此处仍然显示端口号加上 -n 选项)
第四列是大于号
第五列是报文接收方的十进制的网际网路协议地址,以及紧跟其后的端口号(偶尔会是某个协议名如 http ,如果在此处仍然显示端口号加上 -n 选项)
第六列是冒号
第七列是 Flags 标识,可能的取值是 [S.] [.] [P.] [F.]
第八、九、十……列 是tcp协议报文头的一些变量值:
seq 是 请求同步的 序列号
ack 是 已经同步的 序列号
win 是 当前可用窗口大小
length 是 tcp协议报文体的长度
如果加入了-S选项,会看到的 seq, ack 是 两个冒号分割的值,分别表示变更前、后的值。
每一行中间都有这个包所携带的标志:
S=SYN,发起连接标志。 P=PUSH,传送数据标志。 F=FIN,关闭连接标志。ack,表示确认包。RST=RESET,异常关闭连接。
.,表示没有任何标志。
4.linux(tcpdump抓包)和windows(wireshark分析)配合抓包分析。
tcpdump 与wireshark
Wireshark(以前是ethereal)是Windows下非常简单易用的抓包工具。但在Linux下很难找到一个好用的图形化抓包工具。
还好有Tcpdump。我们可以用Tcpdump + Wireshark 的完美组合实现:在 Linux 里抓包,然后在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
(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)分析
步骤:
1)启动8080端口,tcpdump抓包命令如下:
tcpdump -i lo0 -s 0 -n -S host 10.37.63.3 and port 8080 -w ./Desktop/tcpdump_10.37.63.3_8080_20160525.cap
# 然后再执行curl
curl http://10.37.63.3:8080/atbg/doc
2)使用Wireshark打开tcpdump_10.37.63.3_8080_20160525.cap文件
wireshark请参考:https://www.cnblogs.com/shenpengyan/p/5912567.html