tcpdump 的使用:
选项:
-A 用ASCII打印出每个包
-q 快速输出。打印较少的协议信息,所以输出线短。
-a 将网络地址和广播地址转变成名字;
-d 将匹配信息包的代码以人们能够理解的汇编格式给出;
-dd 将匹配信息包的代码以c语言程序段的格式给出;
-ddd 将匹配信息包的代码以十进制的形式给出;
-e 在输出行打印出数据链路层的头部信息;
-f 将外部的Internet地址以数字的形式打印出来;
-l 使标准输出变为缓冲行形式;
-n 不把网络地址转换成名字;
-t 在输出的每一行不打印时间戳;
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
-vv 输出详细的报文信息;
-c 在收到指定的包的数目后,tcpdump就会停止;
-F 从指定的文件中读取表达式,忽略其它的表达式;
-i 指定监听的网络接口;
-r 从指定的文件中读取包(这些包一般通过-w选项产生);
-w 直接将包写入文件中,并不分析和打印出来;
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议
Capture Filters
语法: <协议名> <方向> <Host(s)> <value> <逻辑操作符> <表达式>
例子:
1. tcp src port 443 # 只抓取来源端口是443的tcp数据
2. not arp # 不获取arp数据
3. port 80 # 获取端口是80的数据,不指定代表都获取
4. src 192.168.1.121 and port 233 # 获取来源是192.168.1.121端口是233的数据
怎么看待<逻辑操作符>:
1. <协议名> <方向> <Host(s)> <value> 当作一个表达式 <Expression>
2. <逻辑操作符> 是链接多个表达式的.
3. <表达式1> <逻辑操作符> <表达式2> <逻辑操作符> <表达式3> ...
Display Filter: (注意点.)
语法: <协议>.<string1>.<string2>.<比较操作符><value> <逻辑操作符> <表达式>
例子:
1. tcp.port==80 # 显示端口是80的tcp数据
2. !arp # 不展示ARP协议的数据
3. ip.addr==192.168.1.111 # 只显示地址是192.168.1.111的数据,不论来源还是目标地址
4. (ip.dst==42.156.152.144) && !(ip.dst==42.156.152.144)
tcpdump 简单命令:
命令说明: tcpdump [选项] [表达式]
选项:
-A 显示每个包的ASCII码。用于抓取web页面。
-q 快速输出。打印较少的协议信息。
-i 监听的接口。(any, eth0, eth1等)
-w 写原始数据包到文件,不做解析和打印
表达式:
类型: host, net, port
传输方向: src, dst
协议: fddi, ip, arp, rarp, tcp, udp
逻辑运算: not/!, and/&&, or/||
使用例子:
# 以ASCII码方式显示:主机为:pop3.sina.net 并且 端口为:110 的内容
tcpdump -A -q -s0 -i any host pop3.sina.net and port 110
# 抓取 与 10.123.34.0/24 段 并且 端口为: 3301 的所有读写原始数据,并写到文件: ./output.cap 中
tcpdump net 10.123.34.0/24 and port 3301 -w ./output.cap
Wireshark 的使用:
1. 使用wireshark打开output.cap文件
2. 使用右键---Follow TCP Stream 可以查看当前的会话信息。(因为抓到的包会有好多个会话信息)
通过 info 列来过滤:
http contains "GET / foo.cgi?a=bar"
smtp contains "kyosold@qq.com"
frame contains "GET / foo.cgi?a=bar"
# 查找解析 verabcd.com 的mx
# dns的域名是按点分开查询的:
dns contains "verabcd" && dns contains "com"
info 列不是一个普通的字段,因此它是不能被过滤的。但是 info 列字段的信息是高层协议的摘要,因此你可以使用协议字段去过滤。
TCP层几个常用字段标识说明:
SYN 表示建立连接
FIN 表示关闭连接
ACK 表示响应
PSH 表示有 DATA数据传输
RST 表示连接重置
报文中的几个字段说明:
seq: 数据包序列号
ack: 应答号,告诉对端期望下一个报文的序列号
len: 本端发送的数据长度
win: 本端可用缓冲大小,对端根据此大小调整发送报文大小
基本就是:
A -------- seq:seqA, ack:ackA, len:lenA ------> B (发送数据)
A <------ seq:ackA, ack:(seqA+lenA), len:0 ----- B (ACK 应答)
A <------ seq:ackA, ack:(seqA+lenA), len:lenB ----- B (250 ok\r\n)
例子:
Protocol Seq Ack Len
A ---> B TCP [SYN] 0 0 0
A <--- B TCP [SYN, ACK] 0 1 0
A ---> B TCP [ACK] 1 1 0
A <--- B SMTP 1 1 53 # S: 220 mx.google.com ESMTP...
A ---> B TCP [ACK] 1 54 0
A ---> B SMTP 1 54 11 # C: helo sina\r\n
A <--- B TCP [ACK] 54 12 0
A <--- B SMTP 54 12 35 # S: 250 mx.google.com at...
A ---> B TCP [ACK] 12 89 0
A ---> B SMTP 12 89 29 # C: mail from:<kyosold@si...
A <--- B TCP [ACK] 89 41 0
A <--- B SMTP 89 41 42 # S: 250 2.1.0 OK zq1si40...
A ---> B TCP [ACK] 41 131 0
A ---> B SMTP 41 131 29 # C: rcpt to:<kyosold@gmail...
A <--- B TCP [ACK] 131 70 0
A <--- B SMTP 131 70 42 # S: 250 2.1.5 OK zq1si4068...
A ---> B TCP [ACK] 70 173 0
A ---> B SMTP 70 173 6 # C: data\r\n
A <--- B TCP [ACK] 173 76 0
A <--- B SMTP 173 76 43 # S: 354 Go ahead zq1si406...
A ---> B TCP [ACK] 76 216 0
A ---> B SMTP 76 216 15 # C: DATA fragment, 15 bytes
A <--- B TCP [ACK] 216 91 0
A ---> B SMTP 91 216 48 # C: DATA fragment, 48 bytes
A <--- B TCP [ACK] 216 139 0
A ---> B SMTP 139 216 2 # C: DATA fragment, 2 bytes
A <--- B TCP [ACK] 216 141 0
A ---> B SMTP 141 216 6 # C: DATA fragment, 6 bytes
A <--- B TCP [ACK] 216 141 0
A ---> B IMF 147 216 3 # subject: test, from ....
A <--- B TCP [ACK] 216 150 0
A <--- B SMTP 216 150 53 # S: 250 2.0.0 OK 14465...
A ---> B TCP [ACK] 150 269 0
A ---> B SMTP 150 269 6 # C: quit\r\n
A <--- B TCP [ACK] 269 156 0
A <--- B SMTP 269 156 58 # S: 221 2.0.0 closing conn...
A ---> B TCP [ACK] 156 327 0
A <--- B TCP [FIN, ACK] 327 156 0
A ---> B TCP [FIN, ACK] 156 328 0
A <--- B TCP [ACK] 328 157 0
TCP传输通信时的几个状态:
1. TCP Previous segment lost: 它告诉发送方数据段丢失;
2. TCP Dup ACK XXXX#X : 代表了数据段丢失TCP状态,XXXX代表数据丢失的位置,#后代表第几次丢失;
3. TCP Retransmission: 代表重发丢失数据
4. TCP Window Update: 是TCP通信中的一个状态,它可以发生的原因有很多,但最终归结于发送者传输数据的速度比接收者读取的数据还快,这使得接受端的在缓冲区必须释放一部分空间来装发送过来的数据,然后向发送者发送Windows Update,告诉给发送者应该以多大的速度发送数据,从而使得数据传输与接受恢复正常。
5. TCP Acked lost segment: TCP应答丢失
6. TCP Acked unseen segument: TCP看不到确认应答
7. TCP Port numbers reused: TCP端口重复使用
8. TCP Fast retransmission: TCP快速重传
9. TCP Spurious retransmission: TCP伪重传
10. TCP Keep alive:TCP保持活动