linux TCP / UDP抓包软件tcpdump安装教程及使用方法

前言

大家好,这里是奇点linux,主要给大家分享linuxpython网络通信相关的IT知识平台。

今天给大家分享一个linux下的抓包神器tcpdump使用方法,通过简单通俗易懂的实战技巧,让你感受一下它的强大之处。大体上通过介绍其命令参数,带你进入抓包实战。同时也给大家分享几个日常工作中常用的有关tcpdump神器的招式,让你一招半式也能应付工作中的故障排查。

tcpdump前世今生

tcpdump是一个用于截取网络分组,并输出分组内容的工具。tcpdump凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具。

tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的Linux系统 中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。

说白了tcpdump就是linux下的一款抓包工具。通常用于故障诊断、网络分析,功能十分的强大。了解了tcpdump是何物之后,让我们通过实战去一一掀开它神秘的面纱。

 

tcpdump命令参数

tcpdump作为一个命令使用,其具有多样的参数选项。

tcpdump基本命令如下:

tcpdump [option] [proto] [dir] [type]

其中:

1、option即可选参数,可以指定相关参数,输出特定信息。

可选参数很多,主要有以下:

-A 以ASCII格式打印出所有分组,并将链路层的头最小化。-c 在收到指定的数量的分组后,tcpdump就会停止。-C 在将一个原始分组写入文件之前,检查文件当前的大小是否超过了参数file_size 中指定的大小。如果超过了指定大小,则关闭当前文件,然后在打开一个新的文件。参数 file_size 的单位是兆字节(是1,000,000字节,而不是1,048,576字节)。-d 将匹配信息包的代码以人们能够理解的汇编格式给出。-dd 将匹配信息包的代码以c语言程序段的格式给出。-ddd 将匹配信息包的代码以十进制的形式给出。-D 打印出系统中所有可以用tcpdump截包的网络接口。-e 在输出行打印出数据链路层的头部信息。-E 用spi@ipaddr algo:secret解密那些以addr作为地址,并且包含了安全参数索引值spi的IPsec ESP分组。-f 将外部的Internet地址以数字的形式打印出来。-F 从指定的文件中读取表达式,忽略命令行中给出的表达式。-i 指定监听的网络接口。-l 使标准输出变为缓冲行形式,可以把数据导出到文件。-L 列出网络接口的已知数据链路。-m 从文件module中导入SMI MIB模块定义。该参数可以被使用多次,以导入多个MIB模块。-M 如果tcp报文中存在TCP-MD5选项,则需要用secret作为共享的验证码用于验证TCP-MD5选选项摘要(详情可参考RFC 2385)。-b 在数据-链路层上选择协议,包括ip、arp、rarp、ipx都是这一层的。-n 不把网络地址转换成名字。-nn 不进行端口名称的转换。-N 不输出主机名中的域名部分。例如,‘nic.ddn.mil‘只输出’nic‘。-t 在输出的每一行不打印时间戳。-O 不运行分组分组匹配(packet-matching)代码优化程序。-P 不将网络接口设置成混杂模式。-q 快速输出。只输出较少的协议信息。-r 从指定的文件中读取包(这些包一般通过-w选项产生)。-S 将tcp的序列号以绝对值形式输出,而不是相对值。-s 从每个分组中读取最开始的snaplen个字节,而不是默认的68个字节。-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc远程过程调用)和snmp(简单网络管理协议;)。-t 不在每一行中输出时间戳。-tt 在每一行中输出非格式化的时间戳。-ttt 输出本行和前面一行之间的时间差。-tttt 在每一行中输出由date处理的默认格式的时间戳。-u 输出未解码的NFS句柄。-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息。-vv 输出详细的报文信息。-w 直接将分组写入文件中,而不是不分析并打印出来。

2、proto即类过滤器,指定过滤某种协议的数据包。如tcp、udp、ip、arp、icmp等。

3、dir即类过滤器,根据数据流向进行过滤,可识别的关键字有src、dst、 src or dst等。

4、type即类过滤器,可识别的关键字有:host, net, port, port range等,这些关键字后边需要再接具体参数。

