做网站链接,部门网站建设管理,房地产市场现状分析2022,大型淘宝客返利网站建设TCPdump抓包工具介绍
TCPdump#xff0c;全称dump the traffic on anetwork#xff0c;是一个运行在linux平台可以根据使用者需求对网络上传输的数据包进行捕获的抓包工具。
tcpdump可以支持的功能:
1、在Linux平台将网络中传输的数据包全部捕获过来进行分析 2、支持网络层…TCPdump抓包工具介绍
TCPdump全称dump the traffic on anetwork是一个运行在linux平台可以根据使用者需求对网络上传输的数据包进行捕获的抓包工具。
tcpdump可以支持的功能:
1、在Linux平台将网络中传输的数据包全部捕获过来进行分析 2、支持网络层、传输层协议等协议捕获过滤 3、数据发送和接收的主机、网卡和端口等各种过滤捕获数据规则 4、提供and、or、not等语句进行逻辑组合捕获数据包或去掉不用的信息 5、结合wireshark工具分析捕获的报文
要灵活使用 tcpdump 工具必须要有两个必备的知识基础: 第一、Linux 操作系统: 因为这是一款基于 Linux 系统下命令行的抓包工具所以需要对 Linux 的基本操作和常用命令有一定的基础; 第二、网络知识: 因为 tcpdump 是将网络中传送的数据包完整的截获下来然后进行分析所以想要分析捕获到的报文需要了解 OSI 七层网络模型以及常用网络协议等。
TCPdump抓包工具使用环境和初体验
默认输入 tcpdump 这个命令回车操作之后它将监视第一个网络接口上所有流过的数据包一般是eth0如下图所示 20:44:54.485275 IP 115.205.231.25.54845 iZj6cac8jcykj0pe92w66iZ.ssh: Flags [.], ack 46944, win 510, options [nop,nop,TS val 671165587 ecr 471333], length 0
20:44:54.485301 IP iZj6cac8jcykj0pe92w66iZ.ssh 115.205.231.25.54845: Flags [P.], seq 59304:59516, ack 1, win 259, options [nop,nop,TS val 471428 ecr 671165587], length 212
以上输出的信息来看可以总结出 第一列时分秒 20:33:22.957272 第二列网络协议ip 第三列发送方的ip地址端口号115.205.231.25是ip而54845的端口号 / iZj6cac8jcykj0pe92w66iZ是主机 ssh是协议 表示端口号 22 第四列箭头 表示数据流向 第五列接收方的ip地址端口号接收方是本机所以翻译成了iZj6cac8jcykj0pe92w66iZ 第六列:数据包内容包括Flags 标识符seg 号ack号win 窗口数据长度 length其中 [P.]表示 PUSH 标志位为1更多标识符需要了解TCP协议的标志位。
TCP协议
TCP(Transmission Control Protocol)传输控制协议,顾名思义就是要对数据的传输进行一定的控制。 SYN连接请求或者接受连接请求 FIN连接结束断开链接 RST重置链接 ACK确认标记位 PSH催促标志位将接受缓冲区内数据向上交付给应用程序而不是等待缓冲区满后再交付。 URG紧急标志位将紧急数据排在普通数据的前面 序号每个数据包都对应着一个序列号 确认号每发送一个数据包都需要收到对应的确认包确认号序号1 窗口滑动窗口 ------ 可靠性提高报文发送效率
[S] : SYN开始连接 [P] : PSH推送数据 [F] : FIN结束连接 [R] : RST重置连接 [.] : 没有Flag意思是除上面四种类型外的其他情况有可能是ACK也有可能是URG
TCPdump抓包工具常规过滤
基于IP地址进行过滤: host
案例1: 截获特定主机-220.181.38.148的主机收到的和发出的所有的数据包
tcpdump host 220.181.38.148 解释:host 220.181.38.148指明 220.181.38.148 是一台主机如果你非常明确关心的是哪个主机的收发报文那么就可以直接过滤这个主机的数据包。host后面加主机的IP地址就可以只抓取这个主机的所有数据包其他主机的数据包就会被过滤掉。
案例2:获取目的地址是220.181.38.148 的报文 tcpdump dst 220.181.38.148 解释:dst 指的是目的地址;这个是确定传输方向的关键字src源;dst 目的
src 是获得原地址的请求报文 dst是获得目标地址的请求报文 **基于IP地址进行过滤: port **
案例3:获取特定端口-比如http的包使用如下命令: tcpdump tcp port 80 解释:port 80 指明端口80只会抓取这个80端口的数据包;加上具体某个协议的某个端口就可以更加精确的捕获对应的业务的数据报文了。如上就会只抓取 TCP 协议的 80 端口的数据报也就是 http 协议的数据报文。
tcpdump src port 80/tcpdump dst port 80
如果你想要同时指定两个端口你可以这样写:tcpdump port 80 or port 22、tcpdump port 80 or 22 ;
如果你的想抓取的不再是一两个端口而是一个范围一个一个指定就非常麻烦了此时你可以这样指定一个端口段。 tcpdump portrange 8000-8080 tcpdump src portrange 8000-8080 tcpdump dst portrange 8000-8080
对于一些常见协议的默认端口我们还可以直接使用协议名而不用具体的端口号:比如 http 80https 443 等 tcpdump tcp port http
基于协议进行过滤protocal 案例4获取ICMP协议的报文 tcpdump icmp 解释标明要抓取的协议报文一般常用的比如ip ip6 arpicmptcpudp等
注意httpdnshttpsssh 等这些应用层的协议不能直接这样写想要写成 tcpdump port http 或者 tcpdump port 53 DNS的端口号是53
tcpdump的常用参数
tcpdump -h ——查看所有参数
-i # 指定监听网络接口 tcpdump -i eth0 默认监听在第一块网卡上监听所有经过此网卡通过的数据包;但是我们可能关心的数据并不是 eth0 的接口这时就需要指定端口进行数据包的捕获。
在 tcpdump 后面加一个 -i的参数后面跟具体需要捕获的接口名称就可以抓取经过这个具体接口的所有数据包。tcpdump -i any 监听所有的网卡接口、用来查看是否有网络流量
-w #将捕获到的信息保存到文件中且不分析和打印在屏幕 tcpdump -i eth0 -w tt 报文打印在shel里会太多且不方便查看我们可以保存成文件;然后通过xftp导出到本地可以详细查看
扩展:导出的文件可以设置为cap或者pcap的格式可以直接用wireshark工具打开; 可以用wireshark工具分析报文具体信息!
-r # 从文件中读取数据读取后照样可以使用上述的过滤器语法进行过滤分析。 tcpdump -r tt.pcap
-n: 不把ip转化成域名直接显示ip避免执行DNS lookups的过程速度会快很多
-nn 不把协议和端口号转化成名字速度也会快很多。
-N 不打印出host的域名部分比如如果设置了此选项tcpdump将会打印’nic’ 而不是’nic.ddn.mil’ 。 -t 在每行的输出中不输出时间
-tt 在每行的输出中会输出时间戳
-ttt 输出每两行打印的时间间隔(以毫秒为单位)
-tttt在每行打印的时间戳之前添加日期的打印(此种选项输出的时间最直观) -v:产生详细的输出.比如包的TTLid标识数据包长度以及IP包的一些选项。同时它还会打开些附加的包完整性检测比如对IP或ICMP包头部的校验和。
-vv:产生比-v更详细的输出.比如NFS回应包中的附加域将会被打印,SMB数据包也会被完全解码。
-vv:产生比-vv更详细的输出。比如 telent 时所使用的SB,SE选项将会被打印,如果telnet同时使用的是图形界面其相应的图形选项将会以16进制的方式打印出来
-c #指定收取数据包的次数即在收到指定数量的数据包后退出tcpdump停止抓包 tcpdump -c 20 -w tt.pcap 解释:抓满20个报文之后就停止tcpdump抓包。 -C #与 -w FILE 选项配合使用。该选项使得 tcpdump 在把原始数据包直接保存到文件中之前检查此文件大小是否超过 file-size。如果超过了将关闭此文件另创一个文件继续保存原始数据包。新创建的文件名与 -w 选项指定的文件名一致,但文件名后多了一个数字该数字会从1开始随着新创建文件的增 多而增加。file-size的单位是百万字节(这里指1,000,000个字节,并非1,048,576个字节)
tcpdump -C 1 -W 3 -w abc 指定一个单位后(1MB)就换文件最多写3个文件名字是abc0,abc1.abc2 选择是入方向还是出方向的数据包可选项有:in也可以使用–direction[direction] tcpdump -Q in tcpdump -Q out tcpdump -Q inout -q:简洁地打印输出。即打印很少的协议相关信息,从而输出行都比较简短.
-D:显示所有可用网络接口的列表
-L: 列出网络接口的已知数据链路。 7、 -s #指定每个包捕获的长度、单位是 byte而不是默认的262144bytes; 如果超过了设定的大小限制包就会被阶段而在打印行出现[|proto]这种标识这个proto就是被截断的报文的协议名字。但是抓取len越长包的处理时间越长并且会减少tcpdump可缓存的数据包的数量从而会导致数据包的丢失所以在能抓取我们想要的包的前提下抓取长度越小越好(-s0使用默认长度262144)。
注意:不同的tcpdump版本这个默认抓取的报文的长度不一样 帮助文档的指令 man tcpdump
8、 -A #以ASCII 格式打印出所有的分组并且读取此文件这样可以使读取更加简单方便使用 grep 等工具解析输出内容
--- tcpdump -A -r tt2
--- tcpdump -A | grep baidu
-X表示同时使用十六进制和 ASCII 字符串打印报文的全部数据。这-X和-A两个参数不能一起使用 --- tcpdump -X -r tt2
9、-e #在输出行打印出数据链路层的头部信息。默认情况下 tcpdump 不会显示数据链路层信息使用 -e选项可以显示源和目的 MAC 地址以及 VLAN tag 信息。例如: --- tcpdump -e -r tt2
10、-F指定使用哪个文件的过滤表达式抓包。此时命令行上的输入规则将被忽略 tcpdump -F filter_rule -c 10 这种情况适用于将表达式放置在文件中长期维护
11、-l #对标准输出进行行缓冲在需要同时观察抓包打印以及保存抓包记录的时候很有用。比如可通过以下命令组合来达到此抓包时保存到文件的同时查看包的内容。 -- tcpdump -l | tee dat dat是文件的名字
这命令是使用tee来把tcpdump 的输出同时放到文件dat和标准输出中 tee 功能说明:读取标准输入的数据,并将其内容输出成文件 -- tcpdump -l dat tail -f dat 这个命令是通过重定向操作 ‘’ 把数据写入对应的文件中
逻辑运算
逻辑运算符:and or not and:所有的条件都需要满足也可以表示为 or:只要有一个条件满足就可以也可以表示为 not:取反也可以使用!
and例子:抓一个来自100.100.30.26主机80端口的包 – tcpdump src 100.100.30.26 and port 80
or例子:抓取UDP 53端口或者TCP 53端口的包(DNS协议的报文) – tcpdump tcp port 53 or udp port 53
not例子:抓取不是22端口的报文 – tcpdump not tcp port 22
多个过滤器进行组合:需要用到括号而括号在 shell 中是特殊符号因为需要使用引号将其包含: --and 优先级高于 or tcpdump “src 10.0.2.4 and (dst port 3389 or 22)
实际案例 :监听主机192.168.56.1和192.168.56.210之间ip协议的80端口的且排除www.baidu.com通信的所有数据包: tcpdump ip dst 192.168.56.1 and src 192.168.56.210 and port 80 and host ! www.baidu.com tcpdump ip dst 192.168.56.1 and src 192.168.56.210 and port 80 and host not www.baidu.com 即not和!都是相同的取反的意思
高级过滤
1、基于包大小进行过滤:查看指定大小的数据包 案例:抓取包大小小于32bytes的数据包 – tcpdump less 32 案例:抓取包大小大于100bytes的数据包 tcpdump greater 300
tcpdump 总结图 WireShark
按IP地址过滤
想看源ip为xxx的包
ip.src192.168.40.1
想看目标ip为xx的包
ip.dst239.255.255.250
想看源或目标ip为xx的包
ip.addr192.168.18.128
按MAC地址过滤
想看源MAC为xx的包
eth.src76-6C-80-82-D7-13
想看目标MAC为xx的包
eth.dst76-6C-80-82-D7-13
想看源或目标MAC为xx的包
eth.addr76-6C-80-82-D7-13
按端口号过滤
过滤tcp端口为4694的包
tcp.port4694
过滤源端口为4694的包
tcp.srcport4694
过滤目标端口为4694的包
tcp.dstport4694
按协议类型过滤
常见的协议 arp dhcp https
规则组合
and
查看dhcptcp 包并且只想查看某台电脑的dhcp包和tcp包 tcp and dhcp and eth.addr 76-6C-80-82-D7-13 tcp and dhcp
or
查看dhcp 或者 arp
tcp or dhcp
通过icmp报文排查网络故障
icmp 测试网络连通性 通,告知延迟
不通,告知原因,用icmp包里的type code ,两个数字的组合,代表故障原因
常见的错误及原因
1.没配网关 传输失败常见故障 2.配了网关但是找不到网关。 来自本机可能是主机的IP地址的回复无法访问目标主机 自己发arp寻找网关mac失败 3.配了网关也能找到网关。 来自网关的回复无法访问目标网络。 网络设备缺少路由 4.配了网关也能找到网关网关也有目标路由。但是后面的设备缺路由。 4.1 后面的设备有回包的路由没有目的地的路由。 报错:来自缺路由的设备无法访问目标网络。 4.2 后面的设备没有回包的路由没有目的地的路由。 超时
B机器 ping A 机器 A机器 ping B机器
数据包都是有去有回如果不通那就是防火墙的问题 不通的那个机器 将 防火墙 禁ping了
windows防火墙特性 出站连接默认放行 入站连接默认禁止。需要允许通防火墙要设置放行
icmp协议
Internet控制消息协议ICMPInternet Control Message Protocol是IP协议的辅助协议
ICMP协议用来在网络设备间传递各种差错和控制信息对于收集各种网络信息、诊断和排除各种网络故障等方面起着至关重要的作用。 ICMP报文 icmp 中 TypeCode的请求含义
TypeCode描述00Echo Reply请求的响应30网络不可达31主机不可达32协议不可达33端口不可达50重定向80Echo Request请求110TTL值没了丢包了
80 Echo Request请求 00 Echo Reply请求的响应 30 网络不可达 缺路由路由没配 31 主机不可达 不缺路由缺arp 根据路由表里的直连路由查询arp没查到对应的mac 3 3 端口不可达 传输层端口 目标主机没开放相关的端口 33440端口没开 32协议不可达
协议号和端口号的区别 协议号ip头部里的字段标识这个数据包是tcp(6)还是udp17还是icmp1还是gre50还是ospf89还是vrrp112
端口号tcpudp头部里的字段标识这个数据包是http80还是dns53还是ftp21tftp 69smtp25
什么是gre? 两台路由器想建立gre的 联系 路由器A配置好了 路由器B没配置 A寻找B建立gre连接 B回一个消息协议不可达
DNS的协议号和端口号
HTTP的协议号和端口号 110 TTL没了丢包了
常见的网络协议工作过程
DNS
提供了主机名字和IP地址之间的相互转换 DNS系统的模式 采用客户端/服务器模式 FTP
FTP协·议是互联网上广泛使用的文件传输协议 客户端/服务端模式基于TCP FTP采用双TCP连接方式
TFTP
TFTP(简单文件传输协议)也是采用客户机/服务器模式的文件传输协议 TFTP适用于客户端和服务器之间不需要复杂交互的环境 TFTP承载在UDP之上端口号69 TFTP仅提供简单的文件传输功能(上传、下载) TFTP没有存取授权与认证机制不提供目录列表功能 TFTP协议传输是由客户端发起的
Telnet
远程管理网络设备 测试端口可达性
利用Wireshark 获取用户密码
客户端登录网页抓取请求