网站开发工程师特点,广告公司岗位,做视频的免费素材网站,短视频运营培训学费多少简介
tcpdump 是Linux系统下的一个强大的命令#xff0c;可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤#xff0c;本文将展示如何使用 tcpdump 抓包#xff0c;以及如何用 tcpdump 和 wireshark 分析网络流量
tcpdump指…简介
tcpdump 是Linux系统下的一个强大的命令可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤本文将展示如何使用 tcpdump 抓包以及如何用 tcpdump 和 wireshark 分析网络流量
tcpdump指令介绍
语法
tcpdump [ -AdDefIJKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ][ -C file_size ] [ -G rotate_seconds ] [ -F file ][ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ][ -Q|-P in|out|inout ][ -r file ] [ -s snaplen ] [ -T type ] [ -w file ][ -W filecount ][ -E spiipaddr algo:secret,... ][ -y datalinktype ] [ -z postrotate-command ] [ -Z user ][ expression ]命令行参数解析
-A 以ASCII格式打印出所有分组并将链路层的头最小化。-c 在收到指定的数量的分组后tcpdump就会停止。-C 在将一个原始分组写入文件之前检查文件当前的大小是否超过了参数file_size中指定的大小。如果超过了指定大小则关闭当前文件然后在打开一个新的文件。参数 file_size的单位是兆字节是1,000,000字节而不是1,048,576字节。-d 将匹配信息包的代码以人们能够理解的汇编格式给出。-dd 将匹配信息包的代码以c语言程序段的格式给出。-ddd 将匹配信息包的代码以十进制的形式给出。-D 打印出系统中所有可以用tcpdump截包的网络接口。-e 在输出行打印出数据链路层的头部信息。-E 用spiipaddr 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。-n 不把网络地址转换成名字。-N 不输出主机名中的域名部分。例如link.linux265.com 只输出link。-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 直接将分组写入文件中而不是不分析并打印出来。-x 以16进制数形式显示每一个报文 (去掉链路层报头) . 可以显示较小的完整报文, 否则只显示snaplen个字节.-xx 以16进制数形式显示每一个报文包含链路层包头。-X 以16进制和ASCII码形式显示每个报文去掉链路层报头。-XX 以16进制和ASCII吗形式显示每个报文包含链路层报头。-y 设置tcpdump 捕获数据链路层协议类型-Z 使tcpdump 放弃自己的超级权限(如果以root用户启动tcpdump, tcpdump将会有超级用户权限), 并把当前tcpdump的用户ID设置为user, 组ID设置为user首要所属组的ID
常用选项参数
-c收到指定的数据包数目后就停止进行抓取-w把数据包数据写入指定的文件。-e输出链路层头部信息-i指定抓取的网卡默认是0号网络接口,any表示所有接口-nn不解析IP地址和端口号的名称-tttt在每一行中输出由date处理的默认格式的时间戳-v详细显示指令执行过程-vv更详细显示指令执行过程-x用十六进制字码列出数据包资料tcpdump 命令使用示例
linux系统下执行tcpdump命令需要root账号或者具备sudo权限的账号否则执行tcpdump命令说系统会提示tcpdump: no suitable device found。
在下面的例子中-i eth0 参数表示只抓取 eth0 接口数据包不加-i eth0 是表示抓取所有的接口包括 lo。
01、抓取所有网络包并在terminal中显示抓取的结果将包以十六进制的形式显示。
tcpdump02、抓取所有的网络包并存到 result.cap 文件中。
tcpdump -w result.pcap03、抓取所有的经过eth0网卡的网络包并存到result.cap 文件中。
tcpdump -i eth0 -w result.pcap04、抓取源地址是192.168.1.100的包并将结果保存到 result.cap 文件中。
tcpdump src host 192.168.1.100 -w result.pcap05、抓取地址包含是192.168.1.100的包并将结果保存到 result.cap 文件中。
tcpdump host 192.168.1.100 -w result.pcap06、抓取目的地址包含是192.168.1.100的包并将结果保存到 result.cap 文件中。
tcpdump dest host 192.168.1.100 -w result.pcap07、抓取主机地址为 192.168.1.100 的数据包
tcpdump -i eth0 -vnn host 192.168.1.10008、抓取包含192.168.1.0/24网段的数据包
tcpdump -i eth0 -vnn net 192.168.1.0/2409、抓取网卡eth0上所有包含端口22的数据包
tcpdump -i eth0 -vnn port 2210、抓取指定协议格式的数据包协议格式可以是「udp,icmp,arp,ip」中的任何一种,例如以下命令
tcpdump udp -i eth0 -vnn11、抓取经过 eth0 网卡的源 ip 是 192.168.1.100 数据包src参数表示源。
tcpdump -i eth0 -vnn src host 192.168.1.10012、抓取经过 eth0 网卡目的 ip 是 192.168.1.100 数据包dst参数表示目的。
tcpdump -i eth0 -vnn dst host 192.168.1.10013、抓取源端口是22的数据包
tcpdump -i eth0 -vnn src port 2214、抓取源ip是 192.168.1.100 且目的ip端口是22的数据包
tcpdump -i eth0 -vnn src host 192.168.1.100 and dst port 2215、抓取源ip192.168.1.10022
tcpdump -i eth0 -vnn src host 192.168.1.100 or port 2216、抓取源ip192.168.1.10022
tcpdump -i eth0 -vnn src host 192.168.1.100 and not port 2217、抓取源ip是192.168.1.100且目的端口是22或源ip是192.168.1.102且目的端口是80的数据包。
tcpdump -i eth0 -vnn ( src host 192.168.1.100 and dst port 22 ) or ( src host 192.168.1.102 and dst port 80 )18、把抓取的数据包记录存到/tmp/result文件中当抓取100个数据包后就退出程序。
tcpdump –i eth0 -vnn -w /tmp/result -c 10019、从/tmp/result记录中读取tcp协议的数据包
tcpdump -i eth0 tcp -vnn -r /tmp/result20、想要截获所有192.168.1.100的主机收到的和发出的所有的数据包
tcpdump host 192.168.1.10021、如果想要获取主机192.168.1.100除了和主机192.168.1.101之外所有主机通信的ip包使用命令
tcpdump ip host 192.168.1.100 and ! 192.168.1.10122、如果想要获取主机 192.168.1.100 接收或发出的 telnet 包使用如下命令
tcpdump tcp port 23 host 192.168.1.100Wireshark 分析
说了这么多你应该也发现了tcpdump 虽然功能强大但是输出的格式并不直观。
所以在工作中 tcpdump 只是用来抓取数据包不用来分析数据包而是把 tcpdump 抓取的数据包保存成 pcap 后缀的文件接着用 Wireshark 工具进行数据包分析。
Wireshark 除了可以抓包外还提供了可视化分析网络包的图形页面同时还内置了一系列的汇总分析工具。
比如拿上面的 ping 例子来说我们可以使用下面的命令把抓取的数据包保存到 ping.pcap 文件
tcpdump -c 10 host 39.156.66.10 -w ping.pcap接着把 ping.pcap 文件拖到电脑再用 Wireshark 打开它。打开后你就可以看到下面这个界面 是吧在 Wireshark 的页面里可以更加直观的分析数据包不仅展示各个网络包的头部信息还会用不同的颜色来区分不同的协议由于这次抓包只有 ICMP 协议所以只有紫色的条目。
接着在网络包列表中选择某一个网络包后在其下面的网络包详情中可以更清楚的看到这个网络包在协议栈各层的详细信息。