本文包含以下内容
- tcpdump 的基本使用说明
- wireshark 的基本使用说明
- wireshark 对 https 的查看
tcpdump的用法
PS: 如果提示没有权限,需要切换到root或者有权限的用户,或使用sudo tcpdump xxxx
查看网络接口
通过 ifconfig 可以看到host上所有的网络接口
或者使用命令:tcpdump -D | grep Running
指定网络接口
窗口1运行:tcpdump -i enp0s3
窗口2运行:curl https://www.baidu.com
指定主机
窗口1运行:tcpdump host 10.0.2.15
窗口2运行:curl https://www.baidu.com
根据源和目标过滤流量
只看以 “10.0.2.15” 为源头的流量:
窗口1运行:tcpdump src 10.0.2.15
窗口2运行:curl https://www.baidu.com
只看以 “10.0.2.15” 为目标的流量:
窗口1运行:tcpdump dst 10.0.2.15
窗口2运行:curl https://www.baidu.com
16进制输出包内容
窗口1运行:tcpdump -c 1 -X icmp
-c 1:只获取一个包
-X:使用16进制
窗口2运行:ping www.baidu.com
查看某个端口的流量
窗口1运行:tcpdump port 443
窗口2运行:curl https://www.baidu.com
根据源和目标端口过滤流量
查看源端口为443的流量
窗口1运行:tcpdump src port 443
窗口2运行:curl https://www.baidu.com
查看目标端口为443的流量
窗口1运行:tcpdump dst port 443
窗口2运行:curl https://www.baidu.com
查看某个协议的流量
窗口1运行:tcpdump icmp
窗口2运行:ping www.baidu.com
把流量输出到文件
窗口1运行:tcpdump port 443 -w ssl.pcap
窗口2运行:curl https://www.baidu.com
从文件读取流量
窗口1运行:tcpdump -r ssl.pcap
条件组合
and 的使用:
窗口1运行:tcpdump dst port 443 or icmp
窗口2运行命令1:curl https://www.baidu.com
窗口2运行命令2:ping www.baidu.com
or 的使用:
窗口1运行:tcpdump host 10.0.2.15 and dst port 443
窗口2运行:curl https://www.baidu.com
not 的使用:
窗口1运行:tcpdump not tcp
窗口2运行命令1:curl https://www.baidu.com
窗口2运行命令2:ping www.baidu.com
Wireshark 的使用
使用wireshark打开 tcpdump 生成的 pcap包:
查看包的各层协议头部
选择一个包,可以在下方看到 eth,ip,tcp,http 各层协议各种头部信息:
eth: 包含源和目标的 mac 地址
ip:包含源和目标的 ip 地址
tcp:包含源和目标的端口
http:包含 url,header,各种参数
使用“表达式”过滤包
搜索结果:
查看完整的 http 请求和回应
选择包后,右键菜单 -> 跟踪流 -> HTTP流
http 流结果:
Wireshark 查看 https 的内容
打开 https 的 pcap 包:
可以看到当前TLS层协议版本为 SSLv2,以及https 的 handshake 协议是如何协商秘钥的,但是Application Data是被加密后的,如果想查看它的内容,需要以下步骤
从首选项选择 Protocols
找出 TLS 项,编辑 “RSA keys list”
添加从服务器端获取到的 private key。“Key File” 就是 private key 文
添加成功后,可以看到网络包已经被解密:
也可以通过右键菜单 跟踪流 -> http流 来查看完整的内容:
TLS无法被查看
看一下这个 TLS 协议版本为 TLSv1.2 的https pcap包:
按上面的步骤,导入服务器端提供的 private key:
回到包列表,发现 Application Data 没有被解密。
回到 首选项 -> TLS,添加 TLS debug file:
回到包列表,刷新一下(一般会自动刷新),然后查看刚才添加的 tls.log,在里面搜索 master,就会看到原因:
ssl_generate_pre_master_secret: found SSL_HND_CLIENT_KEY_EXCHG, state 197
ssl_restore_master_key can't find pre-master secret by Unencrypted pre-master secret
ssl_decrypt_pre_master_secret: session uses Diffie-Hellman key exchange (cipher suite 0xC028 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) and cannot be decrypted using a RSA private key file.
ssl_generate_pre_master_secret: can't decrypt pre-master secret
ssl_restore_master_key can't find pre-master secret by Encrypted pre-master secret
dissect_ssl3_handshake can't generate pre master secret