编程教育资源分享平台

网站首页 > 后端开发 正文

大年别闲着,跟我来学tcpdump抓包

luoriw 2024-02-01 14:25:52 后端开发 9 ℃ 0 评论

快过年了,首先祝福大家新年好,猪年吉祥,阖家团圆,万事如意!在吃喝玩乐睡之余是不是还觉得很闲?很闲?别慌,不怕的,正好可以利用这段时间学点技术提升自己,今天虫虫就给大家奉上新年技术第一波,tcpdump网络抓包。

基本使用

tcpdump是首屈一指的网络抓包分析工具,之前的文章中,虫虫曾经说过个例利用tcpudump抓包的教程,今天我们来系统的学习一下。

tcpdump底层基于libpcap,linux下有大量的网络工具都是基于这个包。tcpdump基本使用见上图。让我们从一个基本命令开始,

tcpdump -nnSX port 443

这样就可以抓取HTTPS(443端口)的流量:

命令选项:

-nn:不解析主机名或端口名称。

-S:获取整个数据包。

-X:获取十六进制输出。

可以使用-c 1获取单个数据包,或使用-c n获取n数字。

结果如下图,显示了一些HTTPS流量,在输出的右侧部分可以看到十六进制显示(乱码,因为是加密的)。

基础技能

通过上面,已经知道了通过tcpdump抓包了。我们接着学习实际中会用到实际例子,通过抓包排除故障,解释一些网络疑难杂症,甚至学习网络知识都是大有裨益的。

抓取特定网卡的流量

使用-i 指定网卡名,比如eth0。使用-i any可以获取所有网卡的流量。

tcpdump -i eth0

表达类型:host(主机),net(网络)和port(端口)。

网络方向:src(源地址)和dst(目的地址)。

协议:tcp,udp,icmp等等。

按IP查找流量

使用host的最常见查询之一,筛选来自 192.168.0.1的流量。

tcpdump host 192.168.0.1

按来源和/或目的地过滤

如果只想查看一个方向或另一个方向的流量,可以使用src和dst过滤。

tcpdump src 192.168.0.1

tcpdump dst 8.8.8.8

按网络查找数据包

要查找进出特定网络或子网的数据包,请使用net选项。

也可以将它与src和dst选项结合使用。

tcpdump net 192.168.0.0/24

获取十六进制输出的数据包内容

当你想要查看有问题的数据包的内容时,十六进制输出非常有用,如果我们需要对某些网络包做详细分析时候,最好用16进制输出所有内容。

tcpdump -c 1 -X icmp

显示与特定端口相关的流量

可以使用port选项后跟端口号查找特定的端口流量。

tcpdump端口3389

tcpdump src端口1025

显示一个协议的流量

如果正在寻找一种特定类型的流量,您也可以使用tcp,udp,icmp和许多其他流量。

tcpdump icmp

显示IP6流量

还可以使用协议选项查找所有IP6流量。

tcpdump ip6

使用端口范围查找流量

使用一系列端口范围来查找流量。

tcpdump portrange 8080-8090

根据数据包大小查找流量

如果需要查到特定大小的数据包,可以使用这些选项。还可以是用对比数学符号,比如大于,大于等于等。

tcpdump less 32

tcpdump greater 64

tcpdump <= 128

从文件读取或者将结果保存到文件

将数据包捕获保存到文件中以供将来分析通常很有用。这些文件称为PCAP(PEE-cap)文件,这是一种标准格式的文件,有大量的网络工具可以对他进行处理,比如网络分析器,入侵检测系统,wireshark等。等然其他tcpdump也是可以解析分析了。使用-w选项指定需要写入的文件名,比如:

tcpdump port 80 -w capture_file

使用-r开关读取已有的PCAP文件。注意,在读取文件时也可以使用tcpdump中的所有常规命。

tcpdump -r capture_file

进阶技能

上面一些实例中,我们介绍了一些基础的技能,用来熟悉基本用法。该部分我们进阶更复杂的用法。

更多的选项用法

-X:以十六进制和ASCII格式显示数据包的内容。

-XX:与-X相同,但也显示以太网头部包内容。

-D:显示可用网卡接口列表

-l:行可读输出(用于保存或发送到其他命令时查看)

-q:输出更简洁(更安静)。

-t:提供人性化的时间戳输出。

-tttt:提供最大化的人性化时间戳输出。

-i eth0:监听eth0接口。

-vv:详细输出(更多v提供更多输出)。

-c:只获取x个数据包然后停止。

-s:以字节为单位定义捕获的捕捉长度(大小)。使用-s0来获取所有内容。

-S:打印绝对序列号。

-e:获取以太网头部包内容。

-q:显示较少的协议信息。

-E:通过提供一个解密IPSEC流量

选项组合

除了基本选项外,tcpdump最大强大的功能是,它支持对各种选项进行组合,从而准确地匹配出我们真正需要的内容。tcpdump支持三种组合方法:

1. 逻辑与: and 、&&

2. 逻辑或: or 、||

