期末重点
1.过滤器:区分显示过滤器和捕获过滤器;表达式写监听端口和报文.
2.嗅探:通过集线器,交换机或其他设备进行嗅探;以及嗅探器的位置;网卡可以进行嗅探的原因(混杂模式).
3.网络协议分析:IP头,TCP报文结构,各种网络协议报头域功能,ARP,IP,ICMP,三次握手四次挥手,DNS,HTTP.
4.实验报文的分析:查看实验报告进行分析.
过滤器
wireshark过滤器分为两种,显示过滤器和捕获过滤器。显示过滤器指的是针对已经捕获的报文,过滤出符合过滤规则的报文;捕获过滤器指的是提前设置好过滤规则,只捕获符合过滤规则的报文。
为什么wireshark使用两套过滤器规则呢?原因在于wireshark使用winpcap或者libpcap第三方的报文捕获库来对网卡的报文进行捕获,因此捕获过滤器就沿用了这些第三方库提供的捕获过滤出规则。但是对于已经捕获报文的解析和处理,wireshark本身构建了一套新的过滤规则,显示过滤器。
捕捉过滤器(CaptureFilters):用于决定将什么样的信息记录在捕捉结果中。需要在开始捕捉前设置。
显示过滤器(DisplayFilters):在捕捉结果中进行详细查找。他们可以在得到捕捉结果后随意修改。
显示过滤器比之捕获过滤器要强大许多,在报文分析的过程中经常使用到,因此有必要了解下。
1.过滤特定端口的报文:tcp.port eq 80 , 不管端口是源端口还是目的端口都显示,因此如果是过滤源端口,则是tcp.srcport eq 80;如果是目的端口,则是tcp.dstport eq 55332 这种形式。
2.长度过滤:过滤具有有效载荷的tcp报文,规则为tcp.len >0,表示tcp生成没有数据。如果是UDP报文则是形如udp.length = = 26 ,这个长度是指udp本身固定长度8加上udp下面那块数据包之和。如果想过滤IP长度则是 ip.len = = 94 形式,表示除了以太网头固定长度14,其它都算是ip.len,即从ip本身到报文末尾的总长度。frame.len = = 119 表示整个数据包长度,从eth开始到报文末尾的总长度。
上述是体现wireshark显示过滤器优秀的地方,不止能够过滤协议的定义字段,例如udp.length ;还提供了额外丰富的字段供使用,比如tcp.len。关于比较字符的使用罗列如下:
eq,== 等于
ne,!= 不等于
gt,> 比…大
lt,< 比…小 ge,>= 大于等于
le,<= 小于等于
4.如果过滤源IP的数据报文:ip.src eq 192.168.1.107 ,目的则是形如ip.dst eq 192.168.1.107 ,不区分源和目的则是ip.addr eq 192.168.1.107 。MAC层地址的过滤是同样的道理。
5.过滤包含特定字符串域名的报文,形如http.host contains “moe”。
8.多个过滤条件的使用,例如同时满足http以及且端口为80的过滤规则 http && tcp.port == 80,关于组合符号有and&& 且 or,||,或 not,! 取反这几种。
9.查询数据包的内容,可以使用ctrl + F直接搜索,也可以使用规则:
例如判断UDP的数据部分三个字节是否等于0x20 0x21 0x22,规则为udp[8:3]= =20:21:22,表示偏移8个bytes,再取3个数,是否与= =后面的数据相等。如果判断TCP数据包的前三个字节是否等于0x20 0x21 0x22,则是tcp[20:3]= =20:21:22,tcp一般情况下,头部长度为20,但也有不是20的时候,如果想得到最准确的,应该先知道tcp长度。
具体规则是:
tcp[20]表示从20开始,取1个字符
tcp[20:]表示从20开始,取1个字符以上
tcp[20:8]表示从20开始,取8个字符
捕获过滤器
罗列一些简单的示例:
1.过滤指定端口规则:port 80
2.过滤指定IP规则:host 192.168.0.115
3.过滤指定域名规则:host www.example.com
可以看到捕获过滤器的规则是host 192.168.0.115 and tcp port 8080,而对应的显示过滤器规则是ip.addr eq 192.168.0.115 and tcp.port eq 8080,两者的语法还是不同的.
常见用显示过滤需求及其对应表达式
数据链路层:
筛选mac地址为04:f9:38:ad:13:26的数据包----eth.src == 04:f9:38:ad:13:26
筛选源mac地址为04:f9:38:ad:13:26的数据包----eth.src == 04:f9:38:ad:13:26
网络层:
筛选ip地址为192.168.1.1的数据包----ip.addr == 192.168.1.1
筛选192.168.1.0网段的数据---- ip contains “192.168.1”
筛选192.168.1.1和192.168.1.2之间的数据包----ip.addr = = 192.168.1.1 && ip.addr = = 192.168.1.2
筛选从192.168.1.1到192.168.1.2的数据包----ip.src = = 192.168.1.1 && ip.dst = = 192.168.1.2
传输层:
筛选tcp协议的数据包----tcp
筛选除tcp协议以外的数据包----!tcp
筛选端口为80的数据包----tcp.port == 80
筛选12345端口和80端口之间的数据包----tcp.port = = 12345 && tcp.port = = 80
筛选从12345端口到80端口的数据包----tcp.srcport = = 12345 && tcp.dstport = = 80
应用层:
特别说明----http中http.request表示请求头中的第一行(如GET index.jsp HTTP/1.1),http.response表示响应头中的第一行(如HTTP/1.1 200 OK),其他头部都用http.header_name形式。
筛选url中包含.php的http数据包----http.request.uri contains “.php”
筛选内容包含username的http数据包----http contains “username”
wireshark捕捉过滤器和显示过滤器规则