jck28 - 小柒 - 接口测试 - 使用 curl 发送请求

一, 客户端模拟请求工具

  • nc:tcp/udp 协议发送
  • curl:最常使用的 http 请求工具
  • postman:综合性的 http 协议测试工具
  • 代理工具、IDE 工具、浏览器插件工具

二,使用 Chrome 开发者工具分析网络请求

2.1,打开工具方式

  • 使用Chrome 并打开需要分析的网页,直接按F12键
  • 右键点击页面并选择“检查”来打开开发者工具

2.2,copy as curl功能

作用:

  • 把浏览器发送的请求真实的还原出来
  • 附带了认证信息,所以可以脱离浏览器执行
  • 可以方便开发者重放请求、修改参数调试,编写脚本

2.3, curl 常见用法

  • url=http://www.baidu.com
  • get请求 curl $url
  • post请求 curl -d 'xxx' $url
  • proxy使用 curl -x 'http://127.0.0.1:8080' $url

2.4, 重要参数

  • -H "Content-Type: application/json" 消息头设置

  • -u username:password 用户认证

  • -d 要发送的post数据 @file 表示来自于文件

  • --data-urlencode 'page_size=50' 对内容进行url编码

  • -G 把data数据当成get请求的参数发送,长与–data-urlencode结合使用

  • -o 写文件

  • -x 代理 http代理 socks5代理

  • -v verbose 打印更详细日志 -s 关闭一些提示输出

  • 更多示例参考: curl命令参数

2.5, 其他常用参数

  • curl -o filename url 保存响应内容
  • curl -i url 显示头信息
  • curl -I url 仅显示头信息
  • curl -s url 静默访问不输出错误和进度
  • curl -v url 输出通信过程
  • curl -H headers url 添加头信息
  • curl -x “ip:port” url 为请求添加代理

三,tcpdump与wireshark的使用

3.1 协议分析工具

  • 网络监听:TcpDump + WireShark
  • 代理 Proxy
    • 推荐工具:手工测试charles [全平台]、安全测试burpsuite [全平台 java]
    • 自动化测试:mitmproxy
    • 其他代理: fiddler [仅windows]、AnyProxy [全平台]
  • 协议客户端工具: curl、postman

3.2 tcpdump

  • 参数:
    • -x 十六进制展示
    • -w file 保存文件
  • 表达式:
    • ip tcp 协议
    • host 主机名
    • port 80
    • src 来源 dst 目的
    • and or () 逻辑表达式

3.3 WireShark抓包

3.3.1 Wireshark可以自动识别出电脑上面的网卡(包括虚拟网卡),双击需要抓包的网卡。

3.3.2 双击进入此界面后,Wireshark已经自动开始了抓包过程,如果网卡在与其他网络设备通讯,我们就能看到各种网络协议报文

3.3.3 Wireshark抓取的是网卡物理层的数据,所有通过该网卡收发的数据都会被Wireshark抓取 ,为了找到需要的报文,可以在过滤器进行过滤

image

3.3.4 Wireshark常用过滤器

  • 1、Wireshark中的逻辑运算符

    • 1.1比较运算符如:== (等于)、!=(不等于) 、>(大于) 、<(小于) 、>=(大于等于) 、<=(小于等于)

      • ip.src == 192.168.3.6 过滤源主机IP地址或者目标主机IP地址为192.168.3.6的报文
    • 1.2逻辑运算符如:&&(与)、||(或)、!(非)
      ip.src == 192.168.3.6 && && tcp.srcport == 8001,则只显示报文源主机地址为192.168.3.6且源端口为为8001的报文

  • 2、协议过滤

    • 根据网络协议过滤报文,即在抓包过滤框中输入协议相关字段即可,包括”TCP”,”UDP””HTTP””ICMP”等。
  • 3、MAC地址过滤

    • eth.addr == 38:3b:26:88:02:dd 过滤源主机MAC地址或者目标主机MAC地址为38:3b:26:88:02:dd的报文
    • eth.src== 38:3b:26:88:02:dd 过滤源主机MAC地址为38:3b:26:88:02:dd的报文
  • 4、ip地址过滤

    • Ip.addr == 192.168.3.6 过滤源主机IP地址或者目标主机IP地址为192.168.3.6的报文
    • Ip.src== 192.168.3.6 过滤源主机IP地址为192.168.3.6的报文
    • ip.dst == 192.168.3.240 过滤目标主机IP地址为192.168.3.240的报文
  • 5、端口过滤

    • tcp.port==80 过滤基于TCP协议且目标端口号或源端口号为80的报文
    • udp.srcport == 8001 过滤基于UDP协议且端口号为8001的报文
    • tcp.dstport == 8001 过滤基于TCP协议且目标端口号为8001的报文
  • 6、Http模式过滤

    • http.request.method==“GET”, 过滤基于http协议且http请求方式为”GET”的报文

3.3.5 抓取访问网页的数据包

  • sudo tcpdump host www.baidu.com -w /tmp/tcpdump.log
  • curl http://www.baidu.com
  • 停止tcpdump
  • 使用wireshark打开/tmp/tcpdump.log

3.3.6 TCP的三次握手与四次挥手