网站怎么防止黑客攻击,手机商城手机网站建设多少钱,昆明大型网站建设,做网站主机几个配件文章目录 前言一、tcpdump基础官网链接命令选项详解常规过滤规则tcpdump输出 一、tcpdump实践HTTP协议ICMP状态抓包 前言
当遇到网络疑难问题的时候#xff0c;抓包是最基本的技能#xff0c;通过抓包才能看到网络底层的问题 一、tcpdump基础
tcpdump是一个常用的网络分析工… 文章目录 前言一、tcpdump基础官网链接命令选项详解常规过滤规则tcpdump输出 一、tcpdump实践HTTP协议ICMP状态抓包 前言
当遇到网络疑难问题的时候抓包是最基本的技能通过抓包才能看到网络底层的问题 一、tcpdump基础
tcpdump是一个常用的网络分析工具。它基于libpcap利用内核中的AF_PACKET套接字抓取网络接口中传输的网络包。
我们对网卡进行抓包的时候会使得网卡进入“混杂模式”所谓混杂模式就是让网卡接收所有到达网卡的报文因为默认情况下不是给自己的报文网卡是不要的要么丢弃要么转发反正不读取内容而进入混杂模式后就可以看一眼报文内容了。 使用tcpdump命令可以使网卡自动进入混杂模式这一点可以从dmesg系统日志中看到 [311135.760098] device eth0 entered promiscuous mode [311142.852087] device eth0 left promiscuous mode
官网链接
https://www.tcpdump.org/manpages/tcpdump.1.html
命令选项详解 -i 指定网络接口如 eth0 bond0any表示所有接口 -n 不对IP地址进行域名解析直接显示IP避免执行dns lookup -nn 不对IP地址和端口号进行名称解析。 -c xx捕获包的数量 -A 以ASCII码方式显示每一个数据包(不显示链路层头部信息). 在抓取包含网页数据的数据包时, 可方便查看数据 -l 基于行的输出便于你保存查看或者交给其它工具分析,例如 管道符 tcpdump -l | tee dat -s tcpdump 默认只会截取前 96 字节的内容要想截取所有的报文内容可以使用 -s number number 就是你要截取的报文字节数如果是 0 的话表示截取报文全部内容。 控制时间显示 -t 在每行的输出中不输出时间 -tt 在每行的输出中会输出时间戳 -ttt 输出每两行打印的时间间隔(以毫秒为单位) -tttt 在每行打印的时间戳之前添加日期的打印此种选项输出的时间最直观 控制详细内容输出 -v产生详细的输出. 比如包的TTLid标识数据包长度以及IP包的一些选项。同时它还会打开一些附加的包完整性检测比如对IP或ICMP包头部的校验和。 -vv产生比-v更详细的输出. 比如NFS回应包中的附加域将会被打印, SMB数据包也会被完全解码。摘自网络目前我还未使用过 -vvv产生比-vv更详细的输出。比如 telent 时所使用的SB, SE 选项将会被打印, 如果telnet同时使用的是图形界面其相应的图形选项将会以16进制的方式打印出来摘自网络目前我还未使用过 -w 写入数据到文件 -r 读取文件 -Q 选择是入方向还是出方向的数据包可选项有in, out, inout也可以使用 --direction[direction] 这种写法 -S 使用绝对序列号而不是相对序列号 -D 显示主机所有可用网络接口的列表 -e 每行的打印输出中将包括数据包的数据链路层头部信息
常规过滤规则
由于tcpdump是把经过网卡的报文全部都抓出来所以数量是非常大的各种乱七八糟的报文都有是没办法定位问题的所以tcpdump一定要配合过滤条件使用。这里只讲平时用得到的几个关键参数再详细的自己谷歌百度反正我一般情况下用用是够了的。
tcpdump输出 时间戳 协议 源地址源端口 目的地址 目的端口 网络包详细信息 TCP Packets TCP报头的控制部分有8位 CWR | ECE | URG | ACK | PSH | RST | SYN | FIN [S] SYN(开始连接 [.] ACK [P] PSH(推送数据) [F] FIN结束连接 [R] RST(重置连接) [S.] 也表示[SYN-ACK], SYN的应答报文 [U] URG [W] CWR [E] ECE
一、tcpdump实践
HTTP协议
抓取HTTP GET 流量 $ tcpdump -s 0 -A -vv ‘tcp[((tcp[12:1] 0xf0) 2):4] 0x47455420’ 抓取HTTP POST流量 $ tcpdump -s 0 -A -vv ‘tcp[((tcp[12:1] 0xf0) 2):4] 0x504f5354’ 从HTTP请求头中提取HTTP用户代理 $ tcpdump -nn -A -s1500 -l | grep “User-Agent:” 提取HTTP 请求的主机名和路径 tcpdump -i docker0 -nn -tttt -v -s0 -l | grep -Ei “POST /|GET /|HOST:” 提取HTTP请求的信息【密码Cookie, Token等】 先用POST请求然后找到登录的URI使用grep 找到上下20行找到Post参数。 tcpdump -s 0 -A -vv ‘tcp[((tcp[12:1] 0xf0) 2):4] 0x504f5354’ | grep -i ‘POST /api/auth/login’ -C20 抓取eth0接口42050端口的请求request和respones tcpdump -i eth0 -A -s 0 ‘tcp port 42050 and (((ip[2:2] - ((ip[0]0xf)2)) - ((tcp[12]0xf0)2)) ! 0)’ ICMP
抓取ICMP报文 tcpdump -n icmp 非 ECHO/REPLY 类型的 ICMP 通过排除 echo 和 reply 类型的数据包使抓取到的数据包不包括标准的 ping 包 tcpdump ‘icmp[icmptype] ! icmp-echo and icmp[icmptype] ! icmp-echoreply’ 状态抓包
RST状态的包 tcpdump -i eth0 -nn port 34997 and ‘tcp[tcpflags]tcp-rst ! 0’