tcpdump 及 wireshark 的使用

本文包含以下内容

  1. tcpdump 的基本使用说明
  2. wireshark 的基本使用说明
  3. wireshark 对 https 的查看

tcpdump的用法

PS: 如果提示没有权限,需要切换到root或者有权限的用户,或使用sudo tcpdump xxxx

查看网络接口

通过 ifconfig 可以看到host上所有的网络接口
tcpdump 及 wireshark 的使用_第1张图片
或者使用命令:tcpdump -D | grep Running
tcpdump -D

指定网络接口

窗口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包:
tcpdump 及 wireshark 的使用_第2张图片

查看包的各层协议头部

选择一个包,可以在下方看到 eth,ip,tcp,http 各层协议各种头部信息:
eth: 包含源和目标的 mac 地址
ip:包含源和目标的 ip 地址
tcp:包含源和目标的端口
http:包含 url,header,各种参数
tcpdump 及 wireshark 的使用_第3张图片

使用“表达式”过滤包

tcpdump 及 wireshark 的使用_第4张图片
搜索结果:
wireshark filter result

查看完整的 http 请求和回应

选择包后,右键菜单 -> 跟踪流 -> HTTP流
tcpdump 及 wireshark 的使用_第5张图片
http 流结果:
tcpdump 及 wireshark 的使用_第6张图片

Wireshark 查看 https 的内容

打开 https 的 pcap 包:
tcpdump 及 wireshark 的使用_第7张图片
可以看到当前TLS层协议版本为 SSLv2,以及https 的 handshake 协议是如何协商秘钥的,但是Application Data是被加密后的,如果想查看它的内容,需要以下步骤
tcpdump 及 wireshark 的使用_第8张图片
从首选项选择 Protocols
tcpdump 及 wireshark 的使用_第9张图片
找出 TLS 项,编辑 “RSA keys list”
tcpdump 及 wireshark 的使用_第10张图片
添加从服务器端获取到的 private key。“Key File” 就是 private key 文
tcpdump 及 wireshark 的使用_第11张图片
添加成功后,可以看到网络包已经被解密:
tcpdump 及 wireshark 的使用_第12张图片
也可以通过右键菜单 跟踪流 -> http流 来查看完整的内容:
tcpdump 及 wireshark 的使用_第13张图片

TLS无法被查看

看一下这个 TLS 协议版本为 TLSv1.2 的https pcap包:
tcpdump 及 wireshark 的使用_第14张图片
按上面的步骤,导入服务器端提供的 private key:
tcpdump 及 wireshark 的使用_第15张图片
回到包列表,发现 Application Data 没有被解密。
回到 首选项 -> TLS,添加 TLS debug file:
tcpdump 及 wireshark 的使用_第16张图片
回到包列表,刷新一下(一般会自动刷新),然后查看刚才添加的 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

参考资料

  1. A tcpdump Tutorial with Examples — 50 Ways to Isolate Traffic
  2. HTTP/HTTPS Analysis Using Wireshark

你可能感兴趣的:(network)