互联网安全建设从0到1
上QQ阅读APP看书,第一时间看更新

1.3 其他流量收集方式

除了前文所述的流量收集方式外,不得不提一下三个重要工具:tcpdump、Wireshark以及其附属工具tshark。此三款工具为网络工程师诊断网络与优化网络的必备工具,同样,安全工程师也离不开网络分析,因此有必要对这三个工具进行使用说明。

1.3.1 tcpdump

tcpdump是一款非常优秀的开源抓包程序,适合在没有图形界面的Linux服务器中使用,通过-w参数,将数据包保存成文件,再使用数据包分析工具对文件进行分析。tcpdump的完整命令格式如下:


tcpdump[-AbdDefhHIJKlLnNOpqStuUvxX#][-Bbuffer_size]
[-ccount][-Cfile_size]
[-Espi@ipaddralgo:secret,...]
[-Ffile][-Grotate_seconds][-iinterface]
[--immediate-mode][-jtstamp_type][-mmodule]
[-Msecret][--number][--print][-Qin|out|inout]
[-rfile][-ssnaplen][-Ttype][--version]
[-Vfile][-wfile][-Wfilecount][-ydatalinktype]
[-zpostrotate-command][-Zuser]
[--time-stamp-precision=tstamp_precision]
[expression]

我们简单介绍一些常用参数与表达式。

常用参数如下:

·-i:网卡名,最常用参数,标明要使用哪块网卡抓包,也可以使用-i any抓取全部网卡流量。

·-s:数字,表示要抓取数据包的大小,数字最高为262144,也可以-s 0表示不限制长度。

·-n或-nn:直接显示IP与端口,不进行反向解析,速度更快。

·-v、-vv、-vvv:输出详细度以此递增。

·-D:列出可以抓包的接口。

·-w:文件名,将捕获的数据包保存为文件名。

·-c:数字,捕获多少个数据包。

·-C:数字,捕获指定数据包大小后停止捕获。

表达式用于设置过滤条件,抓取特定的数据包,由以下一个或多个类型构成:

·类型:包括host、net、port、portrange。

·方向:包括src、dst、src or dst、src and dst等。

·协议:包括ip、tcp、udp、ether、arp等。

除以上关键字外,还可以使用less、greater、gateway以及连接词and、or、not。

tcpdump的常用命令介绍如下。

抓取IP为192.168.1.99,并且非端口为22的数据包,示例如下:


tcpdump  -i any host 192.168.1.99 and not port 22

抓取目的网络为非192.168.1.0的数据包,并不解析端口与域名,示例如下:


tcpdump not net 192.168.1.0/24  -i  any  -nn

抓一个目的地址为202.100.1.1的icmp包,示例如下:


tcpdump -i any icmp -c 1 and dst host 202.100.1.1

抓取192.168.1.5主动外连的TCP包并保存为test.cap(用于检测木马外连),示例如下:


tcpdump -i any 'tcp[tcpflags]&(tcp-syn)!=0' and src 192.168.1.5 -w test.cap

以上是一些常用的tcpdump语句,如果想要了解更多tcpdump的使用方法,可以参考官方文档https://www.tcpdump.org/manpages/tcpdump.1.html

1.3.2 Wireshark

Wireshark是一款非常优秀的开源数据包抓取与分析软件。几乎应该是每个IT人员必备的工具之一。下载安装后打开Wireshark并运行后,出现的界面如图1-7所示。

图1-7 Wireshark主界面

从上至下依次为菜单栏、主工具栏、过滤器工具栏、数据包栏、数据包协议层展示区及原始数据包。这里主要介绍一下过滤器工具及统计功能。

1.Wireshark过滤器工具

过滤器分为捕获过滤器和显示过滤器,前者与tcpdump表达式功能类似,在抓包时用于更加精确地捕获特定的数据包,后者是在显示的时候将符合条件的数据包显示出来。不过两者语法是通用的,如图1-8和图1-9所示。

图1-8 抓包时使用捕获过滤器

图1-9 显示时使用显示过滤器,也可以直接输入过滤表达式

过滤表达式由过滤项、过滤关系、过滤值三项组成,例如ip.addr==192.168.1.1。

(1)过滤项

过滤项即例子中的ip.addr,对于初学者来说,最难的便是不知道都有哪些过滤项。Wireshark的过滤项大多数为协议.协议字段,例如ip.addr、tcp.port、tcp.window_size等,也有少许为协议.协议字段.扩充字段,例如arp.src.hw_mac、tcp.flags.syn等。如果不会写,可以进入数据包协议层展示区,选择希望作为过滤的条件,右击后,在弹出的快捷菜单中选择“作为过滤器应用→选中”命令即可,如图1-10所示。

当然,在输入协议并加“.”后,也可以弹出提示,如果表达式输入正确,整个过滤器会变成绿色,反之为红色,如图1-11所示。

(2)过滤关系

过滤关系就是大于、小于、等于等几种等式关系,可以直接看查官方表格,如图1-12所示。

图1-10 使用过滤器

图1-11 错误或不完全(左)与正确(右)的过滤器提示

图1-12 过滤关系

这里English与C-like写法等价。

(3)过滤值

过滤值即为要判定的值,例如1,0,1000等。也可以用连接词将多个表达式组合使用,连接词如图1-13所示。

图1-13 连接词

另外,新手容易犯的一个错误是连接词使用不当,例如当显示IP地址为192.168.1.99时,可以写为ip.addr==192.168.1.99,这是没有问题的,但是如果希望IP地址不是192.168.1.99时,有可能写ip.addr!=192.168.1.99,这样写是有问题的,原因是对Wireshark而言,会将这个表达式理解为:数据包有ip.addr这个字段,其值与192.168.1.99不同。由于IP数据包包含源地址与目的地址,因此只要两个地址中的一个与192.168.1.99不同,表达式便成立了。示例如图1-14所示。

图1-14 连接词使用不当

过滤器显示为黄色,且状态栏中有意外结果的提醒。

因此,正确的写法应该是!(ip.addr==192.168.1.99),示例如图1-15所示。

另外,可以单击显示过滤器右边的“表达式”按钮,所有过滤项、过滤关系都可以显示出来,如图1-16所示。

图1-15 正确的语法

图1-16 过滤器表达式

2.Wireshark统计功能

Wireshark另一个重要的功能就是其强大的统计功能,包括显示捕获数据包的总体情况,显示解析出的地址、域名、服务等信息,显示协议分布情况,以会话的视角进行统计,并可以直接对地址进行分析,可以统计哪些地址发包过多等,如图1-17所示。

这些统计数据都可以配合显示过滤器使用,利用好这些统计信息,可以在发生网络异常时,找到问题原因。

关于Wireshark的使用,笔者认为,单独出一本甚至几本书都不为过,鉴于市面上已经有非常多的关于如何使用Wireshark的书籍,这里就不再介绍了,读者可以参考各种图书或官方网站https://www.wireshark.org/进行深入研究。

图1-17 根据IP地址统计

1.3.3 tshark

tshark是Wireshark的一个附带工具,使Wireshark的命令行工具也可以进行抓包、数据包分析,笔者更多地将其用于如下场景:如果得到1GB或者更大的数据包,使用Wireshark打开,必定会造成系统资源不足,此时,可以先使用tshark(tcpdump也有这个功能)将符合条件的数据包筛选出来,或只针对需要的字段进行输出,再进行二次处理,这样可以大大缩小处理时间及资源使用。

tshark主要有以下参数:

·-r:读取数据包。

·-Y:设置过滤器。

·-w:保存文件。

·-T fields-e:输出的字段名(也就是上面介绍过的过滤项)。

举例说明:

读取aaa.pcapng文件,保存IP地址为192.168.1.52的文件,示例如下:


tshark -r aaa.pcapng -Y "ip.addr==192.168.1.52" -w test.cap

读取aaa.pcapng文件,显示IP地址为192.168.1.52的目的地址及端口,示例如下:


tshark -r aaa.pcapng -Y "ip.addr==192.168.1.52" -T fields -e ip.addr
-e ip.dst -e tcp.dstport

效果如下: