在这个信息爆炸的年代,过多的知识搬运工,导致了我们整天被大量信息充斥着,过多无用,重复的信息充斥着我们,只会让我们视觉疲劳。快节奏的时代,我们需要的是原创、干货。2014年起,本公众号一路与大家相伴走来,收获了不少,成为深受网工们青睐的公众号。今后,将持续与大家分享干货,分享福利,让我们每天进步一点点!共同成长 by 阿龙
我们都知道,想学会网络技术,人人都绕不开“抓包”这项技能。只有把设备之间交互的信息读透了,搞懂它,那么,你在网络世界里,就能游刃有余,如鱼得水。
相信,很多网工都抓过包,可能大部分初学者都是抓网络设备、电脑上的数据包,很少抓过linux服务器上的数据包,今天龙哥就与大家分享一下,linux抓包工具:tcpdump
简介
Tcpdump是著名的sniffer,是一个被很多UNIX高手认为是一个专业的网络管理工具,记得以前TsutomuShimomura,就是使用他自己修改过的TCPDUMP版本来记录了KEVINMITNICK攻击他系统的记录,后来就配合FBI抓住了KEVINMITNICK。你能够利用这个工具检查访问你服务器中的文件包信息,监测你网络中的问题所在。
Linux作为网络服务器,特别是作为路由器和网关时,数据的采集和分析是不可少的。TcpDump是Linux中强大的网络数据采集分析工具之一。用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。作为互联网上经典的的系统管理员必备工具,tcpdump以其强大的功能,灵活的截取策略,成为每个高级的系统管理员分析网络,排查问题等所必备的工具之一。 百度百科
其实说白了,tcpdump就类似我们经常在window客户端使用wireshark,区别就是一个是图形界面,一个是命令形式。
安装tcpdump
如果你的系统默认没有安装tcpdump,那么你可以使用如下命令,进行安装:
yum install tcpdump -y
命令实例
为了方便大家直观理解,我简单画了个参数图,如下:
注释:
option:可选参数,可以指定相关参数,输出特定信息。
proto:类过滤器,指定某种协议的数据包。如tcp。
direction:类过滤器,根据数据流向进行过滤,可识别的关键字有:src, dst,同时你可以使用逻辑运算符进行组合,比如 src or dst。
type:类过滤器,可识别的关键词有:host, net, port, portrange,这些词后边需要再接参数。
在开始玩tcpdump时,读者应该有所了解报文结构,这样才能更好读懂tcpdump输出的信息。
1、抓取特定网卡 80端口的链接情况:
我先用ifconfig查看网卡名称:
ifconfig
输入下来命令后,打开百度网页:
tcpdump -i ens33 port 80
可以捕获到如下信息,截取一部分:
21:31:34.422461 IP 221.5.75.35.http > localhost.localdomain.42884: Flags [P.], seq 1715:1720, ack 302, win 64240, length 5: HTTP 21:31:34.422473 IP localhost.localdomain.42884 > 221.5.75.35.http: Flags [.], ack 1720, win 33888, length 0
关于上面输出的内容,格式注释如下:
第一列:时分秒毫秒 21:31:34.422461
第二列:网络协议 IP
第三列:发送方的ip地址+端口号,其中221.5.75.35是 ip,而http 是端口号,即80
第四列:箭头 >, 表示数据流向
第五列:接收方的ip地址+端口号,其中 localhost.localdomain. 是 ip,本机,而42884是端口号。
第六列:冒号
第七列:数据包内容,包括Flags 标识符,seq 号,ack 号,win 窗口,数据长度 length,其中 [P.] 表示 PUSH 标志位为 1。
其中Flags 标识符有以下几种:
[S] : SYN(开始连接)
[P] : PSH(推送数据)
[F] : FIN (结束连接)
[R] : RST(重置连接)
[.] : 没有 Flag,由于除了 SYN 包外所有的数据包都有ACK,所以一般这个标志也可表示 ACK
2、如果你觉得命令行不习惯,还是喜欢用wireshark来查看数据包,那么你还可以使用tcpdump来保存.cap文件,然后导出cap文件,就可以用wireshark软件来打开查看了。
tcpdump -i ens33 port 80 -w ./20210616.cap
(左右滑动一下)
注释:
-w:参数指定将监听到的数据包写入文件中保存,file.cap就是该文件。
./:保存的路径。
20210616.cap:保存的文件名。
通过ls,可以看到该文件已生成:
接下来,龙哥(网络工程师阿龙)将用“Winscp”软件登录该linux服务器上把“20210616.cap”文件拷贝到window电脑上。
输入linux服务器ip地址(即我虚拟机的ip地址)、账号、密码
下载cap文件:
已下载到window物理机上了:
双击,我们就可以使用wireshark来查看数据包了:
3、基于协议进行过滤,比如就只抓起icmp报文。
tcpdump icmp
输完上述命令后,我打开网页,又进行了ping测试,先ping8.8.8.8,然后中止了,再ping 114.114.114.114.
来看看,命令输出的结果:
23:05:28.009283 IP public1.114dns.com > localhost.localdomain: ICMP echo reply, id 24125, seq 3, length 64
4、上述我们看到了,ping 114.114.114.114,tcpdump输出显示是域名形式,如果我们希望显示ip地址,可以加一个参数:-n (即不把ip转化成域名,直接显示 ip,避免执行 DNS lookups 的过程,速度会快很多)
tcpdump icmp -n
5、捕获特定的目的IP地址的数据包。
我在linux服务器上进行ping多个地址(114.114.114.114、223.5.5.5、223.6.6.6),然后我tcpdump只需114.114.114.114的。
tcpdump icmp -n and dst host 114.114.114.114
(左右滑动一下)
and:后面就是加了限制条件,只捕获指定的目的ip地址为114.114.114.114的报文。
本期就先分享这些了,相信初学者对tcpdump已经有所了解了。感兴趣的同学,可以抽空专门深入研究一下该工具,其实该命令主要是了解它的语法规则,即过滤规则,以便后续工作中,能快速捕获自己想要的数据包,而不用捕获一堆无用的数据包,太多无用的数据包,一是占存储空间,二是视觉疲劳,效率低。