介绍
本博客介绍基本的网络工具
cURL
curl工具可谓是命令行中http请求最强大的工具
选项
--resolve host:port:address
相当于添加hosts映射,在构造https请求时,可以添加这个选项使得基于ip:端口的访问能够正常发送TLS握手信息--cacert certdata.pem
指定可信任的根证书
curl --cacert path_to_certificate https://my-ssl.test
-d,--data,--data-ascii FILE_OR_CONTENT
指定post的内容,注意,该选项会对FILE_OR_CONTENT
进行一定的转换,如果FILE_OR_CONTENT
以@开头,则将其解释为文件;@-则是标准输入。当--data
指定文件时,文件内容中的\r
,\n
会被自动去掉;--data
指定的Content-Type
是application/x-www-form-urlencoded
,因此,如果指定多个--data
选项,它们会使用&
符号拼接。
注意:--data
不适合用于指定二进制内容,因为它会对内容做转换。--data-raw CONTENT
与--data
类似,但是@不作为文件名前缀,而是普通内容--data-urlencode CONTENT
用于指定url编码的内容,如何实施url编码,取决于以下规则:
1.content
,=content
,则curl会将content部分编码,去掉=
,为了保证content
不匹配后面的语法,一般使用=content
2.name=content
, name部分必须已经编码,curl会将content部分编码
3.[name]@filename
,name可选,从文件中读取内容,然后编码
综上所述,--data-urlencode
用于指定未经编码的内容,curl会自动实施编码--data-binary CONTENT
该选项是唯一不会对内容作转换的选项。因此也不能用于指定从标准输入读取数据。一般而言,为了指定二进制数据,可以使用下面的echo -ne
语法:
curl http://example.com --data-binary "$(echo -ne '\x00\x01')"
nc
nc是一个十分精致优雅的TCP工具,其全称是netcat。基本上,配合shell的echo -ne
命令构造任何二进制数据,你可以利用nc做任何TCP协议层能够做的事情。
hexdump
hexdump能够展示二进制数据,并试图展示其ascii形式的字符
tcpdump
wireshark
Wireshark绝对是初学者理解网络协议的利器,通过其过滤器语法以及可滚动的操作记录,快速理解来往的网络包,理解时序。
openssl s_client可通过 -keylog指定文件。
一、通过服务器私钥解码
如果我们拥有服务器的文件私玥,接下来我们可以通过Wireshark设置使用该私钥来解码对应网站的SSL\TLS数据包。
1、在Wireshark中,进入 编辑(Edit) -> 首选项(Preferences)
2、展开 协议(protocols)-> TLS ,点击 RSA key lists 旁边的 编辑(Edit)
3、依次配置如下:
IP地址:填写对应服务器的IP,也可以使用any表示所有IP
端口(Port):服务器的HTTPS端口,一般为默认"443"
协议(Protocol):填写http
Key File:选择服务器证书私钥文件位置。
密码(Password): 如果是PFX格式证书,输入服务器私钥证书的密码。无密码可留空。
设置完成后,当前正在查看的网络包或将来抓取的网络包就会以设定的规则解码了。
不足:
如果网络包依然无法被解码,那么很有可能是因为服务器和客户端之间使用了Diffie-Hellman加密算法。可以通过查看SSL/TLS握手过程中发现服务器返回的Server Hello所选择的加密算法,如果带有 “ECDHE” 和 “DHE” 关键字,那就说明当前SSL Session使用了Diffie-Hellman加密算法。
可以通过禁用浏览器或者服务器上的TLS 加密套件算法解决,但不建议尝试。
二、用SSLKEYLOGFILE解码
设置环境变量 SSLKEYLOGFILE,将其指向一个可写入的文本文件。Chrome和Firefox在启动时会检查这个环境变量,如果存在的话,它会向指定的文件写入访问HTTPS站点时使用的密钥。我们可以在客户端配置Wireshark读取这个文件来解码TLS、 SSL网络包。
1、右键 计算机 - > 属性 -> 高级系统设置 -> 高级 -> 环境变量
2、新建环境变量,变量名称为 SSLKEYLOGFILE,变量值为一个可写入的文本文件 如 D:\ssllog.txt 。文件夹必须提前创建,若文件尚未创建,可以打开Chrome或Firefox一下,文件会被自动创建。
3、在Wireshark中,进入 编辑(Edit) -> 首选项(Preferences)
4、展开 协议(protocols)-> TLS ,将 (Pre)-Master-Secret log filename 设为步骤2中指定的值。
点击确认后,就会正确解码HTTPS网络包了。使用 SSLKEYLOGFILE 的好处就是它可以解Diffie-Hellman加密算法。
openssl
SSL/TLS协议的首选工具
nginx
nginx
是部署服务器的首选