tcpdump安装

1、linux系统默认没有安装tcpdump工具的,所以需要我们自己安装,这里我通过yum进行安装。

yum -y install tcpdump

2、安装完成,通过tcpdump -h查看它相关版本信息。

[root@haodaolinux1 ~]# tcpdump -htcpdump version 4.9.2libpcap version 1.5.3OpenSSL 1.0.2k-fips  26 Jan 2017Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]                [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]                [ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]                [ -Q|-P in|out|inout ]                [ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]                [ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]                [ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]                [ -Z user ] [ expression ][root@haodaolinux1 ~]#

tcpdump实战

下面通过常见的具体抓包实例,让你加深其使用技巧。

1、常用抓包命令1

tcpdump -i eno16777736

该命令参数表示抓取网口eno16777736上所有的数据包。

2、常用抓包命令2

tcpdump -i eno16777736 -s 0 -w hao1.cap

该命令参数大概意思是针对网口eno16777736抓取不限制大小的报文,保存为文件hao1.cap

3、常用抓包命令3

tcpdump -ni eno16777736 -c 10 dst host 192.168.3.165

该命令参数表示抓取网口eno16777736发往目的主机192.168.3.165的数据包,并且抓取10个包后,自动停止抓包。

4、常用抓包命令4

tcpdump -r hao1.cap

该命令是读取抓包文件hao1.cap,结果如下:

[root@haodaolinux1 ~]# tcpdump -r hao1.cap reading from file hao1.cap, link-type EN10MB (Ethernet)15:22:42.826813 IP 192.168.3.199.ssh > 192.168.3.165.8162: Flags [P.], seq 211541184:211541316, ack 3983093332, win 255, length 13215:22:42.862614 IP 192.168.3.165.armtechdaemon > 192.168.3.199.ssh: Flags [.], ack 546175073, win 16293, length 015:22:43.026135 IP 192.168.3.165.8162 > 192.168.3.199.ssh: Flags [.], ack 132, win 16425, length 015:22:43.609384 IP 192.168.3.199 > 183.232.231.172: ICMP echo request, id 9275, seq 7, length 6415:22:43.621431 IP 183.232.231.172 > 192.168.3.199: ICMP echo reply, id 9275, seq 7, length 6415:22:43.621610 IP 192.168.3.199.ssh > 192.168.3.165.armtechdaemon: Flags [P.], seq 1:133, ack 0, win 255, length 13215:22:43.821278 IP 192.168.3.165.armtechdaemon > 192.168.3.199.ssh: Flags [.], ack 133, win 16260, length 015:22:44.610696 IP 192.168.3.199 > 183.232.231.172: ICMP echo request, id 9275, seq 8, length 6415:22:44.624632 IP 183.232.231.172 > 192.168.3.199: ICMP echo reply, id 9275, seq 8, length 6415:22:44.624842 IP 192.168.3.199.ssh > 192.168.3.165.armtechdaemon: Flags [P.], seq 133:265, ack 0, win 255, length 13215:22:44.824397 IP 192.168.3.165.armtechdaemon > 192.168.3.199.ssh: Flags [.], ack 265, win 16227, length 0

5、常用抓包命令5

tcpdump -i eno16777736 host 183.232.231.172 and tcp port 80 

即表示抓取主机183.232.231.172所有在TCP 80端口的数据包。

6、常用抓包命令6

tcpdump -i eno16777736 host 183.232.231.172 and dst port 80 

即表示抓取HTTP主机183.232.231.172在80端口接收到的数据包。

7、常用抓包命令7

tcpdump -i eno16777736 port 80

即表示抓取所有经过eno16777736,目的或源端口是80的网络数据。

8、常用抓包命令8

tcpdump -i eno16777736 icmp

即表示过滤出icmp包。如下图所示:

结语

以上这些抓包命令只是日常工作中比较常见的,其还可以根据相关选项参数组合进行抓包,这里就不一一举例了。执行抓包命令后,如果不指定保存抓包文件,即报文直接从控制台输出,通过ctrl+c组合键停止抓包。保存的抓包文件是可以导出到windows环境,通过Wireshark工具打开的。


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注