目录
- 参考
- 一、关于Wireshark
- 二、下载及安装
- 三、基本概念
- 每层类型
- Ethernet以太网层(MAC地址)
- 协议
- 目的地址
- Internet网络层
- 协议
- 报文
- Transmission传输层
- 协议
- 三、tcp抓包
- 三次握手连接
- 四次握手断开
- http协议
- 请求协议包
- 应答协议包
- 文件类型
参考
网络抓包工具Wireshark下载安装&使用详细教程
一、关于Wireshark
Wireshark(前身 Ethereal)是一个网络包分析工具。该工具主要是用来捕获网络数据包,并自动解析数据包,为用户显示数据包的详细信息,供用户对数据包进行分析。
它可以运行在 Windows 和 Linux 操作系统上。可以使用该工具捕获并分析各类协议数据包,本文将讲解该工具的安装及基本使用方法。
二、下载及安装
Kali Linux 系统自带 Wireshark 工具,而 Windows 系统中默认没有安装该工具。因此,本节讲解如何在 Windows 系统中安装 Wireshark 工具。
官网:https://www.wireshark.org/
下载Wireshark-win64-4.0.6.exe
三、基本概念
每层类型
Frame:是物理层
Ethernet:以太网层
Internet:网络层
Transmission:是传输层
Ethernet以太网层(MAC地址)
协议
以太网层(MAC地址)包含目的地址(6字节)、源地址(6字节)、地址类型(2个字节)
目的地址
我们目的ip是192.168.0.44,对应的mac地址是c8:d3:ff:74:7e:d1
我们在服务端通过ifconfig查询如下:
抓包如下:
Internet网络层
一个20个字节,
协议
报文
通过数据发现,网络传输都是大端
# 比如ip是
192.168.0.88
# 对应字节是
c0 a8 00 58
# 16进制转10进制
192 168 0 88
Transmission传输层
协议
三、tcp抓包
ip.addr == 192.168.0.44 and tcp.port == 8000
三次握手连接
四次握手断开
客户端发送FIN以及上次消息的ACK
其中服务器发送FIN和回复ACK合并发送,如果想要分开发送,可以在close(cfd)之前执行一次sleep(1)延时
http协议
ip.addr == 192.168.0.44 and tcp.port == 8000 and http
如下一共是两个请求,两个回复200 ok
请求协议包
请求行:GET /demo.html HTTP/1.1\r\n
空行:\r\n
数据:
代码解析
char method[256] = {0};
char path[256] = {0};
char protocol[256] = {0};
sscanf(buf, "%[^ ] %[^ ] %[^ \r\n]", method,path,protocol);
应答协议包
状态行:HTTP/1.1 200 OK\r\n
内容类型:
内容长度:
空行:\r\n
数据:
文件类型
if (strcmp(dot,".au") == 0)
return "audio/basic";
if (strcmp( dot,".wav") == 0)
return "audio/wav";
if (strcmp(dot,".avi") == 0)
return "video/x-msvideo";
if (strcmp(dot,".mov") == 0 || strcmp(dot, ".qt") == 0)
return "video/quicktime";
if (strcmp(dot,".mpeg") == 0 || strcmp(dot, ".mpe") == 0)
return "video/mpeg";
if (strcmp(dot,".vrml") == srcmp(dot, ".wrl") ==0)
return "model/vrml";
if (strcmp(dot,".midi")==0 strcmp(dot,".mid") == 0)
return "audio/midi".
if (strcmp(dot,".mp3") ==0)
return "audio/mpeg";
if (strcmp(dot,".ogg") == 0)
return "application/ogg";
if (strcmp(dot,".pac") == 0)
return "application/x-ns-proxy-autoconfig";
return "text/plain; charset=utf-8";