【linux测试必背| tcpdump】命令行抓包神器 | tcpdump抓取post请求并显示详细参数

命令行抓包神器 | tcpdump抓取post请求并显示详细参数

  • 知识背景(diu ren 经历)
    • 1. tcpdump抓包工具捕捉tcp请求 三次握手和四次挥手
        • 适用场景:
        • 命令格式:
    • 2. tcpdump抓包工具捕捉tcp请求 并展示详细数据
        • 适用场景:
        • 命令格式:
    • 3. tcpdump抓包工具捕捉http请求展示post的请求方式和body
        • 适用场景:
        • 命令格式:
  • 补充:
    • 1. tcpdump抓包工具 捕捉指定端口接收到的http post请求
        • 适用场景:
        • 命令格式:
    • 2. tcpdump抓包工具 捕捉指定端口接收到的指定来源的http get/post 请求
        • 适用场景:
        • 命令格式:
    • 3. tcpdump抓包工具 捕捉接收到的所有http get请求
        • 适用场景:
        • 命令格式:
    • 4. tcpdump抓包工具 捕捉指定端口接收到的http get请求
        • 适用场景:
        • 命令格式:
    • 5. tcpdump抓包工具 捕捉接收到的所有http get或post请求的url
        • 适用场景:
        • 命令格式:
    • 6. tcpdump抓包工具 捕捉接收到的所有http get或post请求的里的密码
        • 适用场景:
        • 命令格式:
    • 7. tcpdump抓包工具 捕捉接收到的指定端口的完整http 请求数据(get&post)
        • 适用场景:
        • 命令格式:

知识背景(diu ren 经历)

今天突然说要转一个补丁版本,将get请求改成post请求,紧急上线,要半小时搞定。
所以,需要验证3个点:

  1. 改为post请求后,业务功能是否正常(但是由于业务复杂,在测试环境需要一个代理转发到客户环境,但客户环境我们是没有权限访问的,也不能和客户联调。所以,并不能直接去校验这里的结果,对于该结果不能持百分百信任。于是乎有了下面两点)
  2. 检查下游(代理)收到的请求,method是否是post
  3. 检查下游(代理)收到的请求,原来放在url里的参数是否放进了body里

虽然身为一个后端测开,但是我也是个小白牙,不怕笑话,我就没用过命令行tcpdump去抓包。

开始google之旅,分三个阶段哈:

1. tcpdump抓包工具捕捉tcp请求 三次握手和四次挥手

适用场景:

问题定位:抓取tcp请求,可以定位两个服务器之间到底有没有成功建立连接哦

命令格式:

示例:
tcp抓包 :端口和网卡根据实际情况配置 (容器,idc机器都可以用) 
tcpdump -i eth0 tcp and port 13011 -vvvv

显示结果包含 源IP:端口和目标IP:端口

2. tcpdump抓包工具捕捉tcp请求 并展示详细数据

适用场景:

问题定位:抓取tcp请求,可以看到请求包含的详细信息

命令格式:

示例:
tcp抓包 :端口和网卡根据实际情况配置 (容器,idc机器都可以用) -X是展示详细数据
tcpdump -i eth0 tcp and port 13011 -vvvv -X

3. tcpdump抓包工具捕捉http请求展示post的请求方式和body

适用场景:

捕捉接收到的http请求并展示post的请求方式和body

命令格式:

示例:
tcpdump -s 0 -i eth1 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504F5354'

注: eth1 是网卡(根据实际情况选择)

结果示例:
【linux测试必背| tcpdump】命令行抓包神器 | tcpdump抓取post请求并显示详细参数_第1张图片


补充:

1. tcpdump抓包工具 捕捉指定端口接收到的http post请求

适用场景:

仅仅捕捉指定端口443接收到的http post请求

命令格式:

示例:
tcpdump -i enp0s8 -s 0 -A 'tcp dst port 443 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504F5354'

2. tcpdump抓包工具 捕捉指定端口接收到的指定来源的http get/post 请求

适用场景:

tcpdump抓包工具 仅捕捉指定端口80/443接收到的指定来源192.168.10.1的http get/post 请求

命令格式:

示例:
tcpdump -i enp0s8 -s 0 -A 'tcp dst port 80 or tcp dst port 443 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504F5354' and host 192.168.10.1