3. 逻辑非:not 、!

原始输出视图

使用下面选项可以查看详细输出,不对主机名或端口号解析,使用绝对序列号,并显示人性化的时间戳。

tcpdump -ttnnvvS

下面是选择组合的一些实例。

从特定IP到目的地的特定端口

让我们找到从192.168.0.3的3389端口发出的所有流量。

tcpdump -nnvvS src 192.168.0.3 and dst port 3389

从一个网络到另一个网络的流量

查看来自192.168.x.x,目的地为10.x或172.16.x.x网络的所有流量,显示为十六进制输出,不对主机名解析,一般程度详细的内容。

tcpdump -nvX src net 192.168.0.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16

排除ICMP的到特定IP的流量

下面的命令显示所有访问192.168.0.2的非ICMP的流量。

tcpdump dst 192.168.0.2 and src net and not icmp

排除特定端口上的主机的流量

下面命令显示所有非SSH得流量(假设ssh使用默认端口22)。

tcpdump -vv and not dst port 22

如上所示,我们可以利用基本选项和组合选项随心所欲构建我们真正需要网络包的查询。需要注意的是在构建复杂查询时,为了便于理解,需要使用括号()来对选项进行分组;使用单引号"'"用于来忽略(转义)某些特殊字符。我们可以重复使用相同的选项利用表达式进行分组,例如主机,端口,网络等。

tcpdump 'src 10.0.2.4 and (dst port 3389 or 22)'

隔离TCP标志

我们还可以使用过滤器隔离设置对特定TCP标记的数据包过滤。

隔离TCP RST标志。

下面语句过滤器,筛选这些不同的数据包。

tcpdump 'tcp[13] & 4!=0'

tcpdump 'tcp[tcpflags] == tcp-rst'

tcp[13]查看TCP标头中的偏移量13,数字表示字节内的位置,而!= 0表示有问题的标志设置为1,即它打开。

隔离TCP SYN标志。

tcpdump 'tcp[13] & 2!=0'

tcpdump 'tcp[tcpflags] == tcp-syn'

同时隔离SYN和ACK标志的数据包。

tcpdump 'tcp[13]=18'

隔离TCP URG标志。

tcpdump 'tcp[13] & 32!=0'

tcpdump 'tcp[tcpflags] == tcp-urg'

在tcpdump的标志字段输出中仅显示PSH,RST,SYN和FIN标志。显示URG和ACK,但它们显示在输出的其他位置而不是标志字段中。

隔离TCP ACK标志。

tcpdump 'tcp[13] & 16!=0'

tcpdump 'tcp[tcpflags] == tcp-ack'

隔离TCP PSH标志。

tcpdump 'tcp[13] & 8!=0'

tcpdump 'tcp[tcpflags] == tcp-psh'

隔离TCP FIN标志。

tcpdump 'tcp[13] & 1!=0'

tcpdump 'tcp[tcpflags] == tcp-fin'

常用单行命令备用(onelines)

tcpdump输出是ASCII格式的内容,所以可以使用它来结合其他命令行工具(如grep)搜索明文内容。虽然根据上面说的,我们可以组合自己的查询,但是你可能怕消耗脑细胞,只想能动手复制粘贴伸手拿来就用。那下面这些常用单行命令就是给你准备的。

SYN和RST 集

tcpdump 'tcp[13] = 6'

查找HTTP User-Agent

-l开关,可以在捕获流量时查看流量,并通过管道二次搜索:

tcpdump -vvAls0 | grep 'User-Agent:'

查找 GET请求内容

tcpdump -vvAls0 | grep 'GET'

查找HTTP主机头

tcpdump -vvAls0 | grep 'Host:'

查找HTTP Cookie

tcpdump -vvAls0 | grep 'Set-Cookie|Host:|Cookie:'

查找SSH连接

适用于任何特定的ssh端口,他查询的ssh的banner指纹。

tcpdump 'tcp[(tcp[12]>>2):4] = 0x5353482D'

查找DNS流量

tcpdump -vvAs0 port 53

查找FTP流量

tcpdump -vvAs0 port ftp or ftp-data

查找NTP流量

tcpdump -vvAs0 port 123

查找明文密码

tcpdump port http or port ftp or port smtp or port imap or port pop3 or port telnet -lA | egrep -i -B5 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd= |password=|pass:|user:|username:|password:|login:|pass |user '

查找带有恶意攻击的流量

如果IP头中有一些一点从来不会被合法应用程序包设置,我们称之为"邪恶位"。下面这个过滤器,就是利用这个特性,用于查找已经被篡改的数据包。

tcpdump 'ip[6] & 128 != 0'

总结

tcpdump对于每一个想要从事网络有关的人来说是个潘多拉盒子宝盒,让你理解网络,学习TCP/IP的工作原理,让运维排除由于网络导致的顽疾问题,当你尝试遍所有方法而不见其解的时候,就应该想到两个工具:网络相关找tcpdump抓包,内核性能相关就打印火焰图。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表
最新留言