3. tcpdump抓包工具 捕捉接收到的所有http get请求

适用场景:

捕捉接收到的所有http get请求

命令格式:

示例:
tcpdump -i enp0s8 -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

4. tcpdump抓包工具 捕捉指定端口接收到的http get请求

适用场景:

仅仅捕捉指定端口443接收到的http get请求

命令格式:

示例:
tcpdump -i enp0s8 -s 0 -A 'tcp dst port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

5. tcpdump抓包工具 捕捉接收到的所有http get或post请求的url

适用场景:

仅捕捉接收到的所有http get或post请求的url

命令格式:

示例:
tcpdump -i enp0s8 -s 0 -v -n -l | egrep -i "POST /|GET /|Host:"

6. tcpdump抓包工具 捕捉接收到的所有http get或post请求的里的密码

适用场景:

仅捕捉接收到的所有http get或post请求的里的密码

命令格式:

示例:
tcpdump -i enp0s8 -s 0 -A -n -l | egrep -i "POST /|pwd=|passwd=|password=|Host:"

7. tcpdump抓包工具 捕捉接收到的指定端口的完整http 请求数据(get&post)

适用场景:

捕捉接收到的指定端口的完整http 请求数据(get&post)

命令格式:

示例:
tcpdump -i enp0s8 -s 0 -A 'tcp dst port 18001 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504F5354 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x48545450 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x3C21444F and host 192.168.60.1'

示例如下:

Request from 192.168.60.1 using curl -v

aksarav@middlewareinventory:~$ curl -v "-H X-Forwarded-By: middlewareinventory" -X POST http://192.168.60.4:18001/TestWebService/
* Trying 192.168.60.4...
* TCP_NODELAY set
* Connected to 192.168.60.4 (192.168.60.4) port 18001 (#0)
> POST /TestWebService/ HTTP/1.1
> Host: 192.168.60.4:18001
> User-Agent: curl/7.54.0
> Accept: */*
> X-Forwarded-By: middlewareinventory
> 
< HTTP/1.1 200 OK
< Date: Sat, 28 Jul 2018 06:21:42 GMT
< Accept-Ranges: bytes
< Content-Length: 475
< Content-Type: text/html
< Last-Modified: Sat, 28 Jul 2018 15:41:10 GMT
< 




Sample WebService Application




This is Sample WebService Application
* Connection #0 to host 192.168.60.4 left intact
Response:

[root@mwiapp01 ~]# tcpdump -i enp0s8 -s 0 -A 'tcp dst port 18001 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504F5354 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x48545450 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x3C21444F and host 192.168.60.1'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s8, link-type EN10MB (Ethernet), capture size 65535 bytes
02:49:12.424425 IP 192.168.60.1.60442 > mwiapp01.18001: Flags [P.], seq 558796881:558797017, ack 3750122298, win 4117, options [nop,nop,TS val 317440918 ecr 4685369], length 136
E...Z.@.@.....<...<...FQ!N.Q..S:...........
.....G~9POST /TestWebService/ HTTP/1.1
Host: 192.168.60.4:18001
User-Agent: curl/7.54.0
Accept: */*
X-Forwarded-By: middlewareinventory


02:49:12.426378 IP mwiapp01.18001 > 192.168.60.1.60442: Flags [P.], seq 1:171, ack 136, win 235, options [nop,nop,TS val 4685370 ecr 317440918], length 170
E...-.@.@.....<...<.FQ....S:!N.......&.....
.G~:....HTTP/1.1 200 OK
Date: Sun, 29 Jul 2018 06:49:12 GMT
Accept-Ranges: bytes
Content-Length: 475
Content-Type: text/html
Last-Modified: Sat, 28 Jul 2018 15:41:10 GMT


02:49:12.426683 IP mwiapp01.18001 > 192.168.60.1.60442: Flags [P.], seq 171:646, ack 136, win 235, options [nop,nop,TS val 4685371 ecr 317440920], length 475
E...-.@.@.....<...<.FQ....S.!N.......W.....
.G~;....



Sample WebService Application




This is Sample WebService Application

你可能感兴趣的:(linux测试必背,前后端的那点事儿,linux,tcpdump,网络)